← All writing Guide

Marketing attribution for ecommerce

Guide · Attribution · Twinslytics

Attribution arguments are rarely about models. They are about a broken chain between the click you paid for and the money that finally cleared. Fix the chain and most of the model debate evaporates.

What attribution has to answer

Every useful attribution setup answers one question: for this unit of spend, how much revenue actually closed? Not sessions, not pixel-fired conversions, not a platform's self-reported number — money that stayed after refunds, chargebacks, and failed renewals.

That framing matters because it tells you what to measure against. If your finance number and your ad platform number describe different populations, no attribution model will reconcile them. You have a data problem wearing an attribution costume.

The four places a click loses its identity01Ad clickclick id + utm set02Site sessioncookie, consent gate03Checkoutredirectparams often dropped04Closed revenuerefunds, renewals
Each hop is a chance to drop the identifier that ties revenue back to spend.

The four places it breaks

Last-click, data-driven, and why they disagree

Platform-reported conversions use their own attribution window and their own view of the user — usually generous, because the platform is grading its own homework. Analytics tools apply last-non-direct over whatever sessions they managed to observe. Neither sees the refund.

So the disagreement is structural, not a bug: three systems, three populations, three windows. The only durable fix is to hold the join yourself, in a warehouse, keyed on an identifier you control, with revenue that reconciles to your payment processor.

What to fix first

In order, because each step makes the next one measurable:

Questions people ask

Why do Meta and Google both claim credit for the same sale?

Each platform uses its own attribution window and its own view of the user, and both are graded on their own homework — a platform has no incentive to under-claim. Overlap is normal, not fraud; the fix is de-duplicating in your own warehouse, not trusting either platform's number in isolation.

Is last-click attribution actually wrong?

It's not wrong, it's incomplete. Last-click answers 'which touchpoint happened right before the order' — a real, useful question. It just isn't the same question as 'which spend actually drove incremental revenue,' and treating the two as interchangeable is where most attribution arguments start.

Do we need a full CDP to fix this, or can it be simpler?

Most of the value comes from three things: a first-party identifier that survives the checkout redirect, server-side conversion events, and a warehouse join between orders and clicks. That's a data engineering project, not necessarily a CDP purchase — a CDP can help operationalize it later, but it doesn't fix a broken identifier on its own.

How long before a fix shows up in reported ROAS?

Identifier and server-side fixes show up within days, once the new events start flowing. Attribution model changes take longer to read cleanly, because you're comparing against a cohort that matured under the old, broken measurement — give it at least one full cohort cycle before judging the before/after.

Read next

283/408 sessions reattributed — Fixed attribution, returned conversions to Google Ads

Want your attribution reconciled like this?

We patch the join between clicks and closed revenue so bidding optimizes on what actually happened, not what the checkout referrer claims.