TapCub is live — analytics, insights and live chat, free on one platform

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
Simulator

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.

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.

ChannelFirst touchLast touchLinearTime decayPosition-basedLast non-directSpread
Direct00.0%59553.4%19317.3%28125.2%24321.7%00.0%595
Google Ads19017.0%35531.8%29626.5%35331.7%27925.0%63557.0%445
Organic search21519.3%16514.8%23721.2%23521.1%21819.6%16514.8%71.7
Newsletter13011.7%00.0%19517.5%14813.2%13512.1%31528.3%315
Instagram49043.9%00.0%15013.5%71.26.4%19617.6%00.0%490
Referral908.1%00.0%454.0%26.22.3%454.0%00.0%90
Total1,1151,1151,1151,1151,1151,115

Compared

Conversion value by modelFirst touch: Direct 0, Google Ads 190, Organic search 215, Newsletter 130, Instagram 490, Referral 90; Last touch: Direct 595, Google Ads 355, Organic search 165, Newsletter 0, Instagram 0, Referral 0; Linear: Direct 193, Google Ads 296, Organic search 237, Newsletter 195, Instagram 150, Referral 45; Time decay: Direct 281, Google Ads 353, Organic search 235, Newsletter 148, Instagram 71.23, Referral 26.18; Position-based: Direct 243, Google Ads 279, Organic search 218, Newsletter 135, Instagram 196, Referral 45; Last non-direct: Direct 0, Google Ads 635, Organic search 165, Newsletter 315, Instagram 0, Referral 0Conversion value by modelFirst touchLast touchLinearTime decayPosition-basedLast non-directDirect · Last touch: 595Direct · Linear: 193Direct · Time decay: 281Direct · Position-based: 243Google Ads · First touch: 190Google Ads · Last touch: 355Google Ads · Linear: 296Google Ads · Time decay: 353Google Ads · Position-based: 279Google Ads · Last non-direct: 635Organic search · First touch: 215Organic search · Last touch: 165Organic search · Linear: 237Organic search · Time decay: 235Organic search · Position-based: 218Organic search · Last non-direct: 165Newsletter · First touch: 130Newsletter · Linear: 195Newsletter · Time decay: 148Newsletter · Position-based: 135Newsletter · Last non-direct: 315Instagram · First touch: 490Instagram · Linear: 150Instagram · Time decay: 71.23Instagram · Position-based: 196Referral · First touch: 90Referral · Linear: 45Referral · Time decay: 26.18Referral · Position-based: 450200400600800DirectGoogle AdsOrganic searchNewsletterInstagramReferral
CSV
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,90

One row per channel, one column per model.

Runs entirely in your browser. Nothing you type here is uploaded or stored by TapCub.

Share these inputs: the values go after the # in the link, so they never reach a server.

Version v1.0Updated Update history

Read the result

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.

How to use it

From order paths to a model comparison

You need converting journeys — the channels each customer touched before buying — and ideally how long before.

  1. 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. 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. 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. 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.

Formula

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.

Worked example

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.

How the 210 is split
ModelInstagramOrganic searchGoogle Ads
First touch21000
Last touch00210
Linear707070
Time decay (7-day half-life)28.268.8112.9
Position-based (40/20/40)844284
Last non-direct00210

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.

Common mistakes

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.

FAQ

Attribution 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.

Changelog

Update history

New features, fixes and data refreshes for this tool, newest first.

  1. · 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

Next step

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.

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics