Ad platform

LinkedIn Conversions API uploads, driven by closed-won deals

B2B is where click-level reporting fails worst. A LinkedIn lead can take four months and six stakeholders to become a signed contract, and by then LinkedIn has recorded one form fill and nothing else. Attribi uploads the rest through the LinkedIn Conversions API: the qualified stage when sales confirms the lead is real, and the closed-won event with the contract value when the deal is signed. Most LinkedIn reporting stops at cost per lead because nothing ever sends the outcome back.

No credit card required · 5-minute setup

What Attribi does with LinkedIn Ads

Closed-won revenue upload

Sends

When a deal is marked won in your CRM, the conversion goes to LinkedIn with its value and currency, against the conversion rule you mapped to that stage. Form fills and qualified leads each get their own rule, so the three are countable separately in Campaign Manager.

Conversion rule mapping

Sends

Point each funnel stage at a LinkedIn conversion rule you already run, in one click from the Connections page. Attribi can also create the rule for you, but only when your connection carries LinkedIn’s conversions permission and your LinkedIn user has a Campaign Manager or Account Manager role on that ad account. If either is missing, LinkedIn refuses the create and you map an existing rule instead. Uploads behave identically either way.

Hashed email match

Sends

The email is trimmed, lowercased and SHA-256 hashed before upload and sent as LinkedIn’s SHA256_EMAIL identifier, which is what matches a lead your sales team entered by hand months after any click. LinkedIn’s Conversions API defines no phone identifier, so a phone-only lead cannot be matched on LinkedIn.

Daily spend import

Imports

Cost, clicks, and impressions come back from your LinkedIn ad account daily, so pipeline value from your CRM sits next to what that campaign cost.

Click ID capture

Receives

The LinkedIn click identifier li_fat_id is recorded when a visitor lands and stays with them, which is the strongest match signal available on a deal that closes a quarter later.

Setting up LinkedIn Ads

  1. 1

    Connect LinkedIn and choose the ad account

    Sign in with LinkedIn from the Connections page and pick the ad account. Use a LinkedIn login that holds Campaign Manager or Account Manager rights on that account, otherwise LinkedIn will block conversion rule creation later.

  2. 2

    Map a conversion rule to each stage

    Each funnel stage gets its own LinkedIn conversion rule. Map rules you already have, or use Create to have Attribi make them. Create is idempotent, so clicking it twice re-binds to the same rule rather than making a duplicate, and if LinkedIn rejects it on permissions the page tells you so instead of failing silently.

  3. 3

    Let the CRM close the loop

    Nothing else is manual. Qualifying a lead or closing a deal in your CRM triggers the matching upload, and closed-won deals carry their contract value. Sales keeps working in the CRM they already use.

Step-by-step walkthrough: LinkedIn Offline Conversion Tracking: Send Qualified Leads and Closed-Won Revenue from Your CRM · HubSpot LinkedIn Attribution: Connect Ad Leads to Closed-Won Revenue

What Attribi actually sends to LinkedIn, field by field

Through the LinkedIn Conversions API, Attribi sends each CRM stage as a POST /rest/conversionEvents call against the rule you mapped to that stage, with the li_fat_id click ID and a SHA-256 email as identifiers, the real stage time as conversionHappenedAt, and the deal value on closed won. LinkedIn then decides whether it can match the person and credit a campaign.

The page above says what the connection does. This article is about what decides whether a deal shows up as credited revenue in Campaign Manager: two fields on the event and one on the rule.

How does the LinkedIn Conversions API model a conversion sent from a CRM?

A LinkedIn conversion rule is the container an advertiser creates once per outcome: a name, an account URN, a type such as LEAD, QUALIFIED_LEAD or PURCHASE, a conversionMethod that must be CONVERSIONS_API for streamed events, a click window, a view window, an attributionType and an enabled flag. A conversion event is one occurrence streamed to that rule. The Conversions API schema (verified 2026-10-12) lists the event fields. The table shows what Attribi writes into each, from lib/linkedin-conversions.ts on main as of 12 October 2026.

