Tracking basics
GA4 source and medium explained in plain English
Every visit in GA4 carries two small labels: a source and a medium. Get them right and your reports sort themselves into sensible channels. Get them wrong and good campaigns hide in a channel called Unassigned. This guide explains both labels in plain English and shows which values to use.
The short version
Source is where the visit came from. It names the place: google, instagram, newsletter, bbc.co.uk.
Medium is how it reached you. It names the type of channel: organic, cpc, social, email, referral.
Put together, a pair such as instagram / social or newsletter / email tells you both the place and the kind of traffic. GA4 shows the pair in a dimension called Session source / medium, which you will find in the Traffic acquisition report.
Where the values come from
For most visits you do nothing. GA4 works the labels out for itself:
- Someone clicks a normal Google search result: GA4 records
google / organic. - Someone clicks a link on another website: GA4 records that site as the source and
referralas the medium. - Someone types your address or uses a bookmark: GA4 records
(direct) / (none).
Campaign links are different. When you send people from an email, a social post, a QR code or a partner's website, you choose the labels yourself by adding UTM parameters to the link:
https://example.org/appeal?utm_source=newsletter&utm_medium=email&utm_campaign=winter-appeal-2026
When someone arrives through that link, GA4 reads utm_source and utm_medium and uses your values instead of guessing. That is the whole point of tagging: you decide how the visit is described, rather than leaving it to whatever information the browser happens to pass on.
Why medium matters more than you think
GA4 groups traffic into channels such as Organic Search, Email and Organic Social. These are the rows you see in the default reports, and they are decided by rules that look mostly at the source and medium. Google publishes these rules as the default channel group. A few of the most useful ones:
| Channel | What GA4 looks for (simplified) |
|---|---|
Source or medium is email, e-mail, e_mail or e mail | |
| Organic Social | Source is on Google's list of social sites, or medium is social, social-network, social-media, sm, social network or social media |
| Paid Social | Source is a social site and medium looks paid: contains cp, or is ppc, retargeting, or starts with paid |
| Referral | Medium is referral, app or link |
| Affiliates | Medium is affiliate |
| SMS | Source or medium is exactly sms |
| Display | Medium is display, banner, expandable, interstitial or cpm |
| Unassigned | Nothing above matched |
The last row is the one to watch. If you invent a medium such as poster, flyer or whatsapp-group, none of the rules match it, and those visits sit in Unassigned. They are still recorded, and you can still find them by looking at source and medium directly, but they will not appear in the channel totals that most people glance at.
Good to know
Unassigned is not an error. It simply means GA4 has no rule for that medium. If you want a medium such as qr to count as its own channel, you can create a custom channel group in GA4 rather than bending the medium to fit a default rule.
A worked example
Imagine a small charity promoting a spring open day. The same page is shared in four places. Here is how the labels could look, and where each visit would land.
| Where the link was shared | utm_source | utm_medium | Likely GA4 channel |
|---|---|---|---|
| Monthly email newsletter | newsletter | email | |
| Instagram post | instagram | social | Organic Social |
| Boosted Facebook post | facebook | paid_social | Paid Social |
| Partner charity's website | partner-name | referral | Referral |
All four links share the same campaign value, spring-open-day-2026. That is what lets you see the total for the open day across every channel, while source and medium show which channel did the work.
Choosing your own values
For source
Use the name of the platform or sender, written the same way every time. facebook, never Facebook, fb and facebook.com on different days. For newsletters, either use newsletter for all of them or name each list, such as supporter-news and volunteer-news, if you send to different audiences.
For medium
Pick from a short, fixed list and stick to it. A list that suits most small teams:
emailfor newsletters and email campaignssocialfor unpaid posts, stories and profilespaid_socialfor boosted posts and social adscpcfor paid search that you tag by handreferralfor links on partner sitessmsfor text messagesqrfor printed QR codes (lands in Unassigned unless you add a custom channel)
Write the list down where everyone can see it. A medium that one person spells Social and another spells social-media becomes two rows in your reports, even if both happen to land in the same channel.
How to check what GA4 recorded
- Open GA4 and go to Reports, then Acquisition, then Traffic acquisition.
- Change the primary dimension from Session default channel group to Session source / medium.
- Add a secondary dimension of Session campaign to see your campaign names alongside.
- Set the date range to cover the campaign and look for your exact values.
If a link is not appearing at all, check the link itself before blaming GA4. Paste it into the UTM Reader to see exactly which parameters it carries. A missing ?, a space or a typo in utm_medium is far more common than a tracking fault.
Three things to remember
- Source names the place, medium names the type of channel.
- Use mediums GA4 recognises unless you have a reason not to, and accept that custom ones land in Unassigned.
- Keep the same campaign value across every channel, so the totals add up.
The UTM Builder picks a sensible medium for each platform automatically and shows the likely GA4 channel next to every link, so you can catch an Unassigned medium before the link goes out.