Guide Posted by the DataCops team

Facebook offline conversions in 2026: how to send CRM sales to Meta now that the upload is gone

Short answer

The offline event set no longer exists. Sales go through the regular Conversions API into a dataset, sent when each stage happens, with a hashed email or phone, a click ID and a shared event_id.

So here's a fun way to lose money.

Follow a guide that's two years old. Export your won deals from the CRM. Upload the CSV to an "offline event set" in Meta. Watch it succeed. Feel great.

Except the offline event set doesn't exist anymore. Meta shut down the separate Offline Conversions API in May 2025.

So where do your sales go now? Same place as everything else: the regular Conversions API, into a dataset. An offline sale is basically just a server event that shows up late.

That sounds simpler. And it is. Right until you hit the part nobody mentions.

Late has a limit. Meta rejects events that arrive more than 7 days after they happened.

Let me show you what that does to the classic monthly CSV, with a made-up example. You export 200 won deals on the first of the month. Sales were spread evenly over the last 30 days, so roughly 70 of them are older than a week. Those 70 are dead on arrival. Meta drops them, no error, no warning. You see 130 matches out of 200 rows and assume Meta is being Meta.

It's like the post office quietly binning every letter that took too long, and never telling you. And notice the cruel part: the oldest sales are usually the ones you worked hardest for.

Now, even the rows that survive have to be matched. Meta has no idea who "lead 4471" is. It needs a hashed email or phone, and the click ID (fbclid) if you kept it. That 0 to 10 score in Events Manager, Event Match Quality? It's basically a data hygiene report on your CRM, wearing a Meta costume. Half-empty contacts, fake emails, phone numbers with no country code: they all show up there.

A small thing that ruins a lot of feeds: hashing before cleaning. Email should be lowercase and trimmed. Phone should be digits with the country code. Hash " John@Gmail.com " and you get a perfectly valid hash of a perfectly useless string. It matches nobody, and nothing tells you.

Then two traps that only appear after the first two are fixed.

Double counting. Your pixel reports the purchase. Then the CRM reports the same sale. Meta only treats them as one event if the name and the event_id match. If they don't, one sale becomes two, and your ROAS looks amazing for a week. Until someone opens the bank account.

And stage labels. If you send every stage as "Purchase", you've told Meta a booked call is a sale. It will very faithfully find you more booked calls. Ones that never show up. Send booked, showed, won and paid as different events, then pick which one you optimise on.

Here's the bigger idea underneath all five problems: none of them are Meta being difficult. They're what happens when a process built for a weekly file meets a system built for a live feed. The fix isn't a smarter spreadsheet. It's a different shape: send each stage the moment it happens, with a match key, an event ID, and a name that says what it is.

Whatever you use, do the ten-minute test. Take your last 20 won deals. Count how many show up as events in Events Manager. If that number surprises you, that's your project for this month, more than any new creative.

So how are you doing it? Zapier, the CRM's own action, custom code, or the sales just never go back? No judgment. I suspect that last one is the most common answer.

DataCops in short

For this question: DataCops sends each CRM stage to Meta through the Conversions API when it happens, matched by click ID or hashed email and phone, so the 7-day window is never the thing that loses your sales.

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

OptionBest for
DataCopsCRM stages to Meta and Google Ads, with a bot verdict and a delivery log
Zapier or MakeOne simple CRM-to-ad flow you build and maintain
Direct API uploadTeams with an engineer
Manual CSV uploadOccasional 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.

More on this: Meta offline conversions, and the complete guide to offline conversion tracking.

2 comments

Comments (2)

DataCops team author · 30 Sep 2026

Quick answers to what people usually ask.

1
DataCops team author · 30 Sep 2026

The old upload is gone, so a CSV process has to become Conversions API events, and it has to run inside the 7 days. Each event should carry a hashed email and/or phone, plus the fbclid if you have it. If your match score is low, look at the CRM data before you blame the sending.

1
Replies from DataCops account holders are coming soon. Until then, questions about your own setup can go to the team.

More threads

See what your own setup is missing

Send CRM sales back to the ad click that started them, logged per send.

Setup in 5 minutes. No credit card.

Live traffic quality

Updated just now

Visits · last 24h

487
Real users
35873.5%
Bots · auto-filtered
12926.5%

Without filtering, 26.5% of your reported traffic is bot noise inflating dashboards and draining ad spend.

Don't trust your analytics!

Make confident, data-driven decisions withactionable ad spend insights.

Setup in 2 minutes
No credit card