
Make confident, data-driven decisions with actionable ad spend insights.
© 2026 DataCops. All rights reserved.
14 min read
In B2B, the true conversion the Sales Qualified Lead (SQL), the deal closure, or the large subscription agreement—rarely happens on a website thank-you page. It occurs weeks or months later in your CRM. The LinkedIn Offline Conversions Upload Process is the mechanism that bridges this gap, allowing you to feed that high-value revenue data back to LinkedIn's optimization engine. If you're not doing this, your ROI measurement is fiction.

Orla Gallagher
PPC & Paid Social Expert
Last Updated
December 13, 2025
The Problem: LinkedIn Ads reports 1,200 MQLs this quarter at $75 CPL looking successful. Sales closed 40 enterprise deals worth $4M, but only 4 trace back to LinkedIn campaigns. You cannot prove which 36 deals came from LinkedIn or if $90,000 quarterly ad spend drove actual revenue because offline deals in CRM are not connected to original ad clicks.
The Reason: Most important B2B conversions (Closed-Won deals) happen in CRM months after ad click, invisible to LinkedIn tracking. Manual CSV uploads of closed deals get 20-40% match rates because CRM work emails do not match LinkedIn personal emails. Even with automation, missing li_fat_id (LinkedIn Click ID) prevents attribution. Cannot prove ROI or teach algorithm which campaigns drive paying customers.
The Solution: Capture li_fat_id when users click LinkedIn ads, store in CRM with lead record. When deal closes 6-12 months later, automatically send offline conversion to LinkedIn API with li_fat_id for 95%+ match rate. LinkedIn attributes revenue to original campaign. Algorithm learns which ads drive customers, optimizes toward paying accounts. Prove marketing sourced $3.6M of $4M revenue.
LinkedIn Offline Conversions upload completed sales from your CRM to LinkedIn, allowing algorithm to optimize toward customers who close deals instead of users who just fill forms.
How standard LinkedIn tracking works:
User clicks LinkedIn ad.
Submits lead form on website.
LinkedIn Insight Tag records "Lead" conversion.
Algorithm optimizes toward more form submissions.
Where standard tracking fails:
User becomes lead (tracked).
Sales qualifies lead over 3 months (not tracked).
Lead becomes $50,000 customer (not tracked by LinkedIn).
LinkedIn thinks campaign drives leads, does not know about revenue.
Algorithm continues targeting form fillers, not buyers.
How offline conversions work:
User clicks LinkedIn ad, becomes lead.
6 months later, deal closes for $50,000 in CRM.
You upload "Closed-Won" conversion to LinkedIn.
LinkedIn matches to original ad click.
Algorithm learns this campaign drove paying customer.
Optimizes toward more similar high-value buyers.
The optimization shift:
Without offline conversions:
Algorithm optimizes for: Lead form submissions
Gets: Users who download free content (many never buy)
With offline conversions:
Algorithm optimizes for: Closed deals and revenue
Gets: Users who become paying customers
B2B sales cycles last weeks to months, with valuable conversions happening in CRM after LinkedIn tracking window ends.
B2B sales cycle timeline:
Week 1: User clicks LinkedIn ad, downloads whitepaper.
Week 2-4: Marketing nurtures via email campaigns.
Week 5: Lead becomes MQL (Marketing Qualified Lead).
Week 6-8: Sales qualifies, becomes SQL (Sales Qualified Lead).
Week 9-16: Sales demos, proposal, negotiations.
Week 17: Deal closes, $50,000 contract signed.
LinkedIn's view without offline conversions:
Sees: Lead form submission Week 1.
Does not see: MQL, SQL, demos, proposal, closed deal.
Thinks campaign success = form download.
Optimizes for more downloaders (not closers).
The attribution gap:
LinkedIn attribution window: 90 days maximum.
Typical B2B sales cycle: 120-180 days (exceeds window).
Deals closing after 90 days get zero LinkedIn attribution.
Appear as "Direct" or "Organic" in analytics.
Value of offline conversions:
Uploads Week 17 closed deal back to LinkedIn.
Attributes $50,000 revenue to original Week 1 ad click.
Algorithm learns: This campaign drives actual customers.
Shifts optimization from form fills to deal closures.
Most LinkedIn offline conversion uploads use email matching, achieving only 20-40% match rates due to email mismatches.
Standard upload process:
Export closed deals from CRM (Salesforce, HubSpot).
Include: Email, company name, deal value, close date.
Hash email with SHA-256.
Upload CSV to LinkedIn Campaign Manager.
The email matching problem:
LinkedIn tries to match CRM email to LinkedIn user profile email.
Common mismatch scenarios:
CRM email: [email protected] (work email from form)
LinkedIn email: [email protected] (personal email on profile)
No match (different emails)
User changed jobs:
CRM email: [email protected] (from 2023 form)
LinkedIn email: [email protected] (updated profile 2024)
No match (email changed)
Multiple profiles:
CRM email: [email protected]
LinkedIn has 3 Sarah Smith profiles with different emails
Ambiguous match or no match
Typical email match rates:
Email only: 20-30%
Email + company name: 30-40%
Email + company + job title: 35-45%
Impact on ROI attribution:
Upload 100 closed deals worth $5M revenue.
LinkedIn matches 35 deals ($1.75M).
Cannot attribute $3.25M (65% of revenue) to campaigns.
Algorithm learns from only 35% of actual customers.
Incomplete optimization signal.
li_fat_id is LinkedIn's Click ID appended to landing page URLs when users click ads, enabling 95%+ match rates for offline conversions through deterministic attribution.
How li_fat_id works:
User clicks your LinkedIn ad.
LinkedIn appends li_fat_id to landing page URL:
yoursite.com/landing?li_fat_id=ABC123XYZ789...
LinkedIn Insight Tag (if firing) captures li_fat_id from URL.
Stores in cookie for future conversions.
What li_fat_id contains:
Specific LinkedIn ad that was clicked.
Specific LinkedIn member who clicked.
Campaign and ad creative identifiers.
Timestamp of click.
Conversion tracking parameters.
Why li_fat_id is superior:
Email matching: Probabilistic, 20-40% success.
li_fat_id matching: Deterministic, 95%+ success.
LinkedIn's matching logic:
Receives offline conversion with li_fat_id.
Looks up li_fat_id in database.
Instantly identifies exact ad click from months ago.
Perfect attribution regardless of email changes.
The capture problem:
LinkedIn Insight Tag blocked by ad blockers (30-50% of B2B users).
li_fat_id in URL but no script to capture it.
Lead converts but li_fat_id lost.
Months later, must rely on email matching (low success).
Cannot send li_fat_id with offline conversion (never captured).
Ad blockers prevent LinkedIn Insight Tag from capturing li_fat_id, forcing reliance on low-success email matching for offline conversions.
Standard tracking scenario:
User (VP of Engineering with uBlock Origin) clicks LinkedIn ad.
Lands on website with li_fat_id in URL.
Insight Tag from snap.licdn.com blocked by ad blocker.
li_fat_id in URL but not captured (no tag firing).
User submits demo request form.
Form submission:
Captures: Name, work email, company, title.
Does not capture: li_fat_id (tag was blocked).
6 months later:
Deal closes for $75,000.
You upload offline conversion with email.
LinkedIn tries to match work email to LinkedIn profile.
Profile uses personal email (mismatch).
No attribution to campaign.
$75,000 deal invisible to LinkedIn algorithm.
Scale of problem:
B2B decision-makers (VPs, Directors, C-level) use privacy tools.
40-50% have ad blockers or privacy browsers.
These are your highest-value prospects.
Offline conversions cannot attribute to them (no li_fat_id).
Optimizer never learns from best customers.
Method How It Works Match Rate Latency Problems
Manual CSV Export CRM, format Excel, upload monthly 20-40% (email only) 30+ days Low match rate, stale data, manual labor
Zapier/Middleware CRM trigger sends API call to LinkedIn 30-45% (email + company) 1-7 days Still email-based, automation does not fix matching
Custom Engineering Backend captures li_fat_id, sends on deal close 60-80% (if tag not blocked) Real-time Fails if ad blockers prevent initial capture, expensive to build/maintain
First-Party + API First-party script captures li_fat_id, automated API send 95%+ (deterministic li_fat_id) Real-time Requires first-party tracking foundation
First-party tracking via CNAME captures li_fat_id for 95%+ of users, enabling high-match-rate offline conversions months later.
Standard tracking (fails):
Insight Tag from snap.licdn.com (third-party).
Ad blocker prevents tag loading.
li_fat_id in URL but not captured.
First-party tracking (succeeds):
Script from analytics.yourcompany.com (your subdomain via CNAME).
Ad blockers do not block your own domain.
Script reads li_fat_id from URL parameter.
Stores in first-party cookie and database.
Lead capture flow:
User clicks LinkedIn ad with li_fat_id.
First-party script captures li_fat_id from URL.
User submits demo request form.
Form includes hidden field with li_fat_id.
CRM receives: Email, company, AND li_fat_id.
li_fat_id persistence in CRM:
Create custom field: "LinkedIn Click ID"
Make field read-only (prevent sales rep edits).
li_fat_id persists through all pipeline stages.
Stays with record for 12+ months until deal closes.
Offline conversion months later:
Deal marked "Closed-Won" for $75,000.
Automation triggers.
Retrieves li_fat_id from CRM record.
Sends offline conversion to LinkedIn API:
{
"conversion": "urn:li:conversion:67890",
"conversionHappenedAt": 1701456789,
"conversionValue": {
"amount": "75000",
"currencyCode": "USD"
},
"user": {
"li_fat_id": "ABC123XYZ789..."
}
}
LinkedIn matches li_fat_id instantly (100% deterministic).
Attributes $75,000 to original campaign.
Algorithm learns: This ad drove high-value customer.
Week 1-2: Implement first-party tracking
Create CNAME subdomain: analytics.yourcompany.com
Install first-party script on website.
Verify li_fat_id capture from LinkedIn ad clicks.
Test with ad blocker active (should still capture).
Week 3-4: Configure CRM field
Add custom field in CRM: "LinkedIn Click ID"
Make field non-editable by sales team.
Set field to populate from form hidden field.
Week 5-6: Update lead forms
Add hidden field to all forms:
<input type="hidden" name="li_fat_id" id="li_fat_id" />
First-party script automatically populates field.
Test form submission, verify li_fat_id in CRM.
Week 7-8: Build CRM automation
Trigger: Deal stage changes to "Closed-Won"
Action: Send webhook with deal data to integration platform.
Include: Email, deal value, close date, li_fat_id.
Week 9-10: Configure LinkedIn API
Create LinkedIn API credentials in Campaign Manager.
Set up offline conversion tracking.
Define conversion action (e.g., "Enterprise Deal Closed").
Week 11-12: Test end-to-end
Create test lead with known li_fat_id.
Move through sales pipeline to Closed-Won.
Verify offline conversion appears in LinkedIn.
Check attribution to correct campaign/ad.
Week 13+: Monitor and optimize
Track match rates weekly (target 90%+).
Compare revenue attribution before vs after.
Adjust campaign optimization based on deal data.
Mistake 1: Only uploading email
Upload closed deals with email only.
No li_fat_id included.
Match rate 20-40% (most deals lost).
Fix: Capture li_fat_id with first-party tracking, include in upload.
Mistake 2: Delayed uploads
Upload closed deals once per quarter.
Data 90 days old when uploaded.
Too stale for real-time campaign optimization.
Fix: Automate uploads within 24-48 hours of deal close.
Mistake 3: Not persisting li_fat_id in CRM
Capture li_fat_id at lead creation.
Field not mapped through opportunity stages.
Lost when lead converts to opportunity.
Offline conversion missing attribution ID.
Fix: Ensure li_fat_id field persists across all CRM objects.
Mistake 4: Missing conversion value
Upload that deal closed.
Omit deal value amount.
LinkedIn knows conversion happened but not revenue.
Cannot optimize for ROAS.
Fix: Always include actual deal value in offline conversion.
Mistake 5: Not filtering bot submissions
Upload all form submissions that became deals.
Includes bot-generated fake leads that "closed."
Pollutes algorithm training data.
Fix: Filter bot conversions before upload.
Check 1: Current match rate
[ ] LinkedIn Campaign Manager > Conversions > Offline Events
[ ] Check match rate for recent uploads
[ ] If <70%, email-only matching failing
Check 2: li_fat_id capture
[ ] Click your own LinkedIn ad
[ ] Check if li_fat_id in landing page URL
[ ] Check if captured in cookies/storage
[ ] If missing, Insight Tag blocked
Check 3: CRM li_fat_id field
[ ] Create test lead from LinkedIn ad
[ ] Check if li_fat_id stored in CRM
[ ] Move lead to opportunity stage
[ ] Verify li_fat_id persists
[ ] If lost, field mapping broken
Check 4: Attribution accuracy
[ ] Export closed deals from CRM
[ ] Check LinkedIn Campaign Manager attribution
[ ] Compare: Which deals LinkedIn attributes vs CRM source
[ ] If major discrepancy, offline conversions not working
Check 5: Sales cycle length
[ ] Calculate average days from lead to close
[ ] If >90 days, exceeds LinkedIn attribution window
[ ] Offline conversions essential (not optional)
What are LinkedIn Offline Conversions?
LinkedIn Offline Conversions upload completed sales from your CRM to LinkedIn, allowing algorithm to optimize toward customers who close deals instead of users who just fill lead forms. Connects CRM revenue back to original LinkedIn ad clicks for accurate ROI attribution and campaign optimization.
Why is my LinkedIn offline conversion match rate low?
Low match rates (20-40%) occur when using email-only matching because CRM work emails do not match LinkedIn profile personal emails. Ad blockers prevent li_fat_id (LinkedIn Click ID) capture for 30-50% of users. Without li_fat_id, must rely on probabilistic email matching which fails when emails do not align.
What is li_fat_id for offline conversions?
li_fat_id is LinkedIn Click ID appended to landing page URLs when users click ads. Including li_fat_id in offline conversion uploads enables 95%+ match rates through deterministic attribution compared to 20-40% for email matching. LinkedIn instantly matches li_fat_id to original ad click from months ago regardless of email changes.
How do I capture li_fat_id for long sales cycles?
Capture li_fat_id with first-party tracking script via CNAME that bypasses ad blockers. Store li_fat_id in CRM custom field when lead submits form. Make field non-editable and persist through all pipeline stages. When deal closes 6-12 months later, retrieve li_fat_id from CRM and include in offline conversion API call.
Can Zapier handle LinkedIn offline conversions?
Zapier can automate sending data from CRM to LinkedIn API but does not solve li_fat_id capture problem. If your forms do not capture li_fat_id initially, Zapier only sends email resulting in same 20-40% match rates as manual uploads. Fix data capture with first-party tracking first, then use automation.
How long do sales cycles need to be to need this?
Any B2B business with sales cycles exceeding 90 days (LinkedIn's maximum attribution window) needs offline conversions. Typical enterprise B2B cycles: 120-180 days. Without offline conversions, deals closing after 90 days get zero LinkedIn attribution, appearing as Direct or Organic instead of paid LinkedIn.
DataCops provides first-party data platform with native LinkedIn Offline Conversions integration, capturing li_fat_id for 95%+ of users and automatically sending closed deals for perfect revenue attribution.
Complete li_fat_id capture:
First-party script from analytics.yourcompany.com bypasses ad blockers.
Captures li_fat_id from LinkedIn ad clicks for 95%+ of users.
Standard Insight Tag captures only 50% (blocked for executives).
Stores in first-party cookie persisting 12+ months.
CRM integration and persistence:
Automatic sync with Salesforce, HubSpot, custom CRMs.
li_fat_id stored in dedicated CRM field on contact/lead record.
Field locked (prevents accidental deletion by sales team).
Persists through lead → opportunity → closed deal stages.
Automated offline conversion sending:
Monitors CRM for "Closed-Won" stage changes.
Triggers within minutes of deal close (not monthly batches).
Retrieves li_fat_id from closed deal record.
Sends to LinkedIn Offline Conversions API automatically.
95%+ match rates:
Deterministic li_fat_id matching (not probabilistic email).
LinkedIn instantly attributes to original ad click.
Works even if customer changed emails or jobs.
Complete revenue attribution regardless of sale cycle length.
Multi-month attribution:
li_fat_id captured Month 1 (ad click).
Persists through 6-12 month sales cycle.
Deal closes Month 12.
Attribution maintained from click to close.
No 90-day window limitation.
Revenue-based optimization:
Includes actual deal value in offline conversions.
LinkedIn optimizes for revenue, not just conversion count.
Algorithm learns which campaigns drive highest-value customers.
Target ROAS bidding enabled with accurate data.
Campaign-level ROI proof:
Dashboard shows revenue attributed to each LinkedIn campaign.
Compare: Campaign A sourced $2.4M, Campaign B sourced $400K.
Prove marketing's direct contribution to closed revenue.
Executive-ready ROI reporting.
Sales and marketing alignment:
Salesforce shows LinkedIn campaign source on opportunities.
Sales sees which ads drove their best leads.
Marketing proves revenue impact with CRM data.
Shared attribution truth eliminates conflicts.
Implementation timeline:
Week 1-2: CNAME DNS setup, first-party script installation
Week 3-4: CRM li_fat_id field creation and form integration
Week 5-6: LinkedIn API credentials and conversion setup
Week 7-8: CRM automation for Closed-Won triggers
Week 9-10: Testing and verification
Week 11+: Automated ongoing revenue attribution
Platform handles ongoing li_fat_id capture, CRM synchronization, and offline conversion sending with no manual CSV uploads required.
Supported CRM platforms:
Salesforce (native integration)
HubSpot (native integration)
Microsoft Dynamics
Pipedrive
Close CRM
Custom CRMs (via webhook API)
Key Takeaways:
LinkedIn Offline Conversions upload closed CRM deals to LinkedIn so algorithm optimizes toward paying customers not form fillers
Email-only matching achieves 20-40% match rates because CRM work emails differ from LinkedIn profile personal emails
li_fat_id (LinkedIn Click ID) enables 95%+ match rates through deterministic attribution to original ad clicks
Ad blockers prevent standard Insight Tag from capturing li_fat_id for 30-50% of B2B decision-makers
First-party tracking via CNAME bypasses ad blockers to capture li_fat_id for 95%+ of users
Store li_fat_id in CRM field persisting through all pipeline stages from lead to closed deal
Automate offline conversion sending within 24-48 hours of deal close for real-time algorithm optimization
Include actual deal value in offline conversions to enable LinkedIn revenue-based bidding and ROAS optimization