Free tool

UTM audit, in your browser

Paste your campaign URLs — or drop in a whole CSV export — and get an instant tagging audit: typo'd parameters, case splits, source synonyms, and mediums GA4 will bucket as Unassigned. The links never leave your machine.

Runs entirely in your browser — nothing is uploaded.

What the audit checks

UTM chaos is the most universal tracking debt there is — every agency inherits a link set where Facebook, facebook, and fb are three different sources. These are the checks the tool runs across your whole set at once, which is exactly what eyeballing a spreadsheet can't do.

Misspelled and miscased keys

utm_sorce, UTM_Source, utm-source — GA4 reads none of them. The attribution silently lands in direct/none.

UTMs after the # fragment

Parameters behind the fragment never reach analytics. Common on SPA links and copy-pasted app URLs.

Case splits

Facebook vs facebook are two different rows in every GA4 report. The tool finds every value that splits by casing.

Source synonyms

fb / facebook / meta as three utm_source values means every “top sources” view undercounts all three.

Mediums GA4 won’t map

utm_medium values outside the channel-grouping vocabulary land sessions in “Unassigned” — including platform names that belong in source.

Missing source/medium pairs

Tagged links without the minimum viable pair fall back to inference — usually somewhere you didn’t intend.

Duplicates and empty values

utm_source twice in one URL is tool-dependent attribution; utm_source= empty overwrites a good inferred value with (not set).

Coverage and hygiene

Untagged share, missing campaign names, spaces in values — the info layer that keeps the convention honest.

What it deliberately doesn't check

A link list describes intent, not behaviour. This tool proves your tagging is consistent; it can't prove the tagged sessions actually arrive attributed — redirects strip parameters, consent banners delay page_view, and platforms rewrite links in ways no static audit sees. That verification layer is the GA4 audit checklist and the verification-first discipline. And clean values matter most where they get joined: dirty utm_source is what breaks every cross-platform report in the BigQuery spend warehouse.

If you manage links for many clients, the convention is the real asset — and conventions live or die by being attached to the infrastructure they govern. In Phloz that is the tracking infrastructure map: every property and pixel documented per client with the date it was last verified, and the client's UTM convention written in the map's notes. Phloz doesn't check links against it, so re-run this tool when a campaign ships.

Frequently asked questions

Are my URLs uploaded anywhere?
No. The paste or CSV is parsed and audited entirely in your browser with client-side JavaScript — there is no upload endpoint. The analytics event we record carries counts only (how many URLs, how many findings), never URL content. Refresh and the result is gone.
What can I paste?
One URL per line, a comma-separated list, a CSV/TSV export from an ad platform or spreadsheet, or HTML or JSON with links in it. A link on its own line or in its own CSV cell is read to the end, so a value with a literal space is kept and flagged; a note after it (after “ - ”, or in brackets) is left out and listed for you to check. Inside a sentence, a link ends at its first space. A link without https:// is read as https:// when it sits alone on its line. Blank lines, the header row and lines of markup only are ignored; any other line with no readable link is listed under “Skipped lines”. Up to 5,000 URLs per run, duplicates included.
Why does case matter in UTM parameters?
GA4 treats both keys and values as case-sensitive. UTM_Source is not utm_source (the parameter is ignored entirely), and Facebook is not facebook (the reports split into two rows). The fix is a written convention: lowercase keys, lowercase values, one spelling per platform.
What makes a utm_medium “unmapped”?
GA4’s default channel grouping assigns sessions to channels by matching utm_medium against a documented vocabulary (cpc, email, social, referral, display and friends). A medium outside that vocabulary — including platform names like “facebook”, which belong in utm_source — lands the session in the Unassigned channel, where it’s invisible to every channel report.
Keep every client's tracking consistent

14 days free for new workspaces · No credit card · Starter tier free forever