Meta says 4.2×, Google says 3.1×. Both are right.
Two platforms, two ROAS figures, one budget decision. The numbers are not measuring the same thing, and moving money between them as if they were is the most common expensive mistake in multi-channel accounts.
Adgent · Notes from building the analyst
You are running both. Meta reports 4.2×, Google reports 3.1×, and the conclusion writes itself: move budget to Meta. It is the most natural decision in the account, and you have almost no evidence for it.
Three ways the numbers disagree
Meta and Google are not reporting the same metric under the same name. They are reporting three different disagreements at once.
- Different windows. Meta defaults to 7-day click, 1-day view. Google Ads runs its own 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 its 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.
The double-counting problem
Here is the tell that something is broken. Add up platform-reported revenue across your channels and compare it to what your store or GA4 says you actually made. In most multi-channel accounts, the platforms claim more revenue than the business earned.
That is not fraud, it is 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 is true. Sum them and you have counted the same money twice.
Building a comparability boundary
You cannot make the platforms agree. They are structurally incapable of it, and each has an interest in claiming the conversion. What you can do is decide, deliberately, what you are willing to compare. That is a comparability boundary, and it is built the same way every time:
- Anchor on ground truth. Your store or your GA4 knows what you actually sold. That is the denominator every platform claim gets checked against, not the other way round.
- Match the windows. Pull both platforms on the same lookback before you compare. It will not 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 and against what your analytics recorded, tells you where the next dollar goes.
- Watch the blended number. Total spend against the revenue your analytics recorded is the only figure that cannot 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 is worth being clear about the structural reason. Each platform measures its own contribution with its own ruler and reports it in good faith, and neither has any incentive to calibrate its ruler against a rival's. Google can now bring other platforms' ad cost into GA4 and will even model the cross-channel split for you. But it grades that model with its own attribution, and its own documentation draws the line:
“These tools are for planning purposes only and won’t affect budgets or spend in your connected accounts.”
So the cross-platform allocation call, the one that decides where your marginal dollar actually goes, is one the platforms will model but not make. They plan; they do not execute. That call stays with you, and it is only as good as the comparison underneath it.
Two platforms reporting different numbers is not a bug to be resolved. It is the permanent condition of running more than one channel, and the work is building a view that is honest about it.
Windows are not a detail: they are most of the gap
If you only fix one thing, fix the window. It is the single largest mechanical source of the disagreement, and it has nothing to do with which channel is actually working. Meta's default 7-day click, 1-day view means a purchase only counts if it lands within a week of a click, or a day of a view. Google Ads commonly runs a 30-day click window on the same account. Give any channel four times as long to catch a conversion and it will catch more of them: the same buyers, credited later, on a longer clock.
This is why matching the lookback before you compare does more work than any other single move. Pull both platforms on a matched window (7-day click on each, say) and a chunk of the 4.2× vs 3.1× gap simply evaporates, because you have stopped comparing a sprint to a marathon. It will not make the numbers identical; the models and definitions still differ. But it removes the distortion you can actually remove, and what is left is a more honest starting point. We go deeper on this in why the 7-day window is lying before noon: the same clock problem, one channel at a time.
The view-through trap: not all credit is earned
There is a subtler distortion hiding inside the window difference, and it flatters whichever platform leans on view-through credit. A view-through conversion counts a purchase because someone saw an ad: no click, no deliberate action. On Meta, that is the 1-day view leg of the default window; on placements like Audience Network it can quietly inflate reported ROAS with impressions that scrolled past unnoticed. When you compare a channel earning mostly click credit against one padded with view credit, you are not comparing performance. You are comparing how generously each platform counts a glance as an outcome.
The practical guard is to inspect both the amount of credit and how it was earned. A channel showing high ROAS on mostly view-through conversions is making a weaker claim than a channel showing the same number on clicks, even at a matched window. A raw platform export hides that distinction; an AI media buyer worth the name reads the account like a strategist instead of repeating the dashboard's headline figure.
What this means for how you allocate
Put it together and the allocation rule changes shape. You stop asking “which platform has the higher ROAS?”, an unanswerable question across incompatible units, and start asking “at a matched window, checked against what my analytics recorded, which channel is trending up and which is flat?” Level is noise between platforms; direction survives the comparability boundary because it is measured inside each channel's own consistent ruler over time.
Then you let the blended number keep everyone honest. Total spend against the revenue your analytics recorded is the one figure that cannot be double-counted, because there is only one denominator: what the business actually earned. When your channels each look strong but blended ROAS is flat, that is the signature of channels claiming the same conversions and eating each other. The comparability boundary is not a report you build once; it is a discipline you hold every time a platform hands you a confident number and invites you to move budget on it.
Adgent is a team of AI agents working toward your marketing goals. It reads Meta and Google Ads through their own APIs every day, with GA4, Search Console and Merchant Center read-only alongside, so the two rulers and your own analytics sit in one place when you ask the question. Before it ranks anything by ROAS or CPA, it checks that the conversion signal underneath is real: if more than about 90% of reported ROAS comes from add-to-cart or begin-checkout events with zero purchases, every ROAS- or CPA-ranked action in that run is held back. The allocation between the two platforms stays your call. See what it reads next to the platforms.
Frequently asked
Can I compare Meta and Google ROAS directly?
Why are Meta and Google ROAS different?
How do attribution windows differ between platforms?
What is the double-counting problem?
How do I build a comparability boundary?
Which platform reports higher ROAS?
Bring the same question to your own account. Adgent returns its position, the evidence underneath and what the finding is worth a month.
Pricing