Multi-Touch Attribution Setup Across Your Stack

Multi-touch attribution setup is five jobs done in order: capture every touch, resolve them to one person, join revenue, apply a credit model, then reconcile against what the ad platforms claim.

KISSmetrics Editorial

|14 min read

Multi-touch attribution setup is five jobs done in order: capture every touch, resolve those touches to one person, join that person to revenue, apply a credit model, and reconcile your answer against what the ad platforms report. Miss any one of them and you get a number that falls apart the first time a finance team pokes at it.

This is the implementation guide, not the theory. It covers the plumbing: which touches to capture and where they leak, how an anonymous session gets stitched to a known account, how closed revenue flows back onto the journey, and why your totals will never match the sum of the platform dashboards. If you still need to choose between linear, time-decay, position-based, and data-driven credit, read the multi-touch attribution guide first and come back.

One thing about this work has changed. Most of steps one and four used to be manual: write an event taxonomy, agree a UTM convention, get engineering to instrument it, then hand-build the join query. Autocapture and auto-configuration now cover a large share of the capture step, and an AI chat that builds the credit-split metric for you covers a large share of the model step. What is left is the part that still needs judgment: identity, revenue definitions, and the reconciliation conversation.

The newsletter

Join our KISS newsletter

One short read a week on what actually moves revenue, in a free email. Read by 10,000+ operators and founders.

No spam. Unsubscribe in one click.

The Five Steps of a Multi-Touch Attribution Setup

1

Capture

Every marketing and product touch lands in one event stream, with source, medium, campaign, and the ad platform click ID intact.

2

Resolve

Anonymous sessions stitch to a single person the moment they identify, and the prior history reattaches retroactively.

3

Join Revenue

Closed-won amounts, subscriptions, and refunds attach to that same person so credit can be expressed in currency.

4

Model

An attribution window plus a credit rule turns each ordered journey into per-touch revenue. Save the query so it re-runs.

5

Reconcile

Compare your totals to Google Ads, Meta, and LinkedIn. Explain the delta once, then track whether the delta is stable.

Step 1: Capture Every Touch

A touch is any interaction you would be willing to pay for again. That includes the obvious ones (a paid click, an organic session, an email click) and the ones teams forget: a webinar registration, a docs page read, a pricing page revisit three weeks later, a sales call logged in the CRM, a trial account created on a different device. If a touch is not in the event stream it cannot receive credit, and whatever came next gets credited instead.

The Parameters That Actually Matter

Source, medium, and campaign get all the attention, but the field that saves you during reconciliation is the ad platform click ID: gclid for Google Ads, fbclid for Meta, li_fat_id for LinkedIn, msclkid for Microsoft Ads, ttclid for TikTok. These are the only keys that let you match a session on your site to a specific billed click inside a platform account. Capture them on landing, persist them on the person, and carry them through form submissions. UTM tags tell you what you intended to spend on. Click IDs tell you what you were actually charged for.

The traditional way to get this working was a tracking plan: a spreadsheet of event names and properties, reviewed by three people, then implemented by engineering over a sprint or two. That work is worth doing eventually, but it should not be the thing standing between you and a first attribution number. KISSmetrics auto-configures by scanning your site, so pages, clicks, and form submissions are captured before anyone writes a taxonomy, and autocapture keeps recording interactions you did not think to name. You refine the naming later, against real data, instead of guessing up front. If you do want the formal version, the tracking plan template and the custom event tracking guide cover it.

5
Setup Steps
Capture, resolve, join, model, reconcile
5
Click IDs to Persist
gclid, fbclid, li_fat_id, msclkid, ttclid
4
LLM Referrers to Split Out
ChatGPT, Claude, Gemini, Perplexity
The concrete moving parts of an attribution setup, before any model is chosen

Step 2: Resolve Touches to One Person

Identity resolution is the step that decides whether the rest of the setup is worth anything. A buyer reads a blog post on their phone, browses pricing on a work laptop, clicks a LinkedIn ad the following week, then fills out a demo form from a third browser. Without resolution that is four visitors with one touch each. With resolution it is one person with a four-touch journey, and only the second version can be modeled.

The Three Keys Worth Wiring

First, a first-party anonymous identifier that survives across sessions in the same browser. Second, an identify call the moment a person gives you an email: form fill, trial signup, login, or an email click carrying a hashed address in the query string. Third, an account-level key so several people at the same company roll up into one buying group, which matters for any B2B deal with more than one stakeholder.

The property that separates a real attribution setup from a session-based one is retroactive stitching. When an anonymous visitor identifies on day nine, the eight days of prior behavior must reattach to that person rather than stay stranded in an anonymous bucket. KISSmetrics is built on person-level identity for exactly this reason: anonymous history joins to the identified person automatically, and the People report shows the full ordered timeline for any individual. That report is also the fastest way to check whether your stitching works. Open three known customers, read their timelines, and see whether the first touch looks plausible.

