Nabil Asofi

Journal / growth

AI agent attribution: last-click was already broken

AI agent attribution breaks differently than last-click ever did, because agents now originate touches a CRM never sees. Here's what to track instead.

Last-click attribution was always a lie everyone agreed to tell. It gave one channel full credit for a decision that twelve touches built, because that was the easiest thing to measure. AI agent attribution doesn’t fix that lie, it adds a new one. Now some of those twelve touches were never logged as touches at all, because an agent sent them, scored them, or routed them before anything hit a CRM.

That’s the actual shift. Automating the funnel doesn’t make attribution harder in the way more channels make it harder. It makes it harder because the thing doing the touching stops being a channel with a UTM parameter and starts being a process with no event log.

Why ai agent attribution breaks differently

The old attribution problem was a credit-assignment problem. You had touches, you had a conversion, and the argument was about which touch mattered most. Every touch at least existed as a row in some table.

Agentic automation removes that guarantee. An agent that qualifies a lead, drafts a follow-up, and books a call might do all three without any of them generating a trackable event outside its own session. The lead shows up in the CRM at step three, looking like a clean inbound booking, when steps one and two actually did the work. You’re not misattributing credit anymore. You’re attributing credit to touches that are missing entirely.

This is the same failure mode that shows up in agentic outbound: the agent’s output is cheap to produce and invisible to the systems built to measure channel performance, so the system reports a channel doing nothing while it’s actually doing most of the qualifying.

What a tracked agent touch actually requires

An agent action only counts toward attribution if it writes a timestamped, attributable event the moment it happens, not after a human reviews it. Every send, every score change, every routing decision the agent makes needs to log who (which agent, which run), what (the action taken), and when, written to a system your attribution model can actually query. If the only record of an agent’s work is its own internal reasoning trace, it doesn’t exist for attribution purposes, no matter how good the output was.

This is the same discipline that matters in lead triage: a scoring model that silently reclassifies a lead without writing why is a model you can’t audit later, and an attribution pipeline built on top of unaudited scoring will report numbers that are wrong in a direction nobody can trace.

Multi-touch attribution assumed touches were visible

Multi-touch attribution models split credit across the touches in the CRM, weighted by position or by some trained model of influence. That math is fine. The input to it is the problem. If three of the touches an agent generated never made it into the dataset, the model isn’t under-crediting the agent, it’s not crediting it at all, and every other channel’s share goes up proportionally to fill the gap. Your attribution report will look internally consistent and still be wrong, because the missing data wasn’t random. It was missing a specific category: agent-originated activity that happened faster than your logging kept up.

What to actually track instead of fixing the model

Don’t start by rebuilding the attribution model. Start by making every agent write an event log before it acts, as a blocking step in the workflow, not a nice-to-have. If the agent can’t write the event, it doesn’t get to take the action. That’s a tooling problem, but it’s a cheap one compared to retraining an attribution model on data you already know is incomplete.

Then measure the gap you’ve been blind to: compare conversions your attribution model currently explains against conversions you can trace through agent logs once they exist. The difference is the size of the problem, and it’s usually bigger than expected, in the same way that measuring quality instead of speed usually turns up a bigger gap than the team doing the automating assumed, because nobody was counting the failure mode until someone built the counter.

Attribution was never going to be solved by a smarter model sitting on top of incomplete data. It gets solved, partially, by making the data complete enough that imperfect models stop being wrong for a reason you could have prevented.

Also on this subject