Skip to main content
The LinkedIn lane publishes to your organization (company) page by default, and can publish to your personal profile per post. It publishes only once a LinkedIn credential is present in your .env; until then the lane is live-but-unauthenticated and waits for you to connect it (set PENDPOST_MODE=mock to exercise it through the mock driver). You own your LinkedIn account and are responsible for LinkedIn’s terms of service. pendpost drafts and schedules, but a human approves before anything goes live.

Setup ceremony

First create an OAuth app in LinkedIn’s developer portal to get a client id and secret. Then run the interactive auth ceremony, which mints the tokens and writes them to your .env:

Environment variables

The organization URN

LINKEDIN_ORG_URN identifies the organization page you publish to. It must be in the form urn:li:organization:<digits>, for example urn:li:organization:1234567. This is the default target for the LinkedIn lane.
A lane publishes only once its credential is present. If the LinkedIn variables are blank, the LinkedIn lane is live-but-unauthenticated and waits for you to connect it. Set PENDPOST_MODE=mock to exercise it through the mock driver.

Company page vs personal profile

Each LinkedIn post carries an author target you pick in the composer: Company page (the default) or Personal profile. Company-page posting uses LINKEDIN_ORG_URN; personal-profile posting uses LINKEDIN_PERSON_URN, which the auth ceremony captures for you when the app has the “Share on LinkedIn” and “Sign In with LinkedIn” products granted. If a post is set to Personal profile but no person URN has been captured yet, the pre-flight check blocks it and asks you to reconnect - it never silently publishes to the company page instead.

Validate the lane

A present credential is not the same as a working one. After setup, validate the LinkedIn lane in the Setup tab, or run a live probe with the health_recheck tool, to confirm the credential is live and not just configured. The lane is ready when it reports live.
Over MCP. Setup and rotation are an interactive human ceremony; secrets are never written through MCP. An agent can still check status (account_status), run a live liveness probe (health_recheck), and read non-secret config (config_get) over MCP without touching credentials. LinkedIn additionally exposes token_refresh(platform: 'linkedin'), which renews the access token from the stored refresh token, no new secret required.

Common failures