All articles
Attribution7 min read

First-touch vs last-touch attribution: pick the one that matches your sales cycle

First touch flatters content, last touch flatters paid search. Neither is wrong — but choosing the wrong one for your sales cycle quietly moves budget to the wrong channel.

Daniel Okafor

VP marketing at Beacon

Every attribution argument eventually collapses into the same question: do you credit the channel that introduced the customer, or the one that closed them? Both models are defensible. The mistake is picking one by accident, then treating its output as objective truth.

What each model measures

First touch credits the earliest marketing contact in the journey. Last touch credits the final one before conversion. On a short, self-serve funnel the two usually agree, which is why the debate feels theoretical until you have a real sales cycle.

On a longer cycle they disagree violently. Consider a B2B buyer who reads a comparison post in March, subscribes to a newsletter, clicks a retargeting ad in June, and converts in July. First touch gives the content team a win. Last touch gives paid social the win. Both are describing the same customer.

Match the model to the cycle length

  • Same-day, self-serve signup: last touch is close to correct, because there is barely a journey to attribute.
  • Free trial with a week of evaluation: first touch explains the acquisition, last touch explains the nudge. Report both.
  • Enterprise, multi-stakeholder, months long: first touch for acquisition strategy, plus a qualified-lead view rather than a raw conversion view.
  • Content-led growth: first touch, or content will always lose to the final paid click.

A useful default for most small teams is to report first touch as the acquisition story and count conversions against whatever closed them, while never blending the two into a single number. Blended numbers are how you end up with 140% of your leads attributed.

Why last touch wins by default

Most tools default to last touch because it is the easiest to compute: read the referrer or UTM parameters at the moment of conversion, done. It requires no session memory and no first-party storage. That convenience is the entire reason last touch is the industry default — not evidence that it is more accurate.

The irony is that last touch is often the least informative signal in the journey. A branded search click or a direct visit frequently lands at the end simply because the buyer already decided. Crediting it means paying for demand you already created.

Keeping both without a data team

You do not need a warehouse to hold two models. You need both values stored on the lead at the moment it is created: the first touch that started the session, and the last campaign that preceded the conversion. Everything after that is a group-by.

Beacon keeps both in sessionStorage as the visit happens, then writes them onto the lead record:

// captured automatically at load
firstTouch: { source, channel, campaign, landing }

// updated on every navigation with new UTMs
lastTouch: { source, channel, campaign }

Because the values are stored per lead, they survive the session. You can rebuild either report a month later without re-instrumenting anything.

A reporting setup that does not lie

  1. Report leads by first touch. This answers "which channel finds customers".
  2. Report pipeline by last touch. This answers "which channel closes them".
  3. Flag any channel where the two rankings differ by more than two positions — that gap is usually your real story.
  4. Never add first touch and last touch leads together. They are the same leads seen twice.

If a channel introduces customers but never closes them, the problem is usually the handoff, not the channel. If a channel closes everything but introduces nothing, you are probably paying for existing demand. Both findings are worth more than another dashboard.

See this working on your own site

One script tag, no cookies, no consent banner. Free up to 10,000 visits a month, and you can see which campaign produced each lead in the same dashboard.

Start free