Attribution Model Calculator
One journey through five attribution models side by side, so the swing between last-click and first-click is visible before anybody picks a favourite.
Touches 4
Channels 4
Conversion value $480.00
The journey
1. Google Ads 21 days before
2. Blog post 14 days before
3. Email 3 days before
4. Brand search 0 days before
last-click all credit to the last touch
Google Ads $0.00 · 0%
Blog post $0.00 · 0%
Email $0.00 · 0%
Brand search $480.00 · 100%
first-click all credit to the first touch
Google Ads $480.00 · 100%
Blog post $0.00 · 0%
Email $0.00 · 0%
Brand search $0.00 · 0%
linear split evenly across every touch
Google Ads $120.00 · 25%
Blog post $120.00 · 25%
Email $120.00 · 25%
Brand search $120.00 · 25%
time-decay weighted towards the touches nearest the conversion
Google Ads $28.33 · 5.9%
Blog post $56.66 · 11.8%
Email $168.38 · 35.1%
Brand search $226.63 · 47.2%
position-based 40% first, 40% last, 20% split across the middle
Google Ads $192.00 · 40%
Blog post $48.00 · 10%
Email $48.00 · 10%
Brand search $192.00 · 40%
How much the model decides
Google Ads 0% to 100%, a swing of $480.00
Blog post 0% to 25%, a swing of $120.00
Email 0% to 35.1%, a swing of $168.38
Brand search 0% to 100%, a swing of $480.00
Every model above describes the same single conversion. "Google Ads"
takes between 0% and 100% of the credit depending on which one you pick,
a swing of $480.00 on one sale. None of them is a measurement: they are
conventions for dividing up credit for something that already happened.
Last-click is the default in most reporting and it systematically
flatters the bottom of the funnel. Brand search, retargeting and email
get credit for conversions that awareness channels created, which is how
a channel that only reaches people who already decided comes to look
like the best performer.
First-click has the mirror problem: it gives everything to the touch
that started the journey and nothing to whatever closed it, so it
flatters discovery and undervalues the work of converting.
Linear is the most honest about its own ignorance. It makes no claim
about which touch mattered, which is often the right posture and is
rarely the answer people want.
Time-decay with a 7 day half life assumes influence fades, which it
does, and that it fades exponentially, which is an assumption. Set the
half life shorter than your sales cycle: a seven-day half life on a
six-month enterprise cycle throws away the touches that did the
persuading.
Position-based, 40/20/40, hard-codes the belief that the first and last
touches matter most. It is a reasonable prior and it is a prior, not a
finding.
None of these is incrementality. The only way to know whether a channel
caused conversions is to turn it off for a random share of the audience
and measure the difference, which is a geo holdout or a conversion lift
test. Attribution splits credit; an experiment establishes cause.
Attribution breaks before the model does. Cookie lifetimes, cross-device
journeys, consent refusals, in-app browsers, dark social and people
typing your name into a search box all mean the journey you can see is
not the journey that happened, and every model above is applied to that
partial record.
Output is valid and updates as you type.
Fix the highlighted fields to update the output.
One customer. Four touches: a Google ad three weeks ago, a blog post two weeks ago, an email three days ago, and a brand search on the day they bought. One $480 order.
Under last-click, Google Ads earned nothing. Under first-click, it earned all $480. Nothing about the customer changed between those two sentences; only the accounting did.
That is what attribution models are: conventions for dividing credit for something that already happened. Running five of them at once makes the size of the convention visible, which is the point. A channel that looks like your best performer under one model and your worst under another has not been measured at all.
How to use
- Write the journey, one touch a line, oldest first:
Google Ads: 21means a touch 21 days before the conversion. - Add the conversion value to see the credit in money.
- Set the time-decay half life to something shorter than your sales cycle.
Example
last-click all credit to the last touch
Google Ads $0.00 · 0%
Brand search $480.00 · 100%
first-click all credit to the first touch
Google Ads $480.00 · 100%
Brand search $0.00 · 0%
linear split evenly across every touch
Google Ads $120.00 · 25%
Blog post $120.00 · 25%
Email $120.00 · 25%
Brand search $120.00 · 25%
time-decay weighted towards the touches nearest the conversion
Google Ads $28.33 · 5.9%
Blog post $56.66 · 11.8%
Email $168.38 · 35.1%
Brand search $226.63 · 47.2%
position-based 40% first, 40% last, 20% split across the middle
Google Ads $192.00 · 40%
Blog post $48.00 · 10%
Email $48.00 · 10%
Brand search $192.00 · 40%
How much the model decides
Google Ads 0% to 100%, a swing of $480.00
Blog post 0% to 25%, a swing of $120.00
Email 0% to 35.1%, a swing of $168.38
Brand search 0% to 100%, a swing of $480.00
A $480 swing on one order, from a choice nobody wrote down.
Pitfalls
Last-click flatters the bottom of the funnel. Brand search, retargeting and email get the credit for conversions that awareness created. A channel that only reaches people who have already decided will always look efficient, and cutting the channels that created the demand is the predictable consequence.
First-click has the mirror problem. It gives everything to whatever started the journey and nothing to whatever closed it, which flatters discovery and makes conversion work look worthless.
Time-decay’s half life is doing the work. A seven-day half life on a six-month enterprise sales cycle discards the touches that did the persuading. Set it against your own cycle length and be aware you are choosing the answer when you set it.
Position-based is a prior, not a finding. 40/20/40 encodes the belief that the ends matter most. That is a reasonable belief and it is not evidence.
None of this is incrementality. Attribution divides credit; only an experiment establishes cause. Turn a channel off for a random share of the audience, or hold out a set of regions, and measure the difference in total conversions. That is the only method that answers “would this have happened anyway”.
GA4’s data-driven model is not a way out. It allocates credit using a model you cannot inspect, trained on your data, and it changes when the data changes. It is often more reasonable than last-click and it is still an allocation rather than a measurement.
Attribution breaks before the model does. Cookie lifetimes of seven days or less, cross-device journeys, consent refusals, in-app browsers, dark social and people typing your name into a search box all mean the journey you can see is not the journey that happened. Every model is applied to that partial record.
Compatibility
Arithmetic in the browser: nothing is uploaded and nothing is stored.
All five models are computed from the same journey every time, so the comparison is arithmetic rather than a claim. The weights sum to exactly one conversion under each model, which is checked in the test suite: credit is divided, never created.
Time-decay uses 2^(−days/half life), so a touch one half life earlier is worth half as much, and the result is normalised so the total is still one conversion. The test suite checks that a touch three half lives out is worth an eighth of the touch at day zero.
A channel appearing more than once in a journey has its credit added up, which is how a retargeting channel that appears four times comes to dominate a linear model. Position-based with two touches splits evenly, because there is no middle to share the 20 percent.