Share
Contents
Suppose you are running paid ads campaigns or working with social traffic. In that case, you will discover channel grouping in Google Analytics 4. You can be surprised by how it aggregates traffic sources because it differs from how we used to see it in Universal Analytics.
Therefore, we can count this as one of the differences between GA4 and UA. Thus, I dedicate this article to covering every detail of this aspect, including default channel grouping and a solution you can use to build custom channel groupings.
However, let’s start with the definition first.
What’s channel grouping in Google Analytics 4?
Channel grouping in Google Analytics means the rule-based definitions of your website’s traffic sources that let you monitor the performance of all channels sending traffic to your website.
So, basically, there are many traffic sources that you can use to acquire traffic to your website. To aggregate data and visualise the information quickly, Google Analytics 4 uses rules.
Therefore, we talk about Organic Search and mean organic traffic from all search engines instead of Google / Organic and Bing / Organic.
Where to view channel grouping in GA4?
As mentioned above, Google Analytics 4 uses it to show and visualise the data. Therefore, we can monitor the performance of our channels easily and react to unexpected changes faster.
To view the default channel groupings in Google Analytics 4, you should take the following steps: Open GA4 and go to Reports -> Acquisition -> User Acquisition / Traffic Acquisition.

Besides this method, you can also access the same data using Google Analytics 4 Exploration feature. To do it, you should follow these steps:
- Open GA4 Exploration and create a new report
- Import “Session Default Channel Grouping” as a dimension
- Import “Total users” as a metric
- Add the dimension and metric to rows and values.
After you take these steps, you will have the same data you can see in the Traffic Acquisition report. You can add more dimensions and metrics to enhance this report.

