Facebook, facebook, and FB — or paid-social vs Paid-Social vs paid social — become separate rows for what is really one channel. The fix is to standardize the values, ideally by forcing them clean at the moment links are built.You open GA4's Traffic acquisition report, group by Session source / medium, and your biggest channel isn't at the top — because it's been shattered into four half-sized rows. This is the single most common reason a GA4 report "doesn't add up," and it's almost never a bug in GA4. Here's exactly why it happens and how to clean it up.
UTM parameters (utm_source, utm_medium, utm_campaign) are just text passed in the URL. GA4 records them verbatim and groups reports on the exact string. Four things quietly create duplicates:
F ≠ f, so Facebook and facebook are two different sources.paid-social, paid social (which becomes paid%20social), and paid_social are three distinct mediums.FB, fb.com, and facebook all mean Facebook to you, but not to GA4.One channel wearing four costumes means no single row tells you what it actually drove — and every chart that groups by source is quietly wrong by the size of the split.
Export your GA4 Traffic acquisition → Session source / medium table, then look for rows that normalize to the same thing once you lowercase them and standardize separators. Doing that by eye across hundreds of rows is painful, so we built a free tool that does it for you:
Paste your GA4 source/medium report and instantly see which "channels" are really one — with a channel-integrity score and every fragmented group listed out.
Run the free GA4 channel audit →Fixing history is pointless if new splits keep arriving. Decide on one canonical form for every value — lowercase, hyphens not spaces, a fixed list of sources and mediums — and enforce it from now on (more on that below).
For historical data you can't rewrite in GA4 itself, options are: apply channel groups / custom channel definitions that map the variants to one channel; or export to BigQuery / a spreadsheet and normalize with a lowercase-and-map step before you report. Neither rewrites the raw rows, but both give you a correct rolled-up view.
GA4's default channel grouping catches some obvious cases, but it won't merge your custom casing/spelling variants — those stay split until you standardize the inputs.
The durable fix is upstream: make the clean value the only value that can be created. That means a shared naming convention (see our UTM naming convention guide) plus enforcement at the moment links are built — so a teammate literally cannot ship Facebook when the spec says facebook. A free builder assembles a string for one person; UTM governance keeps the whole team's data consistent. Casing specifically is the most common culprit — we cover it in depth in why "Facebook" and "facebook" are two rows in GA4.
Tagsmith enforces one UTM spec at the point links are made, so channels stop fragmenting and your GA4 reports finally add up — across your whole team.
Start free →