Step 3: Join the Person to Revenue

Attribution that stops at conversions is a traffic report. The join to revenue is what makes it a budget tool, because a channel producing many cheap signups and a channel producing few expensive contracts look identical until money is attached.

Send revenue events from the system of record. For self-serve, that is your billing provider: Stripe, Chargebee, Paddle, or your own subscription tables. For sales-assisted, it is the CRM closed-won amount. Either way the revenue event must carry the same identity key you resolved in step two, or the join silently fails and you end up attributing zero dollars to channels that clearly produce customers.

Decide What Counts, Once

Before you model anything, settle four definitions and write them down: whether you attribute first payment or first-year contract value, how you treat expansion and downgrades, whether refunds and chargebacks claw credit back, and what the attribution window is. Ninety days is a common starting window for B2B software with a multi-stakeholder cycle and thirty days is common for ecommerce, but the right answer comes from your own data. Look at the actual spread between first touch and conversion for closed customers, then set the window near the point where the tail stops adding meaningful volume.

The Revenue report is where these definitions get checked, and revenue attribution reports covers how to structure the output. If the revenue number in your attribution model does not tie to the revenue number in billing within a percent or two, stop and fix the join before going further. Every downstream conclusion inherits that error.

Step 4: Apply a Credit Model

With ordered journeys and revenue attached, the model itself is arithmetic. Linear splits revenue evenly across touches. Time-decay weights recent touches more heavily using a decay half-life you choose. Position-based gives 40 percent to the first touch, 40 percent to the last, and spreads 20 percent across the middle. Data-driven fits the weights from your own conversion paths, which needs enough monthly conversions to stay stable. The full argument for each sits in the multi-touch attribution guide, and first-touch vs last-touch attribution covers the two single-touch models you are replacing.

FeatureBest ForWeakness
LinearA first implementation, any volumeTreats a banner impression like a demo
Time-DecayLong cycles with heavy nurtureUndervalues whatever created the demand
Position-BasedB2B with a clear first and last touchThe 40/20/40 split is a convention, not a finding
Data-DrivenHigh conversion volume, stable channel mixHard to explain, moves when the mix moves

Running It Without Building a Pipeline

The old shape of this step was a data engineering project: export events to a warehouse, write the journey assembly query, write the credit-split query, schedule both, then build a dashboard on top. That is still a valid path if you already have the warehouse and the team. The faster path is to ask for it in plain language. In KISSmetrics you describe the split you want (“attribute first-payment revenue across every source a person touched in the 90 days before their first payment, weighted evenly”) and the AI chat builds the metric against the touch events it already captured, works out the harder parts of the query itself, and saves the result as a report so it re-runs on new data instead of being a one-off number somebody pasted into Slack. Related reading: AI SQL generation.

Run at least two models side by side for the first quarter. If linear and position-based both rank organic content above paid social, the ranking is a property of your data rather than of your model choice, and you can act on it. If they disagree, the disagreement is itself the finding, and it usually points at a channel that appears mostly in the middle of journeys.

The Channel Most Setups Drop: LLM Referrals

People now find products by asking ChatGPT, Claude, Gemini, or Perplexity, then arriving on your site already half-convinced. Most attribution setups drop these visits on the floor. Sometimes the referrer is stripped entirely and the session lands in direct. Sometimes it arrives with a hostname nobody has mapped to a channel, so it sits in an other bucket. Sometimes the person reads the answer, never clicks at all, and types your domain a week later, which looks like brand direct traffic that appeared from nowhere.

The result is a channel that produces qualified, late-stage visitors and receives credit for none of them. Worse, because these visits often land close to conversion, they quietly inflate whichever channel your model credits next. If your direct traffic has grown and nobody can explain why, this is the first place to look.

Fixing it during setup is two changes. First, add the assistant hostnames to your channel mapping so they resolve to a named acquisition channel instead of direct or other. Second, separate crawler traffic from human traffic, because an AI crawler indexing your docs and a human arriving from an AI answer are different events with different value. AI crawlers vs AI referrals covers that distinction, and LLM visibility vs LLM acquisition covers why being cited is not the same as being visited.

KISSmetrics ships an LLM Acquisition report that does this measurement directly. It counts the humans arriving from ChatGPT, Claude, Gemini, and Perplexity, and because those people run through the same identity resolution as everyone else, their sessions enter the attribution model as real touches with real downstream revenue. On the tracking side, see tracking AI assistant traffic and AI agent analytics.

Step 5: Reconcile With the Ad Platforms

Your model will report fewer conversions than Google Ads, Meta, and LinkedIn each claim, and the sum of the platform claims will exceed your actual total. This is not a bug in your setup. It is four structural differences stacking up, and the job is to name them rather than to close the gap.