When you look more at them, you start to wonder what they mean and how to get a sense of them. Some of them can be easy for you to understand, but some won’t. Therefore, let’s look at the rules default channel grouping uses in the new Google Analytics version.
Default Channel Grouping definitions in Google Analytics 4
As I mentioned at the beginning of this article, Google Analytics 4 uses different rules to define channel groups we had in Universal Analytics and uses more practices to determine channels that UA didn’t have.
As a result, I encourage you always check Google’s official documentation when you start a new acquisition initiative to correctly attribute new traffic to the right channel in GA4 and avoid the situation that GA4 will label it Unassigned.
Below, you can find the rules Google Analytics 4 uses.
Channel | Definition |
Direct | Source exactly matches direct AND Medium is one of (“(not set)”, “(none)”) |
Cross-network | Campaign Name contains “cross-network” Cross-network includes Performance Max and Smart Shopping. |
Paid Shopping | (Source matches a list of shopping sites OR Campaign Name matches regex ^(.*(([^a-df-z]|^)shop|shopping).*)$) AND Medium matches regex ^(.*cp.*|ppc|paid.*)$ |
Paid Search | Source matches a list of search sites AND Medium matches regex ^(.*cp.*|ppc|paid.*)$ |
Paid Social | Source matches a list of social sites AND Medium matches regex ^(.*cp.*|ppc|paid.*)$ |
Paid Video | Source matches a list of video sites AND Medium matches regex ^(.*cp.*|ppc|paid.*)$ |
Display | Medium is one of (“display”, “banner”, “expandable”, “interstitial”, “cpm”) |
Organic Shopping | Source matches a list of shopping sites OR Campaign name matches regex ^(.*(([^a-df-z]|^)shop|shopping).*)$ |
Organic Social | Source matches a regex list of social sites OR Medium is one of (“social”, “social-network”, “social-media”, “sm”, “social network”, “social media”) |
Organic Video | Source matches a list of video sites OR Medium matches regex ^(.*video.*)$ |
Organic Search | Source matches a list of search sites OR Medium exactly matches organic |
Source = email|e-mail|e_mail|e mail OR Medium = email|e-mail|e_mail|e mail | |
Affiliates | Medium = affiliate |
Referral | Medium = referral |
Audio | Medium exactly matches audio |
SMS | Medium exactly matches sms |
Mobile Push Notifications | Medium ends with “push” OR Medium contains “mobile” or “notification” |
If you run Google Ads campaigns, you should know that only some of your campaigns will be assigned to the Paid Search channel. They also can be assigned to Paid Video, Display, Cross-network and Paid Social channels.
Channel | Definition |
Paid Search | Traffic is Google Ads AND Google Ads ad network type is one of (“Google Search”, “Google Partners”) |
Paid Video | Traffic is Google Ads AND Google Ads ad network type is one of (“YouTube Search”, “YouTube Videos”) |
Display | Traffic is Google Ads AND Google Ads ad network type is one of (“Google Display Network”) |
Cross-network | Traffic is Google Ads AND Google Ads ad network type is one of (“Cross-network”) Cross-network includes Performance Max and Smart Shopping. |
Paid Social | Traffic is Google Ads AND Google Ads ad network type is one of (“Social”) |
The same happens with Display & Video 360 traffic and Search Ads 360 traffic, they have their channel grouping, and you should follow the Google official documentation about default channel grouping to understand them.
Apart from that, there are two cases that everyone should know about.
First, the traffic that wasn’t assigned to any of the default channel groupings will be labelled as “Unassigned” in acquisition reports.
Second, you can see (other) in the channel grouping report. It happens due to the wrong Google Analytics 4 setup (read my article on how to set up GA4) or an issue called cardinality.
How to Deal with (other) Channel Groupings in GA4?
Cardinality means that your parameter has many values attached to it.
For instance, the device category has a cardinality number 3 because it can be one of the following values: desktop, tablet or mobile. The age dimension has a cardinality of 6 because it can be one of such values as 18-24, 25-34, 35-44, 45-54, 55-64, and 65+.
If you combine these two dimensions in one report, using one as a custom dimension, your report will have a cardinality of 18.
All of that makes sense because it helps to show data in the aggregated view and spends less time loading it.
If you discover that your report has (other) in it, you could try one of the following solutions:
- Check your custom metrics and dimensions. If you have something like user_id, or client_id there, remove it since it’s not recommended to track such parameters. You should always use the recommended event parameters and avoid using parameters that will be unique for every user.
- If you see an “(other)” row in the traffic acquisition report, consider looking at the same data in Explorations or Google BigQuery if you activated the integration.
However, if you still see cardinality and can’t eliminate it, I recommend you to read this article and consider upgrading to Analytics 360.
How to create Referral, Social, Affiliate, or Google Ads channel reports in GA4?
Google Analytics 4 Acquisition Report | Universal Analytics Acquisition Report |
![]() | ![]() |
Unlike Universal Analytics, Google Analytics 4 doesn’t have Referral, Google Ads and Social reports by default. However, you can create them using the GA4 Library feature and add them to “Life Cycle” collection to track channels that you are improving nowadays.
It’s a great feature, and you don’t need to replicate all reports you had in Universal Analytics, be mindful and add channels that matter to you. For instance, if you are a gambling website, it doesn’t matter to you add Paid Social and Google Ads reports because your business is not eligible to run paid ads campaigns. Still, you can build a Referral report because it’s the primary channel that drives conversions.
Here, I will show you how to build a Google Ads report and add it to the “Life Cycle” collection but if you are interested in the Referral report, you can read more about it in this article.

