Attribution
A model decides who wins the credit for a sale; the taxonomy decides who is in the race. Five models on one $140 order, three taxonomy what-ifs, and what clicks can't see.
On this page
One order from Stride’s spring sale, and the four visits before it:
First touch
Week 1
Facebook ad
facebook / paid_social
Week 2
Newsletter
newsletter / email
Week 4
Google search ad
google / cpc
Last touch
Week 5
Instagram retargeting ad
instagram / paid_social
Outcome
Order: trail runners, $140
First touch
Week 1
Facebook ad
facebook / paid_social
Week 2
Newsletter
newsletter / email
Week 4
Google search ad
google / cpc
Last touch
Week 5
Instagram retargeting ad
instagram / paid_social
Outcome
Order: trail runners, $140
Alex clicked a Facebook ad in the sale’s first week. The newsletter came a week later. Two weeks after that, Alex searched “stride running shoes” and clicked a Google ad. A week later an Instagram retargeting ad brought Alex back, and on that visit Alex ordered a pair of trail runners for $140.
Chapter 10 ended on a question. The data is clean and owned. Which campaign gets the credit for a sale?
Look at the four touches again. Every one of them carries spring_sale-runners-2025_03.
So the question as asked has one answer, and it was settled the day the links were made: the spring sale gets the $140.
The question teams fight over is the next one down. Which touch? Which source? Which channel?
That fight usually runs as an argument about models. Last click is unfair to Facebook. Data-driven is smarter. Pick the right model and the report says what worked; if a channel looks weak, try another model and watch it recover.
But every model splits the same recorded touches, grouped by the same values:
- A paid ad shipped untagged reads as free under every model.
- A campaign under two spellings splits its own credit under every model.
- A dimension that never reached the link can’t be credited by any model.
So the argument moves budget on inputs no model can repair. Often it does so under a model nobody chose, because the report already in use reads one way by default.
A model decides who wins. The taxonomy decides who is in the race.
Five ways to split $140
Analytics ties a buyer’s visits together, with a cookie in one browser or a login, and lines up the visits before an order, each under the values it arrived with. That list is the path, and it’s all any model ever sees. A visit analytics couldn’t tie to Alex, one on another device, isn’t in it. Neither is a touch with no click at all.
An attribution model is a rule for splitting one order’s credit among the touches in its path. Before you read the splits, guess what the newsletter gets under each. Here are the five rule-based models, run on Alex’s $140:
| Model | Rule | Winner |
|---|---|---|
| Last click | all to the last touch | Instagram, $140 |
| First click | all to the first touch | Facebook, $140 |
| Linear | equal shares | none: $35 each |
| Position‑based | 40% to each end, 20% to the middle | Facebook and Instagram, $56 each |
| Time decay | halves per half-life before the order | Instagram, $83 |
First touch
Week 1
Facebook ad
facebook / paid_social
Week 2
Newsletter
newsletter / email
Week 4
Google search ad
google / cpc
Last touch
Week 5
Instagram retargeting ad
instagram / paid_social
Outcome
Order: trail runners, $140
How each model splits the $140
- Last clickFacebook ad: $0Newsletter: $0Google search ad: $0Instagram retargeting ad: $140
- First clickFacebook ad: $140Newsletter: $0Google search ad: $0Instagram retargeting ad: $0
- LinearFacebook ad: $35Newsletter: $35Google search ad: $35Instagram retargeting ad: $35
- Position-basedFacebook ad: $56Newsletter: $14Google search ad: $14Instagram retargeting ad: $56
- Time decayFacebook ad: $5Newsletter: $10Google search ad: $42Instagram retargeting ad: $83
First touch
Week 1
Facebook ad
facebook / paid_social
- Last click
- $0
- First click
- $140
- Linear
- $35
- Position-based
- $56
- Time decay
- $5
Week 2
Newsletter
newsletter / email
- Last click
- $0
- First click
- $0
- Linear
- $35
- Position-based
- $14
- Time decay
- $10
Week 4
Google search ad
google / cpc
- Last click
- $0
- First click
- $0
- Linear
- $35
- Position-based
- $14
- Time decay
- $42
Last touch
Week 5
Instagram retargeting ad
instagram / paid_social
- Last click
- $140
- First click
- $0
- Linear
- $35
- Position-based
- $56
- Time decay
- $83
Outcome
Order: trail runners, $140
The newsletter gets nothing, then nothing, then $35, $14 and $10. Five models, five splits, and only four answers to “who won”: Instagram twice, Facebook once, a tie, and under linear nobody.
Position-based. 40% of $140 is $56, once for the Facebook ad and once for the Instagram ad. That leaves 20%, or $28, for the two touches between them: $14 to the newsletter, $14 to the Google ad.
Time decay. A touch loses half its weight for every half-life it sits before the order. The half-life is a setting; here it’s seven days. Alex’s touches sit 28, 21, 7 and 0 days before the order: four half-lives, three, one and none. So their weights are 1/16, 1/8, 1/2 and 1, which in sixteenths is 1, 2, 8 and 16 parts of 27.
| Touch | Days out | Parts | Exact | Shown |
|---|---|---|---|---|
| 28 | 1 | $5.19 | $5 | |
| Newsletter | 21 | 2 | $10.37 | $10 |
| 7 | 8 | $41.48 | $42 | |
| 0 | 16 | $82.96 | $83 |
The exact shares add to $140.00. Rounded one by one they’d add to $139, so the share that was rounded down by the most, the Google ad’s $41.48, goes up to $42, and the whole dollars sum to $140.
Each rule flatters something, and you can read what from the rule itself:
- Last click flatters whatever closes. Retargeting reaches people who’ve already visited, so it can only come after another touch, and whenever it comes last it takes everything.
- First click flatters whatever opens. The Facebook ad takes all $140 for a click four weeks before the order.
- Linear flatters the middle. The newsletter gets $35, as much as the ad that started the path.
- Position-based flatters the two ends. The middle shares 20%, however many touches it holds.
- Time decay flatters whatever sits near the order. The Google ad, a week out, gets $42; the Facebook ad, four weeks out, gets $5.
There’s a sixth kind. Data-driven attribution learns how much each kind of touch adds by comparing the paths that converted with the paths that didn’t, and it assigns credit more precisely the more conversions it has to learn from. GA4’s menu and the volume Google recommends for data-driven are in GA4 Field Notes; Adobe’s menu is in The Tool Landscape.
Your reports already use a model
Before arguing for any model, find the one already in use.
A report that groups each conversion by the source of the visit it happened in credits that visit, and only that visit. It’s a last-touch reading, whether or not anyone chose a model.
In that report, Alex’s order is one row: instagram / paid_social, $140. The Facebook ad, the newsletter and the Google ad aren’t scored low there.
They’re absent.
A team that reads that report as “what worked” is arguing from last click without ever having picked it.
Hold the model still, change the taxonomy
Keep the model fixed and change only what the links recorded.
Start with what the credit lands on. A model splits by touch; the report then adds the touches up by whatever value it groups by. Group Alex’s order by source and you get the five splits above. Group it by channel and the Facebook ad and the Instagram ad add up as Paid Social, which comes out ahead under all five models: $140, $140, $70, $112 and $88, in the table’s order.
Group it by campaign and there’s nothing to split. All four touches carry spring_sale-runners-2025_03, so every model gives the spring sale all $140.
The model matters only between touches whose values differ.
And the values are the taxonomy’s. It sets three things a model can’t touch: which touches exist, how they add up, and what you can credit by. Here’s one what-if for each, on Alex’s order, every model held still. None of them happened; Stride’s links were made right.
Which touches exist
What-if: the Facebook ad ships untagged.
The click still enters the path, under someone else’s name. It arrives as m.facebook.com / referral, and analytics files it as Organic Social, the same as a friend’s post (Chapter 2). The paid ad’s share now reads as free:
| Model | Organic Social | Paid Social |
|---|---|---|
| Last click | $0 | $140 |
| First click | $140 | $0 |
| Linear | $35 | $35 |
| Position‑based | $56 | $56 |
| Time decay | $5 | $83 |
The Facebook ad gets $0 under every model.
Look at the last-click row. Paid Social keeps all $140, because Instagram came last.
A last-touch reading can’t see the hole.
Nor can the hole be patched later. A remap reads one recorded value as another, and it works only when the value meant one thing. m.facebook.com / referral also arrives from every friend who shares the sale on Facebook, so no rule in the report can sort the paid clicks from the free ones.
The opposite mistake adds a touch that never happened. Copy the newsletter’s link onto a banner on Stride’s own site, the internal link from Chapter 8, and in a tool that records the click as a touch, a shopper who clicks it mid-visit gets a newsletter touch in the path. The newsletter then takes a share of a sale it didn’t bring.
How touches add up
What-if: the newsletter’s link goes out as Spring_Sale-runners-2025_03.
A report groups by the exact string, so the campaign is now two rows. Every model still splits the same $140, and every model now splits the spring sale’s own credit between its two spellings:
| Model | The campaign | The stray |
|---|---|---|
| Last click | $140 | $0 |
| First click | $140 | $0 |
| Linear | $105 | $35 |
| Position‑based | $126 | $14 |
| Time decay | $130 | $10 |
Under first and last click the stray takes nothing, so it hides. It shows up the day someone reads a model that pays the middle.
This one can be remapped for the history. Spring_Sale-runners-2025_03 meant one thing, so a report can read it as spring_sale-runners-2025_03 (Chapter 1). The remap repairs the report. The fix that stops the next stray is where links get made.
What you can credit by
What-if, the last one: the board asks for credit by product.
runners gets $140 under every model. The campaign value carries runners as its middle segment, and a report can parse it out (Chapter 4).
Last spring’s campaigns, cleaned up, read spring_sale (Chapter 1). Ask them the same question under any model and there’s no product row to put credit on.
A model can credit only a value that was recorded, and nothing can be added to clicks already made.
Now take the model choice away. Fix any one of the five, and all three changes still move the credit.
Then do the reverse. Change the model and leave the taxonomy alone, and the credit never reaches a touch that wasn’t recorded as itself, never merges two spellings, never invents a product.
The race was settled before the model ran.
Pick the reading by the decision
So which model? The five rules don’t rank. Each answers a different question, and the decision in front of you picks the question:
- What opens journeys? First click reads that.
- What closes them? Last click.
- How does credit spread along the whole path? Linear, position-based and time decay, each with its own weighting.
- Did anything cause the sale at all? No model answers that. They all split credit among touches that happened, and none of them knows whether the sale would have happened without one.
Then read a second model beside the first. Where the two agree, the decision doesn’t hang on the model. Where the credit moves, as the Facebook ad’s does from $140 under first click to $0 under last, the decision is sensitive to the model, and you want to know that before the budget moves.
Alex’s time decay came out exact to the cent, and it still couldn’t see a missing tag.
Attribution modeling is the part of marketing analytics where the math outpaces the usefulness. Don’t let a model tell you something your judgment already knows.
Clicks can’t see what nobody clicked
Every model works on clicks. A podcast mention, a display ad seen and not clicked, a friend’s recommendation: none of them makes a click, so none of them is in any path, and no model can credit it. When a listener hears an ad and searches for the brand a week later, the credit lands on the search.
Clicks, beside the three methods that look past them. Each sees something different, at its own cost:
| Method | Precision | Coverage |
|---|---|---|
| Clicks | each touch, split by a rule | tagged clicks only |
| Surveys | what the buyer says | any touch the buyer names |
| Incrementality test | cause, against a control group | what was tested, while it ran |
| Mix modeling | an estimate, from totals | every channel, with about two years of weekly data |
A survey asks the buyer (“How did you hear about us?” on the order or sign-up form) and catches whatever the buyer remembers and names, the podcast included.
An incrementality test compares a group that sees the ads with a control group that doesn’t. The difference between the two is the lift the ads caused: cause, the one thing no model measures, but only for what was tested, while the test ran. A team reaches for one when the question is whether a channel makes sales happen, and the ads can be held back from part of the audience.
Marketing mix modeling estimates each channel’s contribution from aggregated spend and sales over time, with no user-level data, so it sees channels nobody clicks and activities that aren’t marketing. What it gives is an estimate, and it needs about two years of weekly history to give a robust one. A team reaches for one when much of its spend buys no clicks and it has the history to model.
Stride is about to need an incrementality test.
Your situation
Five things decide how attribution reads for you:
- The decision in front of you. It picks the reading; if it’s whether a channel causes sales, a test might answer where no model can.
- How long the path is. If people buy on their first visit, first and last touch are the same touch and every model agrees. The more touches between first and last, the further the models drift apart, as Alex’s four touches show.
- How many conversions you have. Data-driven has more to learn from with more of them. A rule-based split can be checked by hand, the way this chapter checked Alex’s.
- Which model your reports already use. Grouped by each visit’s source, it’s last touch.
- How much you spend where nobody clicks. If it’s little, the path covers most of your marketing. If it’s a lot, the path can’t see it, and the methods in the table can, each at its cost.
What changes
| Decision | Before | After |
|---|---|---|
| Which model | argue for the right one; switch when a channel looks weak | pick by the decision; read a second beside it |
| The channel report | read as what worked | first find its model: grouped by visit source, it’s last touch |
| A channel’s low credit | rescue it with another model | check its touches: tagged, one spelling, carrying the dimension |
| Credit by a new dimension | decide when the board asks | put it on the link before the first click |
| Channels with no clicks | ask the attribution report | a survey, a test or a mix model, knowing each one’s cost |
Where the rule lives
A model runs in the report, weeks after the clicks, and it can only split what the links recorded. So who is in the race is settled earlier, where links get made. A touch tagged from the list, under one spelling, carrying every dimension you’ll credit by, is the rule inside the path. A fix in the report is a rule beside it: a remap, or a model switched to rescue a channel. The untagged Facebook ad shows its limit. Nothing in the report can tell that click from a friend’s post.
Check yourself
A $90 order has three touches: a Facebook ad, then the newsletter, then a Google search ad. Who gets what under last click, linear and position-based, and who wins each?
Show answerHide answer
Last click: the Google ad gets $90 and wins. Linear: $30 each, no winner. Position-based: 40% of $90 is $36 for each end, and the middle’s 20%, $18, all goes to the newsletter, so Facebook $36, newsletter $18, Google $36, and Facebook and Google tie. Three rules, three different answers, every split summing to $90.
Email looks weak under last click. Half the newsletter's links last quarter went out as Spring_Sale-runners-2025_03, and a partner's mailing went out untagged. A colleague proposes switching to data-driven to give email its due. What does the switch change, and what doesn't it?
Show answerHide answer
It moves credit among the touches already recorded. The stray spelling still splits the campaign’s credit into two rows, under any model; remap it for the history, since it meant one thing. The untagged mailing’s clicks aren’t email in any path, and can’t be remapped. The fix for both is where the links are made.
You sponsor a podcast. Under every model it shows almost no credit, while searches for your brand rose the month the ads started. Why, and what could measure it?
Show answerHide answer
Listeners don’t click the ad; they search later, so the credit lands on the search touch and the podcast is in no path. A survey question catches some of them. An incrementality test, if the podcast can be held back from a control group, or a mix model over long enough history, estimates the rest, each at its cost.
In one line
A model decides who wins; your taxonomy decides who is in the race. Know which model your reports use, read a second beside it, and make every touch tagged, spelled one way and carrying the dimensions you'll credit by.
Before the next chapter
Find out which model your main channel report uses, or whether it groups by each visit's source. Then check last quarter's top campaign for a second spelling or an untagged channel.
facebook or fb?