Why your Meta and Google Ads numbers never agree, and which one to trust
It's a near-universal moment for a new client: Meta Ads Manager reports 40 conversions for the week, Google Ads reports 35, and the actual number of new orders in their store is 28. Nobody's lying and nothing is technically broken. Each platform is using its own attribution model, on its own tracking data, with its own conversion window, and none of them is measuring the same thing you'd get from counting actual orders.
Attribution windows are doing more than you think
Meta's default attribution window often counts a conversion if someone clicked (or in some settings, merely viewed) an ad and purchased anytime within a week or more afterward, even if they visited directly or searched for your brand name later without clicking the ad again. Google Ads uses its own windows and click-based attribution by default. Both are legitimately measuring "influence," not "the ad caused this specific sale," which is a meaningfully different question than most people assume they're asking.
Overlap between platforms inflates both numbers
A single customer can see a Meta ad, later click a Google search ad, and purchase. Both platforms can legitimately claim that conversion under their own model, so simply adding Meta's reported conversions to Google's reported conversions will always overcount your real total, sometimes significantly, especially for businesses running both channels toward the same audience simultaneously.
The number that doesn't lie: your own backend data
Your store or CRM's actual order count is the one number immune to platform attribution logic. We treat platform-reported conversions as a directional signal for optimizing within a channel, this creative outperforms that one, this audience converts better, but we treat backend revenue and order counts as the source of truth for whether the overall marketing spend is working, and we tell clients to do the same.
A simple reconciliation habit worth building
Once a month, compare total platform-reported conversions against actual backend orders for the same period. If the gap is consistently large and growing, it's usually a sign of either an attribution window that's too generous or genuine overlap between channels claiming the same customers, both fixable once you know to look for them, neither obvious from inside either platform's dashboard alone.
What this means for budget decisions
Don't reallocate budget between channels based purely on each platform's self-reported conversion count, since both platforms have a structural incentive (their own attribution model) to report favorably about themselves. Look at incrementality where you can, through geographic holdout tests or platform-level spend pauses, and treat self-reported numbers as one input among several, not the final word on channel performance.
Don't reallocate budget between channels based purely on each platform's self-reported conversion count, since both platforms have a structural incentive (their own attribution model) to report favorably about themselves.
Running a simple incrementality test
A geographic holdout test, pausing a specific channel entirely in a subset of markets while running normally elsewhere, and comparing revenue trends between the two groups, is one of the more reliable ways to estimate a channel's true incremental contribution without needing a data science team. It's a blunt instrument, and it's also far more honest than trusting a platform's self-reported number, especially for a channel you suspect is claiming credit for conversions that would have happened anyway.
We've run this test for clients skeptical of a channel's reported performance and found real answers in both directions: sometimes the channel's true incremental lift was close to what it claimed, and sometimes it was a fraction of the reported number, with most of the "conversions" belonging to customers who would have purchased through another channel regardless. Either outcome is more useful for budget planning than continuing to argue from dashboards that were never designed to answer the incrementality question honestly.
Server-side tracking's effect on this whole problem
As browser-based tracking has become less reliable due to privacy changes and ad blockers, server-side conversion tracking (sending conversion events directly from your backend rather than relying on a browser pixel) has become a meaningful accuracy improvement for both Meta and Google. It doesn't resolve the fundamental attribution-model disagreement between platforms, but it does reduce the separate, growing problem of under-reported conversions due to tracking loss, which was compounding the attribution confusion on top of the modeling differences.
Cross-device behavior makes this worse, not better
A customer who sees a Meta ad on their phone during a commute, then completes the purchase later that evening on a laptop, breaks simple device-level tracking entirely unless both platforms and your own analytics are stitching identity together through a logged-in account or a shared identifier. Without that stitching, the phone-based ad impression and the laptop-based purchase look like two unrelated events, and the platform that actually influenced the sale may get no credit for it at all.
This is a real, growing gap rather than an edge case, since a large share of purchase journeys now genuinely span multiple devices before converting. We tell clients not to expect perfect cross-device attribution from any current tool, and to weight backend revenue trends over multi-week periods more heavily than any single platform's device-level conversion report, since the trend line is far less distorted by cross-device gaps than any individual attributed conversion.
A client example that shows the gap concretely
One client selling home goods direct-to-consumer came to us convinced their Meta campaigns had stopped working, based purely on a sharp drop in Meta's reported conversions over a two-week period. Backend order data for the same period showed revenue had actually held steady, with Google Ads reporting a corresponding increase in its own attributed conversions over the exact same window.
Nothing about actual customer behavior had changed. An iOS tracking update had reduced Meta's ability to observe conversions happening on iPhones, so more of the same real purchases were being attributed to Google's click-based tracking instead, which was less affected by the specific change. Pausing Meta spend based on its own dashboard alone would have cut a channel that was still working, just working invisibly to the platform reporting on it.
We caught this specifically because we'd already built the habit of checking backend revenue against combined platform-reported numbers monthly, rather than reacting to a single week's dashboard swing in isolation. Clients who monitor only the platform dashboards, without that backend cross-check, are the ones most likely to make an expensive, unnecessary budget cut based on a reporting artifact rather than an actual change in performance.