Attribution & the marketing funnel

The full-funnel view from impressions to closed deals, with true ROAS and channel breakdowns.

I'm using the platform as a
All help topics

The Attribution tab is where the platform earns its name. It stitches your ad spend, website behaviour and CRM deals into a single funnel, so you can see what's actually driving revenue - not just what each ad platform claims.

How the tab is ordered

The tab reads top to bottom as five numbered sections, so you can stop wherever you have what you need:

  1. What happened - a plain-English read on the period, then the six headline numbers behind it. If you only read one thing, read this.
  2. Where it came from - spend against revenue per channel, click-to-deal conversion, any off-platform spend you've logged, and the acquisition funnel.
  3. How far to trust it - your UTM health, the touchpoints the funnel can't see (AI Search, Web Concierge, Voice Outreach), and the paid halo below.
  4. What it's worth - the verdicts: best and worst ROAS channel, customer payback, owned channels, and your biggest wins and losses.
  5. Every channel, side by side - the full sortable table, deliberately last. The sections above already say what it means.

A section only appears when you have the data for it, so a newer account sees a shorter page rather than empty headings.

The funnel

Attribution reconciles platform spend (Google, Meta, TikTok, and so on) plus any off-platform spend you've logged in Budget, then maps the journey:

Impressions - clicks - sessions - leads - deals

Each step shows the numbers and the drop-off, so you can spot where the funnel leaks.

True ROAS

Because deals come from your CRM, the platform can show blended ROAS and tie revenue back to the channels that sourced it - a far more honest number than platform-reported conversions, which tend to over-claim.

Blended ROAS here means revenue from the channels you pay for, divided by what you spent on ads, across all your paid channels combined. Revenue that your CRM attributes to unpaid sources - referrals, organic search, direct visits, email - is deliberately left out, because your advertising didn't pay for it. That keeps the number honest: it reflects what your ad spend actually brought in, not word-of-mouth you'd have won anyway. The figure shows the exact sum it's built from, so you can always see the revenue and the spend behind it. A paid channel that brings in no tracked revenue still counts in your spend, so an untagged campaign shows up as a lower number rather than quietly disappearing.

First-touch vs last-touch

A model switcher sits above the funnel. It re-credits channel revenue and ROAS across the whole tab - the funnel, the channel table and the spend-vs-revenue chart - so you can ask two different questions:

  • First-touch (the default) - which channel introduced the contact?
  • Last-touch - which channel was present when the deal closed?

What you see depends on the CRM:

  • HubSpot records distinct first and last sources (hs_analytics_source vs hs_latest_source), so both views are genuinely different.
  • Salesforce and GoHighLevel store a single source per deal, so the tab shows "Single-touch (first = last)" - both toggle positions return the same numbers.

Linear, Position-based and Time-decay appear but are locked ("unlock multi-touch - needs full-journey tracking"). These need per-contact journey data the platform doesn't yet capture, so they're intentionally not computed rather than estimated.

When your paid spend moves and your direct traffic moves the same way in the same window, some of that "direct" is almost certainly ad-driven: people who saw an ad, then came back later by typing your address or searching your name. Analytics records them as Direct visits, so your ads look less effective than they really are. The platform calls this a paid halo and raises it as a card on this tab (and, when it's the strongest thing you have waiting, as the flagship insight on Today).

It's deliberately hard to trigger. All of these have to be true:

  • Paid spend moved by at least 20%, and by at least 500 in your currency.
  • Direct sessions moved by at least 10%, and by at least 50 sessions.
  • Direct outpaced every other channel combined by at least 8 percentage points, worth at least 50 sessions. This is the test that matters: on a growing site everything rises together, so a direct rise that merely keeps pace with your organic and paid traffic is not evidence of anything, and no finding is raised.
  • Direct gained (or lost) at least a full point of your traffic mix. Smaller drift is treated as noise.
  • The two periods are comparable: your traffic sources have to account for at least 80% of your recorded sessions, and channels that appear from nothing may be no more than 20% of traffic. Otherwise the comparison is a tracking change rather than a real shift, and it's refused.

It's labelled Estimated and its confidence is capped at 70%, because this is a correlation between two periods, not user-level tracking. It is a strong prompt to go and check, never a proven fact.

Crucially, only the unexplained part is ever priced. If direct rose 800 sessions and the rest of your site grew enough to account for 500 of them, the finding is about the remaining 300 - not the headline 800.

The full breakdown

See the full breakdown on either card expands the evidence in place - it doesn't take you anywhere:

  1. What we compared - both windows side by side: spend, direct sessions, direct's share of traffic, and direct measured against the rest of your site. That last figure is what makes it a finding rather than a coincidence.
  2. Where the money actually moved - spend per ad platform, and what share of the total move each one is responsible for. The headline says "paid spend rose 31%"; this says who did it.
  3. How the whole traffic mix moved - every channel's sessions and share, before and after, with Direct highlighted. This is the evidence the finding rests on: direct rising means little if everything rose.
  4. What it's worth if it's true - the unexplained direct sessions (not the headline rise), priced at direct traffic's own conversion rate, at 25%, 50% and 100% credit. Where your ad platforms report conversions, it restates your cost per conversion for each case. If your analytics doesn't report conversions against direct traffic, this section says so rather than inventing a number.
  5. Why we think this - each of the tests above, replayed against your actual numbers, plus how the confidence score was arrived at.
  6. What would change our mind - the things that should make you discount it, such as branded search staying flat over the same dates, or a PR hit or email send that explains the rise on its own.
  7. What to do next - in order of effort, and only ever pointing at tabs you actually have.

If you disagree with the finding, use Is this right? on the card. Corrections go to the Brain and change what it tells you next time, rather than being filed away.

Filters and breakdowns

  • UTM medium pills - filter the funnel to a channel (paid, organic, email, etc.). When a filter is active, sessions and contacts are estimated proportionally and clearly labelled "Estimated".
  • Channel table - ROAS, cost and contribution per channel, including owned channels like email and the Web Concierge. Each row shows revenue and what it was last period, plus a share of change column: how much of the total swing in revenue that one channel is responsible for. A table of current values can tell you what happened; that column tells you who did it.
  • Export CSV - the channel table exports in full, in the order you sorted it, with CPC and any off-platform spend added as columns of their own. See Exporting a table to CSV.
  • Pipeline view - blended ROAS against your open pipeline, not just closed revenue.

What it needs

Attribution is at its best when you've connected:

  • At least one ad platform (for spend), or logged off-platform spend in Budget.
  • A CRM (for deals and revenue).

If something's missing you'll see a "connect this" prompt rather than a broken chart. Keeping your UTMs clean makes the channel split much sharper - the CRM tab shows a UTM health score to help.