Add up what your platforms claim. Meta says it drove $620,000 last month. Google says $410,000. TikTok says $95,000. Klaviyo says $240,000 in flow revenue. Your affiliate partner says $80,000. Total: $1,445,000.
Shopify says you did $1,000,000.
Nobody is lying. Every one of those platforms is reporting accurately according to its own rules. They are just all reporting the same customers, and the sum of their claims exceeds the revenue that actually exists.
This is not a reporting inconvenience. It is a structural problem that quietly reshapes how budget gets allocated, and it is one of the main reasons a brand can run twelve months of green dashboards while the top line goes nowhere.
Why every platform claims the conversion
Each ad platform is scored on a report card it writes itself. Three mechanics make over-claiming the default outcome.
Last click inside a walled garden. Meta sees the Meta touchpoints. Google sees the Google touchpoints. Neither sees the other. Each applies last-click logic to its own visible subset, which means each considers itself the final touch, because it cannot see the touches that came after.
View-through attribution. A user who scrolls past your ad without clicking, then buys three hours later from an email, can still be claimed as a view-through conversion. This is not fraud. It is a documented setting. But it means a platform can take credit for a purchase it did not receive a click from.
Default windows favor the platform. Seven-day click plus one-day view is the standard Meta setting. Google Ads uses data-driven attribution across a thirty-day window by default. Both windows are wide enough to capture purchases that other channels drove.
Stack these and the outcome is arithmetic, not conspiracy. Five platforms each applying favorable rules to overlapping data will always produce a total larger than reality.
Retargeting is the cheapest place to look good
Now add the incentive layer.
If you pay an agency on platform-reported ROAS, or if their retention depends on that number, the fastest way to move it is not to find new customers. It is to spend more on people who were already going to buy.
Retargeting audiences, warm custom audiences, cart abandoners, past purchasers, branded search. These convert at high rates because the intent already exists. Serving an ad to someone who has a product in their cart and an email reminder in their inbox produces a conversion that gets attributed to the ad. The ad may have contributed very little to it.
The mechanic is clean and it is repeatable. A media buyer under pressure to hit a ROAS target can nearly always hit it by shifting budget down-funnel. The dashboard improves immediately. Nothing new enters the business.
I want to be careful here, because this is usually not deliberate. Most buyers are not sitting there deciding to harvest. They are optimizing toward the number they are measured on, and the number they are measured on rewards harvesting. Incentives do not need bad intent to produce bad outcomes.
The algorithms do it too
The platform’s own optimization has the same bias, for the same reason.
Automated campaign types are trained to find conversions at the lowest cost. Existing customers, site visitors, and people searching your brand name are the lowest-cost conversions available. Left unconstrained, broad automated campaigns drift toward that audience, because that is what the objective asks for.
You see this in the symptoms:
- Branded search consuming a growing share of Google spend
- Automated campaigns reporting excellent ROAS while new customer counts stay flat
- Prospecting campaigns that look expensive next to retargeting, so budget migrates away from them
- Strong reported performance from campaigns whose purchases are overwhelmingly returning customers
Every one of these looks like performance. Structurally, it is a business paying to reach people it already owns.
What this looks like on the P&L
The pattern is consistent enough to recognize.
Reported ROAS is stable or improving. Spend goes up. Revenue does not move proportionally. New customer count is flat or declining. Returning customer revenue holds up, which masks the problem for a quarter or two. Blended CAC rises slowly enough that nobody flags it. Contribution margin compresses.
Then the honest conversation happens six months late, usually because cash got tight, and someone finally asks why the business grew four percent while every channel reported profitable performance.
The answer is that profitable performance was being measured on a base of demand the marketing did not create.
The numbers that cannot be gamed
There are only a few, and they all live outside the ad platforms.
MER (blended return). Total revenue divided by total ad spend. Not per platform. Everything, all sources, one number. This cannot be double counted because there is only one revenue figure and one spend figure. If MER is flat while platform ROAS improves, your platforms are getting better at claiming credit, not at driving sales.
New customer CAC. Total ad spend divided by new customers acquired. This is the number that tells you whether marketing is growing the business or servicing it. Track it weekly. It is the single most useful line in a DTC dashboard.
New customer count, in absolute terms. Not percentage, not rate. The raw count. Growth means this number goes up.
First-order contribution margin. Revenue from new customers, minus COGS, shipping, payment fees, and the acquisition cost. If this is negative, you are buying growth on credit, which is a legitimate strategy only if your repeat rate and payback period actually support it.
Percentage of revenue from returning customers. Rising is not automatically good. It often means acquisition has stalled and the base is aging.
How to actually test it
Reporting will not settle this. Testing will.
Scale a channel down, not up. Cut retargeting budget by half for two weeks and watch total revenue, not platform-reported revenue. If total revenue holds steady, those conversions were happening anyway and you just found real money.
Pause branded search for a defined window. Measure total orders, including organic. Many brands discover that a meaningful share of branded paid clicks were cannibalizing free organic clicks.
Run a geo holdout. Turn off a channel in a set of matched markets, keep it live in others, compare total revenue per market. This is the closest thing to a clean read most brands can execute without specialist tooling.
Compare new customer share by campaign. If a campaign reports strong ROAS and eighty percent of its purchases are from existing customers, you know what it actually is.
Each of these costs a little revenue in the short term. Each of them tells you something no dashboard will.
Where measurement fits, honestly
I run an attribution platform, so let me be precise about what attribution does and does not solve here.
Attribution will not tell you whether an ad was incremental. Only a holdout test does that. Any vendor claiming their dashboard measures incrementality without a controlled test is selling you a model, not a measurement.
What consistent measurement does solve is the ambiguity that makes the whole argument unresolvable. Right now most brands cannot even establish which touchpoint came first, because each platform reports on its own identity graph and none of them share. You end up arguing about whose number is right when the real answer is that the numbers describe different things.
When every touchpoint is captured against a single identity spine, you can look at the same purchase under first click, last click, and mid-touch, and see the whole path in one place. That is what makes the harvesting pattern visible. A campaign that looks excellent under last click and disappears under first click is telling you exactly what it is doing. A channel that never appears as first click is not acquiring anyone.
That does not replace holdout testing. It makes you dramatically better at knowing what to test.
The goal is not a dashboard where everything looks profitable. That dashboard already exists, and it is what got the business into this position. The goal is a measurement layer honest enough that when the top line does not move, you can find out why.