Skip to content

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.

SnipForm works down this list and stops at the first match:

  1. Your custom rules for the property. Always first, so you can override anything below.
  2. 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.
  3. Channel-first parameters: shorthand tags like ?email=welcome or ?social=launch that name the channel directly.
  4. UTM parameters: utm_source and utm_medium, with common shorthands resolved (ig and instagram land in the same place).
  5. Referrer domain: a visit from a site SnipForm recognises is grouped the way GA4 would group it. Unknown referrers become Site Referral.
  6. 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.

Categorychannel valueTypical mediumHow it is reached
Directdirect(none)No signals, self-referral, auth redirect
Organic Searchorganic_searchorganicSearch engine referrer, or utm_source that names one
Paid Searchpaid_searchcpcgclid/msclkid, or utm_medium in cpc, ppc, paid-search, sem
Organic Socialorganic_socialsocialSocial referrer, or utm_medium=social, or a social utm_source
Paid Socialpaid_socialcpcttclid/li_fat_id/twclid/epik, fbclid with paid signals, or utm_medium in paid-social, paid_social, fb, ig, an, msg
EmailemailemailWebmail referrer, or utm_medium in email, newsletter
MessagingmessagingmessagingWhatsApp, Telegram, Messenger and similar as referrer or utm_source; utm_medium in sms, push
VideovideovideoVideo platform referrer, or utm_medium in video, youtube, vimeo
DisplaydisplaydisplayGoogle click id with a display signal, or utm_medium in display, banner, cpm, programmatic
AffiliatesaffiliatesaffiliateAffiliate network referrer, or utm_medium in affiliate, partner
Site ReferralreferralreferralAny 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.

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.

Besides the standard five UTM parameters, these shorthands are normalised before classification:

ShorthandTreated as
source, srcutm_source
medium, viautm_medium
campaign, cmputm_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.

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:

FieldWhat it reads
utm_source, utm_medium, utm_campaign, utm_content, utm_termThe (normalised) URL parameter
referrer_domainThe referring domain, www. stripped
any other keyAny 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.

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.

Sessions are filterable by channel fields, in the query language and everywhere that accepts clauses:

channel:paid_search
channel:organic_social,organic_search
channel_name:"Instagram Ads"
channel_method:click_id
not_channel:direct

Fields: 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.