Skip to content
SourceLoop

Free tool

Free GA4 Channel Grouping Validator

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

Inputs

UTM source and medium

Where the click came from. Lowercase recommended.

Marketing channel. GA4 reads this hardest.

Result

GA4 channel assignment

Default Channel Group Paid Search

Check Result

How it works

Three steps to predict GA4 channel attribution before you publish

Match GA4's actual rules. The validator runs them locally in your browser, no data sent anywhere.

  1. utm_source = google
    utm_medium = cpc
    01

    Paste source + medium

    Two values. Lowercase recommended (GA4 is case-sensitive on parts of the rule set).

  2. 1 medium matches paid?
    2 source on search list?
    Paid Search
    02

    Run GA4's rules

    17 channels checked in priority order. First match wins. Validator shows which rule fired.

  3. G

    Paid Search

    Confirmed match

    • Source google
    • Medium cpc
    • Bucket Paid Search
    03

    Fix before you publish

    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

Six common channels (and the most common bug)

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.

Best practices

Five rules to keep GA4 channel grouping clean

  1. 01

    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)'.

  2. 02

    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.

  3. 03

    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.

  4. 04

    Lowercase everything

    GA4 is case-sensitive on source and medium. 'Google' and 'google' become two separate sources, which fragments every report.

  5. 05

    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

You fixed channel grouping. SourceLoop tracks attribution beyond GA4's last-click default.

SourceLoop channel attribution dashboard going beyond GA4 last-click to multi-touch attribution

Guide

How GA4 Default Channel Grouping actually works

The 17-channel order

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 most common bugs

  • medium=newsletter: lands in '(unassigned)'. Use medium=email instead.
  • medium=paid: matches the paid regex (^paid.*$) so this works, but custom medium=paid-other lands in 'Paid Other' which is rarely what you want.
  • source=Google: GA4 is case-sensitive. 'Google' won't match the search engine list, falls through to Referral.
  • medium=social with non-social source: lands in Organic Social if source is on the list, otherwise '(unassigned)'.
  • Missing medium: with source set but no medium, GA4 treats it like Direct.

The paid-medium regex

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.

Source lists that matter

GA4 maintains three internal source lists that determine channel grouping for paid and organic traffic:

  • Search engines: google, bing, yahoo, duckduckgo, baidu, yandex, naver, ecosia, ask, aol
  • Social platforms: facebook, instagram, twitter, x, linkedin, tiktok, pinterest, reddit, snapchat, whatsapp, threads
  • Video platforms: youtube, vimeo, twitch, dailymotion, wistia

Sources not on these lists with paid mediums land in 'Paid Other'. With organic mediums, they land in 'Referral'.

Custom Channel Groups vs Default

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)'.

A worked example

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

GA4 channel grouping, FAQ

How does this GA4 channel grouping validator work?

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.

What is GA4 Default Channel Grouping?

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.

Why does my campaign land in '(unassigned)'?

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.

How do I rename '(unassigned)' to something useful?

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.

Why does 'paid' as medium not work?

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)'.

Does this match GA4 exactly?

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).

Is this validator free?

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.

Track every conversion to its true source

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

Untagged

Kayden Floyd

kayden@abc.com

  • SourceUnknown
  • MediumUnknown
  • CampaignUnknown
  • Landing pageUnknown
Journey
No touchpoints captured

With SourceLoop

Auto-tagged

Kayden Floyd

kayden@abc.com · Acme Co.

  • Channel Paid Social
  • CampaignFree_demo
  • Landing page/pricing
Journey
Synced to HubSpot Google Ads Meta