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 |
| User Referral | user_referral | referral | user_referral={member}, or affiliate=user_referral&ref={member} |
| Creators | creator | influencer | creator={handle}, or affiliate=creator / affiliate=influencer with ref={handle} |
| 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.
Define your own channels
Section titled “Define your own channels”The thirteen categories above are fixed, because everything that groups, filters, compares or rolls up traffic is built on them. What is not fixed is what you call a channel and what counts as one.
Under Signals - Channels, a property can add attribution rules. A rule is a name, a category, and one or more conditions. Rules run before the built-in chain, in the order you set, and the first match wins.
The quickest shape is the ?channel= shorthand:
https://example.com/pricing?channel=staff&ref=jane&campaign=2026-Q1Add a rule named Staff, categorised however you want it to report, with the
condition Channel equals staff. Visits arriving on that link are now named
Staff everywhere - the channels report, session detail, any conversion
segmented by channel name - while channel_category stays one of the thirteen,
so Staff still groups under bought, earned or owned and still sums correctly in
any cross-property report.
A condition can test any query parameter you invent, not just the ones
SnipForm knows. ?partner_code=acme-42 works as a condition field the moment
you type partner_code into the rule. It can also test utm_source,
utm_medium, utm_campaign, utm_content, utm_term or referrer_domain.
Every rule that pins parameters to exact values also appears in the link builder, so once a channel is named you can copy a ready-made link for it rather than reconstructing your own conditions by hand.
Why the category is not free text
Section titled “Why the category is not free text”It is deliberately not possible to invent a channel_category from a URL. If
it were, ?channel=email would collide with the built-in, a typo would become
a permanent channel, anyone holding the link could write into your primary
attribution dimension, and every new built-in channel SnipForm shipped would
retroactively change the meaning of somebody’s history. Naming is yours; the
type stays shared, which is what keeps the numbers comparable.
Your own people are their own channels
Section titled “Your own people are their own channels”Most attribution models fold member referrals and creator placements into Affiliates, which then mixes a self-serve affiliate link, a briefed creator and your own customer telling a friend into a single number you cannot act on. SnipForm splits them.
Each resolves two ways, so you can use whichever fits the link you are handing out:
?user_referral=jane-doe # direct form?affiliate=user_referral&ref=jane-doe # affiliate form
?creator=@somebody # direct form?affiliate=creator&ref=@somebody # affiliate form?affiliate=influencer&ref=@somebody # influencer is an alias for creatorAnything else on affiliate= still lands in Affiliates, so existing affiliate
links keep working untouched.
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=jane@acme.com 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.