Channels & Attribution
Every session gets a channel when it lands, from what the browser hands over: the referring site and the parameters on the URL. The classification runs once, on the first page view, and stays with the session, which is what makes a conversion attributable to whatever actually brought the person in.
The order of checks
Section titled “The order of checks”SnipForm works down this list and stops at the first match:
- Your custom rules for the property. Always first, so you can override anything below.
- Click ids:
gclid,gbraid,wbraid,msclkid,fbclid,ttclid,li_fat_id,twclid,epik. A click id can only exist because an ad was clicked, so it outranks UTM tagging that a person typed. - Channel-first parameters: shorthand tags like
?email=welcomeor?social=launchthat name the channel directly. - UTM parameters:
utm_sourceandutm_medium, with common shorthands resolved (igandinstagramland in the same place). - Referrer domain: a visit from a site SnipForm recognises is grouped the way GA4 would group it. Unknown referrers become Site Referral.
- Direct: nothing matched. Typed address, bookmark, or a source that sent no referrer.
Two special cases on step 5: a referrer on your own domain is Direct, not a referral, so moving between your own pages never invents a source; and OAuth redirect hosts (accounts.google.com, login.microsoftonline.com and the like) are Direct too.
Channel categories
Section titled “Channel categories”| Category | channel value | Typical medium | How it is reached |
|---|---|---|---|
| Direct | direct | (none) | No signals, self-referral, auth redirect |
| Organic Search | organic_search | organic | Search engine referrer, or utm_source that names one |
| Paid Search | paid_search | cpc | gclid/msclkid, or utm_medium in cpc, ppc, paid-search, sem |
| Organic Social | organic_social | social | Social referrer, or utm_medium=social, or a social utm_source |
| Paid Social | paid_social | cpc | ttclid/li_fat_id/twclid/epik, fbclid with paid signals, or utm_medium in paid-social, paid_social, fb, ig, an, msg |
email | email | Webmail referrer, or utm_medium in email, newsletter | |
| Messaging | messaging | messaging | WhatsApp, Telegram, Messenger and similar as referrer or utm_source; utm_medium in sms, push |
| Video | video | video | Video platform referrer, or utm_medium in video, youtube, vimeo |
| Display | display | display | Google click id with a display signal, or utm_medium in display, banner, cpm, programmatic |
| Affiliates | affiliates | affiliate | Affiliate network referrer, or utm_medium in affiliate, partner |
| Site Referral | referral | referral | Any other referrer, or a utm_source that fits nothing above |
Alongside the category each session stores a readable channel name (Google Ads, Instagram, Mailchimp, Acme Blog), the method that decided it (custom_rule, click_id, utm, referrer, direct), the click id parameter if one was used, and the custom rule name if one matched.
fbclid is not automatically paid
Section titled “fbclid is not automatically paid”Meta appends fbclid to organic shares as well as ads. A bare fbclid counts as Organic Social. It becomes Paid Social when it arrives with a paid signal: hsa_acc/hsa_net parameters from Ads Manager, a paid utm_medium (cpc, ppc, paid, paid_social), or a Meta placement medium (fb, ig, an, msg). The placement decides the name: Instagram Ads when hsa_src=ig or utm_medium=ig, else Facebook Ads.
Parameters SnipForm understands
Section titled “Parameters SnipForm understands”Besides the standard five UTM parameters, these shorthands are normalised before classification:
| Shorthand | Treated as |
|---|---|
source, src | utm_source |
medium, via | utm_medium |
campaign, cmp | utm_campaign |
email=, social=, paid=, search=, video=, affiliate=, referral=, sms=, push=, msg= | Channel-first: the key names the channel, the value becomes the channel name |
[email protected] is not a campaign tag; a value containing @ is skipped.
Source aliases are resolved to a canonical platform: fb/facebook → Facebook, ig → Instagram, tw/x → X, li → LinkedIn, tt → TikTok, yt → YouTube, ddg → DuckDuckGo, wa → WhatsApp, tg → Telegram, and so on. Unknown sources are title-cased with their TLD stripped: utm_source=acme-blog.com shows as Acme Blog.
Custom rules
Section titled “Custom rules”Rules let you name a channel the way your business thinks about it. They run before every built-in check and are evaluated top to bottom; the first match wins, so put specific rules above general ones.
A rule is a list of conditions that must all hold, plus the category and name to assign:
| Field | What it reads |
|---|---|
utm_source, utm_medium, utm_campaign, utm_content, utm_term | The (normalised) URL parameter |
referrer_domain | The referring domain, www. stripped |
| any other key | Any parameter on the landing URL, for tags that are not UTMs |
Operators: equals, contains, starts_with, ends_with, exists, not_exists. The existence tests are the useful catch-alls: utm_source exists and referrer_domain not_exists between them separate tagged traffic from dark traffic without listing every value.
When to reach for one:
- A newsletter tool that sends no UTMs and shows up as a referral you do not recognise.
- Affiliates or partners you want counted separately rather than lumped into Site Referral.
- An internal tool or staging domain whose visits should never count as marketing.
- A platform SnipForm has not seen before, landing in Site Referral instead of Social.
Tagging links
Section titled “Tagging links”You do not have to remember the vocabulary. Short links carry a UTM set per link, and the link editor offers preset chips (WhatsApp, Instagram, Google Ads, Newsletter, QR Code, …) that fill utm_source and utm_medium with values the classifier is known to handle.
To see what a URL will become before you publish it, use the attribution preview: POST /v2/property/attribution/preview with the URL or its parts returns the category, name, source, medium and the method that decided it. The presets are available from the same place. See Attribution API.
In the API
Section titled “In the API”Sessions are filterable by channel fields, in the query language and everywhere that accepts clauses:
channel:paid_searchchannel:organic_social,organic_searchchannel_name:"Instagram Ads"channel_method:click_idnot_channel:directFields: channel, channel_name, channel_method, channel_click_id, channel_custom_rule, plus utm_source, utm_medium, utm_campaign, utm_content, utm_term and referrer_domain. See the field catalog.