- Open GA4 and go to Reports -> Library
- Create a new detail report and select “Traffic acquisition” as a template
- Remove all dimensions and leave only “Session campaign”
- Add filter “Session source / medium” includes “google / cpc” (you can include more)
- Save the report and give it a name and description (optional)
- After that, go to “Life Cycle” collection and add your newly created report to the collection.
- Re-publish “Life Cycle” collection.
If you follow all steps, you will receive close to the report you see above. As a result, every morning you can access it easily. As I mentioned, you can replicate it for other reports you used in Universal Analytics.
Of course, once you find something unusual happening with your channel traffic, you want to understand the cause. In this case, I recommend you use Google Analytics 4 Exploration feature. Let’s look at that more specifically.
How to use GA4 Explorations to analyse channels?
In the second section of this article, I showed you how you could access default channel grouping in Google Analytics 4 using the GA4 Exploration reporting interface. The same way you switch between source/medium, source, landing page and other dimensions and metrics.
If something unusual happens with one of your channels, I recommend looking the following way.
- Identify the channel that dropped or improved in traffic
- Identify what exactly source(s) made this change
- Look more deeply at sources and identify if the referral page changes or something has changed in your paid ads campaigns.
- If nothing changed, look at the landing pages of your traffic and see if something changed there.
- Analyse the funnel that the traffic goes through and see if any change was recently made.
These can look like simple steps, but if you make everything right, you will find the reason and be able to fix it, or if it was an increase in conversions, you could try to maintain it to improve the bottom line.
Limitations of GA4’s Channel Grouping
There are a few limitations of channel grouping functionality in Google Analytics 4 that you should know to attribute website traffic to the right channel correctly.
First, you can’t change the default channel grouping in GA4. It means that you can’t add new channels, and you can’t edit the rules of the existing channels. It’s not a limitation; consider it as rules provided by Google to use GA4 efficiently and enable machine-learning algorithms for you. At the end of the day, if you use these rules, you will get more mellow insights.
Therefore, follow the GA4 default channel grouping definitions and use UTM parameters mindfully.
Second, there is no possibility to create your own custom default channel grouping in Google Analytics 4. There is a workaround for that.
Custom Channel Grouping in Google Analytics 4
Because channel groupings are just rules used to group source/medium and campaign parameters, you can create custom channel groups in Google Analytics 4 since March 14th, 2023.

Take the following steps to configure custom groups in GA4:
1. Open Google Analytics 4
2. Go to Admin -> Data Settings -> Channel Groups
3. Click on “Create new channel” button and start to configure them
4. Start to configure new channel groups by reordering them, naming them, and setting them up.
5. Add a new channel group, click on the button “Add new channel”.
Note: If you don’t see “Channel Groups” under “Data Settings”, give it a bit of time (1,2,3 or even 4 weeks) until Google releases it to all GA4 properties worldwide.
Apart from setting up custom channel groups in Google Analytics 4 using its interface, you can also create these rules in BigQuery and visualize them using Looker Studio. If you don’t use BigQuery, you don’t need to read the article further.
Although you can use Google Data Studio for free, and you don’t need to integrate it with GA4, it’s not the case for BigQuery. If you want to use BigQuery, you can’t access historical data; first, you should integrate GA4 with BigQuery and wait 24 hours to get the first data.

After that, you should use SQL syntax to build custom groupings. Here is a variant of the code you can use.
You can run the SQL function below directly in the BigQuery interface and it will automatically create the function within the dataset you specified in the CREATE OR REPLACE FUNCTION.
create or replace function `<your-project>.<your-dataset>.channel_grouping`(tsource string, medium string, campaign string) as (
case
when (tsource = 'direct' or tsource is null)
and (regexp_contains(medium, r'^(\(not set\)|\(none\))$') or medium is null)
then 'direct'
when regexp_contains(campaign, r'^(.*shop.*)$')
and regexp_contains(medium, r'^(.*cp.*|ppc|paid.*)$')
then 'shopping_paid'
when regexp_contains(tsource, r'^(google|bing)$')
and regexp_contains(medium, r'^(.*cp.*|ppc|paid.*)$')
then 'search_paid'
when regexp_contains(tsource, r'^(twitter|facebook|fb|instagram|ig|linkedin|pinterest)$')
and regexp_contains(medium, r'^(.*cp.*|ppc|paid.*|social_paid)$')
then 'social_paid'
when regexp_contains(tsource, r'^(youtube)$')
and regexp_contains(medium, r'^(.*cp.*|ppc|paid.*)$')
then 'video_paid'
when regexp_contains(medium, r'^(display|banner|expandable|interstitial|cpm)$')
then 'display'
when regexp_contains(medium, r'^(.*cp.*|ppc|paid.*)$')
then 'other_paid'
when regexp_contains(medium, r'^(.*shop.*)$')
then 'shopping_organic'
when regexp_contains(tsource, r'^.*(twitter|t\.co|facebook|instagram|linkedin|lnkd\.in|pinterest).*')
or regexp_contains(medium, r'^(social|social_advertising|social-advertising|social_network|social-network|social_media|social-media|sm|social-unpaid|social_unpaid)$')
then 'social_organic'
when regexp_contains(medium, r'^(.*video.*)$')
then 'video_organic'
when regexp_contains(tsource, r'^(google|bing|yahoo|baidu|duckduckgo|yandex|ask)$')
or medium = 'organic'
then 'search_organic'
when regexp_contains(tsource, r'^(email|mail|e-mail|e_mail|e mail|mail\.google\.com)$')
or regexp_contains(medium, r'^(email|mail|e-mail|e_mail|e mail)$')
then 'email'
when regexp_contains(medium, r'^(affiliate|affiliates)$')
then 'affiliate'
when medium = 'referral'
then 'referral'
when medium = 'audio'
then 'audio'
when medium = 'sms'
then 'sms'
when ends_with(medium, 'push')
or regexp_contains(medium, r'.*(mobile|notification).*')
then 'mobile_push'
else '(other)'
end
);

