Skip to main content

About LinkedIn

LinkedIn is a professional network with first-class APIs for advertising, organization pages, and member-authorized actions. Connecting LinkedIn to Serval enables workflows that read and manage LinkedIn Ads campaigns, pull performance reporting, route Lead Gen form responses into your CRM, and — when your app is approved for the right LinkedIn products — post on behalf of members or company pages.

What the LinkedIn integration enables

CapabilityDescriptionLinkedIn product required
Ads managementList, create, pause, and edit ad accounts, campaign groups, campaigns, and creativesAdvertising API
Ads analyticsPull impressions, clicks, cost, conversions, and demographic breakdownsAdvertising API
Lead Gen responsesRead and route LinkedIn Lead Gen form submissionsAdvertising API
Member profileRetrieve basic profile information for the authorizing memberSign In with LinkedIn using OpenID Connect
Post on member’s feedCreate posts, comments, and reactions on behalf of the authorizing memberShare on LinkedIn
Organization page managementRead and post to company pages the member administers, pull follower analyticsCommunity Management API
Anything defined in the LinkedIn REST API that your app is enrolled for can be accessed through Serval.

Prerequisites

  • A LinkedIn account.
  • A LinkedIn app that you own, registered in the LinkedIn Developer portal.
  • For organization-scoped capabilities, a LinkedIn Company Page associated with your app. LinkedIn will not grant access to organization products until the app is linked to a verified Company Page.
Serval uses the “bring your own app” model for LinkedIn. Each team that connects LinkedIn creates and manages their own LinkedIn app, which means you control the app’s products, scopes, audit logs, and rate-limit budget. Serval does not share a global LinkedIn app across customers.

LinkedIn Configuration

Before connecting to Serval, you need to create and configure a LinkedIn app.
1

Create a LinkedIn app

  1. Go to the LinkedIn Developer portal and click Create app.
  2. Give the app a name (for example, Serval Integration), associate a LinkedIn Company Page, upload a logo, and accept the legal terms.
  3. Click Create app.
Attach your app to your own Company Page, not a placeholder. LinkedIn gates many products (Community Management API, Live Events, Lead Sync API) on the app being linked to a verified Company Page.
2

Request the LinkedIn products your workflows need

LinkedIn has a two-layer permissions model: products (on the Products tab) grant the ability to request scopes (on the Auth tab). Without the backing product, a scope is cosmetic — LinkedIn will include it in the token but every API call that relies on it will return HTTP 403.On your app’s Products tab, click Request access next to the products matching the capabilities you plan to use:
Capability you wantLinkedIn product to request
Ads management + reportingAdvertising API
Post on a member’s behalfShare on LinkedIn
Retrieve member profileSign In with LinkedIn using OpenID Connect
Organization pagesCommunity Management API
Lead Gen form responsesAdvertising API (included)
Conversion trackingConversions API
Approval is not instant for every product. Sign In with LinkedIn using OpenID Connect and Share on LinkedIn are typically auto-approved. Advertising API and Community Management API are reviewed by LinkedIn and can take several days. Plan to connect Serval only after the relevant products show up under Added products, not Available products.
Marketing Developer Platform (the legacy umbrella that grants r_1st_connections_size) is no longer generally available to new apps. Serval’s Get 1st-degree Connection Count health check will report this condition as “needs Marketing Developer Platform enrollment” rather than a generic error, and no workflows depend on it.
3

Approve the OAuth 2.0 scopes

On your app’s Auth tab, under OAuth 2.0 scopes, make sure every scope Serval will request is checked. The exact set Serval requests today:
  • r_basicprofile
  • r_1st_connections_size
  • r_organization_admin
  • rw_organization_admin
  • r_organization_social
  • w_organization_social
  • w_member_social
  • r_ads
  • rw_ads
  • r_ads_reporting
Only scopes whose backing product is in your Added products list will result in working API calls. Scopes whose product is still in Available products will show up in the consent screen and the granted-scopes list, but every API call that needs them returns HTTP 403 until the product is approved.
4

Add Serval's redirect URL

