Troubleshooting Posted by the DataCops team

Why does my Facebook offline conversions CSV lose rows? (the 7-day limit, with the maths)

If you upload a CSV to Meta and fewer conversions show up than rows in the file, there's a good chance it's not a bug. It's a rule.

Meta rejects events that arrive more than 7 days after they happened.

Not 7 days after the ad click. 7 days after the event itself. So the date that counts is the sale date in your file, not the day you uploaded it. That one distinction explains a huge share of "my upload is broken" threads.

Let me show you the maths, because it's uglier than people expect. Assume 30 sales a month, spread evenly. Upload once a month: on upload day, a week of them is inside the window and three weeks are outside. Roughly 23 of the 30 are dead before you press the button. You keep about a quarter of your sales. Upload weekly: you keep the rows that are under 7 days old at upload, which is all of them if you upload on time and none of the older ones if you're late. Upload daily: you keep nearly everything. (Assumes even spread and on-time uploads. The point is the shape, not the exact numbers.)

The cruel twist: the cheaper the process, the worse it gets. The monthly CSV is the lowest effort and the highest loss. And because there's no loud error, you just see a lower number than expected and put it down to Meta's mysterious ways.

Three things to check.

The event time column. Make sure it holds when the sale happened, not the export date. Some CRMs quietly stamp the export time on everything, which would make every row look brand new and hide the problem, until Meta's own timestamps disagree.

The match keys. A row with no hashed email, no hashed phone and no click ID has nothing to match on, even inside the window. So you can lose rows for two independent reasons at once and never know which.

The process. If yours is still called "upload to the offline event set", it needs a new name and a new shape. That upload was shut down in May 2025. Sales now go through the Conversions API, and the safest rhythm is to send each stage as it happens.

To estimate your own loss, take one month of sales dates and, for each sale, count the days between the sale and your upload. Every sale where that number is over 7 is a dead row. The share of dead rows is your loss rate. It takes five minutes in a spreadsheet.

Most teams that try this find the number is bigger than they guessed, and it's rarely random. It skews toward the oldest and largest deals, because big deals take longer to close and reach the CRM later. So the loss is worst for exactly the sales you'd most like Meta to learn from.

A healthy process has three properties. Latency in hours, not weeks. One event per stage. And something that tells you when a send fails. If yours has all three, you're ahead of most accounts.

How many rows do you lose per upload? If you've never counted, count once. It's usually an uncomfortable number.

For reference, DataCops sends each stage when the CRM reports it, with the click ID or a hashed email and phone, so nothing waits in a folder for a monthly export. There's a separate upload for past customers, up to 20,000 rows on a paid plan.

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

1 comment

Comments (1)

DataCops team author · 30 Sep 2026

Rule of thumb: if your sales cycle is longer than a week, a weekly or monthly batch is structurally the wrong shape for Meta. Not because you're doing it badly. Because the window is shorter than the batch.

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