Marketing Channel Classification Standard
version 1.0.0 · status stable · updated 2026-06-07
Channel grouping is the join between how traffic was acquired and how you report on it. If the
rules differ between GA4, Adobe, and your warehouse, your channel numbers will never reconcile. This
standard defines a portable, ordered rule set that you can adopt as-is or fork. It is the reference
behind the Channel / Referrer Classifier and pairs with the
Campaign URL Standard — clean utm_medium values are what make
classification deterministic.
The channel set (default groups)
Direct, Organic Search, Paid Search, Organic Social, Paid Social, Email, Affiliates,
Referral, Display, Paid Video, Organic Video, Audio, SMS, Push, Cross-network,
Organic Shopping, Paid Shopping, (Unassigned).
Matching logic (ordered — first match wins)
Classification is a prioritized waterfall: evaluate rules top-down and assign the first one that
matches. Order matters — Paid Search must be tested before Organic Search, because a paid click
also carries a search source.
1. Direct : source = "(direct)" AND medium ∈ {"(none)","(not set)"}
2. Cross-network : campaign matches /cross-network/i OR medium = "cross-network"
3. Paid Shopping : (source ∈ SHOPPING_SET OR campaign matches /^(.*(([^a-df-z]|^)shop|shopping)).*$/i)
AND medium matches /^(.*cp.*|ppc|retargeting|paid.*)$/i
4. Paid Search : source ∈ SEARCH_SET AND medium matches /^(.*cp.*|ppc|retargeting|paid.*)$/i
5. Paid Social : source ∈ SOCIAL_SET AND medium matches /^(.*cp.*|ppc|retargeting|paid.*)$/i
6. Paid Video : source ∈ VIDEO_SET AND medium matches /^(.*cp.*|ppc|retargeting|paid.*)$/i
7. Display : medium ∈ {"display","banner","expandable","interstitial","cpm"}
8. Paid Other : medium matches /^(.*cp.*|ppc|retargeting|paid.*)$/i
9. Organic Shopping : source ∈ SHOPPING_SET OR campaign matches the shopping pattern above
10. Organic Social : source ∈ SOCIAL_SET OR medium ∈ {"social","social-network","social-media","sm","social network","social media"}
11. Organic Video : source ∈ VIDEO_SET OR medium matches /^(.*video.*)$/i
12. Organic Search : source ∈ SEARCH_SET OR medium = "organic"
13. Email : source = "email" OR medium ∈ {"email","e-mail","e_mail","e mail","newsletter"}
14. Affiliates : medium = "affiliate"
15. Referral : medium ∈ {"referral","app","link"}
16. Audio : medium = "audio"
17. SMS : source = "sms" OR medium = "sms"
18. Push : medium ∈ {"push","mobile","notification"} OR source ends with "-push"
19. (Unassigned) : anything that matched nothing above
SEARCH_SET, SOCIAL_SET, VIDEO_SET, SHOPPING_SET are maintained source lists (Google, Bing,
DuckDuckGo…; Facebook, LinkedIn, Reddit, TikTok…; YouTube, Vimeo, Twitch…; Amazon, Etsy, Google
Shopping…). The kit ships these as CSVs so you can version them in your repo. This waterfall is a
portable, documented equivalent of GA4’s default channel group logic — the value of writing it
down is that your warehouse and your analytics tool now classify identically.
Why your tools disagree (and how to fix it)
- GA4 default channel group is read-only and evaluated at query time; if you need different rules, create a custom channel group (it can even be backdated in GA4) rather than fighting the default.
- Adobe Analytics has no native channel grouping primitive — teams implement it with a Marketing
Channel Processing Rules stack (order-sensitive, first-match) or a classification on
tracking code. Mirror this same waterfall in those rules. - The warehouse is where you should treat this rule set as the single source of truth: encode it
once as a dbt/SQL macro, expose it as a
channelcolumn, and have BI tools read that — never re-derive channels in three places.
Conformance
A tool conforms if it evaluates rules in the order above (first-match-wins), uses externally editable
source sets, exposes the Paid* vs Organic* split, and emits (Unassigned) (never silently drops
or guesses) for traffic it cannot classify — surfacing the long tail of bad UTMs is a feature, because
it is exactly the work the Campaign URL Standard prevents.
Templates, validators, and the governance checklist.