# Connecting LinkedIn to Social Quack

> A few minutes in LinkedIn's developer console, once — then your posts go out on their own, apart from a quick sign-in again every 60 days (step 7).

LinkedIn only lets software post on your behalf through a **developer app**: a small entry you create inside your own LinkedIn account that produces two values, a **Client ID** and a **Client Secret**. You paste those into Social Quack once and never think about them again. There is no application form and no review to wait for — the two products you need are added instantly.

Two things worth knowing before you start:

- **The keys stay on your Mac.** Social Quack stores them encrypted in its own data folder on your computer. They are never sent to us.
- **The limits are yours alone.** Because the developer app belongs to you, LinkedIn counts your posting against *your* app and nobody else's. You are not sharing a pool with other Social Quack customers, so nobody else's activity can get you throttled or blocked.

This connects your **personal LinkedIn profile** — posts appear as you.

Everything below happens in two places: linkedin.com's developer site, and Social Quack's **Channels** screen (in the sidebar) → the **LinkedIn** card → **Set up app keys**. Open that panel now and leave it open; you will need a value from it in step 4.

## 1. Have a LinkedIn Page ready

Every LinkedIn developer app must be attached to a **LinkedIn Page** — the business/organisation kind of page, not your personal profile. If you already have one for your company or your freelance name, use it. If you don't, create a small one; it can be as simple as your own name.

The Page is only there to own the app. Your posts still go out from your personal profile.

## 2. Create the app

Go to **https://www.linkedin.com/developers/apps** and sign in with your normal LinkedIn account. Create a new app, attach the Page from step 1, and add a logo — any square image will do.

The new app starts out **unverified**, and an unverified app cannot add the products you need in step 3. Clearing that takes a minute: open the app's **Settings** tab, click **Verify** next to the Page, then **Generate URL**. That link asks the Page's super admin to approve the app — if you created the Page yourself, that is you, so open the link, approve, and the app is verified on the spot. If the Page belongs to a colleague, send them the link instead; it stays good for 30 days.

## 3. Add the two products

Open the app's **Products** tab and add both of these:

| Product | What it does for you |
|---|---|
| **Share on LinkedIn** | The permission to publish a post. Without it, connecting fails — see *If something goes wrong*. |
| **Sign In with LinkedIn using OpenID Connect** | Lets Social Quack read your name and profile photo, so the channel card shows who it is posting as. |

Both are instant — no review, no waiting.

Together they cover the three permissions Social Quack asks for on the LinkedIn sign-in screen: `openid`, `profile` and `w_member_social` (that last one is "post on your behalf"). Those are the only three it requests.

## 4. Add the redirect URL

In the app, go to **Auth → OAuth 2.0 settings** and add Social Quack's callback address as an authorized redirect URL.

**The exact value is shown in the app**, in the same **Set up app keys** panel, with a copy button next to it. This page can't print it: it is specific to your own installation (it carries the port number Social Quack is listening on). Copy it from there and paste it in exactly as shown — LinkedIn matches it character for character, so don't retype it or tidy it up.

## 5. Paste the keys and connect

LinkedIn's console shows your **Client ID** and your **Primary Client Secret**. In Social Quack's **Set up app keys** panel, paste them into:

- **`Client ID`**
- **`Client Secret`** — this is LinkedIn's *Primary Client Secret*; same thing, shorter name.

Click **Save** and Social Quack goes straight on to the sign-in: your browser opens LinkedIn's permission screen. Approve it, and your profile appears under *Connected*. There is nothing else to type — LinkedIn does the rest in the browser. If you close that tab by accident, click **Connect** on the LinkedIn card to start the sign-in again.

## 6. What a LinkedIn post can hold

| | |
|---|---|
| **Text** | Up to 3,000 characters |
| **Images** | Up to 9 per post |
| **Video** | Not supported. A video attached to a LinkedIn post is quietly left off — the text and any images still go out, with no error |
| **Multi-part posts** | The first part is the post; each extra part is added as a comment from you, in order |

Two behaviours that look odd until you know why:

- **Write punctuation normally.** LinkedIn's posting format treats characters like `( ) [ ] { } @ # < > ~ _ | *` as special and rejects a post that uses them plainly. Social Quack handles that for you before sending, so brackets, hashtags and @ signs are safe to type.
- **Posts with images land about 20 seconds late.** LinkedIn needs a moment to process an uploaded image, and a personal account isn't allowed to ask whether it has finished — so Social Quack waits roughly 20 seconds before publishing rather than risk a failure. Expected, not a fault.

If LinkedIn is busy or rate-limits you, Social Quack treats it as temporary and retries the post rather than failing it.

## 7. Reconnect every 60 days

A LinkedIn connection lasts **60 days**. LinkedIn only issues self-renewing access to approved partner companies, so when the 60 days are up you reconnect by hand: **Channels** → the **LinkedIn** card under *Add a channel* → **Connect**, approve the permission screen, done — a few seconds.

Signing in again on top of an existing connection updates it and keeps everything you have queued. Never use **Remove** on the channel to fix a connection problem — that deletes the channel *and* every post waiting on it.

A week before the 60 days are up, Social Quack shows a notice on the **Channels** and **Queue** pages — *sign in again by <date>* — with a **Sign in again** button, and the LinkedIn card gets the same note. Click it, approve LinkedIn's permission screen, done: the connection is renewed in place and everything queued stays put. Ignore it and the first sign is a post that fails with *LinkedIn token expired — reconnect this channel in Social Quack → Channels*; sign in again, then reschedule that post. Claude and ChatGPT see the same notice, so they will mention it too.

## If something goes wrong

| You see | What it means | What to do |
|---|---|---|
| "LinkedIn did not grant w_member_social. Add the *Share on LinkedIn* product to your app." | The app doesn't have the posting permission, or it was added after you connected | Products tab → add **Share on LinkedIn** → click **Connect** again in Social Quack |
| LinkedIn's sign-in page refuses to continue after you click **Save** (or **Connect**) | The redirect URL in **Auth → OAuth 2.0 settings** doesn't match the one Social Quack uses | Copy it again from **Set up app keys** and paste it in exactly — no edits, no extra characters |
| "LinkedIn token expired — reconnect this channel in Social Quack → Channels" | The 60 days are up | Channels → LinkedIn → **Connect** |
| "LinkedIn token rejected — reconnect this channel in Social Quack → Channels" | LinkedIn no longer accepts the connection (revoked, or the app's keys changed) | Channels → LinkedIn → **Connect** |
| The post went out, but the video you attached is not on it | LinkedIn posts from Social Quack carry images only | Attach a still image and put the video's link in the text, or post the video on a platform that takes video |
| You can't create the developer app at all | LinkedIn won't create one without a Page to attach it to | Create a LinkedIn Page first (step 1), then try again |
| The **Products** tab won't let you add *Share on LinkedIn* | The app is still unverified | Settings tab → **Verify** next to the Page → **Generate URL** → open that link and approve (step 2) |
| A post fails saying LinkedIn didn't return a post id | Rare: LinkedIn accepted the post but didn't confirm which one it was | **Check your LinkedIn profile before rescheduling** — the post may already be there, and sending it again would post it twice |

Still stuck? **support@socialquack.com**.
