Glossary/Attribution mechanics
Multi-touch attribution
Definition
Multi-touch attribution distributes the credit for a conversion across several of the marketing touchpoints that preceded it, rather than assigning all of it to a single first or last interaction.
Single-touch attribution is a rule that says one touchpoint caused everything and the rest caused nothing. Multi-touch replaces that with a different rule — a weighting — which is more honest about reality and no more provably correct. The value is not that MTA finds the truth; it is that it stops one channel from absorbing credit for work several channels did.
The five models, applied to the same journey
Suppose a user sees a display ad, clicks a search ad two days later, taps an influencer link on day five, and installs after an email on day six. Four touchpoints, one install, $1 of credit to distribute. Every model below is answering the same question with a different assumption baked in.
| Model | Display (d0) | Search (d2) | Influencer (d5) | Email (d6) | Assumption |
|---|---|---|---|---|---|
| Last touch | 0.00 | 0.00 | 0.00 | 1.00 | Only the closing touch matters |
| First touch | 1.00 | 0.00 | 0.00 | 0.00 | Only discovery matters |
| Linear | 0.25 | 0.25 | 0.25 | 0.25 | Every touch is equal |
| Time decay (3-day half-life) | 0.09 | 0.15 | 0.33 | 0.43 | Recency correlates with influence |
| Position based (40/20/40) | 0.40 | 0.10 | 0.10 | 0.40 | Discovery and close matter most |
Notice that display goes from 0% to 100% of the credit without a single data point changing. That is the point to internalise before choosing a model: you are picking a story about how demand is created, and the numbers follow. Anyone comparing channel ROAS across two teams using different models is comparing nothing.
Data-driven attribution is a sixth model, not an escape from modelling
Google and Meta both offer algorithmic weightings fitted to your own conversion paths. They are usually better than a fixed rule, but they are fitted on the touchpoints that platform can see, which means the platform's own inventory is the best-observed part of the journey. Treat the output as a strong opinion, not as ground truth.
Why MTA is structurally harder on mobile than on web
MTA needs a stable identity across every touchpoint. On the web, a first-party cookie or a logged-in ID usually provides one. On mobile, the journey crosses a browser, an app store and an app binary, and no identifier survives all three by default.
| Boundary crossed | What survives | What is lost |
|---|---|---|
| Web page → click on your link | Everything you put in the URL | Nothing yet |
| Click → App Store / Play Store | Android: the install referrer. iOS: nothing | iOS loses all URL parameters here |
| Store → first app open | Referrer on Android; a clipboard or IP+UA guess on iOS | Any browser cookie |
| First open → later sessions | Your own user ID, once set | Pre-login touchpoints unless stitched |
| Any ad network's own graph | Their logged-in identity | Visibility to you — you get their conclusion only |
The practical consequence is that mobile MTA is honest only for the touchpoints you tagged yourself. Everything a self-attributing network reports arrives already attributed, as a claim rather than a touch, and cannot be re-weighted by your model. That is not a bug in your pipeline — it is the deal those networks offer.
On iOS the gap is wider still. SKAdNetwork reports an aggregate winner per campaign, with no journey attached, so there is nothing to distribute. MTA and SKAN are not two views of one dataset; they cannot be combined into one number, and any tool claiming otherwise is modelling, not measuring.
Building it yourself
If every touch is logged to your own tables with a shared identity, the models above are one query each. The version below implements time decay, which is the model most teams settle on because it degrades gracefully when a journey has one touch or twenty.
-- Weight each touch by how recent it was, then normalise
-- so every conversion distributes exactly 1.0 of credit.
WITH touches_in_window AS (
SELECT
c.conversion_id,
c.converted_at,
t.channel,
t.touched_at,
POWER(
0.5,
DATE_DIFF(DATE(c.converted_at), DATE(t.touched_at), DAY) / 7.0
) AS raw_weight
FROM conversions c
JOIN touches t
ON t.user_id = c.user_id
AND t.touched_at <= c.converted_at
AND t.touched_at > c.converted_at - INTERVAL 30 DAY
),
normalised AS (
SELECT
conversion_id,
channel,
raw_weight / SUM(raw_weight) OVER (PARTITION BY conversion_id) AS credit
FROM touches_in_window
)
SELECT
channel,
ROUND(SUM(credit), 1) AS attributed_conversions,
COUNT(DISTINCT conversion_id) AS journeys_touched
FROM normalised
GROUP BY channel
ORDER BY attributed_conversions DESC;The journeys_touched column matters as much as the credit column. A channel that appears in 40% of journeys but earns 8% of credit is doing real work that a last-touch report would show as zero — and a channel that earns credit only in journeys it also closed is a channel your model cannot yet distinguish from a coincidence.
When to use MTA and when not to
- Use it when you own most touchpoints, have a stable user ID, and want to stop last-touch starving upper-funnel channels.
- Use it for directional budget shifts between channels you tag yourself.
- Do not use it as the arbiter between two self-attributing networks; neither will accept your weighting.
- Do not use it on iOS install data, where SKAN gives you no journey to weight.
- Do not use it instead of incrementality testing. MTA distributes observed credit; only a holdout tells you what would have happened anyway.
The mature position is to run MTA and incrementality together and expect them to disagree. MTA tells you how credit should be shared among the touches that happened; a geo holdout tells you which touches needed to happen at all. When a channel scores well on the first and badly on the second, the second is the one to believe.
UTM builder
A multi-touch model can only weight touchpoints it can see, and a touchpoint is only visible if its link carried consistent campaign parameters. This builds correctly-encoded URLs with a live preview, so channel and campaign values stay uniform enough to group on later.
Open the utm builder →Frequently asked questions
- What is multi-touch attribution?
- It is a way of distributing the credit for a conversion across several touchpoints in the user journey instead of giving all of it to the first or last one. A weighting rule such as linear, time decay or position based decides how much each touch receives, and the weights are chosen by the analyst rather than derived from the data itself.
- Which multi-touch attribution model is best?
- There is no model that is correct in an absolute sense, because each encodes a different assumption about how demand is created. Time decay is the most common default for apps because it handles journeys of any length gracefully and does not require choosing which positions are special. Whichever you pick, apply it consistently and state it on every report.
- Why is multi-touch attribution hard on mobile?
- Because no identifier survives the whole journey. The path crosses a browser, an app store and an app binary, and on iOS all URL parameters are lost at the store boundary. You can only weight touchpoints you observed, so anything a self-attributing network or SKAdNetwork reports arrives pre-attributed and cannot be re-weighted by your model.
- Can I use multi-touch attribution with SKAdNetwork?
- Not meaningfully. SKAdNetwork returns an aggregated winner per campaign with no journey attached and a deliberate delay, so there is no sequence of touches to distribute credit across. Report SKAN results in their own column and run multi-touch analysis only on the first-party touchpoints you tagged and logged yourself.
- What is the difference between multi-touch attribution and incrementality testing?
- Multi-touch attribution divides credit among touchpoints that actually preceded a conversion, which assumes the conversion needed them. Incrementality testing withholds a channel from a randomised group and measures what changes, which is the only method that separates conversions a channel caused from conversions it merely witnessed. They answer different questions and are worth running together.
Related terms
- Attribution window — An attribution window is the length of time after an ad click or impression during which a resulting install or conversion is still credited to that ad interaction.
- View-through attribution — View-through attribution credits an install or conversion to an ad impression the user saw but never clicked, provided the conversion happens inside a view window that is usually much shorter than the click window.
- Deterministic attribution — Deterministic attribution credits an install to a specific click by matching an identifier that is present in both records, producing a one-to-one link rather than a statistical estimate.
- Self-attributing network — A self-attributing network is an advertising platform that performs attribution on its own servers and reports the installs it claims to have caused, rather than passing a click identifier for a third party to match.