All posts
AttributionMarch 28, 20267 min read

Why Cross-Channel Attribution Breaks at Scale

Every platform's reported attribution is wrong in a direction that flatters the platform. At $20k a month this is amusing. At $500k a month your attributed conversions sum to 3x real revenue, and the missing budget is the whole game.

Mingxuan Liang (Kim)
Mingxuan Liang (Kim)
Founder, AdsAgent

I am going to skip the diplomatic framing. Every platform's reported attribution is wrong, in a direction that flatters the platform. You know this at small spend; you do not feel it until you scale.

At $20k per month on Meta, the fact that Meta claims 120% of your conversions is amusing but not expensive — you can see the real number in Stripe, divide, and move on. At $500k per month across Meta, Google, and TikTok, you cannot do that. The "attributed conversions" column adds up to roughly 3x actual revenue. Finding the missing budget is the whole game.

Why reported attribution breaks at scale

Three mechanics, all structural:

1. Each platform counts the conversion itself. Meta's 7-day click + 1-day view overlaps Google's 30-day data-driven attribution overlaps TikTok's 7-day view-through. A customer who saw a TikTok ad, clicked a Google ad, and converted a week later gets credited to all three, in full, inside each platform's dashboard. Sum your dashboards and you will overcount by 2-3x.

2. iOS privacy signal loss. ATT opt-in hovers around 30% in 2026. Meta's Conversion API aggregates server-side signal to fill the gap, but aggregation is approximate. Conversions show up in Meta reporting 12-48 hours late, often bucketed wrong at the campaign level. For TikTok, SKAN's postback windows are even blunter — order-level granularity is gone for iOS organic. (For the inside view of how CAPI itself silently double-counts when event_id generation drifts between pixel and server, see Meta CAPI and iOS in 2026.)

3. View-through credit inflation. TikTok and YouTube take credit for exposures that a conversion-funnel researcher would call "did not happen." A two-second auto-scroll past a video at 3x speed gets credited if the user converts through any other channel within the attribution window. That credit exists in TikTok Ads Manager. It does not exist in your bank account.

What fails

Trusting platform-only reporting overcounts by channel and leads directly to overspend on whichever platform claims the most. I have watched accounts double Meta spend because Meta's dashboard said ROAS was 4.2x, ignoring that Google's dashboard also claimed the same conversions. Real blended ROAS was 1.8x. Revenue never caught up.

Last-click attribution is the other failure mode. It throws away influence from top-funnel Meta and TikTok, defunds the discovery channels, and compresses spend into Google branded and retargeting — which feels efficient for two months and then starves because new-customer volume dried up.

UTM tagging plus web analytics alone misses the journey inside each platform (which ad set, which creative, which placement drove the click). You will know Google did the work but not whether it was Performance Max or branded search.

What works

The mature attribution stack in 2026 is four pieces running in parallel, each answering a different question:

1. Platform-reported conversions for daily pacing. Use them for what they are good at: whether a specific ad is delivering vs. not. Do not use them for cross-channel comparison.

2. Enhanced conversions / CAPI for partial deduplication. Meta CAPI, Google Enhanced Conversions, TikTok Events API, all server-side. Deduplicated inside the partner infrastructure using hashed PII or deterministic event IDs. This is table stakes before you cross $100k per month on any single channel.

3. Media Mix Modeling for channel-mix decisions. Weekly granularity is enough. MMM sees what platform reporting cannot: the steady TikTok spend that lifts Google branded search two weeks later. It does not need perfect inputs — it needs clean spend time-series and outcome time-series. Cheap to run if you already have weekly aggregates.

4. Incrementality testing as the truth source. Geo-lift or holdout tests at least quarterly. A 30-day Meta holdout in three DMAs is cheap and tells you more than six months of platform dashboards. If MMM and incrementality agree, you can trust MMM directionally; if they disagree, trust incrementality and tune MMM.

When signals disagree

The most common pattern at scale: Meta dashboard claims ROAS 4x, MMM claims ROAS 1.8x, incrementality claims ROAS 2.2x. Meta is overclaiming by the overlap-credit mechanic above. MMM is slightly underestimating because it cannot see the fastest-moving effects. Incrementality is closest to truth.

When the divergence is more than 30%, do not average. Pick the most direct-evidence source (usually incrementality) and decide from it. If you average, you anchor on the biased platform reports by default.

What to do now, by spend level

  • At $50k per month: wire CAPI + Enhanced Conversions. Do not wait.
  • At $100k per month: start weekly MMM. Even rough-cut MMM beats platform-only dashboards.
  • At $250k per month: formalize an incrementality test calendar — one channel per quarter, 30-day test per channel, rotate. Budget ~5% of spend for testing.
  • At $500k per month: data clean room or unified event table with a real user graph. At this scale, the deduplication error alone costs more than the pipeline.

Operators who scale past $1M per month without a blended attribution rebuild are burning 15-25% of spend on ghost credit. That is not a data-quality problem; it is a budget decision made from bad data. The fix is boring and mostly involves plumbing. Until the plumbing is in, every dashboard you are looking at is telling you a flattering version of the truth, and you are making spend decisions against it.

More from the blog