What LinkedIn needs from you
- A conversion rule in Campaign Manager (Analyze → Conversion tracking) with source "Conversions API". Each rule has a numeric id; the API refers to it as
urn:lla:llaPartnerConversion:{id}. - An OAuth 2.0 token with the
r_adsandrw_conversionsscopes, issued to a user with access to the ad account. Track connects the account through LinkedIn OAuth and refreshes the token automatically. - The Insight Tag in the browser if you want hybrid tracking — it sets the
li_fat_idfirst-party identifier that makes server matching precise.
The request
POST https://api.linkedin.com/rest/conversionEvents with headers Authorization: Bearer <token>, LinkedIn-Version: 202608, X-Restli-Protocol-Version: 2.0.0 and Content-Type: application/json:
{
"conversion": "urn:lla:llaPartnerConversion:123456",
"conversionHappenedAt": 1767225600000,
"conversionValue": { "currencyCode": "EUR", "amount": "1200.00" },
"eventId": "01J9EXAMPLESOURCEEVENTID00",
"user": {
"userIds": [
{ "idType": "SHA256_EMAIL", "idValue": "<sha256>" },
{ "idType": "LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID", "idValue": "<li_fat_id>" }
],
"userInfo": { "firstName": "…", "lastName": "…", "companyName": "…", "title": "…", "countryCode": "DE" }
}
}A 201 Created confirms acceptance. Batch creation uses the same path with the X-RestLi-Method: BATCH_CREATE header and an elements array; LinkedIn answers per element.
Versioning is monthly. The LinkedIn-Version header names a version that stays valid for about a year; Track pins it in its version registry and warns before the sunset date.
Identifiers and what actually matches
LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID— theli_fat_idvalue the Insight Tag stores (also appended to landing page URLs asli_fat_id). Highest match quality; requires marketing consent to capture.SHA256_EMAIL— the normalised, lowercase business e-mail, hashed. B2B leads usually supply it; it works without the tag.userInfo— plain-text name, company, title, country. LinkedIn uses them as auxiliary matching signals; send only the ones your policy allows.
No conversionValue is required for lead events, but sending a modelled value helps campaign optimisation.
Deduplicating with the Insight Tag
If a rule is tracked by both the Insight Tag (window.lintrk('track', { conversion_id: 123456 })) and the API, pass the same eventId on both paths; LinkedIn deduplicates identical ids for the same rule. In practice most B2B teams keep browser and server rules separate: "Form submit (tag)" fires immediately, "Qualified lead (CRM)" arrives from the server days later with a different rule, so nothing needs deduplicating.
The 90-day window and delayed qualifications
conversionHappenedAt must be within the last 90 days. That is what makes CRM-driven conversions practical: when a lead becomes an opportunity three weeks after the click, upload it with the original conversion time and the e-mail, and LinkedIn attributes it back to the ad interaction.
Errors
| Status | Meaning |
|---|---|
| 401 | token invalid or expired → automatic refresh, reconnect if it fails |
| 403 | no rw_conversions scope or no access to the ad account |
| 404 | conversion rule id unknown or belongs to another account |
| 422 | payload semantics (bad urn, timestamp out of window, unsupported id type) |
| 429 | rate limited → retry with backoff |
The wizard validates the connection by listing the conversion rules the token can see, so an unknown rule id is caught before the first event.