# Traffic channels and sources

> How Privatus Analytics classifies every visit into a traffic channel from UTM parameters and the referrer, including AI assistants and custom channel rules.

Every visit gets one **channel**, from the landing page's campaign
parameters and the referrer. Rules are checked in this order, and the first
match wins.

| Channel | Rule |
|---|---|
| `paid_search` | A paid click id (gclid, msclkid…) or paid `utm_medium` from a search engine |
| `paid_social` | A paid click id or paid `utm_medium` from a social network |
| `paid_other` | Any other paid traffic. Paid mediums: cpc, ppc, paid, paidsearch, paid_search, cpm, cpv, display, banner, affiliate, paid_social, paidsocial |
| `email` | `utm_medium` containing email, or `newsletter`. Webmail: mail.google.com, outlook.live.com, outlook.office.com, mail.yahoo.com, mail.proton.me, app.fastmail.com, mail.aol.com |
| `ai_assistants` | Any `.ai` referrer, chatgpt.com, chat.openai.com, perplexity.ai, claude.ai, gemini.google.com, bard.google.com, copilot.microsoft.com, you.com, phind.com, meta.ai, grok.com, chat.mistral.ai, chat.deepseek.com, poe.com. Also utm_source chatgpt, chatgpt.com, openai, perplexity, claude, gemini, copilot, grok, deepseek, mistral |
| `organic_search` | google, bing, duckduckgo, yahoo, yandex, baidu, ecosia, qwant, startpage, brave, naver, seznam, ask, aol, search.yahoo, kagi, mojeek, sogou, so.com. Also utm_medium organic, search |
| `organic_social` | facebook.com, instagram.com, t.co, twitter.com, x.com, linkedin.com, lnkd.in, reddit.com, youtube.com, tiktok.com, pinterest.com, snapchat.com, threads.net, bsky.app, mastodon.social, news.ycombinator.com, whatsapp.com, telegram.org, discord.com, quora.com, tumblr.com, vk.com, weibo.com, producthunt.com. Also utm_medium social, social_media, sm, social-network |
| `internal` | A referrer on one of the site’s own domains |
| `referral` | Any other referrer or `utm_source` |
| `direct` | No referrer and no campaign parameters |

Click ids (`gclid`, `gbraid`, `wbraid`, `msclkid`, `fbclid`, `ttclid`,
`li_fat_id`, `twclid`, `dclid`) mark a visit as a paid click. They're kept
only as a yes/no flag. The id itself is discarded.

## Referrers, sources and campaigns

- **Referrer** is the hostname the visitor came from, with `www.` and `m.`
  removed. The referrer's query string is never stored. Referrers from the
  site's own domains are *internal* and don't start a new source.
- **UTM parameters** (`utm_source`, `utm_medium`, `utm_campaign`,
  `utm_content`, `utm_term`) come from the landing page URL.
- **`ref`** is taken from `ref`, `via` or `source` query parameters.

A visit keeps the source it started with (first touch): later pages of the
same visit don't change it.

## Custom channel rules

**Site settings → Channels** lets you add your own rules, checked before
the built-in ones. Each rule has a channel name and one or more conditions
(all must match) on:

- `referrer_host`, `utm_source`, `utm_medium`, `utm_campaign`, `ref`, `path`
- with `is`, `contains`, `starts_with` or `regex` (case-insensitive).

Example: channel **Partners** when `ref starts_with partner-`. Rules apply
to new visits. The preview shows how recent traffic would be classified.
