Clarvivo

Free tool by Clarvivo · no login

Check your campaign URLs before you spend on them

Paste your campaign URLs, one per line. We check every one for missing parameters, typos, inconsistent casing and — most importantly — utm_medium values that GA4 will refuse to map to a channel.

Campaign URLs

One URL per line. Nothing is uploaded or stored — validation runs against the list you paste.

This tool answers: Which of my campaign URLs have missing, malformed or inconsistent UTMs?

Enable JavaScript to run the check — the diagnosis itself is free and needs no account.

Why this happens

A UTM mistake cannot be fixed after the fact. Once the campaign has run, the sessions are already recorded under the wrong channel, or under no channel at all, and no amount of reprocessing brings them back.

The expensive errors are rarely the obvious ones. A completely missing utm_campaign is easy to spot. The one that quietly ruins a quarter's reporting is utm_medium=paid instead of cpc, or utm_source=Google in half your links and google in the other half.

Both of those look completely reasonable to a person and completely wrong to GA4 — which is why they usually survive review and get caught weeks later, when someone asks why the numbers do not add up.

Next checks

These answer the questions this one tends to raise.

How this check works

So you can trust the result — and your developer can verify it.

  1. Every URL is parsed the way a browser parses it

    We use real URL parsing rather than pattern matching, so encoded characters, fragments and malformed links are treated exactly as a visitor's browser would treat them — including catching UTMs accidentally placed after the # where nothing will ever read them.

  2. utm_medium is checked against GA4's channel rules

    GA4's default channel grouping is a fixed rule set. A medium it does not recognise does not create a new channel — it falls through to Unassigned. We check every medium against the recognised set, because this single mistake causes more missing campaign data than everything else combined.

  3. Values are compared across the whole list

    Some problems only exist between URLs. If one link says Google and another says google, each is individually valid but together they split one campaign across two rows in every report. That check needs the full set, which is why this tool takes a list rather than one URL.

  4. Nothing leaves your browser except the list itself

    There is no file upload and no browser automation. The URLs are checked and the result comes straight back.

Common causes and fixes

utm_medium that GA4 cannot map
Use a medium from GA4's recognised set: cpc for paid search, email, social, referral, affiliate, display, organic. Descriptive inventions like paid, newsletter, blast or the platform's own name all land in Unassigned.
Inconsistent capitalisation
GA4 does not normalise UTM values. Google and google are two different sources. Standardise on lowercase everywhere — it is the only convention that stays correct when someone else builds a link later.
Capitalised parameter names
Values being uppercase splits your reporting; parameter names being uppercase destroys the data outright. UTM_Source is not read as utm_source, so the value is silently dropped.
Parameters after the fragment
Anything after the # is never sent to the server and most tags never read it. This usually happens when a campaign URL is assembled from a single-page-app route that already contained a hash.
Unencoded spaces
A campaign name pasted from a spreadsheet often brings a literal space with it. Some email clients and link parsers truncate the URL at the first space, losing every parameter after it. Use underscores or hyphens.

Frequently asked questions

Why is all my traffic showing as Unassigned in GA4?
Almost always because utm_medium is a value GA4's default channel grouping does not recognise. GA4 does not invent a channel for an unfamiliar medium — it files the session under Unassigned. Paste your campaign URLs above and we will flag every medium that will not map.
Does UTM capitalisation actually matter?
Yes, in two different ways. Parameter names are case-sensitive, so UTM_Source is simply not read and the value is lost. Values are case-preserving, so Google and google both work but are counted as separate sources, splitting one campaign across two rows.
How many URLs can I check at once?
Up to 500 per run. That is comfortably more than a typical campaign launch, and keeps the check instant.
Do you store the URLs I paste?
We store the diagnostic result so you can share the link, and it expires after 7 days. The URLs themselves are not kept beyond that, and nothing is uploaded as a file.
What is the difference between this and the UTM Loss Detector?
This checks whether your URLs are built correctly before launch. The UTM Loss Detector checks whether a correctly built URL survives your site once someone clicks it. Both fail independently, so a clean result here does not guarantee a clean result there.

Correct URLs are the first step, not the finish line.

Validating links stops bad data at the source. Clarvivo picks up where that ends — connecting the campaigns you tagged to the payments they actually produced, so you stop reconciling channel reports by hand.

Keep campaign attribution consistent in Clarvivo

What this tool reads, and what it keeps