How do you track offline sales from online ads?
Short answer
Three steps: capture the click ID when the visitor lands, keep it with the lead in your CRM, and send the closed sale back with the value and time. Some leads will arrive without a click ID.
You carry the ad click through to the moment the sale is recorded, then send that sale back to the ad platform with the click or the customer's details. Three things have to line up: capture, record, and return.
Say you sell kitchen remodels. Someone clicks an ad on their phone, fills in a form, and three weeks later signs a contract at their dining table. Your ad account saw a lead. Your bank saw 18,000. Unless something connects the two, the platform thinks that ad produced a form fill and nothing more, and it optimises toward more form fills, including the ones that never buy.
Capture is step one. When the visitor lands, the URL usually carries a click ID, such as gclid for Google or fbclid for Meta. You need to grab it and save it with the lead, ideally in a hidden form field or a stored cookie. If you skip this step, everything after it gets harder, because you are left matching on email or phone alone.
Be realistic about the limits. Safari caps cookies set by scripts at 7 days, and shorter after some tracker links, and iOS 17 can strip click IDs from links in some situations. So a share of your leads will arrive with no click ID. Do not chase perfection. Plan for a match rate you can live with.
Record is step two. The lead goes into a CRM, or a spreadsheet, or a phone system, and the click ID and contact details must travel with it. When the deal closes, the person handling it marks the outcome and the value. Simple beats clever here. A field that says Won plus an amount is enough to start.
Return is step three. When the stage changes, you send an event to the ad platform with the click ID if you have it, plus hashed email or phone, the value, and the time of the sale. The platform then ties it back to the original click.
Two timing rules matter. Meta rejects events sent more than 7 days after they happened, and events go through the Conversions API into a dataset now, since the old offline upload shut down in May 2025. Google Ads ignores uploads more than 90 days after the click. Check the current documentation before you build, because these rules move.
What about deals closed by phone or in person? The same idea applies. The salesperson still updates the CRM, and the CRM still triggers the event. The trick is discipline. If the rep forgets to mark it Won, the sale never returns. Many teams find that the tracking problem is really a habits problem, and a required field at the last stage fixes half of it.
Here is a made-up example, invented for illustration. A physiotherapy clinic runs Meta ads. Bookings come through a form, then the front desk marks each visit as booked, showed or no-show. Only the ones who showed get sent back. After two months, Meta had enough real signal to start finding people who actually turn up, and the clinic's no-show rate dropped from 22 percent to 14 percent. That is one invented clinic, not a promise, and results depend heavily on volume.
Volume is the honest limit. Ad platforms learn from repeated examples, so a business closing five deals a month gives them very little to work with. In that case, sending an earlier stage, like a booked call, can work better than waiting for the sale.
Privacy matters too. In the EU, storing a visitor ID needs consent, so make sure your consent banner covers this before you save anything.
So what do you use today to record a closed sale? Tell me and I can suggest the shortest path from there.
DataCops in short
For this question: DataCops does all three steps: it captures the click ID on landing, keeps it with the lead, and sends the closed sale back with value and time.
DataCops is a tool that makes the ads learn from real sales: it sends booked, showed, won and paid stages from your CRM back to your ad platforms, gives every visit a bot verdict with a Real people only switch per platform, warms up new campaigns with your existing customers, and logs every send. It is not an attribution report.
How DataCops does it
- The sale after the form. HighLevel natively (lead, booked, showed, won with value, paid; cancelled, no-show and lost are never sent), any other CRM through a private webhook, matched to the click by click ID or hashed email and phone.
- The click is kept on the server. Click IDs are stored for up to 90 days, so a deal that closes weeks later still finds its click.
- Real people only. Every visit gets a bot verdict against 360+ billion IPs and 350+ monitoring points, with a Real people only switch per ad platform, off by default. CRM events carry no bot flag.
- Counted once, logged every time. Pixel and server events share an event ID, and a delivery log shows each send as sent, held, skipped or failed, with the reason.
- One script, one DNS record. Collection runs on your own domain; with DNS on Cloudflare, the free Worker reads the click at the edge before the page loads.
Best for: ad-funded businesses whose sales close in a CRM or on a call: clinics, home services, agencies, B2B and lead gen.
Ads Warmup: tell the ads who pays
Ads Warmup, DataCops' flagship feature, sends customers you already have to Meta, Google Ads and TikTok before a new campaign spends: upload a CSV (only email is required, up to 20,000 rows), see a 0 to 10 match score per person, pick the event, and send. Rows are dated when you send, and Google Ads credits only people who clicked a Google ad. Preview is free; sending needs a paid plan. Check your own consent basis for the list first. See Ads Warmup.
Ways to do this job
| Option | Best for |
|---|---|
| DataCops | CRM stages to Meta and Google Ads, with a bot verdict and a delivery log |
| Zapier or Make | One simple CRM-to-ad flow you build and maintain |
| Direct API upload | Teams with an engineer |
| Manual CSV upload | Occasional batches |
When not to use DataCops
- You want a reporting dashboard. DataCops cleans and sends what goes into your ads. It is not a multi-touch reporting layer.
- Your sales never leave one store checkout. If everything happens in one checkout, the platform's own pixel plus server events may be enough.
Sources and further reading
More on this: Offline conversions guide, and the complete guide to offline conversion tracking.
If you do only one thing this week, make sure your form saves the click ID next to the lead, because you cannot add it back later.