Pixel & Platform IntegrationsTutorialIntermediate

LinkedIn Conversions API for B2B: conversion rules, li_fat_id and hashed e-mail

Sending B2B conversions to LinkedIn's Conversions API — the conversionEvents endpoint, the LinkedIn-Version header, conversion rule URNs, user identifiers, eventId deduplication with the Insight Tag and the 90-day window.

By
Track editorial team
Published
Last reviewed
Reading time
3 min read

Key takeaways

  • LinkedIn needs a conversion rule with source "Conversions API", an OAuth token with r_ads and rw_conversions, and optionally the Insight Tag for li_fat_id.
  • Requests go to /rest/conversionEvents with a monthly LinkedIn-Version header; Track pins the version and warns before its sunset.
  • li_fat_id gives the highest match quality but needs marketing consent; SHA256_EMAIL works without the tag; userInfo fields are auxiliary signals.
  • Pass the same eventId on tag and API to deduplicate, or keep browser and CRM rules separate; conversionHappenedAt may be up to 90 days back, which makes delayed CRM qualifications practical.

What LinkedIn needs from you

  1. 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}.
  2. An OAuth 2.0 token with the r_ads and rw_conversions scopes, issued to a user with access to the ad account. Track connects the account through LinkedIn OAuth and refreshes the token automatically.
  3. The Insight Tag in the browser if you want hybrid tracking — it sets the li_fat_id first-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:

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 — the li_fat_id value the Insight Tag stores (also appended to landing page URLs as li_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

StatusMeaning
401token invalid or expired → automatic refresh, reconnect if it fails
403no rw_conversions scope or no access to the ad account
404conversion rule id unknown or belongs to another account
422payload semantics (bad urn, timestamp out of window, unsupported id type)
429rate 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.

Primary sources

Documentation and standards this article is based on.

  1. LinkedIn Marketing API — Conversions APIlearn.microsoft.com
  2. LinkedIn Marketing API — Versioninglearn.microsoft.com

Was this article helpful?

Responsible editor

Track editorial team

Product & engineering

The people building Track: engineers and analysts who work on server-side tracking, consent tooling and connector integrations every day.