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
| Capability | Description | LinkedIn product required |
|---|---|---|
| Ads management | List, create, pause, and edit ad accounts, campaign groups, campaigns, and creatives | Advertising API |
| Ads analytics | Pull impressions, clicks, cost, conversions, and demographic breakdowns | Advertising API |
| Lead Gen responses | Read and route LinkedIn Lead Gen form submissions | Advertising API |
| Member profile | Retrieve basic profile information for the authorizing member | Sign In with LinkedIn using OpenID Connect |
| Post on member’s feed | Create posts, comments, and reactions on behalf of the authorizing member | Share on LinkedIn |
| Organization page management | Read and post to company pages the member administers, pull follower analytics | Community Management API |
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.Create a LinkedIn app
- Go to the LinkedIn Developer portal and click Create app.
- Give the app a name (for example,
Serval Integration), associate a LinkedIn Company Page, upload a logo, and accept the legal terms. - Click Create app.
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 want | LinkedIn product to request |
|---|---|
| Ads management + reporting | Advertising API |
| Post on a member’s behalf | Share on LinkedIn |
| Retrieve member profile | Sign In with LinkedIn using OpenID Connect |
| Organization pages | Community Management API |
| Lead Gen form responses | Advertising API (included) |
| Conversion tracking | Conversions API |
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.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_basicprofiler_1st_connections_sizer_organization_adminrw_organization_adminr_organization_socialw_organization_socialw_member_socialr_adsrw_adsr_ads_reporting
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:- Open the Auth tab of your LinkedIn app.
- Under OAuth 2.0 settings → Authorized redirect URLs for your app, click the pencil icon.
- Paste the URL from the Serval modal and click Update.
Connect LinkedIn to Serval
Enter your connection details
In the Connect LinkedIn dialog:
- Copy the Redirect URL shown at the top and add it to your LinkedIn app’s Auth tab if you haven’t already.
- 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.
- Paste your Client ID from the LinkedIn Auth tab.
- Paste your Primary Client Secret from the LinkedIn Auth tab.
- Click Connect to LinkedIn.
Authorize in LinkedIn
You will be redirected to LinkedIn’s consent screen.
- 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.
- Click Allow to authorize the connection.
- 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:- In the LinkedIn Developer portal, confirm the new product is under Added products and the additional scopes are checked on the Auth tab.
- In Serval, open the connected LinkedIn integration and click Reconnect.
- LinkedIn will show the consent screen again with the expanded scope list — approve it to refresh the grant.
Troubleshooting
'LinkedIn rejected the client credentials' or 'invalid_client' at the end of the OAuth flow
'LinkedIn rejected the client credentials' or 'invalid_client' at the end of the OAuth flow
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.
Health check fails with 'needs Marketing Developer Platform enrollment'
Health check fails with 'needs Marketing Developer Platform enrollment'
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.An API call returns HTTP 403 with 'ACCESS_DENIED' even though the scope is in the granted list
An API call returns HTTP 403 with 'ACCESS_DENIED' even though the scope is in the granted list
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.
Advertising API calls succeed but return fewer accounts or lower rate limits than expected
Advertising API calls succeed but return fewer accounts or lower rate limits than expected
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.

