Marketing attribution for ecommerce
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 it breaks
- The click. A campaign renamed in the ad UI while the utm stays frozen, and one campaign becomes two rows in your report.
- The session. Consent gates and blocked scripts mean the first-party identifier is never set, so the session starts anonymous and stays that way.
- The checkout redirect. Payment providers on their own domain rewrite the referrer and strip query parameters. The order arrives with no memory of the ad.
- The revenue. Refunds, chargebacks, and cancelled renewals land days or months later, and most reports never subtract them.
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:
- Persist a first-party identifier through the checkout redirect.
- Send server-side conversions so measurement survives browser-side loss.
- Join orders back to clicks in the warehouse, not in a reporting tool.
- Subtract refunds and failed renewals on the same cohort you attribute.
- Only then argue about attribution models.
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
Build one true ROAS number when platforms disagree
Stop trusting Meta, Google and TikTok's conflicting ROAS claims. Learn to build blended and incremental ROAS numbers finance and marketing both trust.
AttributionHow to attribute subscription LTV back to the original ad click
Attributing renewals and lifetime value to the click that started it.
AttributionWhy UTM parameters break at checkout redirects and how to fix attribution
The single most common way a paid click loses its identity before the order is written.
AttributionAttribution when payment domains steal the credit
Why your payment provider shows up as a traffic source, and how to stop it taking credit.
AttributionTrue ROAS vs GA4 ecommerce ROAS for offline-close businesses
When the sale closes off-site, GA4 ecommerce ROAS stops being a usable number.
AttributionServer-side conversions with Meta CAPI: what breaks and how to fix it
What actually breaks when you move conversions server-side, and the fixes that hold.
AttributionWhy offline conversions beat pixel-based ROAS
Uploading closed revenue back to the platforms beats trusting the pixel.
AttributionWhy your GA4 ROAS is lying to you — and how to find the real number
Why the ROAS on your dashboard disagrees with the money in your account.
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.