First, every platform credits itself with last-touch logic inside its own walls, so a customer touched by three platforms is counted three times across three dashboards. Second, platforms count view-through conversions, where an ad rendered but was never clicked, and your site-side capture has no record of that. Third, the default lookback windows differ, commonly seven days post-click and one day post-view on Meta against thirty days on Google, so the same conversion falls inside one window and outside another. Fourth, platforms model the conversions they cannot observe, particularly on iOS, and modeled conversions are estimates presented as counts.

The ad platforms are not lying to you. They are answering a different question: what happened after someone saw our ad? Your model answers a narrower one: what did this person actually touch, in what order, before they paid?

- The reconciliation problem, stated plainly

What to Do About It

Build one reconciliation table per platform, per month, with four columns: platform-reported conversions, your matched conversions using the click ID, your model-attributed conversions, and the ratio between the first and the third. Then stop trying to make the ratio one. Track whether it holds steady. A Meta ratio that sits in a narrow band for six months is a usable discount factor you can apply when reading the platform dashboard. A ratio that suddenly doubles is a signal that something broke: a tag stopped firing, a landing page dropped the click ID, consent settings changed, or the platform changed its modeling.

The Campaign Performance report holds the site-side half of this comparison, showing spend-facing campaigns against the behavior and revenue you actually recorded. For the specific case of Google Ads clicks not matching sessions, see the ads click discrepancy breakdown. And when the model and the platforms disagree about a channel that matters, resolve it with an incrementality test: pause or geo-hold the channel and measure what happens to total conversions. That is the only method that answers whether the spend caused anything, and it is worth running once a year on your two largest line items.

Reporting the Result

The model output needs two presentations, because the two audiences ask different questions.

Executives want to know where the next dollar goes. Give them attributed revenue against spend by channel, the trend across the last four to six months, and three sentences of interpretation. One page. No methodology unless they ask, and if they do ask, the honest answer is that the ranking is reliable and the absolute values are estimates.

Channel owners want to know what to change on Monday. The paid media specialist needs campaign and ad-group level attributed revenue next to spend. The content lead needs to know which pages appear most often in journeys that end in revenue, which is a different list from the pages with the most traffic and is usually the more interesting one. The lifecycle owner needs to see which sequences move people from a first touch to a second. Building each of these by hand used to mean a separate report request per person. Asking the AI chat for them in plain language and saving each one so it refreshes is the version that survives contact with a busy quarter.

Attributed Revenue by Channel (Illustrative Layout)

Metrics view
Organic content
340,000$340K
Paid search
280,000$280K
Email lifecycle
195,000$195K
Paid social
165,000$165K
LLM referrals
120,000$120K
Events and webinars
85,000$85K

One reporting habit worth adopting: pair the attribution view with a real-time one. The Live view shows who is on the site right now and where they came from, which is how you catch a broken redirect or a stripped click ID within an hour of a campaign launch rather than in next month’s attribution report. Attribution is a retrospective instrument. It makes a poor smoke alarm.

Where Attribution Setups Break

Most failed attribution projects fail in the same handful of ways, and all of them are cheaper to prevent than to diagnose six months in.

Missing Touch Categories

If offline touches never enter the stream, every trade show, sales call, and piece of direct mail scores zero and the online channels around them get overcredited. If impression-level data from display and social is absent, awareness channels look weaker than they are. You do not have to capture everything perfectly. You do have to know what is missing, so that when someone points at a channel with no attributed revenue you can say whether it earned nothing or was never measured.

Identity That Silently Degrades

Identity resolution rarely breaks loudly. A form stops passing the email to the identify call, a subdomain loses the shared cookie, an app release drops the user ID on one path. The symptom is a slow rise in single-touch journeys and in direct traffic. Add a standing check: what share of converting people have more than one touch, and is that share trending down? If it is, cross-domain tracking is the usual culprit.

The Wrong Attribution Window

Too short and early touches fall outside the window and score zero, which makes content and brand look worthless. Too long and ancient irrelevant touches dilute the signal. Derive the window from the observed distance between first touch and conversion for your actual customers, and consider different windows for segments with genuinely different buying processes.

Treating the Output as Truth

Every attribution model is a simplification. The useful claim is comparative: this channel contributes more than that one, and the gap is wide enough to move budget. The unsupportable claim is precise: this webinar produced $18,400. Present the output as directional, validate the important calls with incrementality tests, and use channel mix optimization to turn the ranking into an allocation decision. Marketing ROI measurement covers the finance-facing version of the same numbers.

One analytics idea a week

Short, specific, written by the team building the product. No digest, no roundup.

Continue Reading

multi-touch attributionmarketing attributiondata workflowROI measurementad platforms
KISSmetrics

Build your business intelligence layer for free.

KISSmetrics records every touch against the person as it happens, so multi-touch works from one event stream rather than from a join across four tools.