In a delivered paid media reconciliation, Meta reported a 4.2x ROAS and Google Ads reported 3.8x on the same stretch of spend. Blended revenue against total ad spend, pulled from the store's own numbers, came out to 1.9x. Both platforms were telling the truth about their own slice of the funnel, and the two truths still added up to a number more than double what the business actually made.
That gap is tolerable in a quiet October week, where the dollar difference is background noise either way. Black Friday and Cyber Monday are exactly when it stops being tolerable: a single weekend can carry a quarter of a store's annual revenue, so the same inflation pattern, applied to BFCM-scale spend, turns into a six-figure miscalculation shaping next year's ad budget before anyone has checked whether platform-reported ROAS and the money that actually hit the bank account were ever the same number.
A post-BFCM audit is the step that checks that, and it is a different document from a pre-event tracking checklist. Our BFCM tracking checklist covers what to configure and freeze before the sale starts, including the specific fix for duplicate purchase events. This audit is the next step: confirming what that tracking actually recorded once real volume hit it, and reconciling every platform's number against the one source that does not move, the store's own order export.
Why BFCM breaks the usual tolerances
Two mechanisms that are background noise in October become visible distortions in the days after Cyber Monday.
Processing lag. GA4's standard reporting takes 24 to 48 hours to fully settle, and that window applies to every property regardless of traffic volume. Pulling a final BFCM revenue number the morning after Cyber Monday means reading data that is still partially provisional, not a finished total.
Modeled conversions still settling. Digital advertising consultant Jon Loomer's documented testing found that Meta can take up to 72 hours to receive aggregated conversion data from iOS users who opted out of tracking, which is why he recommends ending any reporting window at least four days back before trusting it. Meta's own help center also confirms event counts can differ across Ads Manager, Ads Reporting, and Events Manager before everything finishes settling. Checking a campaign's BFCM performance the next morning and locking in a verdict means checking a number that has not finished moving yet.
The post-BFCM audit checklist
Run this in the days immediately after Cyber Monday, before any revenue figure goes into a board update or a next-year budget plan.
- Anchor to one specific report type, not to any ad platform. Pull Shopify's (or your platform's) placed-order revenue for the BFCM window first. Shopify's own documentation on sales discrepancies notes that canceled, pending, and unpaid orders are included in gross sales calculations, and that test orders are excluded from Sales reports but still show up in the orders export, so the report type you pick changes the anchor number before a single ad platform even enters the comparison.
- Check GA4's transaction count against that anchor, for overcounting, not undercounting. During a normal month, client-side tracking loss usually makes GA4 undercount orders. During a traffic spike, a duplicate tag or a refreshed confirmation page usually makes it overcount instead, and GA4 reading higher than the order export is the tell. If the count is inflated, the specific fix, a shared event ID between the browser and server purchase events, is covered in the BFCM tracking checklist; this audit's job is confirming whether that fix actually held under real BFCM volume, since a configuration that passed one test order in October can still fail at ten times the traffic in November.
- Pull Meta and Google Ads revenue only after their settlement windows close. Wait the full 72 hours past Cyber Monday before treating either platform's reported revenue as final, and compare the settled number against the order export anchor, not against the other ad platform.
- Check whether promo-code and UTM fragmentation moved revenue between channels. BFCM is when every affiliate, influencer, and email partner sends its heaviest traffic of the year, and inconsistent tagging across all of them fragments channel-level revenue in ways a UTM parameter audit catches the rest of the year but that get far more expensive to miss during the one weekend that matters most.
- Hold the return-rate number for two to three weeks before closing the books on the sale. The National Retail Federation's 2025 Retail Returns Landscape report puts holiday-season returns at 17 percent of sales, against a 15.8 percent return rate across all of retail, and the bulk of those returns process after the sale ends, not during it. A reconciliation that only looks at gross order value on December 1 overstates the real result; tracking the return rate over the following weeks gives the net number that actually matters.
- Recalculate blended MER from the reconciled numbers, not from any single platform's self-reported ROAS. Total revenue divided by total ad spend, pulled from the order export and the actual spend ledger, is immune to the cross-platform double counting that inflated the reconciliation gap in the first place.
- Spot-check one high-volume product for inventory and feed sync issues. A best-seller that sold out mid-sale can keep showing as available in a stale Merchant Center feed or a cached product page, sending paid traffic to a page that silently cannot convert, which looks like a tracking problem in the data but is actually a feed problem upstream of it.
Whoever owns the reconciliation, a founder, an in-house analyst, or an agency, should run through this list once as a single sitting rather than spreading it across different people checking different platforms on different days, since the whole point is comparing every number against the same anchor at the same moment.
What the gap size tells you to do next
Once the reconciliation above is run, the size of the gap between platform-reported revenue and the order export anchor tells you how worried to be.
A gap under roughly 5 percent is normal measurement noise, attribution model differences and small tracking losses that exist on every ecommerce account and are not worth chasing further. Note it, move on, and recheck it outside of peak season.
A gap in the 10 to 20 percent range usually traces back to one specific cause, a dedup gap, an unsettled Meta window checked too early, or UTM fragmentation on one channel, and is worth a focused tracking audit to find and fix before the next big sale period.
A gap where a single platform's self-reported ROAS comes in at double the blended figure or more, the same shape as the 4.2x-and-3.8x-against-1.9x pattern above, means the problem is not isolated to one platform or one setting. It usually spans tracking, attribution, and reporting at once, which is the exact situation a bundled performance audit is built for, since it connects findings across all four areas instead of chasing them one at a time after the fact.
Either way, treat the number at the 72-hour mark as a first checkpoint, not a final verdict. Returns still have two to three weeks left to process, and a promo code that under-reports its own attribution usually only shows up once the full post-holiday order volume is in. Run the gap-size check again in mid-December against the fully settled numbers: if it is the same category of gap it was on day three, the cause is structural and worth fixing before the next sale period. If it closed on its own, the first reading was just measurement lag, and the audit request is the fast way to tell which one is true before next year's BFCM budget gets set off the wrong number.

