Without SourceLoop
UntaggedKayden Floyd
- SourceUnknown
- MediumUnknown
- CampaignUnknown
- Landing pageUnknown
Free tool
Plug in utm_source and utm_medium, see exactly which GA4 Default Channel Group the visit lands in. Catch '(unassigned)' bugs before they fragment your attribution reports.
Try a preset
GA4 channel assignment
—
—
| Check | Result |
|---|
How it works
Match GA4's actual rules. The validator runs them locally in your browser, no data sent anywhere.
utm_source = google utm_medium = cpc
Two values. Lowercase recommended (GA4 is case-sensitive on parts of the rule set).
17 channels checked in priority order. First match wins. Validator shows which rule fired.
Paid Search
If the result is '(unassigned)' or wrong, fix the medium or source before the campaign goes live. Far cheaper than rebuilding reports later.
Channel reference
GA4 has 17 default channels. These six cover 95% of B2B and B2C traffic. The seventh, '(unassigned)', is what you get when none of them match.
Paid Search
Source is a search engine (google, bing, yahoo, duckduckgo, baidu) AND medium matches paid pattern (cpc, ppc, paid_search, etc).
Paid Social
Source is a social platform (facebook, instagram, linkedin, tiktok, x, pinterest) AND medium matches paid pattern.
Organic Search
Source is a search engine OR medium = organic. Most search-engine traffic without paid attribution lands here automatically.
Organic Social
Source is a social platform AND medium is non-paid (social, social-media). Use 'social' as medium for organic posts.
Either source = email/e-mail/newsletter OR medium = email. Both work. Stick to medium=email for consistency.
Unassigned
What you get when nothing matches. The most common bug. Custom mediums like 'newsletter' as medium (instead of email) land here.
Best practices
Stick to GA4's standard mediums
cpc, ppc, paid_search, paid_social, paid_video, organic, social, email, referral, affiliate, display. Anything outside this list risks landing in '(unassigned)'.
Validate every campaign URL before publishing
A typo in a paid Google template means weeks of fragmented reports. Five seconds of validation saves the cleanup work.
Use 'email' for medium, not 'newsletter'
'newsletter' as medium lands in '(unassigned)'. Use medium=email and put 'newsletter' in utm_campaign or utm_source instead.
Lowercase everything
GA4 is case-sensitive on source and medium. 'Google' and 'google' become two separate sources, which fragments every report.
Build Custom Channel Groups for non-standard sources
If you have to use 'newsletter' or 'partner' as medium, create a custom channel group in GA4 (Admin → Channel Groups) so they roll up correctly.
Built by the team behind SourceLoop
Guide
GA4 evaluates channels in a fixed priority order: Direct → Cross-network → Paid Shopping → Paid Search → Paid Social → Paid Video → Display → Paid Other → Organic Shopping → Organic Social → Organic Search → Organic Video → Email → Affiliates → Referral → Audio → SMS → Mobile Push → Unassigned. The first channel whose rules match wins. This is why a paid-medium google source lands in Paid Search, not Organic Search, even though google is on the search-engine list.
The single most important pattern in GA4 channel grouping is
the paid-medium regex: ^(.*cp.*|ppc|paid.*)$.
This catches cpc, ppc, paid_social, paid_search, cpm,
paid-video, etc. Anything matching this pattern is treated as
paid. The trick: 'cpv' matches (because 'cp' appears in it),
and so does 'cpa' and 'cpd'. So if you use medium=cpv, you'll
end up in Paid Search or Paid Other depending on source.
Stick to cpc, ppc, paid_search, paid_social for predictable
behavior.
GA4 maintains three internal source lists that determine channel grouping for paid and organic traffic:
Sources not on these lists with paid mediums land in 'Paid Other'. With organic mediums, they land in 'Referral'.
If your team uses non-standard mediums (medium=newsletter, medium=podcast, medium=event), you have two choices: rename them to GA4's standard vocabulary at the source, or build a Custom Channel Group in GA4 (Admin → Channel Groups). Custom groups override the Default Channel Group in any report you configure to use them. The Default Channel Group always still runs the original rules though, so legacy reports continue to show '(unassigned)'.
Source = facebook, medium = social. GA4 evaluates: not Direct (source is set), not Cross-network (no campaign name), not Paid Shopping (medium doesn't match paid regex), not Paid Search, not Paid Social (medium isn't paid), not Paid Video, not Display (medium isn't display/cpm/banner), not Paid Other, not Organic Shopping (source isn't a shopping site), matches Organic Social (source is on the social list AND medium is non-paid). Final bucket: Organic Social. Change medium to 'paid_social' and the result jumps to Paid Social. Change source to 'Facebook' (capital F) and it doesn't match the social list, falling through to Referral. Same intent, three different buckets depending on small details.
FAQ
Enter utm_source and utm_medium. The validator runs the same regex and source-list rules GA4 uses internally to assign a Default Channel Group. It tells you exactly which channel the visit will land in, plus which rule matched and why. You can paste internal staging URLs or sensitive tracking links - the validator runs entirely in your browser.
GA4's automatic categorization of incoming traffic into channels like Paid Search, Paid Social, Organic Search, Email, Direct, Referral, and Unassigned. It uses utm_source and utm_medium values, plus an internal list of recognized search engines, social platforms, and video sites. Unlike Universal Analytics' simpler rules, GA4 has 17+ channels and stricter regex matching.
Three common reasons: (1) utm_medium doesn't match any GA4 channel pattern, the most common case being 'newsletter' as medium instead of 'email', (2) source is a custom value not on any of GA4's recognized lists, or (3) one of utm_source or utm_medium is missing. The validator will tell you specifically which check failed.
You can't rename '(unassigned)' itself, but you can create a Custom Channel Group in GA4 (Admin → Channel Groups) with rules that catch your custom values. For example, a rule like 'medium = newsletter, name = Email' will move newsletter traffic out of '(unassigned)'. Default Channel Group still shows the original buckets, so you'll need to switch reports to your custom group.
GA4 specifically requires medium to match the regex ^(.*cp.*|ppc|paid.*)$. The string 'paid' alone matches because it starts with 'paid'. But common variants like 'paid-social' work, while 'social-paid' or just 'social' wouldn't. The safest paid mediums are: cpc, ppc, paid_search, paid_social, paid_video, paid_shopping. Stick to these and you'll never end up in '(unassigned)'.
Match the publicly documented Default Channel Group rules as of late 2024. GA4 occasionally tweaks the rules, especially around new platforms (Threads, Mastodon). For 95% of cases the validator matches GA4 exactly. If you see a discrepancy with your live GA4 reports for a real visit, double-check there's no Cross-network or campaign-name override (those can't be detected from source/medium alone).
Yes. No signup, no email gate. We host it because the same teams trying to keep GA4 channel groupings clean also need real attribution to know whether 'Paid Search' campaigns actually drove revenue, which is what SourceLoop does.
Capture and send full attribution data from every signup, lead, booking, and sale to your CRM and ad platforms, so you know exactly what's driving revenue.
Without SourceLoop
UntaggedKayden Floyd
With SourceLoop
Auto-taggedKayden Floyd