Meta says 4.2×, Google says 3.1×. Both are right.
Two platforms, two ROAS figures, one budget decision. The numbers aren't measuring the same thing — and moving money between them as if they were is the most common expensive mistake in multi-channel accounts.
You're running both. Meta reports 4.2×, Google reports 3.1×, and the conclusion writes itself: move budget to Meta. It's the most natural decision in the account, and you have almost no evidence for it.
Three ways the numbers disagree
Meta and Google aren't reporting the same metric under the same name. They're reporting three different disagreements at once.
- Different windows. Meta defaults to 7-day click, 1-day view. Google Ads runs its own conversion windows, commonly 30-day click. A longer window catches more conversions — mechanically, not because the channel worked harder.
- Different models. Google's data-driven attribution spreads credit across the path. Meta credits the platform's own touchpoints on a last-touch basis. One is sharing credit; the other is claiming it.
- Different definitions. A "purchase" fired by Meta's pixel and a "conversion" counted by a Google tag can be counting different events, deduplicated differently, at different points in the funnel.
Both platforms are honest. Neither is comparable. The dishonesty is in the subtraction you do between them.
The double-counting problem
Here's the tell that something's broken. Add up platform-reported revenue across your channels and compare it to what your Shopify or GA4 says you actually made. In most multi-channel accounts, the platforms claim more revenue than the business earned.
That's not fraud, it's arithmetic. A customer who saw a Meta ad on Monday and clicked a Google search ad on Wednesday is one purchase — and both platforms will report it, because from where each one sits, it's true. Sum them and you've counted the same money twice.
Building a comparability boundary
You can't make the platforms agree; they're structurally incapable of it, and each has an interest in claiming the conversion. What you can do is decide, deliberately, what you're willing to compare. That's a comparability boundary, and it's built the same way every time:
- Anchor on ground truth. Your store or your GA4 knows what you actually sold. That's the denominator every platform claim gets checked against — not the other way round.
- Normalize the windows. Pull both platforms on the same lookback before you compare. It won't be perfect, but it removes the most mechanical distortion.
- Compare direction, not level. Meta at 4.2× and Google at 3.1× tells you little. Meta trending up 15% while Google is flat, at matched windows against real revenue, tells you where the next euro goes.
- Watch the blended number. Total spend against ground-truth revenue is the only figure that can't be double-counted. If your channels look great and blended is flat, the channels are eating each other.
Why the platforms will never fix this
It's worth being clear about the structural reason. Google's agent optimizes Google. Meta's optimizes Meta. Neither will ever tell you to move budget to the other — not out of malice, but because they are disqualified from the question by construction. Each one is measuring its own contribution with its own ruler and reporting it in good faith.
The cross-platform allocation call — the one that decides where your marginal euro actually goes — is the one nobody with a seat at the table is positioned to make. That's the seat Adgent takes: it reads both platforms through their own APIs, reconciles the claims against your ground-truth revenue, and holds the comparability boundary so the comparison you make is one that survives scrutiny.
Two platforms reporting different numbers isn't a bug to be resolved. It's the permanent condition of running more than one channel — and the work is building a view that's honest about it.