When you begin the connection in Serval, the Connect LinkedIn modal displays a Redirect URL with a Copy button (environment-specific, something like https://svflow-auth-config.api.serval.com/linkedin/oauth/callback). Copy that URL exactly and add it to your LinkedIn app:
  1. Open the Auth tab of your LinkedIn app.
  2. Under OAuth 2.0 settings → Authorized redirect URLs for your app, click the pencil icon.
  3. Paste the URL from the Serval modal and click Update.
The redirect URL is environment-specific. Always copy the exact value from the Serval modal; do not construct it by hand.
5

Copy your credentials

From the Auth tab, copy the Client ID and the Primary Client Secret. You will paste both into Serval in the next section.
LinkedIn invalidates the previous Primary Client Secret the moment you click Generate a new Client Secret. If you rotate the secret after pasting it into Serval, the existing connection will stop working and you will need to reconnect with the new secret.

Connect LinkedIn to Serval

1

Open the LinkedIn integration

In Serval, navigate to Apps → Available → LinkedIn and click Connect.
2

Enter your connection details

In the Connect LinkedIn dialog:
  1. Copy the Redirect URL shown at the top and add it to your LinkedIn app’s Auth tab if you haven’t already.
  2. Fill in the Connection name — this is how the connection will appear throughout Serval. We recommend using your LinkedIn app name (e.g. “Serval Marketing”). LinkedIn does not expose the OAuth app’s display name through any member-token-accessible API, so this name is yours to choose.
  3. Paste your Client ID from the LinkedIn Auth tab.
  4. Paste your Primary Client Secret from the LinkedIn Auth tab.
  5. Click Connect to LinkedIn.
3

Authorize in LinkedIn

You will be redirected to LinkedIn’s consent screen.
  1. Review the requested permissions. Any scope listed here whose backing product is not yet approved on your app will still appear — that is a LinkedIn UI quirk, not a Serval bug.
  2. Click Allow to authorize the connection.
  3. You will be redirected back to Serval with the integration connected.
The integration is keyed on the Client ID of your LinkedIn app. Reconnecting the same Client ID later — for example, after approving a new product or adding a new scope — updates the existing Serval connection in place, preserving any workflows already wired to it. Reconnecting with a different Client ID creates a new, separate connection.

Updating products or scopes

If you approve a new LinkedIn product (for example, Community Management API) or enable additional scopes on your LinkedIn app after you’ve already connected Serval, the existing connection keeps using the scopes it was originally granted. To pick up new permissions:
  1. In the LinkedIn Developer portal, confirm the new product is under Added products and the additional scopes are checked on the Auth tab.
  2. In Serval, open the connected LinkedIn integration and click Reconnect.
  3. LinkedIn will show the consent screen again with the expanded scope list — approve it to refresh the grant.
Reconnecting preserves the connection’s Serval ID, so workflows keep running with the newly expanded permissions.

Troubleshooting

This almost always means the Primary Client Secret Serval has does not match the one LinkedIn has on file. The most common causes:
  • Someone clicked Generate a new Client Secret on the Auth tab after the old one was pasted into Serval. LinkedIn invalidates the previous secret immediately.
  • The secret was copied with a leading/trailing character or from the obfuscated display rather than the revealed value.
  • The Client ID and Client Secret pasted into Serval belong to different LinkedIn apps.
To fix it: on the LinkedIn Auth tab, click Generate a new Client Secret to produce a known-good value, then reconnect in Serval and paste the fresh secret.
The Get 1st-degree Connection Count health check calls an endpoint that requires your app to be enrolled in LinkedIn’s Marketing Developer Platform program, in addition to having the r_1st_connections_size scope approved. LinkedIn is no longer generally granting Marketing Developer Platform access to new apps. No Serval workflows depend on this health check — it is informational only. The rest of the integration (Ads, reporting, Lead Gen, organization pages when applicable) is unaffected.
LinkedIn’s consent screen and granted-scopes list are driven by the scopes checked on the Auth tab, not by the products approved on the Products tab. A scope can be granted in the token but still 403 at the endpoint if the backing product is not under Added products. Examples:
  • w_member_social → needs Share on LinkedIn.
  • r_basicprofile → needs Sign In with LinkedIn using OpenID Connect.
  • r_organization_*, rw_organization_admin → need Community Management API (which itself needs a verified Company Page).
  • r_ads, rw_ads, r_ads_reporting → need Advertising API.
To fix: request access to the corresponding product on the LinkedIn Developer portal’s Products tab, wait for LinkedIn to approve, then reconnect in Serval to refresh the grant.
The Advertising API is offered at two tiers: Development Tier (default when you first request access) and Standard Tier (requires a separate LinkedIn review). Development Tier has noticeably lower rate limits and sees a restricted set of ad accounts — it is intended for integration testing. For production rollouts, request Standard Tier from the LinkedIn partner team once your integration is working end-to-end on Development Tier.

External Resources