LinkedIn event fieldWhat Attribi sendsWhere the value comes from
conversionurn:lla:llaPartnerConversion:{id}The rule mapped to that stage (metadata.conversion_rules[stage].id), falling back to the legacy single rule
conversionHappenedAtEpoch millisecondsclosed_won_at for a won deal, qualified_at for a qualified lead, the form-fill time for a lead
conversionValue.amountDecimal string, for example "42000"The CRM deal amount on closed won; "0" on lead, and on qualified when the CRM gives no value
conversionValue.currencyCodeISO codeThe CRM deal currency; USD when the CRM gives none
user.userIds[] idType LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUIDThe raw li_fat_idThe first touchpoint on the lead whose click_id_platform is linkedin
user.userIds[] idType SHA256_EMAIL64-character hexEmail trimmed and lowercased, then SHA-256, stored on receipt as email_hash_standard
user.userIds[] idType SHA256_PHONEDigits-only SHA-256Sent today when the lead has a phone. LinkedIn's schema does not define this type; see the limits
eventId, userInfo, lead, externalIdsNot sentAttribi keeps its own per-stage ledger instead of eventId

The rule is chosen per stage, so a form fill, a sales-qualified lead and a signed contract are three rules and three columns in Campaign Manager, each stamped with the CRM's time.

Data path from a LinkedIn click to a credited conversion: li_fat_id on the landing URL, a touchpoint with click_id_platform linkedin, a lead with email_hash_standard, a CRM stage with value and currency, the POST to /rest/conversionEvents, LinkedIn's match and attribution steps, and the daily spend pull into ad_spend_daily.

What exactly goes on the wire?

LinkedIn answers a single event with 201 Created and no body, and rejects a bad one with a request-level 4xx rather than a partial-failure list (Conversions API, verified 2026-10-12). So Attribi treats any 2xx as accepted and records the upload time and match method on the lead. A 429 or 5xx is retried. A 401 is not, because a retry would replay the same dead token.

There is no eventId, so LinkedIn cannot pair this event with an Insight Tag event on the same rule; give the browser event its own rule, as LinkedIn's deduplication guide describes. Attribi's own guard against double-sending is a ledger row per lead, platform, stage and ad account. A lead with neither a click ID nor an email is refused before any network call as no_match_identifier; the fix is in your form, so it does not count against the connection's health.

Where does li_fat_id come from, and how long is it good for?

LinkedIn appends li_fat_id to your landing-page URL when enhanced conversion tracking is on for the Insight Tag; it is on by default for new tags, and the tag need not be installed for the parameter to appear (Enabling Click IDs, verified 2026-10-12).

Attribi's tracker posts the page URL to /api/track; the server scans a fixed list of click-ID parameters in precedence order (gclid, fbclid, wbraid, gbraid, ttclid, msclkid, then li_fat_id, with utm_mta last) and the first one present wins. The value is stored on the touchpoint as click_id_platform = 'linkedin', tied to the visitor by the mta_vid first-party cookie, and copied onto the lead at the form fill.

LinkedIn's own li_fat_id cookie lasts 30 days from the last click; the mapping from the ID to a member is kept for 365 days (Conversions FAQ, verified 2026-10-12). Attribi stores the ID at click time and re-sends it at close time, so the cookie expiry does not matter: a January click still matches a November deal if the rule's window allows it.

Does this work for Lead Gen Forms or only for website leads?

Website leads. A Lead Gen Form is filled inside LinkedIn, so the prospect never lands on your site and no li_fat_id is issued. Attribi does not read the Lead Sync API and does not send the lead field (urn:li:leadGenFormResponse:{id}) LinkedIn accepts for those submissions.

Such a lead can still be credited, but by email alone. When it reaches your CRM through LinkedIn's native sync, Attribi's CRM pull creates the lead and sends the Lead event, then qualified and closed won on stage changes, each with SHA256_EMAIL as the only identifier. LinkedIn's FAQ recommends sending the email and the click ID together, so expect a lower match rate on this route, and expect it to depend on whether the CRM's work email is the one on the member's profile. The HubSpot and LinkedIn guide covers the CRM associations behind the email route.

Which windows do Attribi-created rules get, and can you change them?

Clicking Create for a stage posts a rule named Attribi - Lead, Attribi - Qualified or Attribi - Closed Won, with type LEAD, QUALIFIED_LEAD or PURCHASE, conversionMethod: CONVERSIONS_API, attributionType: LAST_TOUCH_BY_CAMPAIGN, valueType: DYNAMIC, and autoAssociationType=ALL_CAMPAIGNS so it attaches to every campaign on the account. It writes postClickAttributionWindowSize: 30 and viewThroughAttributionWindowSize: 7.

Those are the API defaults in LinkedIn's schema, not a B2B choice. Campaign Manager's own default for a rule created in the UI is 90 days click and 90 days view (LinkedIn help a426359, verified 2026-10-12), and for the LEAD, QUALIFIED_LEAD and PURCHASE types LinkedIn allows 180 and 365 days, added in its May 2025 release for long sales cycles.

