LinkedIn clicks are expensive, so B2B advertisers feel bad tracking more than most. I often find a LinkedIn account where the only conversion is a "thank you page view" that fires for half the form fills, nothing is connected to the CRM, and nobody knows which campaigns produce sales-qualified leads. LinkedIn's bidding then optimises toward whoever fills in forms, not whoever buys.
The fix is to combine the LinkedIn Insight Tag in the browser with the LinkedIn Conversions API on the server, and to send the conversions that actually matter from your CRM. Here is how I set that up for lead generation.
What are the LinkedIn Insight Tag and the Conversions API?
The LinkedIn Insight Tag is the JavaScript tag you install on your website to track visits and conversions from LinkedIn ads and to build retargeting audiences. The LinkedIn Conversions API (CAPI) is a server-to-server connection that sends conversion events directly from your server or CRM to LinkedIn, without depending on the visitor's browser.
They work best together:
| Insight Tag (browser) | Conversions API (server) | |
|---|---|---|
| Runs in | Visitor's browser | Your server, sGTM container or CRM integration |
| Tracks | Page visits, website conversions | Website conversions and offline or CRM events |
| Affected by ad blockers and cookie limits | Yes | Much less |
| Matching | LinkedIn cookies, li_fat_id, optional hashed email |
Hashed email, li_fat_id, name and company data |
| Best for | Audiences, form fills, basic conversions | Qualified leads, opportunities, closed deals |
For B2B, the Conversions API is especially useful because the most valuable events, a qualified lead or a signed contract, happen in your CRM days or weeks after the click. The browser never sees them.
How do LinkedIn conversion rules work?
A LinkedIn conversion rule (Campaign Manager calls it a conversion) defines one action you want to count, how it is detected and how it is valued and attributed. You create conversions in Campaign Manager under the conversion tracking section, and each one has its own conversion ID.
When you create a conversion you choose:
- The name and type, for example "Demo request" as a Lead or "Closed won" as a Purchase.
- The data source: the Insight Tag, the Conversions API or a CRM integration.
- For Insight Tag conversions, the detection method: a page load on a URL (such as
/thank-you/) or an event-specific conversion that fires on an action you define. - The value and attribution settings, such as click-through and view-through windows.
- The campaigns the conversion applies to.
For lead forms, I prefer event-specific conversions over URL rules. Many forms do not redirect to a thank-you page, and URL rules count reloads and direct visits to the page as conversions too.
How do you set up the Insight Tag with Google Tag Manager?
You set up the Insight Tag in Google Tag Manager (GTM) with LinkedIn's Insight Tag template, firing a base tag on all pages and conversion tags on your form or booking events. My order of work:
- In Campaign Manager, find your Insight Tag and copy the partner ID.
- In the Insight Tag settings, turn on enhanced conversion tracking, which lets the tag use first-party cookies and the
li_fat_idclick ID. - In GTM, add the LinkedIn Insight tag from the template gallery with your partner ID, firing on all pages once consent allows it.
- Create an event-specific conversion in Campaign Manager and copy its conversion ID.
- Add a conversion tag in GTM using the same template, with that conversion ID, triggered by your form submission event (for example a
generate_leaddataLayer event). - Add an event ID field to the conversion tag, mapped from a dataLayer variable. You will need it for deduplication.
If you are not sure your form events fire reliably, fix that first. My guide to tracking calls, WhatsApp clicks and form submissions in GA4 covers the dataLayer events I use for forms.
Without GTM, the conversion call on the page looks like this:
window.lintrk('track', {
conversion_id: 1234567,
event_id: 'lead_8f3a2c91'
});
What is li_fat_id?
li_fat_id is LinkedIn's first-party click ID. With enhanced conversion tracking enabled, LinkedIn adds it to the landing page URL when someone clicks your ad, and the Insight Tag stores it in a first-party cookie. In the Conversions API it is sent as the LinkedIn first-party ads tracking UUID, and it is one of the strongest signals for matching a server conversion to the ad click.
Paste a real ad landing URL into my click ID checker to confirm li_fat_id survives your redirects. For lead gen, I also capture it in a hidden form field so it is saved on the CRM contact alongside the UTM parameters.
How do you send conversions with the LinkedIn Conversions API?
You send conversions with the LinkedIn Conversions API by creating a conversion with the Conversions API as its source, then sending events to it from server-side GTM, a CRM integration or your own backend, each with a timestamp and at least one user identifier.
There are three common routes:
- Server-side GTM (sGTM). Forward your web events to a server container on Stape or Google Cloud and fire a LinkedIn Conversions API tag. Community templates, such as Stape's, handle the API request. Good for website conversions you also track with the Insight Tag. If sGTM is new to you, read server-side tracking explained.
- CRM integration. Campaign Manager lists ready-made connections for some CRMs and automation tools, so you can send stages like "SQL" or "Closed won" without code. Check the current list for yours.
- Direct API or automation. A webhook from your CRM, or a Zapier or Make scenario, calls the Conversions API when a deal changes stage. This is how I handle CRMs without a native connector.
Each server event needs the conversion it belongs to, the time the conversion happened and user data. The identifiers LinkedIn accepts include:
| Identifier | What it is | Notes |
|---|---|---|
SHA256_EMAIL |
Hashed email address | Lowercase and trim, then SHA-256 with no salt |
LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID |
The li_fat_id click ID |
Captured from the landing URL or cookie |
| First name, last name | Plain text user info | Usually sent together with company |
| Company name, job title, country | Plain text user info | Helps when email is a personal address |
| Third-party IDs | Such as Acxiom or Oracle Moat IDs | Only if you already use them |
For the best match rates, I send both the hashed email and li_fat_id whenever I have them. To check your email normalisation and hashing, my hash generator shows the SHA-256 value for a normalised email in your browser.
Sending CRM stages back to LinkedIn
For B2B lead generation, the most useful thing the Conversions API does is let LinkedIn see which leads became pipeline. I usually create separate conversions for "Lead", "Sales-qualified lead" and "Closed won", and send each when the CRM record reaches that stage, using the email and stored li_fat_id from the original form fill. This is the same principle as offline conversion tracking for Google Ads. If your CRM is HubSpot, my HubSpot conversion tracking page explains how I structure those stages.
LinkedIn only accepts conversions within a limited time after they happen, so send CRM events promptly rather than in a quarterly batch.
How does LinkedIn deduplicate Insight Tag and CAPI conversions?
LinkedIn deduplicates when the Insight Tag and the Conversions API send the same conversion with the same event ID. When it finds a match, it keeps the Insight Tag event and discards the server copy, so the action is counted once.
To make that work:
- Send both events to the same conversion, because LinkedIn matches on the conversion and the event ID together. Check the current deduplication notes in LinkedIn's documentation when you create it, as the Campaign Manager options change from time to time.
- Generate one event ID per action in the browser, push it into the dataLayer, and pass the same value to the Insight Tag conversion tag and the server event.
- For leads, the form submission ID is a good event ID if your form tool exposes it.
The logic mirrors what I describe in Meta CAPI event deduplication. CRM-only events, such as "Closed won", are sent from one source only and do not need deduplication.
How do you test your LinkedIn setup?
You test your LinkedIn setup by firing real conversions and confirming they reach Campaign Manager from each source, with matching event IDs and no double counting.
- Use GTM Preview to confirm the Insight Tag loads and each conversion tag fires once, with an event ID.
- Check that
li_fat_idappears on the landing URL from a real ad click and is stored with the lead. - In server-side GTM Preview, confirm the Conversions API request returns a success response.
- In Campaign Manager, check each conversion's status and the recent activity it reports.
- After a week, compare LinkedIn conversions with form fills and CRM stages for the same period.
Final thoughts
For B2B, the Insight Tag tells LinkedIn who filled in a form, and the Conversions API tells it who became a real opportunity. Set up both with shared event IDs and feed your CRM stages back, and LinkedIn's bidding finally has the right goal. If you want help connecting your CRM, see my CRM and marketing automation service and advanced conversion tracking service, or book a free tracking audit.

