Paste your conversion paths and watch seven attribution models split the same conversions differently — last click, first click, linear, position-based (40/20/40), time-decay, Markov removal effect, and Shapley value. Every algorithm implements the math behind this tool exactly, so you can reproduce the numbers in a warehouse pipeline or audit why two vendors disagree.
🔒 100% client-side — runs entirely in your browser · nothing is sent anywhere · works offline
CSV upload: first column is the path (channels separated by >, quote the
field if a channel name contains a comma), then conversions, then an optional non-converting count.
A header row is skipped. Parsing happens in this page — the file is never uploaded.
Keyboard: Ctrl/Cmd + Enter in the textarea runs the models.
Plain-English summaries of the exact algorithms, as published in the Attribution Models standard. The rule-based models and Shapley credit converting paths only; Markov is the one model here that also learns from your non-converting counts. Every column in the results table sums to the total conversions.
100% of each conversion's credit goes to the final touch cₙ. Cheap,
deterministic, and explainable — and it systematically over-credits bottom-funnel, brand,
and direct, because whatever happened to close the journey gets everything.
100% of the credit goes to the first touch c₁. The mirror image of last
click: it over-credits top-of-funnel prospecting and discovery channels.
Every touch on a converting path gets an equal 1/n share. Position and intent
are ignored — a throwaway impression counts exactly as much as a high-intent click.
40% to the first touch, 40% to the last, and the remaining 20% split evenly across the middle touches. The edge cases collapse by design: a 1-touch path gets 100%, a 2-touch path splits 50/50. The 40/20/40 split itself is a convention, not an estimate.
n = 1: [1.0] n = 2: [0.5, 0.5] n ≥ 3: [0.40, 0.20/(n-2), …, 0.20/(n-2), 0.40]Touches closer to the conversion weigh more; the weight halves every h steps
before the last touch, then weights are normalized to sum to 1 per path:
No-timestamp assumption: this input format carries touch order but no
timestamps, so the simulator decays by touch position — a touch h steps
before the last one gets half its weight. The published standard defines the same exponential
over days, 2^(−(t_conv − tᵢ)/H); if you have timestamps, substitute the
age in days for the step count. Set h with the control above (default 2).
Journeys become a first-order Markov chain with states START, one per channel,
CONV, and NULL. Transition probabilities are estimated from all paths,
weighted by their counts — converting paths end in CONV, non-converting paths in
NULL. The baseline conversion probability π = P(CONV | START) is
solved by fixed-point iteration (Gauss–Seidel, tolerance 1e-9, capped at 10,000 sweeps).
To score a channel, delete it: every transition into that channel is redirected to
NULL, and the conversion probability is re-solved. The relative drop is the
channel's removal effect, and credit is allocated in proportion:
A channel that, when deleted, craters conversions was load-bearing. A channel that only ever appears on dead-end journeys has a removal effect of zero.
Each set of channels is a coalition, and v(S) — the coalition's value —
is the total conversions of paths whose channel set is contained in S (the
standard's order-agnostic simplification). A channel's Shapley value is its marginal
contribution v(S ∪ {i}) − v(S) averaged over every order in which the
coalition could have formed:
It is the unique allocation that is efficient (credits sum to total conversions),
symmetric (interchangeable channels get equal credit), and gives dummies zero.
Enumeration is exact over all 2ⁿ coalitions, so this tool refuses beyond 12 unique
channels — collapse rare channels into an Other bucket to stay tractable.
Reconcile, don't religion — budget against the range across models, not one point estimate. References: Attribution Models standard · Channel Classification · Campaign URL Standard