Offline conversions are the sales that happen after the click: the booked call, the patient who showed up, the deal your team won. DataCops sends them from HighLevel or any CRM back to Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X, matched to the ad click that started them.
Offline conversions are sales, or steps toward a sale, that happen away from your website and are sent back to the ad platform that brought the customer: a booked appointment, a phone sale, a deal won in your CRM, a paid invoice. Each one is matched to the ad click that started it, so Meta, Google Ads and TikTok count it as a result of that ad and learn to find more people like the ones who bought.
DataCops keeps the ad click on your own domain when the visitor lands. When the lead books, shows up, qualifies or buys in your CRM, DataCops finds that click again and sends the stage to your ads. No CSV exports, no code.
DataCops sends offline conversions from HighLevel or any CRM through the webhook to Meta, Google Ads, TikTok and LinkedIn, matched to the ad click that started each sale.
What your ads learn from
Leads and clinics on HighLevel
What your ads see todayForm→Booked→Showed→Won→Paid
With DataCopsForm→Booked→Showed→Won→Paid
B2B on any CRM
What your ads see todayForm→Qualified
With DataCopsForm→Qualified
Any CRM by webhook
What your ads see todayForm→Sale, with value
With DataCopsForm→Sale, with value
Offline conversion tracking: the complete guide (2026)
What an offline conversion is, in plain words
An offline conversion is a sale, or a step toward one, that happens where your ad platform cannot see it, such as a booked call, a deal won in your CRM or an invoice paid. You report it back with the click that started it, so Meta, Google Ads, TikTok and LinkedIn learn which clicks turn into customers, not just into form fills.
This guide covers what every setup needs, the rules each platform enforces, the nine places a click gets lost, and what to send. New words are explained in the offline conversions glossary.
The five things every setup needs
1. Capture the click ID
When someone clicks your ad, the platform adds an ID to the link (gclid, fbclid, ttclid, li_fat_id). Save it the moment they land, on a cookie that survives.
2. Keep a match key
Store the visitor's email or phone with the lead. It is what lets the sale find its click when the ID is gone.
3. Send each stage when it happens
Booked, showed, won, paid. Send each one as it happens, inside the platform's window. Meta rejects events older than 7 days.
4. Never count twice
Give every sale one ID. Send the same ID twice and it should count once, not twice.
5. Keep a log that shows failures
Every send needs a status and a reason. An upload that says "success" and adds nothing is the most common failure.
If one of the five is missing, the other four cannot save the setup. Most "offline conversions do not work" reports trace back to number 1, 2 or 5.
The rules on each platform
Windows and match methods, as of September 2026. Check each platform's own help page before you rely on a number.
Platform
How it arrives
Time window
Matches on
Meta
Conversions API into a dataset. The old Offline Conversions API and offline event sets were shut down in May 2025.
Rejects events sent more than 7 days after they happened.
fbclid / fbc / fbp, hashed email and phone
Google Ads
Offline click import, or enhanced conversions for leads. New API setups since June 2026 are asked to use the Data Manager API.
Ignores uploads more than 90 days after the click. Enhanced conversions for leads: 63 days.
gclid, gbraid or wbraid; hashed email or phone for leads
LinkedIn
Conversions API.
Conversions up to 90 days old.
Hashed email, li_fat_id, or name plus company or job title. It does not match on phone.
TikTok
Events API, server-side.
Send each stage as it happens.
ttclid, hashed email and phone
Microsoft Ads is not a DataCops destination. Safari also shortens what you can keep: cookies set by a browser script last 7 days, or 24 hours after a tracker link, and iOS 17 Link Tracking Protection can strip gclid and fbclid. Per-platform detail: Meta, Google Ads, LinkedIn, TikTok.
Who sends offline conversions
Businesses where the sale happens after the form, and the agencies that run their ads.
One first-party script, served from your own domain
publicRuns first-party from datacops.yourdomain, not a blockable third-party host
boltOne script, one CNAME, live in about 5 minutes, no container to host
cloudServer-side collection on Cloudflare's edge, close to every visitor
linkCaptures click IDs at the network level, so fbclid and gclid still reach your CAPI feed after browsers strip them
trending_upRecovers 15 to 25% of the sessions other setups lose
Traffic Visibility
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
First-Party Script
~78%
Blockers and ITP cut your sessions
“15 minutes to get server-side tracking live. After 3 days failing with another app and a DIY server-side Google Tag Manager, that alone sold me. Then support jumped on a Google Meet with me on a Sunday afternoon to finish the job. Nothing else comes close.”
Connect the place where your sales happen. DataCops listens for the stages that matter and sends each one to your ads.
HighLevel
Install once for your agency and pick the sub-accounts to connect. Each stage is sent as HighLevel reports it. Cancellations, no-shows and lost deals are never sent, and you can switch any stage off.
SendsForm leadBookedShowedWon, with valuePaid invoice
Post the sale to your private DataCops webhook with the customer's email or phone, the value and the order ID. Your CRM can send it directly, or through Zapier, Make or n8n.
SendsAny stage you postValue and currencyOrder ID
table_view
Google Sheets and CSV
On a paid plan, upload up to 20,000 past customers or sales from a CSV and pick the platforms to send them to. Rows go out with the date you send them, so use it to warm up an ad account. For sales you add to a sheet every day, send each row through Zapier or Make to your webhook.
When a call ends in a booking or a sale, record it in your CRM, or post it to your webhook with the caller's phone number. DataCops matches the phone number to the ad click and sends the conversion.
SendsMatched by phone
Shopify orders
The DataCops Shopify app sends each paid order as a server-side purchase, so orders the browser missed still reach your ads.
SendsPurchase, with value
Where the sale goes
Offline conversions by ad platform
You can upload a file to each ad platform by hand, which is an offline conversion import, or send each sale
through the platform's server API as it happens. DataCops does the second, so nothing waits for a weekly
upload and no ad blocker or cookie limit is in the way.
PlatformHow DataCops sends itThe platform's own rule, checked September 2026
Meta
Sent through the Meta Conversions API with hashed email and phone, and the click ID when there is one. Meta shut down its separate Offline Conversions API in May 2025, so this is now how offline sales reach Meta.
Meta rejects events more than 7 days old. DataCops sends each stage as your CRM reports it.
Google Ads
Uploaded as click conversions with the GCLID, GBRAID or WBRAID, or with hashed email and phone when there is no click ID, the way enhanced conversions for leads works. Leads and sales go to their own conversion actions; booked and showed go to a conversion action you map for them.
Sent through the LinkedIn Conversions API. You map each stage to one of your LinkedIn conversion rules.
LinkedIn accepts conversions up to 90 days old.
Microsoft Ads
Sent through the Microsoft UET Conversions API, with msclkid and hashed email and phone.
Microsoft accepts an event within 7 days of when it happened, so each stage is sent the day it happens.
Real people only
Filter fake leads before you send
A bot that fills in your form becomes a lead your ads try to find more of. DataCops checks every visit
for bots and datacenter traffic, and for VPNs and proxies if you choose. Switch on Real people only for a
platform and flagged visits never reach it.
Sales that come from your CRM are sent as your CRM reports them, with no bot check, so qualify them there
before you send.
Bots and datacenter traffic never reach Meta. VPNs and proxies too, if you choose.
Send everything
Meta gets every visitor, bots included.
smart_toyLead from a botSkipped
Delivery log
every event, every platform, with a reason
Live
Won deal to Meta
fbclid + hashed email
Delivered
Won deal to Google Ads
gclid, as a purchase
Delivered
Booked to TikTok
ttclid + hashed phone
Delivered
Lead to Meta
bot, Real people only is on
Skipped
Qualified to LinkedIn
waiting for the CRM stage
Held
Delivery log
Why offline conversion uploads fail
Most failed uploads report success and add nothing. DataCops logs every send, per platform, with its status and the reason, so you can see what happened to each sale.
1
The click is too old
Google ignores clicks older than 90 days. DataCops sends each stage when it happens, while the click is still in range.
2
Nothing to match on
A sale with no click ID and no email or phone cannot be matched. DataCops attaches the click it kept and hashed contact details.
3
The same sale sent twice
A won deal and its invoice count as one sale, and an order ID reaches each platform once.
4
Nobody saw it fail
Each send shows as sent, held, skipped or failed, with the reason next to it.
DataCops vs HubSpot, HighLevel and Zapier
What each one can send to your ads as offline conversions. Checked September 2026 against each tool's own help pages.
DataCops
HubSpot built-in
HighLevel built-in
Zapier
Sends CRM stages to Meta
HighLevel stages, any CRM by webhook
Lifecycle stages
Facebook lead form contacts, or with a stored fbclid
If you build the Zap
Sends CRM stages to Google Ads
Leads, won and paid; booked and showed once mapped
Lifecycle stages
Form, order, call, survey or chat triggers, needs a click ID
Needs a GCLID you stored
Sends won deals with their value
HighLevel won and paid, any CRM by webhook
Lifecycle stages, not deals
Facebook lead form contacts, or with a stored fbclid
If you build the Zap
Checks leads for bots before sending
Real people only, per platform
What it takes
One install, about 5 minutes per site
Marketing Hub Starter or higher
A workflow action per trigger
A paid plan, one task per send
Good to know
Good to know before you start
So nothing surprises you later.
info
Salesforce and Pipedrive through the webhook
Post each sale to your DataCops webhook, directly or through Zapier, Make or n8n.
info
Stripe and Paddle payments come later
Paid invoices from HighLevel, Shopify orders and webhook sales are sent today.
info
CSV rows are dated when you send them
An upload warms up your ads with past buyers. It does not rewrite past reports.
info
Refunds corrected on Google Ads
A full refund removes the Google Ads conversion, a partial one lowers its value. Meta and TikTok offer no way to correct a sent sale.
The nine places a click gets lost
Walk a lead from the ad to the sale. It can slip away at any of these steps, and each one has a different fix.
1
Landing page
The click ID is in the address bar for one page view. If a redirect, a slow script or a page change drops it, it is gone before anything saves it.
2
Form
The form submits the name and email but not the click ID, so the lead in your CRM has nothing to match on later.
3
Browser and Safari
Safari caps cookies set by a browser script at 7 days, and iOS 17 can strip gclid and fbclid from links. A deal closing in week three has no ID left.
4
Contact
The lead gives a different email or phone from the one on the ad click, or one that is mistyped. The match key no longer points to the click.
5
Trigger
The CRM stage changes but nothing fires, or it fires for the wrong stage. The sale happened and nobody told the ads.
6
Timing
The stage goes out too late. Meta drops anything older than 7 days; Google ignores clicks older than 90.
7
Match
The platform gets the event but cannot tie it to a click, so it counts nothing.
8
Duplicate
The same sale arrives twice, from the pixel and the server, or from a deal and its invoice, and is counted twice. Use one event ID.
9
Meaning
The event is counted, but as the wrong thing: a booking treated as a purchase, or a value in the wrong currency.
Choosing what to send
You can send several stages. The earlier the stage, the more volume and the more noise. The later, the cleaner and the slower.
Lead
Fast feedback, lots of volume. Also the easiest to fake, so check for bots first.
Qualified
A person on your team said this is a real opportunity. Best for longer B2B cycles.
Booked
A call or visit is on the calendar. Good when few leads reach a sale.
Showed
They turned up. Filters out no-shows.
Paid
Money arrived, with a value. The strongest signal, and the slowest.
A workable pattern: send qualified or booked as the goal your ads optimize for, and paid with its value as the record of revenue. On Google Ads, conversion actions start as secondary, so map booked and showed to an action you choose.
Refunds and cancellations, honestly
Some sales do not stick. DataCops never sends cancelled, no-show or lost stages, and a refund is not reversed on Meta or TikTok: the sale stays counted there. Plan for that in your reports, and treat platform revenue as an upper bound if you refund often. More in offline conversions and refunds.
DataCops is a tool that sends offline conversions from HighLevel, HubSpot or any CRM to Meta, Google Ads, TikTok and LinkedIn, matched to the ad click that started each sale, with a bot verdict on every visit and a log of every send.
How DataCops does it
1
Capture the click first
One script and one DNS record collect on your own domain. With your DNS on Cloudflare, the free Worker reads the click ID at the edge before the page loads. The click is kept on the server for up to 90 days after the visitor was last seen, and a signed server-set cookie on your domain lasts up to 400 days where enabled.
2
Send each stage when it happens
HighLevel natively: form lead, booked, showed, won with its value, paid. Cancelled, no-show and lost send nothing. HubSpot sends one stage. Any other CRM posts the sale to a private webhook with email or phone, value, currency, order ID and click IDs.
3
Real people only
Every visit gets a bot verdict against 360+ billion IPs and 350+ monitoring points, and Real people only keeps flagged visits out of each platform you choose. Every form email is checked: disposable providers, domains with no mail server and an email risk score. LeadCops can hold a lead until your CRM confirms it. On the Organization plan, the fraud refund report exports bot-flagged Google Ads clicks in the format Google's Click Quality form asks for; you attach it and Google decides.
4
Ads Warmup for past customers
Upload a CSV of up to 20,000 customers, see a 0 to 10 match score for each, and send them as Lead, Purchase, Complete registration, Add to cart or Schedule to the platforms you pick. Rows are dated when sent. Sending needs a paid plan.
5
Counted once
A purchase with an order ID reaches each platform once, and a HighLevel won deal and its invoice count as one sale.
6
See every send
A delivery log row for every conversion: sent, held, skipped or failed, with the reason. For HighLevel the result is also written back onto the contact. Shopify orders come through the DataCops Shopify app.
Best for: lead gen, clinics, home services, B2B and agencies whose sales close in a CRM or on a call, and anyone whose ads keep learning from form fills.
If almost every lead comes from a Facebook lead form and you only advertise on Meta, your CRM's own Meta action may be enough.
Microsoft Ads is a pilot
DataCops sends to Microsoft Ads through its UET Conversions API, which Microsoft runs as a pilot. Ask your Microsoft account manager to switch it on for your UET tag. Events must be within 7 days.
Offline conversions are sales, or steps toward a sale, that happen away from your website and are reported back to the ad platform: a booked appointment, a phone sale, a deal won in your CRM, a paid invoice. Each one is matched to the ad click that started it, so the platform can optimize for people who buy, not just people who fill in a form.