Build one true ROAS number when platforms disagree
Meta says your ROAS is 4.2x. Google says 3.6x. TikTok says 5.1x. Your finance team looks at total revenue divided by total ad spend and gets 1.8x. Nobody is lying. Nobody made a mistake. Every platform is measuring a different thing and calling it the same name.
This is the most common fire drill in ecommerce marketing: a Monday meeting where three dashboards contradict each other and everyone defends their own number because their job depends on it. The fix isn't picking the dashboard you trust most. It's building a number that doesn't come from any ad platform at all.
Why every platform reports a different number
Each platform grades its own homework, and it grades generously. Three mechanics cause almost all the disagreement:
- Attribution windows. Meta defaults to 7-day click, 1-day view. Google often uses last-click within a 30-day window. TikTok has its own version. Same customer, three different windows, three different "conversions."
- Click vs. view-through credit. If a user scrolled past an ad and bought three days later through organic search, some platforms still claim that sale as a view-through conversion. That's not causation, that's just being in the room.
- Overlapping claims. A single purchase can get counted by Meta, Google, and TikTok simultaneously if the customer touched all three before buying. Add up platform-reported revenue and you'll often exceed total store revenue. That's the tell that something's broken.
None of this is fraud. It's platforms optimizing for their own algorithms, which need conversion signals to bid well. The problem is when marketers treat platform-reported ROAS as a financial statement instead of an optimization signal.
Decide what "true" actually means
Before you build anything, define the number you're trying to produce. There are two different questions people confuse constantly:
- Blended ROAS: total revenue divided by total ad spend, across all channels, over a fixed period. This is a business health metric. It's simple, it's honest, and finance already trusts it.
- Incremental ROAS: revenue that wouldn't have happened without the ad spend. This is the harder, more valuable number, and it's the one that tells you whether to scale a channel or cut it.
Most teams need both, used differently. Blended ROAS is your source of truth for "are we profitable." Incremental ROAS is your source of truth for "where should the next dollar go." Platform-reported ROAS should never be the answer to either question — it's an input, not a conclusion.
Build ground truth from order data, not ad data
The fix starts by refusing to let ad platforms mark their own exams. Pull actual order data from your store — Shopify, your OMS, wherever revenue really lands — into a warehouse. That's your denominator's numerator: real revenue, real refunds, real discounts, real contribution margin if you want to go further than top-line revenue.
Then bring in spend data from every platform's API, normalized to the same currency, same date grain, same taxonomy. This sounds obvious but it's where most spreadsheets die — Meta reports in campaign-day, Google in a different timezone default, TikTok with its own quirks. A pipeline that lands raw spend and raw order data into consistent daily grain, in one place, is non-negotiable. This is infrastructure work, not a reporting task, which is why it usually needs an actual data pipeline rather than five people exporting CSVs on a Friday.
Once spend and revenue live in the same warehouse on the same time grain, blended ROAS becomes a query, not a debate: total revenue for the period divided by total spend for the period. No platform's attribution logic touches it. It will almost always be lower than any single platform's self-reported number, and that's the point — it's not missing credit, it's removing double-counted credit.
Layer in incrementality to break ties
Blended ROAS tells you the business is healthy. It doesn't tell you whether Meta or TikTok deserves more budget. For that you need to test what happens when spend actually changes, not what a pixel claims happened.
- Geo holdouts. Turn off a channel in a subset of regions for two to four weeks and compare revenue delta against comparable regions where it stayed on. This is the closest thing to a controlled experiment most DTC brands can run without a data science team.
- Spend step-tests. Deliberately move a channel's budget up or down by 30-50% for a period and watch what blended revenue does. If TikTok spend doubles and blended revenue barely moves, that "5.1x ROAS" was mostly cannibalizing organic and other paid channels, not creating new demand.
- Marketing mix modeling. Once you have enough historical spend and revenue data sitting in one warehouse, a simple MMM can estimate each channel's incremental contribution over time without needing a live test running constantly. This only works if the underlying data is clean and unified — another reason the warehouse step comes first.
You don't need a PhD-level model on day one. Even a rough quarterly holdout test will tell you more truth than another month of trusting platform dashboards.
Put one number in front of the business
The last step is organizational, not technical: pick one dashboard, built from the warehouse, and make it the only ROAS anyone quotes in a leadership meeting. Platform dashboards stay open for the media buyers who need them to optimize bids day-to-day — that's what they're actually good for. But the number that determines budget, headcount, and board conversations comes from one place: real orders divided by real spend, adjusted by whatever incrementality data you've gathered.
This kills the Monday fire drill permanently. When someone brings a screenshot from Ads Manager claiming 4x, the answer becomes simple: "that's platform-attributed, here's blended, here's what the last holdout test showed." The conversation moves from whose dashboard is right to what the data actually supports.
The disagreement between platforms was never really about attribution windows. It was about letting four different vendors each grade their own performance and then acting surprised when they all gave themselves good marks. Build the warehouse, own the order data, run the tests, and the disagreement disappears — not because you found the "correct" platform, but because you stopped asking platforms the question in the first place.