LinkedIn Ads UTM Tracking: Tag Every Ad, Match Every Conversion
Last updated · published
Set your UTMs once at the account level, let campaigns inherit them, and override only where a campaign needs its own name. That is the whole tagging strategy for LinkedIn Ads, and most teams do it the hard way instead, pasting the same string into every ad.
Then turn on Enhanced Conversion Tracking, because it is what puts li_fat_id on your click URLs, and li_fat_id is the strongest thing you can send the Conversions API.
LinkedIn is usually the most expensive CPM in a B2B media mix. It is also the one where in-platform reporting, GA4 and Salesforce disagree the most.
TL;DR
- URL parameters can be set at the account, campaign and ad level. Values combine, so put the constants at the account level and override the campaign name below it.
- Dynamic macros use double braces:
{{CAMPAIGN_NAME}},{{AD_SET_NAME}},{{AD_ID}}and the ID variants. They work at the account and campaign level.- LinkedIn renamed its hierarchy in October 2025. What used to be campaign group, campaign and creative is now Campaign, Ad Set and Ad.
li_fat_idis LinkedIn’s first-party click identifier. Enhanced Conversion Tracking is what appends it, and it is on by default for new Insight Tags but frequently off on older ones.- Send every identifier you hold to the Conversions API. LinkedIn matches on hashed email,
li_fat_id, IP and a few others, and Lead Gen Form conversions have a dedicatedleadfield.- LinkedIn, GA4 and Salesforce count different things on different windows. Reconciling them is a quarterly job, not a bug to fix.
Set Parameters at the Account Level, Override Below
Open Campaign Manager and you will find a URL parameters field (it used to be called Tracking parameters) in three places: account settings, the campaign, and the individual ad. Static values can go in any of the three. Dynamic macros go at the account or campaign level.
The values combine. Whatever is set at the account level applies underneath it, with campaign and ad values joining on. That is the difference between tagging an account once and tagging 200 ads forever.
Put the constants at the account level:
utm_source=linkedin&utm_medium=paid-social
Then let each campaign add its own name and identifiers:
utm_campaign=2026q3-brand-acme&utm_content={{AD_ID}}
Format rules for the field: key-value pairs separated by &, no leading ?, no destination URL, and no manual URL-encoding, because Campaign Manager encodes on its side. Check the destination URL is clean before you paste anything in, since LinkedIn appends with & and a destination ending in a stray ? produces a broken click.
The macros that exist
Eight dynamic macros, all double-braced:
| Macro | Resolves to |
|---|---|
{{ACCOUNT_ID}} / {{ACCOUNT_NAME}} | The ad account |
{{CAMPAIGN_ID}} / {{CAMPAIGN_NAME}} | The campaign |
{{AD_SET_ID}} / {{AD_SET_NAME}} | The ad set |
{{AD_ID}} / {{AD_NAME}} | The individual ad |
Two warnings. First, these are the names introduced in October 2025, when LinkedIn renamed the hierarchy. Older articles (and older campaigns) use CAMPAIGN_GROUP_*, CAMPAIGN_* and CREATIVE_*, which map to the new Campaign, Ad Set and Ad levels. If a macro renders literally in your landing URL, a stale name is the first thing to check.
Second, name macros inherit whatever mess already exists in Campaign Manager. {{CAMPAIGN_NAME}} will happily push Q3 Brand Test (final v2) into your analytics, spaces and all. Use the ID macros for joins, and a governed string for the campaign name your reports group on.
Tag Each Format for What It Actually Is
Eight formats carry most B2B paid acquisition: Single Image, Carousel, Video, Document, Conversation, Message, Event and Lead Gen Form. Treat them identically and utm_content turns to mush.
Single Image. One image, one destination, one parameter field. utm_content names the creative variant: single-image-roi-blue-cta. Keep the date in utm_campaign.
Carousel cards each have their own destination URL, while the parameter field covers the whole ad. Encode the card in the destination (/landing/roi-calculator?card=3) and let utm_content name the concept.
Video. Same shape as Single Image, with one wrinkle: view-through conversions never carry UTMs, so the video’s contribution shows up in LinkedIn’s numbers and nowhere else. Name the creative and its length, since performance breaks sharply between 15, 30 and 60 seconds.
Document. Gated PDFs. If the reader opens the document inside LinkedIn, no session reaches your site at all. Tag the field anyway for the follow-up landing page clicks.
Conversation and Message. Each CTA has its own destination URL and its own parameter field. Teams tag the first CTA and forget the rest, which loses the branches that convert. Tag every branch.
Event. The click goes to the event page on LinkedIn, not your site. Tag the external registration link instead and treat the in-platform click as LinkedIn-side reporting.
Lead Gen Form. The user never lands on your site, so the parameter field is moot. See the pitfalls below, because this is where most B2B attribution quietly disappears.
Across all eight: utm_source=linkedin, utm_medium=paid-social, utm_campaign is your governed campaign name, utm_content describes the creative or CTA, and utm_term is free for audience identity in ABM work.
li_fat_id Is the Match Key
li_fat_id is LinkedIn’s First-Party Ads Tracking UUID, the LinkedIn equivalent of gclid or fbclid. It arrives as a query parameter on ad clicks when Enhanced Conversion Tracking is turned on, and the Insight Tag does not need to be installed on the page for LinkedIn to append it.
Four things to know:
- Enhanced Conversion Tracking is on by default for new Insight Tags. Accounts that set up tracking years ago often have it off, which is why an audit of click URLs turns up no
li_fat_id. Check that setting before you debug anything else. - Where the Insight Tag is installed, it writes
li_fat_idinto a first-party cookie on your domain, which is what makes it available at form-submit time. - The cookie does not survive cleared storage, a different browser, or a different device.
- On iOS, click identifiers are stripped from links opened in Mail, Messages and Safari Private Browsing. Apple publishes no list of which ones, and
li_fat_iddoes not appear on the community-reported lists, which namegclid,fbclidandmsclkid. UTM parameters survive in every reported case. Assume some iOS leakage and confirm against your own logs.
Turning Enhanced Conversion Tracking on is the highest-value toggle in a LinkedIn account. It costs one click and it feeds the strongest identifier into every conversion you report back.
Send Every Identifier You Have
The Conversions API is LinkedIn’s server-side conversion endpoint. Your server posts the conversion after it happens, instead of relying on a browser tag that consent, blockers or a closed laptop can stop.
LinkedIn’s guidance is to send multiple identifiers when you have them, not to pick one. The documented identifier types include:
SHA256_EMAIL, the lowercased, trimmed email address hashed with SHA-256.LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID, which isli_fat_id.ACXIOM_IDandGOOGLE_AID.- The visitor’s IP address, either plain or hashed.
Alongside those, userInfo carries first name, last name, company name, title and country code. Those fields are sent in plain text, not hashed. Getting that wrong is the most common integration bug on LinkedIn CAPI: hash the name fields and they match nothing.
There is no phone identifier and no custom-data field. UTM values are not match keys, so keep them in your CRM and your warehouse, where they do the reporting work, and use externalIds if you need a join key back to your own records.
For Lead Gen Form conversions, the event has a dedicated lead field that takes the form response URN. That is the supported way to connect a native form submission to the ad that produced it, and it beats reconstructing the lead from campaign metadata afterwards.
The piece most teams get wrong is losing li_fat_id between the form submit and the CRM write. Your handler reads the cookie at submit time, and if the value does not travel to the CRM or warehouse alongside email and company, the strongest identifier never reaches LinkedIn.
For how this looks on the CRM side, see our guide to Salesforce UTM capture and lead source attribution.
Three Systems, Three Numbers
LinkedIn’s reporting will not agree with GA4, and neither will agree with Salesforce. That is not a bug to fix. The three measure different things.
LinkedIn counts conversions inside its attribution windows: a click-through window that defaults to 30 days and can be set to 1, 7, 30 or 90, and a view-through window that defaults to 7 days. Its sources are Insight Tag events, CAPI events and Lead Gen Form submissions, deduplicated on LinkedIn’s side.
GA4 sees only sessions that arrive on your site with UTMs intact. No view-throughs, and nothing from a return visit it attributes elsewhere. LinkedIn’s number is always the biggest of the three, because it counts events GA4 has no way to observe.
Salesforce sees only what your form capture writes onto the Lead. If forms persist first-touch and last-touch UTMs, pipeline can be traced back to LinkedIn. The lead-to-contact conversion step is where first-touch values usually get overwritten.
Say a team spends $300,000 in a quarter. LinkedIn reports 1,200 conversions, GA4 attributes 480 sessions, and Salesforce shows 320 opportunities sourced to LinkedIn. Those numbers are illustrative, and all three can be right at once. They are also three different units: conversions, sessions and opportunities. Nothing is a subset of anything.
Report all three, label what each one measures, and use them for different decisions. LinkedIn’s number drives in-platform optimisation. GA4’s drives cross-channel budget allocation. Salesforce’s drives pipeline forecasting.
Reconciliation only works if the values agree in the first place. When demand gen writes linkedin and brand writes LinkedIn, GA4 keeps two source rows and Salesforce’s exact-match Lead Source field keeps two values, so every report splits in half. Terminus, the marketing taxonomy governance platform, validates those values when the link is created, which is the only point where the fix is cheap.
For the model layer above this, see multi-touch attribution models.
ABM: Put the Audience in utm_term
Matched Audiences let you target named accounts, company attributes or contact lists. ABM spend is concentrated, so the tagging should record which audience saw the ad, not just which creative ran.
utm_campaigncarries the program, quarter and tier:2026q3-abm-enterprise-tier1-tech.utm_contentstays on the creative variant.utm_termcarries the audience:matched-audience-fortune-500-tech. This is one of the few good non-search uses ofutm_term, and GA4 surfaces it as a standard dimension.{{AD_ID}}and{{CAMPAIGN_ID}}give your warehouse a join key back to LinkedIn’s own objects.
A missing UTM on a click into a target account costs more than a missing UTM on a broad awareness click, because there are so few of them. Scale the audit cadence to the cost per click.
When a Lead Gen Form fires for a Tier 1 account, no session reaches your site at all. The mitigation is CAPI with the lead field, plus writing the audience identity and li_fat_id onto the Lead record through your CRM integration.
The Four Ways Teams Lose LinkedIn Attribution
Cloning drops or duplicates parameters. Campaign Manager has been inconsistent about the URL parameter field on duplication, sometimes carrying the source campaign’s values over (so your Q3 campaign reports as Q2) and sometimes clearing the field. After every clone, open the ads and check the field before activating. Account-level parameters reduce the blast radius, because the constants survive even when the ad-level field is wiped.
The Lead Gen Form gotcha. Native forms render and submit inside LinkedIn, so your ad’s UTMs never reach a Lead record. The lead syncs with the LinkedIn campaign name and form ID, and nothing else, unless you map hidden fields in the form or send the lead field through CAPI.
Enhanced Conversion Tracking left off. No li_fat_id, so every conversion falls back to weaker identifiers and your match rate drops. One toggle, and it is off on most accounts that predate it.
Case drift. linkedin and LinkedIn land in the same GA4 channel, because channel rules are not case sensitive, but they stay separate rows in the source report and separate values in Salesforce. Half your pipeline sits under each spelling.
FAQ
Does LinkedIn auto-tag like Google Ads?
No. LinkedIn appends li_fat_id when Enhanced Conversion Tracking is on, but it never writes utm_ parameters for you. You set those yourself, though you can set them once at the account level rather than per ad.
Can I set UTMs at the campaign level instead of on every ad?
Yes. Static parameters work at the account, campaign and ad levels, and dynamic macros at the account and campaign levels. The values combine, so the practical setup is constants at the account level and the campaign name one level down.
Which dynamic macros does LinkedIn support?
{{ACCOUNT_ID}}, {{ACCOUNT_NAME}}, {{CAMPAIGN_ID}}, {{CAMPAIGN_NAME}}, {{AD_SET_ID}}, {{AD_SET_NAME}}, {{AD_ID}} and {{AD_NAME}}. Double braces, and these names date from the October 2025 rename.
What is the attribution window for li_fat_id?
LinkedIn’s conversion windows are set per conversion: click-through defaults to 30 days with 1, 7, 30 and 90 available, and view-through defaults to 7 days. The window belongs to the conversion setting, not to the identifier.
How does the Conversions API match a conversion to a click?
By the identifiers you send. Hashed email and li_fat_id are the strongest, and IP and the Acxiom or Google advertising IDs are also supported. Send everything you hold in one event. Remember userInfo fields (name, company, title) go in plain text, not hashed.
Can I put UTM values in the CAPI payload?
No. There is no custom-data field, and LinkedIn does not match on UTM values. Keep them in your CRM and warehouse, and use externalIds for your own joins.
Why does LinkedIn report more conversions than GA4?
Because it counts view-throughs and CAPI events matched by identity rather than by a click, and GA4 only sees sessions that land with UTMs intact. Consent dropouts, iOS stripping and return visits attributed elsewhere all widen the gap.
Does iOS strip li_fat_id?
Not on the community-reported strip lists, which name gclid, fbclid and msclkid. Apple publishes no official list, and the stripping applies to links opened in Mail, Messages and Safari Private Browsing. UTM parameters survive in every reported case. Verify against your own logs.
What is the best utm_medium for LinkedIn ads?
paid-social, which groups LinkedIn with Meta and TikTok in GA4’s Paid Social channel. Using linkedin as the medium is the common antipattern, and it is worse than it looks: GA4 sees the source linkedin, matches its social sites list, and files your paid spend under Organic Social.
How often should I audit LinkedIn UTM compliance?
Weekly for the first month after launch, monthly after that, and at every clone or creative refresh. Cloning is the most expensive recurring error in LinkedIn paid programs, and a ten-minute pre-launch check catches it.
Every account starts with a 21-day trial, no credit card required.