Why your ad platforms disagree about last week

Google, Microsoft, Reddit and Meta each close the day and count a conversion on their own terms. Here is exactly where the numbers split, and what to do about it.

The Growomat team

Published August 9, 20264 min read
Share
Four platform rows on one timeline, each closing its reporting week at a different point.

You pull last week's spend from four dashboards. You add them up. The total does not match your bank statement, the conversion counts do not match your own database, and no two platforms agree on which campaign deserves the credit.

Nothing is broken. The four numbers are answers to four subtly different questions, and the differences are documented, stable, and almost never mentioned in the same place. Here they are in one place.

The day does not end at the same moment

A reporting day is a bucket, and each platform decides where the bucket's edges go.

The edge is the account's own time zone, set when the account was opened and, on most platforms, effectively permanent afterwards. An account created by a contractor in another country buckets its days against that country's midnight, not yours. Pull "yesterday" from four accounts opened at four different times and you are comparing four different eighteen-to-thirty-hour windows.

This is why a Monday spike shows up on Sunday in one report. It is also why end-of-month reconciliation is reliably harder than end-of-week: the last day of the month is the one where the offset moves spend across the boundary that matters to finance.

What to do: record the time zone of every ad account somewhere you will read it again, and compare whole weeks rather than single days. A week absorbs a few-hour offset. A day does not.

The conversion is not counted at the same moment

Every platform credits a conversion to the day of the click, not the day of the purchase. So a sale today can appear in a report about last Tuesday, and last Tuesday's numbers keep changing for as long as the platform's conversion window stays open.

The windows are not the same length.

Default click-through conversion window, per platform: Google Ads and Microsoft Advertising 30 days, Reddit Ads 28 days, Meta Ads 7 days.

Two consequences follow, and both look like problems with the product rather than with the calendar:

  1. Recent days always look worse. A report pulled on Monday about the weekend is reading a window that is still filling. Judging a campaign on three-day-old numbers systematically under-credits it โ€” and the platform with the longest window looks worst, because it has the most left to collect.
  2. The same week, exported twice, gives two answers. This is not a bug and there is nothing to file. It is what an open attribution window means.

What to do: pick a lag and hold it. Look at performance no sooner than the longest window in play, and never compare a fresh export against an old one for the same period.

The click is not credited to the same thing

Once a conversion is counted, it still has to be assigned to something. Given a customer who saw a promoted post, searched your brand a week later and bought from the search ad, the platforms answer differently โ€” and each of them is answering only about its own inventory. None of them can see the other three.

That is the part worth sitting with. Every platform's report is a claim about the whole customer journey made from a view of one quarter of it. Add the four claims together and you get a number larger than your actual sales, reliably, without anybody having done anything wrong.

What to do: treat platform-reported conversions as the signal each platform optimizes against โ€” which is what they genuinely are โ€” and treat your own order table as the count. The two will never match, and once you stop expecting them to, the platform numbers become useful again: they are how you compare Tuesday to Wednesday inside one platform, not how you compare one platform to another.

Currency and rounding drift

Two smaller effects that account for the last few percent:

  • Billing currency versus reporting currency. An account billed in one currency and reported in another applies the platform's own daily rate, which is not your bank's rate on the day the money moved.
  • Micro-amounts. Costs are stored at a much finer resolution than they are displayed, and rounding happens at whatever level you grouped by. Sum a campaign's rounded ad groups and you will not get the campaign's rounded total.

Neither is worth chasing. Both are worth knowing about the first time a reconciliation is off by less than one percent and someone loses an afternoon to it.

The shape of a report you can trust

None of this needs solving. It needs stating, once, in the definitions your reporting uses:

Decision A defensible default
Period Whole weeks, in one time zone you chose deliberately
Freshness No conclusions about a period newer than your longest conversion window
Conversion count Your own order table for totals; platform numbers for within-platform comparison
Currency One reporting currency, converted at one rate you control

Write those four lines down and most of the disagreement stops being a mystery and starts being a footnote.

The work that remains is mechanical: pulling four exports on the same schedule, normalising them to the same period and currency, and putting them side by side. That is exactly the part worth not doing by hand every Monday morning.

Know someone who needs this?

Send it over.

The Growomat team

Run all four platforms from one place.

Build, optimize and report on Google, Microsoft, Reddit and Meta campaigns without an agency retainer.

See what it costs