Catching what the ad account and the report disagree on
An advertiser running 8+ ad accounts across three platforms had a purchased connector feeding the warehouse. We built the daily reconciler that catches when the two disagree — including when a system fails silently and shows green anyway.
The problem
The business makes decisions from the report, not the ad account. When the two disagree, it doesn't announce itself — it quietly shifts CAC and ROAS, and a team can spend months optimizing against numbers that were wrong from the start.
What we built
A daily automatic reconciler — "source of truth vs. report" — for every brand × platform pair, built to catch silent failures, not just deviations: closed the "both sides are zero" blind spot (zero against zero used to read as healthy), added a 7-day-window maximum comparison, a heartbeat, and a hard failure when a webhook goes quiet.
What it has already caught
- A purchased data connector double-wrote part of the data: 175 of 222 entities recorded at exactly 2× — $15,379 instead of $8,487 for the day. Proven by matching at the campaign × ad level against our own puller.
- The same connector silently skipped a daily run: 5 of 9 exports never arrived, the day's cost ($14.7k) came back as zero in the report, and the UI still showed a green check — which means "enabled," not "ran."
- A revenue anomaly in GA4: $1,294 became $11.07 billion. Cause: currency converted twice
on the frontend (
amount × rate²) — proven by taking the square root of the median ratio per country and matching it to each country's real exchange rate to a fraction of a percent (Japan: 157.2 vs. 157.4 actual). - A 302 redirect on one domain was stripping
gclidand UTM parameters on entry — all paid traffic through it was landing as organic, and those campaigns were being judged as losses.
The result
Discrepancies between the ad account and the report now surface the day they appear, not at month end. Every defect above was either money spent blind or a decision made on a wrong number. The side effect: the team now has a repeatable way to prove which number is right — reconciled entity by entity, not just at the total — and "the ad account shows something different" arguments get resolved in 20 minutes instead of a meeting.
Trusting a report you've never reconciled against the source?
We build the daily check that catches doubled spend, silent failures, and currency bugs before they cost you another decision.