RuleWindow on createWhat a five-month cycle needs
Attribi - Lead (LEAD)30 click / 7 view30 is usually fine; the form fill is near the click
Attribi - Qualified (QUALIFIED_LEAD)30 click / 7 view90 or 180
Attribi - Closed Won (PURCHASE)30 click / 7 view180 or 365

Attribi has no window picker. After creating a rule, open it in Campaign Manager and raise the click window. Or map a rule you built there with the right window; the uploads are identical, and that route needs no rw_conversions scope and no Campaign Manager role.

Does Attribi pull LinkedIn spend, and how is ROAS built?

Yes. A daily job calls GET /rest/adAnalytics?q=analytics&pivot=CAMPAIGN&timeGranularity=DAILY for the account you picked, requesting costInLocalCurrency, impressions and clicks, paging 1,000 rows at a time, and upserts one row per campaign per day into ad_spend_daily in the ad account's currency. The first run reaches back 30 days; later runs start from the last successful sync.

ROAS on the dashboard is closed-won value from your CRM divided by that spend. There is no ad-group or creative grain, and the row holds the campaign ID, not its name. LinkedIn keeps daily analytics for six months (Reporting, verified 2026-10-12), so an older backfill comes back monthly.

Which OAuth scopes are requested, and what happens on day 61?

The connection asks for r_ads (accounts and rules), r_ads_reporting (spend), rw_ads (the tracking-parameter writer) and rw_conversions (rule creation and the event stream). The connecting user needs a role above Viewer on the ad account, and Campaign Manager or Account Manager to create rules.

LinkedIn issues every access token with a 60-day lifespan and, for approved Marketing Developer Platform partners, a refresh token valid for 365 days (refresh tokens, verified 2026-10-12). Attribi stores the refresh token. Nothing uses it: as of 12 October 2026 no LinkedIn code path in Attribi calls grant_type=refresh_token. So on day 61 uploads fail with 401, the connection's health shows "token expired, reconnect to resume uploads", and reconnecting from the Connections page is the fix.

What happens to a deal that closes after 90 days?

LinkedIn has two 90-day limits. Event age: conversionHappenedAt must be within the past 90 days at upload, or the request is rejected. The rule's window: how far back from the event LinkedIn looks for an ad interaction. The FAQ (verified 2026-10-12) combines them as 180 days for most types, and up to a year for the lead and purchase types on a 365-day window.

Attribi only hits the first limit if your CRM is badly behind: events go out the day the pull sees the stage change. The limit that decides credit on a long cycle is the window, a field on the rule, and it is yours.

Two clocks on one illustrative deal, clicked 3 March and closed 14 August: the event-age clock is never reached, a 30 or 90-day click window misses the click, a 180 or 365-day window reaches it, and the 60-day token expires before the close.

What does a five-month deal look like in Campaign Manager?

An illustrative example, not a customer. A buyer clicks a LinkedIn campaign on 3 March, lands with li_fat_id, and fills the demo form: a Lead event, value 0, both identifiers. Sales qualifies her on 22 April: a Qualified event, value 0, timestamped that day. The contract is signed on 14 August for 42,000 dollars: a Closed Won event with amount "42000", timestamped 14 August.

Rule and windowClick to eventCredited?
Lead, 30-day click0 daysYes
Qualified, 30-day click50 daysNo
Qualified, 90-day click50 daysYes
Closed Won, 90-day click164 daysNo
Closed Won, 180-day click164 daysYes

Say the campaign spent 9,000 dollars that quarter. With the 30-day windows a created rule starts with, Campaign Manager shows one lead and no purchase value, while Attribi's dashboard shows 42,000 against 9,000 because it reads the CRM directly. With 90 and 180-day windows, Campaign Manager shows all three stages. The sales cycle longer than 90 days guide covers the Google Ads version.

What does this connection not do yet?

  • Phone matching. Attribi sends a digits-only SHA256_PHONE identifier today; LinkedIn's schema defines no phone type, though several connector pages, ours included until this month, list hashed phone as a LinkedIn match key. A lead with only a phone cannot be matched. A fix that stops sending it is open and not yet on main.
  • Token refresh. Reconnect every 60 days until a refresh path ships.
  • Rule windows. Created rules get 30 and 7 days; change them in Campaign Manager.
  • Funnel graduation. Attribi uploads the outcomes but will not move a LinkedIn campaign's optimisation goal; that automation is Google and Meta only. Uploading alone changes nothing about bidding.
  • Lead Gen Forms. No Lead Sync ingestion and no lead URN on events; those leads match by email only.
  • Rule creation can be refused. Without rw_conversions on the connection, or a Campaign Manager or Account Manager role, LinkedIn returns 403 USER_NOT_AUTHORIZED; the page shows the error with a link to Campaign Manager. Mapping an existing rule always works.
  • Live verification. The contract was checked against LinkedIn's documentation at version 202607, not against a customer account. On your first real event, confirm in Campaign Manager that the rule's status moves to active; LinkedIn allows up to 72 hours.

