Her Ad Platform Reported 17.74x ROAS. The Real Number Was 2.53x.

How one question about a £1M brand’s ad budget exposed a data problem that every ecommerce brand running multiple channels has — whether they know it or not.


The question was simple enough.

The founder of a UK-based luxury equestrian brand — over £1M in annual revenue, selling through Shopify, running ads on Meta and Google, email marketing through Omnisend — was sitting down to plan her 2026 advertising budget.

She needed to answer one question: where to put her money.

She couldn’t.

Her email marketing agency reported that 50% of revenue came from newsletters. Meta had its own numbers. Google claimed even more. When she added the platform-reported revenue, the total was significantly higher than Shopify actually reported in sales.

Every platform was taking credit for the same customers.

“I know it isn’t true,” she told me, “because when a newsletter gets published, I know what orders come from that.”

But the over-claiming was only the surface problem. Underneath it was a data infrastructure so fragmented that even if the platforms had reported honestly, nobody could have read the numbers correctly. The data itself was mislabeled — and buried inside that mess was a meaningful revenue stream that no one in the business even knew existed.

Why do the platforms all “win”

Here’s the thing about multi-channel attribution that most brands discover too late.

A customer sees a Facebook ad on Monday. Opens a newsletter on Wednesday. Searches the brand name on Google on Friday and buys.

All three platforms report that as their conversion. They don’t share credit. Each one claims the full sale.

So a brand running three channels doesn’t get three times the data clarity. It gets three times the noise. And the more you spend, the wider the gap grows between what your dashboards show and what your bank account confirms.

The founder suspected this. She just couldn’t prove it — because the underlying data had its own problems.

The mess underneath

Before building anything, I needed to understand what was actually broken.

The first thing I looked at was the UTM structure — the tracking parameters attached to every URL that tell analytics tools where traffic came from. What I found explained a lot.

The ad agency had been inconsistent with UTM parameters for months. Campaign names were going into the wrong fields. Some campaigns appeared as numeric IDs instead of readable names. Conventions changed from one platform to the next.

432 source/medium combinations

The same traffic source appears under dozens of different labels, for what should have been fewer than 30 channels.

Looking at this data was like trying to read a ledger where every entry was written in a different shorthand by a different person.

Nobody could see the real picture. Not because the information wasn’t being collected, but because it was being collected incorrectly.

Building outside the system

The solution had to be independent of every ad platform. If the goal is one version of reality, you can’t build it inside a system that has an incentive to inflate its own numbers.

Server-side tracking replaced the browser-based approach. Instead of relying on tracking scripts that get blocked by ad blockers, iOS privacy settings, and cookie restrictions, events now flow through a server the brand controls before being sent anywhere else. Every page view, add-to-cart, and purchase gets captured regardless of what the customer’s browser decides to block.

BigQuery became the central data warehouse. All event data — with full URL parameters, session IDs, and transaction values — lands in one place and in one format. No platform colors the numbers before you see them.

Then the cleanup. Those 432 source/medium combinations? After normalizing the UTM data, filtering out payment provider redirects that were polluting the reports, and converting all currencies to GBP, they mapped down to 28 clean channels.

For the first time, the founder could actually see what was going on.

But before any of it mattered, the system had to prove it was accurate.

99.6% revenue match

BigQuery tracked £63,345. Shopify showed £63,584. That’s the benchmark — none of the ad platforms came close.

What the real numbers showed

With clean data and verified accuracy, the actual performance picture came through. It looked nothing like what the dashboards had been reporting.

Meta ROAS: reported 17.74x → actual 2.53x

Meta reported £62,514 in attributed revenue on £3,524 in ad spend. Independent tracking showed £8,911. Over-reporting by 7x.

On the cost side, Meta claimed it was acquiring customers for £3.79 each. The real cost per acquisition was £25.72. Still profitable. But imagine building next year’s budget around £3.79 when the actual figure is nearly seven times that.

At the campaign level, the gap was even more revealing. Meta’s largest campaign achieved 28x ROAS, according to its own reporting. Independent tracking showed 1.76x. Meanwhile, a smaller campaign that Meta’s dashboard ranked lower actually had the best real ROAS at 2.44x — the highest-performing campaign was the one the platform’s own numbers suggested should be deprioritized.

Google was generating 3x more revenue per visitor than Facebook. Each Google visitor was worth £2.54 in revenue, compared to £0.85 from Facebook. But before drawing the obvious conclusion, the data told a more interesting story.

Customers were discovering the brand through Facebook ads, then searching for it on Google and converting there. Google’s numbers looked disproportionately strong, not because Google was inherently better, but because Facebook was feeding it demand upstream. Cutting Facebook to “focus on what’s working” would have been like removing the roots and wondering why the tree stopped growing.

Email wasn’t driving 50% of revenue. The newsletters were mid-funnel — nurturing customers who had already discovered the brand through paid channels, then pushing them toward purchase via abandoned-cart flows and promotions. Important, but playing a different role than the agency was claiming.

And that invisible revenue stream? £4,635 in organic search revenue — completely buried under miscategorized UTM data before the cleanup. Not the largest number on the sheet, but meaningful: a channel driving real sales that nobody was managing, optimizing, or even aware of.

From three versions of the truth to one

The founder now has a dashboard built on data she can verify — not three platforms each telling her what she wants to hear in exchange for more spend.

She can see the actual cost per acquisition by campaign. She can see which channels bring in customers versus which ones drive them away. She can have an informed conversation with her agencies backed by numbers that don’t adjust themselves based on who’s presenting them.

The first strategic decision came quickly. Google was converting at a much higher rate than expected on minimal spend, largely because Facebook was driving awareness traffic to it. The move wasn’t to cut Facebook — that would starve the pipeline. It was to test increasing Google spend to capture more of the demand that Facebook was already creating.

A decision that would have been invisible — or worse, inverted — using platform-reported data alone.

Three questions worth asking about your own data

01

Add up what each platform claims.

Take the revenue Meta reports, plus Google, plus your email platform. If the total exceeds your actual sales, the numbers are inflated. The only question is by how much.


02

Count your source/medium combinations.

Pull up the report in GA. If you’re seeing more than 30–40 entries, your UTM hygiene is probably masking what’s actually happening. The same channel showing up under twelve different labels isn’t a data richness problem — it’s a visibility problem.


03

Look at your highest-ROAS campaigns.

Are they genuinely performing? Or are they claiming credit for customers who would have found you anyway through another channel? The campaign that looks best on the dashboard isn’t always the one doing the most work.


The platforms will always over-claim. That’s not a flaw in the system — it’s the system working exactly as designed. The more revenue a platform can attribute to itself, the more you’ll spend with it.

The question is whether you’re making next year’s budget decisions based on their version of reality, or yours.

Book a 30-minute conversation →