Channel Groupings
Channel groupings in GA4 classify traffic sources into categories like Organic Search, Paid Social, Email, and Direct. They are derived — not collected directly — which means the classification logic can produce wrong answers if your UTM parameters are inconsistent or your traffic sources do not match Google’s assumptions.
Understanding how channel groupings work (and where they fail) is essential for accurate acquisition analysis.
How GA4 classifies channels
Section titled “How GA4 classifies channels”GA4 applies a priority-ordered ruleset to every session. The first rule that matches determines the channel:
| Rule priority | Channel | Conditions |
|---|---|---|
| 1 | Direct | Source = direct AND Medium is unset or not a medium |
| 2 | Cross-network | Campaign name contains “cross-network” |
| 3 | Paid Shopping | Source matches a shopping site AND Medium is cpc, ppc, or paid |
| 4 | Paid Search | Source matches a search engine AND Medium is cpc, ppc, or paid |
| 5 | Paid Social | Source matches a social network AND Medium is cpc, ppc, or paid |
| 6 | Paid Video | Source matches a video site AND Medium is cpc, ppc, or paid |
| 7 | Display | Medium is display, banner, or expandable |
| 8 | Paid Other | Medium is cpc, ppc, or paid (not matched above) |
| 9 | Organic Shopping | Source matches a shopping site AND Medium is organic |
| 10 | Organic Social | Source matches a social network |
| 11 | Organic Video | Source matches a video site |
| 12 | Organic Search | Source matches a search engine AND Medium is organic |
| 13 | Source or Medium contains “email” or “e-mail” | |
| 14 | Affiliates | Medium is affiliate |
| 15 | Referral | Medium is referral |
| 16 | Audio | Medium is audio |
| 17 | SMS | Source = sms or medium = sms |
| 18 | Mobile Push Notifications | Medium ends with “push” or is “mobile”, “notification” |
| (None) | Unassigned | No rule matched |
The “source matches a search engine” rule uses Google’s maintained list of recognized search engines. Sources not on that list are not classified as Organic Search, even if they are search engines.
Why traffic gets misclassified
Section titled “Why traffic gets misclassified”Missing or inconsistent UTM parameters
Section titled “Missing or inconsistent UTM parameters”If a paid campaign links have no UTM parameters (or have utm_medium=link instead of utm_medium=cpc), GA4 may classify paid traffic as Referral or Direct. Consistent UTM tagging is the most important factor in accurate channel classification.
Standard paid search UTM:
utm_source=google&utm_medium=cpc&utm_campaign=brand_usIf someone tags it as utm_medium=paid_search instead of cpc, it will not match the Paid Search channel rule — it falls to “Paid Other” or “Unassigned.”
Email campaigns without utm_medium=email
Section titled “Email campaigns without utm_medium=email”Email newsletters tagged with utm_source=newsletter&utm_medium=nl will not match the Email channel rule (which requires medium to contain “email” or “e-mail”). They will be classified as “Referral” or “Unassigned.”
Correct email UTM: utm_source=mailchimp&utm_medium=email&utm_campaign=march_newsletter
Organic social appearing as Referral
Section titled “Organic social appearing as Referral”If your social media profiles link to your site without UTM parameters, GA4 classifies them using the referrer. Most social networks are on GA4’s “social” source list, so organic social visits usually classify correctly as Organic Social — but some smaller networks may not be recognized and will appear as Referral.
Subdomains appearing as Referral
Section titled “Subdomains appearing as Referral”If cross-domain tracking is not configured, traffic from your own subdomains (e.g., blog.example.com to shop.example.com) appears as Referral from a subdomain. Configure cross-domain tracking in your stream settings.
Custom channel groupings
Section titled “Custom channel groupings”GA4 allows you to create custom channel groups to override or extend the default classification. This is useful when:
- Your UTM structure uses non-standard medium values
- You want industry-specific channels (e.g., “Podcast Advertising”)
- You need to combine channels for reporting (e.g., all paid channels as “Paid Media”)
Creating a custom channel group
Section titled “Creating a custom channel group”-
Go to Admin → Channel Groups → Create new channel group.
-
Name the channel group.
-
Define channel rules. Each channel has a name and conditions based on source, medium, campaign, or other traffic parameters.
-
Set the priority order — rules are evaluated top to bottom.
-
Save and set as the default channel group if desired.
Custom channel groups appear as an option in the Traffic Acquisition report’s “Session default channel group” dimension. You can switch between the default system group and your custom group.
Fixing common misclassifications
Section titled “Fixing common misclassifications”Fix: Email going to Unassigned
Section titled “Fix: Email going to Unassigned”If your email platform uses utm_medium=email_newsletter or any variant, add a custom channel rule:
Channel name: EmailRule: Medium contains "email" OR Medium contains "e-mail" OR Medium contains "newsletter"Fix: Paid media going to Unassigned due to non-standard medium
Section titled “Fix: Paid media going to Unassigned due to non-standard medium”If your agency uses utm_medium=paid_social instead of cpc:
Channel name: Paid SocialRule: (Medium = "paid_social" OR Medium = "cpc" OR Medium = "ppc") AND Source matches regex "facebook|instagram|twitter|linkedin|tiktok"Fix: Partner traffic appearing as Referral
Section titled “Fix: Partner traffic appearing as Referral”If you have specific partner domains that should be their own channel:
Channel name: Partner ReferralRule: Source matches regex "partner1\.com|partner2\.com|distributor\.example\.com"Channel groupings in BigQuery
Section titled “Channel groupings in BigQuery”The default channel grouping in GA4 uses a logic that you can replicate in BigQuery. Here is a simplified version for common channels:
-- Channel classification in BigQueryWITH traffic_data AS ( SELECT event_date, user_pseudo_id, (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS session_id, traffic_source.source AS source, traffic_source.medium AS medium, traffic_source.name AS campaign FROM `project.dataset.events_*` WHERE event_name = 'session_start' AND _TABLE_SUFFIX BETWEEN '20240101' AND '20240131')
SELECT event_date, CASE WHEN source = '(direct)' AND (medium = '(none)' OR medium = '(not set)') THEN 'Direct' WHEN REGEXP_CONTAINS(LOWER(medium), r'email|e-mail|e_mail') THEN 'Email' WHEN LOWER(medium) IN ('cpc', 'ppc', 'paid') AND REGEXP_CONTAINS(LOWER(source), r'google|bing|yahoo|baidu') THEN 'Paid Search' WHEN LOWER(medium) IN ('cpc', 'ppc', 'paid') AND REGEXP_CONTAINS(LOWER(source), r'facebook|instagram|twitter|linkedin|tiktok|pinterest|snapchat') THEN 'Paid Social' WHEN LOWER(medium) = 'organic' AND REGEXP_CONTAINS(LOWER(source), r'google|bing|yahoo|duckduckgo|baidu') THEN 'Organic Search' WHEN REGEXP_CONTAINS(LOWER(source), r'facebook|instagram|twitter|linkedin|tiktok|pinterest|snapchat') THEN 'Organic Social' WHEN LOWER(medium) = 'referral' THEN 'Referral' WHEN LOWER(medium) = 'affiliate' THEN 'Affiliates' ELSE 'Unassigned' END AS channel, COUNT(DISTINCT CONCAT(user_pseudo_id, '.', CAST(session_id AS STRING))) AS sessionsFROM traffic_dataGROUP BY event_date, channelORDER BY event_date, sessions DESCSee Custom Channel Grouping in BigQuery for a more complete implementation.
Monitoring for misclassification
Section titled “Monitoring for misclassification”Run this BigQuery query periodically to identify traffic going to Unassigned:
SELECT traffic_source.source AS source, traffic_source.medium AS medium, COUNT(DISTINCT CONCAT(user_pseudo_id, '.', CAST((SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS STRING) )) AS sessionsFROM `project.dataset.events_*`WHERE event_name = 'session_start' AND _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)GROUP BY source, mediumHAVING sessions > 10ORDER BY sessions DESCAny source/medium combination with significant volume that should be in a named channel but is not indicates a tagging or classification issue.
AI traffic sources
Section titled “AI traffic sources”Traffic from AI chat tools (ChatGPT, Perplexity, Claude, Microsoft Copilot, Google Gemini) increasingly appears in GA4 — usually classified as Referral or, confusingly, sometimes as Organic Search. Creating a dedicated AI channel gives you visibility into this growing traffic source.
Custom channel group for AI traffic
Section titled “Custom channel group for AI traffic”Create a custom channel rule with these conditions:
Channel name: AI ReferralRule: Source matches regex "chatgpt\.com|chat\.openai\.com|perplexity\.ai|claude\.ai|copilot\.microsoft\.com|gemini\.google\.com"Priority: Place above Organic Search and Referral rulesBigQuery classification
Section titled “BigQuery classification”Add AI sources to your BigQuery channel classification:
WHEN REGEXP_CONTAINS(LOWER(source), r'chatgpt\.com|chat\.openai\.com|perplexity\.ai|claude\.ai|copilot\.microsoft\.com|gemini\.google\.com') THEN 'AI Referral'Place this rule before the Organic Search and Referral cases in your CASE statement.
Common mistakes
Section titled “Common mistakes”Expecting UTM tags to fix themselves
Section titled “Expecting UTM tags to fix themselves”UTM tagging requires discipline across your entire marketing team. A single campaign with utm_medium=social (instead of cpc for paid social) will misclassify permanently for those sessions. Establish a UTM taxonomy document and audit campaigns regularly.
Not knowing which channels are in GA4’s default lists
Section titled “Not knowing which channels are in GA4’s default lists”GA4’s recognized source lists for search engines, social networks, and video platforms are maintained by Google and update over time. New platforms may not be on the list. Check the GA4 channel definitions documentation and supplement with custom channel rules for any platform not recognized.
Creating custom channels that overlap
Section titled “Creating custom channels that overlap”If two custom channel rules can match the same session, the first rule wins. Order matters. Put more specific rules (e.g., specific campaigns) above more general rules (e.g., medium = cpc).