Free tool Attribution model simulator
Paste the paths your customers took before converting and see how much each channel gets under six rule-based models. The same orders, credited six ways — so you can see which channels depend on the model and which don’t.
- First, last, linear, time decay, position, last non-direct
- Totals always add up
- Runs locally
Journeys in, credit out
One converting journey per line: channels in order, separated by > or →, then a comma and the order value. Add [days] after a touch for days before the conversion (used by time decay), or @2026-03-01 for its date.
Optional formats: path, conversions, value for aggregated paths; no number at all counts each line as one conversion. Channel names are matched case-insensitively. Use tabs instead of commas if values have thousands separators. The share link keeps only the settings below, never the journeys.
A touch this many days before the conversion gets half the weight of a touch on the day. Google’s former model used 7.
The rest is split evenly between the middle touches.
Checks
Journeys
10
Conversions
10
Conversion value
1,115
Touches per journey
2.4
Average
Credit by model
Each column adds up to the same total. Bold = the model that gives this channel the most; “spread” = most minus least.
| Channel | First touch | Last touch | Linear | Time decay | Position-based | Last non-direct | Spread |
|---|---|---|---|---|---|---|---|
| Direct | 00.0% | 59553.4% | 19317.3% | 28125.2% | 24321.7% | 00.0% | 595 |
| Google Ads | 19017.0% | 35531.8% | 29626.5% | 35331.7% | 27925.0% | 63557.0% | 445 |
| Organic search | 21519.3% | 16514.8% | 23721.2% | 23521.1% | 21819.6% | 16514.8% | 71.7 |
| Newsletter | 13011.7% | 00.0% | 19517.5% | 14813.2% | 13512.1% | 31528.3% | 315 |
| 49043.9% | 00.0% | 15013.5% | 71.26.4% | 19617.6% | 00.0% | 490 | |
| Referral | 908.1% | 00.0% | 454.0% | 26.22.3% | 454.0% | 00.0% | 90 |
| Total | 1,115 | 1,115 | 1,115 | 1,115 | 1,115 | 1,115 |
Compared
channel,first_value,last_value,linear_value,decay_value,position_value,lastNonDirect_value,spread
Direct,0,595,192.5,281.41,242.5,0,595
Google Ads,190,355,295.83,353.34,278.5,635,445
Organic search,215,165,236.67,235.22,218,165,71.67
Newsletter,130,0,195,147.62,135,315,315
Instagram,490,0,150,71.23,196,0,490
Referral,90,0,45,26.18,45,0,90One row per channel, one column per model.
Share these inputs: the values go after the # in the link, so they never reach a server.
https://tapcub.com/tools/attribution-model-simulator
Version v1.0Updated Update history
What the six columns tell you
No model is “true”. Each answers a different question, and the differences between them are the most useful part.
Channels that win under first touch
They start journeys. In the sample, Instagram gets 490 of 1,115 under first touch and nothing under last touch: it introduces customers that other channels close. Cutting it would shrink the top of every path.
Channels that win under last touch
They finish journeys. Direct gets 595 under last touch — people typing the address after deciding elsewhere. Last non-direct gives that credit back to the channel before it (Google Ads rises to 635).
A small spread means a robust number
Organic search moves only between 165 and 237 across models. Budget decisions for channels like this hardly depend on which model you pick.
A large spread means “check before you cut”
Instagram (spread 490) and Direct (595) swing the most. Before moving budget on such a channel, look at the journeys themselves.
Every model distributes the same total: here 1,115 in value from 10 journeys. Rule-based models never create or lose conversions; they only move credit.
From order paths to a model comparison
You need converting journeys — the channels each customer touched before buying — and ideally how long before.
-
1
Get the paths
From your analytics tool’s path or conversion-path report, a CRM’s touch history, or your own event data. Keep only converting journeys.
-
2
Paste one per line
Channels in order with
>, then the value. Add[days]to touches if you know them, so time decay uses real timing. -
3
Set the parameters
Half-life for time decay (7 days was Google’s default), and the first / last share for position-based (40 / 40 is the common U-shape).
-
4
Compare, then look at the spread
Channels with a small spread are safe to judge; channels with a large one need their journeys read before you change their budget.
Six rules for splitting one conversion
Each model gives every touch in a journey a weight; the weights add up to 1, and the conversion’s value is split by them. A channel’s credit is the sum over all journeys.
- Journeys with one touch give 100% to that touch under every model.
- A channel appearing twice in one journey earns each share separately (linear gives it two of the equal shares).
- Direct = “Direct”, “(direct)”, “(none)” or “直接访问”; only last non-direct treats it differently.
- This tool only sees converting journeys. Data-driven attribution also needs the paths of people who did not convert — see the FAQ.
First / last touch
w = 1 for the first (last) touch, 0 elsewhere
Sample journey worth 210: Instagram 210 under first, Google Ads 210 under last.
Linear
w = 1 ÷ n for each of n touches
210 ÷ 3 = 70 each.
Time decay
wᵢ ∝ 2^(−daysᵢ ÷ half-life)
Touches 15, 6 and 1 day before, half-life 7: 28.2 / 68.8 / 112.9.
Position-based
first f, last l, middle (1 − f − l) ÷ (n − 2) each
40 / 20 / 40: 84 / 42 / 84. With two touches: f ÷ (f + l) and l ÷ (f + l).
Last non-direct
w = 1 for the last touch that is not Direct
If every touch is Direct, Direct keeps it.
One journey, six answers
Instagram [15] > Organic search [6] > Google Ads [1], 210: an order worth 210, three touches 15, 6 and 1 day before buying.
| Model | Organic search | Google Ads | |
|---|---|---|---|
| First touch | 210 | 0 | 0 |
| Last touch | 0 | 0 | 210 |
| Linear | 70 | 70 | 70 |
| Time decay (7-day half-life) | 28.2 | 68.8 | 112.9 |
| Position-based (40/20/40) | 84 | 42 | 84 |
| Last non-direct | 0 | 0 | 210 |
Time decay: raw weights 2^(−15/7) = 0.227, 2^(−6/7) = 0.552, 2^(−1/7) = 0.906; their sum is 1.684, so the shares are 13.4%, 32.8% and 53.8% of 210.
Where attribution comparisons go wrong
The models are simple arithmetic. The traps are in the data and in what people conclude from it.
Paths that start too late
If tracking only begins at the landing page, the first touch is whatever came last before it. Lost click IDs and untagged links make first-touch numbers meaningless.
Adding up platform reports
Each ad platform credits itself with the same order. One journey table, split once, is the only way the totals match your sales.
Treating a model as the truth
Rule-based models describe, they don’t prove. That a channel appears early doesn’t mean the sale would be lost without it — only an experiment shows that.
Ignoring the lookback window
Touches older than your window (often 30 or 90 days) drop out, which shifts credit towards recent channels in every model.
Attribution on your real orders
TapCub attributes each order on your site once, keeps every touch on the person, and lets you switch model on any table.
First, last and linear
Three models on the same table, switchable without re-running anything.
Learn moreThe path per person
Every touch in order, with dates — so you can see why the models disagree.
Learn moreClick IDs and UTM
14 ad click IDs and UTM parameters are kept on the person, so a later purchase is still attributed.
Learn moreAttribution model questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
What are the main attribution models?
Rule-based: first touch, last touch, last non-direct, linear, time decay and position-based (U-shaped). Data-driven models instead learn the weights from your data. This tool compares the six rule-based ones.
Which attribution model should I use?
Use first touch to judge what starts journeys and last (non-direct) touch to judge what closes them; read them together. Linear or position-based is a reasonable single number when you must pick one. Keep the model fixed when comparing periods.
Did Google Analytics 4 remove these models?
Yes. Google announced on 6 April 2023 that first click, linear, time decay and position-based would leave Google Ads and GA4; GA4’s help says they have not been available since November 2023. GA4 now offers data-driven, paid and organic last click, and Google paid channels last click.
Why not use a data-driven model here?
A data-driven model compares paths that converted with paths that didn’t, to estimate what each touch added. That needs the non-converting paths and many more conversions than a pasted sample — which is why Google runs it on your full account data.
What half-life should time decay use?
Google’s former time-decay model used 7 days. Use something close to your typical time from first visit to purchase: a few days for impulse purchases, weeks for B2B.
How does TapCub attribute conversions?
First touch, last touch and linear on the same table, with the full path per person and the dates of each touch. See marketing analytics.
Update history
New features, fixes and data refreshes for this tool, newest first.
-
· v1.0
LaunchedFirst release.
Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates
Get the journeys without the spreadsheet
Tag your links, connect your site, and TapCub records every touch on the person and attributes each order once.