Common questions about this connection

Does Attribi send an eventId so LinkedIn can deduplicate against my Insight Tag? No. The event carries no eventId, so LinkedIn cannot pair it with a browser event on the same rule. Keep the Insight Tag on its own rule for the form fill and let Attribi own the CRM stages.

Can Attribi set a 180 or 365-day window on the rule it creates? Not today. Created rules carry the API defaults of 30 days click and 7 days view. Edit the window in Campaign Manager after creation, or map a rule you created there; the uploads are the same.

Why does the LinkedIn connection ask for the rw_ads permission? For one action: writing utm_mta={LI_FAT_ID} into the tracking parameters of your active campaigns so the click ID survives browsers that strip it.

What happens 60 days after I connect LinkedIn? The access token expires, uploads return 401, and the connection's health shows a reconnect prompt. Reconnect from the Connections page; the stage mappings carry over. Attribi does not yet use the refresh token LinkedIn provides.

Does a qualified lead carry a value in the LinkedIn event? Only if your CRM supplies one at that stage. Otherwise it is sent with amount "0", so it counts as a qualified lead in Campaign Manager without adding revenue. The closed-won event carries the real amount and currency.

Can a lead from a LinkedIn Lead Gen Form be credited through Attribi? Only by hashed email, once it reaches your CRM. There is no click ID for a form filled inside LinkedIn, and Attribi does not send the form-response identifier.

The takeaway

The number on a LinkedIn rule that matters most is the click window, and it is the one number Attribi cannot set for you. Everything else on this page happens on the day the CRM changes. To see your own qualified leads and closed deals beside LinkedIn spend, every new workspace starts with 30 days on Pro, no card; the LinkedIn upload is included from Starter and the CRM revenue connection from Growth.

Funnel stages

Stages Attribi supports for LinkedIn Ads.

  • Lead
  • Qualified
  • Closed Won

Works with

Frequently asked questions

Can I upload closed-won revenue to LinkedIn Ads?

Yes. When a deal is marked won in your CRM, Attribi sends a conversion to the LinkedIn Conversions API with the deal value and currency attached, matched to the person by the LinkedIn click identifier or by hashed email. That means LinkedIn campaign reporting can show signed revenue, not only the count of form fills.

Does Attribi create my LinkedIn conversion rules for me?

It can, but not unconditionally. Rule creation needs your LinkedIn connection to carry the conversions permission and needs the connecting LinkedIn user to hold a Campaign Manager or Account Manager role on the ad account. When either is missing LinkedIn returns a permission error, which Attribi shows you with a link to the right screen in Campaign Manager. Mapping a rule you already have always works and produces identical uploads.

What if a lead has no LinkedIn click ID?

The conversion is still uploaded using the hashed email from your CRM. Match rates are lower than with a click identifier, which is the normal trade-off for any offline upload, but a lead entered by a salesperson with no click history is not automatically lost. A lead with no email and no click ID is not sent, because LinkedIn has nothing to match it on.

Which funnel stages can I send to LinkedIn?

All three: form fill, qualified, and closed won. Each maps to its own LinkedIn conversion rule, so you can see in Campaign Manager how many form fills a campaign turned into sales-accepted leads and how many of those became revenue, rather than judging LinkedIn on cost per lead alone.

Does Attribi import LinkedIn ad spend?

Yes, daily. Cost, clicks, and impressions are pulled from your LinkedIn ad account and stored per campaign and day, so return on ad spend is calculated against real spend for the same period the revenue landed in.

Can Attribi send LinkedIn Ads data to Power BI?

No. Attribi has no Power BI or BigQuery connector and no public API, so a live LinkedIn Ads feed into a BI tool needs a reporting connector built for that. What Attribi offers is a CSV download from the Reports and Leads pages, and the reverse direction: CRM outcomes sent back into LinkedIn through the Conversions API.

Updated

Connect LinkedIn Ads to Attribi.

Sign up and connect it from the Connections page.

Start Free

No credit card · Free up to 500 visitors a month