After your function is saved, you should run this SQL code, and you apply it to your GA4 data
with
-- select session in last 30 days
sessions as (
select
user_pseudo_id as ga_client_id,
concat(user_pseudo_id,'.',(select cast(value.int_value as string) from unnest(event_params) where key = 'ga_session_id')) as session_id, -- combine user_pseudo_id and session_id for a unique session-id
timestamp_micros(min(event_timestamp)) as session_start,
array_agg(
if(event_name in('page_view','user_engagement','scroll'), struct(
event_timestamp,
lower((select value.string_value from unnest(event_params) where key = 'source')) as source,
lower((select value.string_value from unnest(event_params) where key = 'medium')) as medium,
lower((select value.string_value from unnest(event_params) where key = 'campaign')) as campaign,
(select value.int_value from unnest(event_params) where key = 'entrances') as is_entrance,
(select value.int_value from unnest(event_params) where key = 'ignore_referrer') as ignore_referrer
), null)
ignore nulls) as channels_in_session,
countif(event_name = 'purchase') as conversions,
sum(ecommerce.purchase_revenue) as conversion_value
from
`<your-project>.analytics_<your-dataset>.events_*`
where
_table_suffix between
format_date('%Y%m%d', date_sub(current_date(), interval 30 day))
and format_date('%Y%m%d', date_sub(current_date(), interval 1 day))
group by
user_pseudo_id,
session_id
),
-- get first campaign parameters from session and aggegrated metrics
traffic_acquisition as (
select
(select t.source from unnest(channels_in_session) as t where t.ignore_referrer is null order by t.event_timestamp asc limit 1) as source,
(select t.medium from unnest(channels_in_session) as t where t.ignore_referrer is null order by t.event_timestamp asc limit 1) as medium,
count(distinct session_id) as sessions,
sum(conversions) as conversions,
ifnull(sum(conversion_value), 0) as conversion_value
from
sessions
group by
1, 2
)
-- map source / medium to channel grouping using a user defined function (ignore campaign)
select
*,
<your-dataset>.channel_grouping(source, medium, null) as channel_grouping
from
traffic_acquisition
After that, you can use custom grouping for reporting purposes.

