> For the complete documentation index, see [llms.txt](https://docs.appmixer.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.appmixer.com/connector-configuration/linkedin-pages.md).

# LinkedIn Pages

https\://www\.linkedin.com/developers

The LinkedIn Pages connector (`appmixer:linkedinPages`) publishes posts on behalf of LinkedIn company pages. It needs **its own LinkedIn app with the Community Management API product**.

Don't reuse the app you created for the [LinkedIn](/connector-configuration/linkedin.md) connector (`appmixer:linkedin`). LinkedIn grants the Community Management API only to an app that has no other products, and the LinkedIn connector needs *Sign In with LinkedIn using OpenID Connect*.

{% hint style="warning" %}
LinkedIn reviews every Community Management API request by hand. Access is granted only to registered legal organizations for commercial use. If a request is rejected, you can't apply again with the same app; you have to create a new one. Prepare everything in [Before you start](#before-you-start) first.
{% endhint %}

## Before you start

* A business email address. Personal addresses are rejected, and LinkedIn sends a verification email to the address you enter.
* Your organization's legal name, registered address, website and privacy policy URL.
* A LinkedIn Page of your organization, and a super admin of that page who will verify the app.
* An app name and logo that don't contain "LinkedIn", "Linked" or "In", or the LinkedIn or Microsoft logos.

## Register the OAuth app

1. Go to <https://www.linkedin.com/developers/apps/new> and create a new app.
   * Fill in the app name.
   * For *LinkedIn Page*, choose your organization's page.
   * Add the privacy policy URL and the app logo, then accept the legal agreement.
2. Open the *Settings* tab and click *Verify* next to the LinkedIn Page. Send the generated link to a super admin of the page. The app is verified once they open the link and approve it.
3. Open the *Products* tab and request access to the **Community Management API**.
   * Fill in the access request form.
   * Choose page management as the use case, for example publishing posts to the company pages your users manage.
   * Confirm your business email address from the verification email.
   * LinkedIn doesn't publish a review time. Once approved, the app gets the *Development tier* (see [Access tiers and limits](#access-tiers-and-limits)).
4. Open the *Auth* tab and add the redirect URL under *OAuth 2.0 settings* > *Authorized redirect URLs*. Replace *acme.com* with your domain and keep the suffix `/auth/linkedinPages/callback`, e.g. `https://api.acme.com/auth/linkedinPages/callback`.
5. On the same tab, check that *OAuth 2.0 scopes* include `r_basicprofile`, `w_organization_social` and `rw_organization_admin`. They appear after the Community Management API is approved.
6. Copy the *Client ID* and the *Primary Client Secret*.

## Appmixer Backoffice

Create the `appmixer:linkedinPages` configuration in the [Backoffice](https://github.com/Appmixer-ai/appmixer-docs-gitbook/tree/app-registrations/getting-started/services.md) and set `clientId` and `clientSecret`.

## Scopes

The connector requests the following scopes:

```
r_basicprofile
w_organization_social
rw_organization_admin
```

* `r_basicprofile`: the name of the connected member, which becomes the account name. This app gets no access to the member's email address.
* `w_organization_social`: publishing posts as a company page (*CreatePost*).
* `rw_organization_admin`: listing the pages the member manages, which fills the organization dropdown in *CreatePost*.

The connected member must be an administrator or content administrator of the page they post to.

## Access tiers and limits

* **Development tier** is what the app gets after the first approval. It allows 500 API calls per app and 100 API calls per member per 24 hours; the limits reset at midnight UTC. This is enough to build and test, not for production traffic.
* **Standard tier** removes these limits. Request it in the *Products* tab within 12 months of getting Development tier access, otherwise LinkedIn removes the access.
  * Be ready to describe your company, product and use case, and to give LinkedIn's reviewers test credentials.
  * You also need a high-resolution screen recording, preferably narrated. It must show a user authorizing your app through the OAuth flow and publishing a post to their LinkedIn page. If your application doesn't have a feature that LinkedIn asks to see (for example, displaying comments), say so in the recording.

{% hint style="info" %}
LinkedIn access tokens are valid for 60 days. LinkedIn issues refresh tokens only to some apps. Without one, users have to reconnect their LinkedIn Pages account when the token expires.
{% endhint %}

## Troubleshooting

* **The authorization fails with an invalid or unauthorized scope error.** The Community Management API isn't approved for the app yet, or one of the scopes above is missing on the *Auth* tab.
* **Posting fails with 403 Forbidden.** The connected member isn't an administrator or content administrator of the page. The error message includes LinkedIn's reason.

More in LinkedIn's documentation: [Community Management App Review](https://learn.microsoft.com/en-us/linkedin/marketing/community-management-app-review), [Increasing access](https://learn.microsoft.com/en-us/linkedin/marketing/increasing-access).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.appmixer.com/connector-configuration/linkedin-pages.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
