An attribution model is the rule that decides how a sale is split among the touchpoints that came before it: the Reel the person watched, the Google ad they clicked, the email they opened. There are seven in common use and none of them is the truth. Each answers a different question, and you should know which one before you move budget on what it says. The one thing that never changes from model to model: a sale is worth 1. It gets split, not multiplied.
This article calculates all seven on the same purchase, with the exact rules Dashcrab Attribution uses. They are short formulas. The longest, data-driven, fits in four steps and one table.
What an attribution model is, and what it is not
An attribution model needs three things. A journey: the list of a person's touchpoints with your brand, in chronological order. A window: how many days back from the purchase those touchpoints are counted, 30 by default, more for a long cycle (a B2B deal can look back 180). And a rule: how 100% of the sale is split among the touchpoints that fell inside the window.
A touchpoint is a session. If someone arrives organically and clicks an ad ten minutes later, that is two touchpoints: the paid click is not lost. Coming back from a payment gateway or a Google login does not count as a touchpoint, because it brought nobody in. And a purchase with no recorded touchpoint is reported as "no path": it is not handed to Direct.
What an attribution model is not: what each ad platform does. Meta and Google Ads apply a last-touch rule to the slice of the journey each one can see, which is why both claim the same sale. An attribution model, done right, looks at the full journey from outside the platforms and splits it once.
Per conversion and per model, the credits add up to exactly 1. If your attribution report counts more sales than your store, that is not attribution. It is double counting.
The purchase we are going to split
Sofi buys a USD 120 jacket. Before buying, she went through four places. On Tuesday she saw a Reel on Instagram, tapped "Shop now", checked the size and closed the app. On Thursday she searched for the store on Google and came in through the ad. On Saturday the newsletter arrived with her size back in stock and 10% off, and she clicked. On Sunday night she typed the address by hand on her laptop and bought.
| Order | Touchpoint | Channel | Days before purchase |
|---|---|---|---|
| 1 | Instagram Reel, click | Meta | 5 |
| 2 | Search ad, click | 3 | |
| 3 | Newsletter, click | 1 | |
| 4 | Types the address and buys | Direct | 0 |
Four touchpoints, one purchase, USD 120. All four fall inside a 30-day window. It is the same journey as the interactive story "One sale, three owners", in case you would rather see it on screen than in tables.
The six fixed-rule models
Six of the seven models are rules applied to a single journey in isolation. They need to know nothing about other customers: the list of touchpoints and their dates is enough. That is why you can work them out by hand.
1. First touch
100% to the first touchpoint in the window. Sofi: Meta USD 120, everyone else USD 0. It answers "which channel starts the conversation?". It misleads when the opening channel is cheap and massive: a video with huge reach takes all the credit even though nobody buys without the next three touchpoints.
2. Last touch
100% to the last touchpoint before the purchase. Sofi: Direct USD 120. It answers "what happened right before the purchase?". It is the most used model because it is the easiest to measure, and it is the one each platform applies to its own slice of the journey. It misleads in favor of closing channels: Direct, brand search and retargeting collect demand another channel created.
3. Last non-direct touch
Walk the path backwards and give the whole sale to the first touchpoint that is not Direct. If every touchpoint was direct, the last one keeps it. Sofi: Email USD 120, because Sunday's direct visit is skipped and Saturday's email is the one before it. It is the rule GA4 uses in its acquisition reports, and the logic is that someone who types your address by hand already knew you from somewhere else.
4. Linear
Equal shares: 1 divided by the number of touchpoints. Sofi has four, so each gets 25%: USD 30 each for Meta, Google, Email and Direct. It answers "who was there?". It rewards nobody and punishes nobody, which is both its virtue and its limit: a click from 29 days ago weighs the same as one from an hour ago.
5. Time decay
Recent counts for more. Each touchpoint gets a weight of 2 to the power of minus the number of days between it and the last touchpoint, divided by the half-life. With the default 7-day half-life, a touchpoint from 7 days ago weighs half as much as one from today, and one from 14 days ago a quarter. Then all weights are divided by their sum so they add up to 1.
| Channel | Days to last touchpoint | Weight: 2^(-days/7) | Credit | USD |
|---|---|---|---|---|
| Meta | 5 | 0.61 | 18.7% | 23 |
| 3 | 0.74 | 22.8% | 27 | |
| 1 | 0.91 | 27.8% | 33 | |
| Direct | 0 | 1.00 | 30.7% | 37 |
| Total | 3.26 | 100% | 120 |
One implementation detail that matters: the distance is measured to the last touchpoint, not to the purchase. After normalizing it gives exactly the same result, and it avoids weights in a 180-day window getting so small the computer rounds them to zero. The half-life is a parameter: at 30 days the model flattens toward linear, at 2 days it looks like last touch.
6. U-shaped, or position-based
40% to the first touchpoint, 40% to the last, and the remaining 20% split evenly among the ones in the middle. Sofi: Meta USD 48, Google USD 12, Email USD 12, Direct USD 48. It answers "who opened and who closed?". With a single touchpoint it takes 100%; with two, 50 and 50. It is the model that most resembles how a marketing team describes its own funnel, which is why it feels comfortable. It is also the most arbitrary: the 40/40/20 comes from no data at all.
All six, side by side, on the same USD 120 purchase:
| Model | Meta | Direct | ||
|---|---|---|---|---|
| First touch | 120 | 0 | 0 | 0 |
| Last touch | 0 | 0 | 0 | 120 |
| Last non-direct | 0 | 0 | 120 | 0 |
| Linear | 30 | 30 | 30 | 30 |
| Time decay (7-day half-life) | 23 | 27 | 33 | 37 |
| U-shaped (40/20/40) | 48 | 12 | 12 | 48 |
Meta gets USD 120, USD 0, USD 30, USD 23 or USD 48 depending on the rule. Every row adds up to 120. That is the whole difference between one model and another: who gets it, never how much there is.
Data-driven, step by step
The six models above share a blind spot: they only look at journeys that ended in a purchase. If Meta appears in 1,000 journeys and 10 of them buy, the fixed rules see 10 journeys. Data-driven sees all 1,000. Its question is "how much would be lost without each channel?", and to answer it, it also uses the people who did not buy.
A tiny store with three customers is enough to see it. Juan went through Meta, Google and Email, and bought. Ana went through Meta and did not buy. Leo went through Google and Email and did not buy. Last touch gives everything to the email. First touch, everything to Meta. Both rules only look at Juan.
Step 1. The map. From each place, what share of people went where. Two out of three started at Meta, one at Google. Of those who were at Meta, half went on to Google and half dropped off. And so on:
| From | To | Probability |
|---|---|---|
| Start | Meta | 67% (2 of 3) |
| Start | 33% (1 of 3) | |
| Meta | 50% | |
| Meta | Drop-off | 50% |
| 100% | ||
| Purchase | 50% | |
| Drop-off | 50% |
Step 2. The probability of buying. Add up the paths that reach the purchase. Through Meta: 67% × 50% × 100% × 50% = 17%. Straight through Google: 33% × 100% × 50% = 17%. Total: 33%. That is the baseline probability.
Step 3. The removal effect. Take one channel out of the map, as if it did not exist, and recompute. Whatever flowed into that channel is lost. Without Meta only the Google path remains: 17%. The probability falls 50%. Without Google there is no way to reach the email: it falls 100%. Without Email nobody reaches the purchase: it falls 100%.
Step 4. The split. 50 + 100 + 100 = 250, and each channel takes its proportional share: Meta 20%, Google 40%, Email 40%. Out of a USD 120 sale, Meta gets USD 24 and the other two USD 48 each.
That is a first-order Markov chain: the probability of moving to the next step depends only on the step you are on, not on how you got there. The method is described in Anderl, Becker, von Wangenheim and Schumann, "Mapping the customer journey", International Journal of Research in Marketing, 2016. With a real month of data there are three practical adjustments: if a person repeats the same channel twice in a row it counts as a single step, because repeating a state does not change the probability of reaching the purchase; beyond the 30 most frequent channels or campaigns, the rest is grouped as "other" so the map stays small; and the probability is computed by iteration until it stops changing, not by solving matrices.
It does not know what would have happened without the ad. It removes a channel from a map of journeys, not from the world. And it needs volume: with 40 purchases in a month, the map is noise and a fixed rule is more honest.
Which one to use? Each answers a question
The question "which attribution model is the best?" has no answer because it is the wrong question. The right one is "what do I want to know?".
| Model | What question it answers | Where it misleads |
|---|---|---|
| First touch | Which channel starts the conversation? | Rewards cheap reach, ignores the close |
| Last touch | What happened right before the purchase? | Direct, brand and retargeting collect someone else's demand |
| Last non-direct | The same, without handing it to Direct | The channel before Direct is not always the one that convinced |
| Linear | Who was there? | A click from 29 days ago is worth the same as today's |
| Time decay | Who was there close to the purchase? | The half-life is your decision, not a data point |
| U-shaped | Who opened and who closed? | The 40/40/20 comes from no data |
| Data-driven | How much would be lost without each channel? | Needs volume and does not measure causality |
Why it matters, with an example. One month of a store, sample data computed with these same rules: 204 purchases and 2,380 journeys that did not buy. Meta takes 8 purchases under last touch and 80 under first touch. If you set the budget by last touch, you switch Meta off. If you set it by first touch, you double it. Both numbers come from the same month and the same sales. Data-driven gives it 47, because it also counts the 1,280 people who went through Meta and did not buy: it opens many conversations and closes few, and without it almost a quarter of the purchases would be lost.
| Channel | First | Last | Last non-direct | Linear | Time decay | U-shaped | Data-driven |
|---|---|---|---|---|---|---|---|
| Meta | 80 | 8 | 24 | 39 | 30 | 42 | 47 |
| 54 | 58 | 78 | 62 | 61 | 58 | 51 | |
| 12 | 24 | 58 | 23 | 28 | 20 | 27 | |
| Organic | 32 | 18 | 18 | 25 | 23 | 25 | 17 |
| Direct | 26 | 96 | 26 | 55 | 62 | 59 | 62 |
Every column adds up to 204. That is the second reason to have your own model: the sum of what Meta, Google and the email platform report for that same month is well above 204, because each applies last touch to what it sees and none of them subtracts what the other claimed. A model that splits once is the only way for the attribution total to match the store total.
And the third reason is knowing what a model does not tell you. Attribution is not causality. Researchers at Kellogg compared 15 controlled experiments on Facebook against the attribution methods used without an experiment, and even with hundreds of control variables those methods often missed the real effect. A model splits sales that already happened. It does not say which would have happened anyway. There is only one way to find that out: turn something off for two or three weeks, away from a peak date, and watch the real total.
In practice, three habits:
1. Look at two opposite models, not one. First and last touch side by side tell you each channel's role: the one that wins under first and loses under last opens; the one that does the opposite closes. That reading is worth more than any single number.
2. Use data-driven when you have volume, and compare. With hundreds of purchases a month the map stabilizes. If data-driven and linear say similar things, the split is robust. If they differ a lot on one channel, that is where to look.
3. Fix the window and the half-life before comparing periods. Changing the window from 30 to 90 days recomputes every journey and moves the credit. That is not a bug, but a chart that mixes both settings compares nothing.
To avoid building this by hand, Dashcrab Attribution records each customer's journey with a first-party pixel, installed from Google Tag Manager, and calculates all seven models on the same sales, side by side, with the window and half-life you choose. A conversion is worth 1 in every one of them.
The splits in this article come from applying each model's rules to the journey described; the monthly table is a sample dataset computed with those same rules, not a client's results. The GA4 rule is as documented in October 2026.