Wrapping Up
Default Channel Grouping in Google Analytics 4 differs from what we used to see in Universal Analytics. Therefore, it can require you to update the UTM parameters you used before.
Moreover, the GA4 interface doesn’t allow you to access some reports Universal Analytics had, for instance, Referral, Social, or Google Ads. You can create these reports using GA4 Library functionality.
Besides that, if you find some unusual behavior in one of your traffic channels, you can use GA4 Explorations to analyze it more carefully, starting from identifying the primary sources that brought the change and looking deeper at the landing page and funnel reports.
And last but not least, if you want to compare GA4 Channel performance to the one you had in Universal Analytics or you want to use custom default channel groupings in Google Analytics 4, you can configure custom channel groups in the GA4 interface or in BigQuery.
That will help you better understand your acquisition, business, and end customers.
If you find this article useful, feel free to share your thoughts below.
Frequently Asked Questions
Channel grouping in Google Analytics means the rule-based definitions of your website’s traffic sources that let you monitor the performance of all channels sending traffic to your website.
To view the default channel groupings in Google Analytics 4, you should take the following steps: Open GA4 and go to Reports -> Acquisition -> User Acquisition / Traffic Acquisition.
Yes, from March 14th, 2023, you can create custom channel groups in GA4. And you can use BigQuery or Google Looker Studio (Google Data Studio) to create custom channel groupings as well.
Since March 14th, 2023, you can create custom channel groups in GA4. In order to create them follow these steps:
1. Open Google Analytics 4
2. Go to Admin -> Data Settings -> Channel Groups
3. Click on “Create new channel” button and start to configure them
4. Start to configure new channel groups by reordering them, naming them, and setting them up.
5. Add a new channel group, click on the button “Add new channel”.
You Might Also Like

Written By
Ihar Vakulski
With over 8 years of experience working with SaaS, iGaming, and eCommerce companies, Ihar shares expert insights on building and scaling businesses for sustainable growth and success.
KEEP LEARNING
Demographic and geo data is one of the most frequently used data types in Google Analytics 4. When companies target different markets, they want to…
Referral traffic has a significant meaning for every business. Moreover, correctly tracking referral traffic in Google Analytics 4 gives a competitive advantage because you can…
Leave a Comment
Your email address will not be published. Required fields are marked *
Stay Updated About Every New GA4 Feature
Subscribe to this newsletter to learn more about new Google Analytics 4 features and adjustments.
No SPAM and only relevant content guaranteed!
7 Replies to “Default and Custom Channel Grouping in Google Analytics 4: Complete Guide”
Great writeup! Thanks!
I am having an issue. When I add the following parameters: “?utm_source=twitter&utm_medium=social&utm_campaign=test” I am only seeing campaign properly reported on. GA4 is not seeing the source or medium correctly. And then the default channel grouping is unassigned. Any ideas?
Thanks so much!
Hi Eric,
First, there is an insufficient amount of information to properly figure out what causes it. I recommend trying these UTM parameters first:
?utm_source=t.co&utm_medium=social&utm_campaign=ericbirthday
If this doesn’t work, try to look at the way how the page loads; maybe your website overwrites UTM parameters or GA4 code doesn’t load well.
If nothing above helped, consider contacting me through the form on the website.
Hi
We have an issue where the session default channel grouping total – even though we’ve used total users the Explore chart – is different from the total users if in the normal reporting -why is that and is there a correction?
many thanks in advance
Hi Jonathan,
Thank you for the question!
First, the data is accurate across reports in my GA4 property.
Second, I have a few ideas why you can see a discrepancy between reports in your GA4 property:
1. Consider using the “Traffic acquisition” report, not “User acquisition” report. “Users” metric in this report is “Active users” metric in GA4 Explore
2. GA4 Explore: create the tabular report using the following dimension and metric: “Session default channel”, “Active users”
3. Look at the date ranges you use. Two reports shouldn’t include “Today” or “Yesterday’ because the data, most likely, is not complete.
Please let me know if this fixes the issue. Otherwise, don’t hesitate to contact me for the troubleshooting service.
Best regards,
Ihar
Everything is very open with a precise description of the issues.
It was really informative. Your site is extremely helpful.
Thank you for sharing!
Hi Ihar, do you know how to report on e-commerce transaction item information by default channel group or source/medium?
When you create a report in Explore showing product revenue and quantity by the item ID, item name, or item category it doesn’t allow you to add the Default channel group, Campaign, Source or Medium as a secondary dimension.
It basically means that we cannot work out ROI for campaigns for specific product types(which are segmented for us by markets). It’s useless for us to know what overall channels are contributing to revenue because we have both new sales and renewals of current customers.
In UA, I can go to Acquisition>All Traffic>Channels, select primary dimension as default channel grouping and secondary dimension as page and this will display details of which URL brought how many traffic from what source/medium. How do I get this data in GA4, cause I don’t see any “Page” dimension to apply to get page level data.