Marketing inference
How a visit gets an acquisition channel, a set of interests and an intent score — and, just as importantly, how to check any of them when the answer looks wrong.
channel_reason.Channel attribution
Decided once, at the start of a visit, from the landing URL and the referrer. Not from the current page — by the time a beacon fires the visitor may be three pages in and the campaign parameters that brought them are long gone from the address bar.
Precedence
The order is the whole design. A paid click carries both an ad-platform click id and a referrer from the platform's own domain, so a referrer-first rule would file every Google Ads click as organic search and quietly understate ad spend against results.
| Name | Type | Required | Description |
|---|---|---|---|
| 1. Click identifier | strongest | No | gclid, gbraid, wbraid, msclkid → paid_search. fbclid, ttclid, li_fat_id, twclid → paid_social. Minted by the platform at click time; it cannot be there by accident. |
| 2. utm_medium | explicit | No | cpc/ppc/paid/cpm/cpa/retargeting/sem → paid (social if the source is a social platform, otherwise search). display/banner/programmatic → display. social → organic_social. email/newsletter/edm → email. affiliate/partner → affiliate. |
| 3. Referrer host | observed | No | Matched as a substring, because search and social hosts are heavily regionalised and an exact-match table is out of date the day it is written. |
| 4. Nothing | fallback | No | No referrer and no campaign is direct. A referrer that resolved to the site’s own host is internal. |
Channels
| Name | Type | Required | Description |
|---|---|---|---|
| direct | channel | No | No referrer, no campaign. Also where a stripped referrer lands, which is more traffic than most people expect. |
| organic_search | channel | No | Google, Bing, DuckDuckGo, Yahoo, Yandex, Baidu, Ecosia, Brave, Startpage, Qwant. |
| paid_search | channel | No | A search-platform click id, or a paid utm_medium without a social source. |
| organic_social | channel | No | Facebook, Instagram, LinkedIn, X, Reddit, YouTube, TikTok, Pinterest, Threads, Bluesky, Mastodon, and messaging apps. |
| paid_social | channel | No | A social-platform click id, or a paid utm_medium with a social source. |
| channel | No | Webmail referrers and email utm_mediums. | |
| referral | channel | No | Any other site. |
| affiliate | channel | No | utm_medium of affiliate, partner or referral-program. |
| display | channel | No | Banner and programmatic placements. |
| ai_assistant | channel | No | ChatGPT, Claude, Perplexity, Copilot, Gemini and similar. Separated from search deliberately: these visitors arrive with an answer already formed and behave nothing like a search click. |
| internal | channel | No | A referrer from the site itself. Filtered out of acquisition reporting. |
Interest inference
Read off the site's own URL structure: the first path segment of every page visited, ranked by how many of them there were, capped at eight. A visit to /pricing/business and /security/compliance produces ["pricing", "security"].
Deliberately shallow. This is not content classification — it is "they were in pricing and security", which is the part a salesperson can act on. Anything cleverer would need the text of the page, which this system does not collect.
Intent scoring
A 0–100 heuristic for how close a visit is to an enquiry, recomputed on every batch so a session still open is still scored. It is weighted towards actions that cost the visitor something, and away from raw volume — a long session with no direction is a lost visitor, not a warm one.
| Name | Type | Required | Description |
|---|---|---|---|
| Depth | + up to 38 | No | Pageviews (capped early — the tenth page is not worth what the second was), engaged time, scroll reach. |
| Deliberate actions | + up to 59 | No | Starting a form (+12), submitting one (+22), a conversion (+25), downloads, on-site searches. |
| Commercial pages | + up to 24 | No | Reaching a path the site owner marked as high intent (+14), or any of pricing, contact, demo, quote, book, signup, trial, buy, checkout (+10). |
| Return visits | + up to 14 | No | A second visit (+8), a fourth (+6). The single most under-weighted signal in most analytics tools. |
| Known identity | + 15 | No | The visitor told the site who they are. |
| Frustration | − up to 12 | No | Rage clicks subtract. A score that rose with frustration would send salespeople after the wrong people. |
| Leaving | − 4 | No | More than three outbound clicks. |
Bands: cold below 35, warm 35–64, hot 65 and above.
Configuring high-intent paths
Each site carries a list of paths that count as a conversion and feed the intent score. Set them in the Website Analytics surface, or ask HLD. Reaching one raises the score and marks the session converted without any code on your side.
Identifying organisations
Every session records the network behind the address — ASN, network operator, and a reverse DNS lookup done once per session. For B2B sites this is how an anonymous visit becomes an account name. Group by company in a breakdown to see it.