UTM Validator & UTM URL Checker
Paste your campaign URLs and see exactly which tracking parameters are missing, malformed, duplicated or quietly splitting your reports in two.
A UTM validator checks the tracking parameters on a campaign URL before that URL goes live, so a tagging mistake costs you a minute rather than a month of unattributable traffic. Paste up to 200 links, one per line, and each comes back with its parsed parameters, a list of errors and warnings, and a cleaned version you can copy straight back into your ad platform.
The checks target the things that quietly break reporting: missing or empty required parameters, duplicated tags, uppercase values that split one source into two rows, spaces, broken percent-encoding, and a utm_medium no analytics tool recognises. It is built for paid media teams, email marketers, and anyone who inherits a spreadsheet of links they did not write. Everything runs in your browser.
URLs to check
Your validation results appear here
Paste one or more campaign URLs and hit Validate — you'll get missing-parameter checks, casing and spacing warnings, and a cleaned-up version of every link.
Need more than a free tool? Ask Kestry Chat Agent about your campaign strategy, marketing questions and customer workflows.
What Is a UTM Validator?
A UTM validator is a campaign URL checker: it parses the query string on a link, pulls out the five utm_ parameters, and reports anything that will stop your analytics platform from attributing the visit correctly. It does not visit the URL or check whether the page exists — it inspects the tracking layer you control.
The reason a UTM parameter checker matters is timing. Analytics tools accept whatever arrives; they have no concept of a typo. A link tagged utm_mediun=cpc does not throw an error anywhere — it just lands in Direct or Unassigned, and by the time somebody notices the campaign row is empty, the budget is already spent and the data cannot be corrected retroactively. Checking before launch is the only intervention point.
This checker grades each URL as valid, warning, or error. Errors are things that will demonstrably break attribution. Warnings are things that will still track but will fragment or muddy your reports — worth fixing, not always worth blocking a launch over.
UTM Parameters Explained
There are five standard UTM parameters. Three are required for a campaign to appear as a campaign at all; two add detail that becomes useful once you are comparing creatives or keywords rather than channels.
| Parameter | What it records | Required | Example value |
|---|---|---|---|
| utm_source | The specific site, platform or property the click came from | Yes | |
| utm_medium | The channel type — how the click was bought or earned | Yes | cpc |
| utm_campaign | The campaign the link belongs to, matching your campaign name | Yes | summer-sale-2026 |
| utm_term | The keyword or audience segment behind the impression | No | running-shoes |
| utm_content | Which creative, placement or link position was clicked | No | hero-cta-v2 |
The distinction people get wrong most often is source versus medium. Source is the named property — facebook, linkedin, mailchimp, partner-site.com. Medium is the category of traffic — cpc, email, social, referral, affiliate. If you set both to "facebook", you have thrown away the grouping layer that lets you compare all paid social against all email, and the validator flags it.
utm_content is the parameter most teams under-use. It is the only place to record which of your six ad variants produced the sale, and adding it costs nothing at build time. utm_term originated with paid search keywords, but it works equally well for audience or segment labels on social buys.
Common UTM Mistakes This Checker Catches
Every check below is one this validator actually runs on each URL you paste. The severity column reflects how it is graded in the results panel.
| What gets flagged | Severity | Why it matters |
|---|---|---|
| Missing utm_source, utm_medium or utm_campaign | Error | Without all three, most analytics tools will not build a campaign row at all |
| A required parameter present but empty (utm_campaign=) | Error | Reads as a blank value, not an absent one — creates an unnamed campaign row |
| The same utm_ parameter appearing twice | Error | Only one value is read, and which one depends on the platform |
| A parameter name that is not lowercase (UTM_Source) | Error | Parameter names are matched literally; UTM_Source is simply not utm_source |
| Whitespace anywhere in the URL | Error | Breaks the link when pasted into email clients, ad platforms and chat apps |
| Malformed percent-encoding (a stray % or %2) | Error | Some parsers reject the query string outright; others truncate the value |
| Uppercase inside a value (Facebook rather than facebook) | Warning | Splits one source into two rows in tools that compare values literally |
| Spaces inside a parameter value | Warning | Encodes unpredictably depending on where the link is pasted |
| Characters like < > " ' { } | \ ^ ` in a value | Warning | Should be percent-encoded; unencoded they can cut the value short |
| utm_source identical to utm_medium | Warning | Collapses two dimensions into one and makes channel grouping useless |
| A non-standard utm_medium | Warning | Values outside the conventional set often fall into Unassigned or Other |
The medium check compares your value against the set analytics tools generally recognise: cpc, ppc, paid, paidsocial, paid-social, paid_social, email, social, organic, referral, display, affiliate, video, sms, push, qr, print, banner, cpm and newsletter. A value outside that list is not wrong by definition — some teams deliberately run a custom medium — but it will usually need a manual channel-grouping rule to report correctly, so it is worth a deliberate decision rather than an accident.
How to Check a Campaign URL
- Collect the links exactly as they will ship — copied from the ad platform, the email build, or the brief. Checking a link you retyped defeats the point.
- Paste them one per line into the box above. Blank lines are ignored; the first 200 lines are checked in one pass.
- Read the parameter table for each URL first. It shows what your analytics tool will actually receive, which is often not what the person who built the link intended.
- Fix every error before launch. Errors are the ones that lose the data outright.
- Triage the warnings against your own conventions. Uppercase and non-standard medium warnings matter most if the campaign will be compared against historic data.
- Copy the cleaned URL, or use Copy all cleaned URLs to take the whole batch back into your spreadsheet or trafficking sheet.
- Re-check after any hand edit. Most tagging errors are introduced during the fix, not during the build.
A practical habit: run the check twice — once on the links in the brief, and once on the links pulled back out of the live ad account after trafficking. Platforms and link shorteners sometimes rewrite or append to a URL, and the second pass is what catches it.
What the URL Cleaner Removes
Alongside the report, every URL gets a cleaned version. The cleaner is conservative by design: it removes click-tracking noise and fixes structural problems, and it leaves every legitimate query parameter on your page exactly where it was.
Removed automatically
Click identifiers appended by ad platforms after a click. They are generated at click time, so a copied URL carries somebody else's stale identifier, which is worse than useless in a link you are about to redistribute:
- Google — gclid, gbraid, wbraid, dclid, srsltid
- Microsoft and Yandex — msclkid, yclid
- Meta, X, TikTok, LinkedIn, Instagram, Pinterest — fbclid, twclid, ttclid, li_fat_id, igshid, epik
- Email and marketing platforms — mc_cid, mc_eid, _hsenc, _hsmi, vero_id, oly_anon_id, oly_enc_id, s_cid, rb_clickid
Also fixed
- Parameters with an empty value are dropped entirely.
- UTM parameter names are normalised to lowercase, so UTM_Campaign becomes utm_campaign.
- Duplicate UTM parameters are collapsed to the first occurrence.
- Whitespace inside the URL is stripped, and UTM values are trimmed.
Anything the cleaner does not recognise as junk is preserved, including fragments after the # and functional parameters such as ?variant=blue or ?ref=nav. Removing those would change what the page renders, which is not the cleaner's job.
UTM Naming Best Practices
- Lowercase everything, without exception. It is the single rule that prevents the most report fragmentation, and it is trivially enforceable.
- Pick one word separator and never mix. Hyphens are the safer default because underscores are visually lost in underlined link text.
- Keep utm_medium to a closed vocabulary. Write the permitted list down; five approved values beat fifty organic ones every time.
- Make utm_campaign match your ad platform campaign name, so joining platform spend to analytics sessions is a lookup rather than a reconciliation project.
- Never put personal data in a UTM. These values end up in URLs, referrer headers, browser history and shared screenshots.
- Never tag internal links on your own site. A UTM on an internal link starts a new session and re-attributes the visitor away from the source that actually brought them.
- Store the convention where the people building links can see it, not in a document only the analytics owner opens.
One more convention worth adopting: version your creative in utm_content rather than in utm_campaign. Bumping utm_campaign to summer-sale-v2 creates a second campaign in every report and destroys the trend line; bumping utm_content to hero-cta-v2 keeps the campaign intact and gives you a clean creative comparison inside it.