Docs

LinkedIn Conversions API

Conversion rules

Campaign Manager → ad account → Analyze → Conversion tracking → Create conversion → data source Conversions API or CSV (method Direct API). Create one rule per definition (for example type Lead for forms, Book appointment for bookings, Contact for WhatsApp) and select the campaigns it applies to. The rule id appears in the URL and in the rule details – put it into the definition's providers.linkedin.conversionRule.

Access token

The token needs the rw_conversions scope (and r_ads to read the account):

  • Campaign Manager often offers Generate token in the Conversions API setup dialog, or
  • developer.linkedin.com → your app → Products → Conversions API → Auth → OAuth 2.0 tools → scopes rw_conversions, r_ads → sign in as a member with a role on the ad account.

Member tokens expire after 60 days. Put a reminder in your calendar; an expired token shows as error with HTTP 401 on the conversions (re-send them after renewing the token).

PUT /v1/projects/{project}/destinations/linkedin
{
  "enabled": true,
  "mode": "live",
  "transport": "direct",
  "settings": { "adAccountId": "512345678", "apiVersion": "202609" },
  "secrets": { "accessToken": "AQX…" }
}

With "transport": "composio" the same request goes through the Composio proxy on your LinkedIn ad connection – the LinkedIn auth config must then include rw_conversions.

What is sent

POST https://api.linkedin.com/rest/conversionEvents with headers LinkedIn-Version: <apiVersion> and X-Restli-Protocol-Version: 2.0.0:

FieldValue
conversionurn:lla:llaPartnerConversion:<rule id>
conversionHappenedAtconversion time in ms
conversionValue{currencyCode, amount} when the value is above 0
user.userIdsSHA256_EMAIL (hashed e-mail) and LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID (the session's li_fat_id)
user.userInfohashed first and last name, plus company and country when known
eventIdthe conversion's event id (deduplication with the Insight Tag)

Without e-mail, li_fat_id or a full name the status is skipped. LinkedIn accepts conversions up to 90 days old (3x: 89).

Testing

LinkedIn has no test mode. In test mode 3x builds the payload and records dry_run with "LinkedIn has no test mode" – unless X3_LINKEDIN_BASE_URL points to a local mock (outside live). To verify for real, send one conversion in live mode and check Conversion tracking → rule → Recent activity (it can take a few hours to show).

API versions

apiVersion is a YYYYMM month (default 202609). LinkedIn sunsets versions after about a year; bump it once a year after checking LinkedIn's changelog. A sunset version answers 426 Upgrade Required. Like every 4xx except 408/429 this is final (error, no automatic retry); after updating the version, re-send the affected conversions with POST …/conversions/{id}/retry or MCP conversions_retry.