Kestry
Create Your AI Agent
Tracking

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

One URL per line, up to 200 at a time.

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.

ParameterWhat it recordsRequiredExample value
utm_sourceThe specific site, platform or property the click came fromYesfacebook
utm_mediumThe channel type — how the click was bought or earnedYescpc
utm_campaignThe campaign the link belongs to, matching your campaign nameYessummer-sale-2026
utm_termThe keyword or audience segment behind the impressionNorunning-shoes
utm_contentWhich creative, placement or link position was clickedNohero-cta-v2
A complete tagged URL: https://example.com/sale?utm_source=facebook&utm_medium=cpc&utm_campaign=summer-sale-2026&utm_content=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 flaggedSeverityWhy it matters
Missing utm_source, utm_medium or utm_campaignErrorWithout all three, most analytics tools will not build a campaign row at all
A required parameter present but empty (utm_campaign=)ErrorReads as a blank value, not an absent one — creates an unnamed campaign row
The same utm_ parameter appearing twiceErrorOnly one value is read, and which one depends on the platform
A parameter name that is not lowercase (UTM_Source)ErrorParameter names are matched literally; UTM_Source is simply not utm_source
Whitespace anywhere in the URLErrorBreaks the link when pasted into email clients, ad platforms and chat apps
Malformed percent-encoding (a stray % or %2)ErrorSome parsers reject the query string outright; others truncate the value
Uppercase inside a value (Facebook rather than facebook)WarningSplits one source into two rows in tools that compare values literally
Spaces inside a parameter valueWarningEncodes unpredictably depending on where the link is pasted
Characters like < > " ' { } | \ ^ ` in a valueWarningShould be percent-encoded; unencoded they can cut the value short
utm_source identical to utm_mediumWarningCollapses two dimensions into one and makes channel grouping useless
A non-standard utm_mediumWarningValues 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

  1. 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.
  2. Paste them one per line into the box above. Blank lines are ignored; the first 200 lines are checked in one pass.
  3. 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.
  4. Fix every error before launch. Errors are the ones that lose the data outright.
  5. Triage the warnings against your own conventions. Uppercase and non-standard medium warnings matter most if the campaign will be compared against historic data.
  6. Copy the cleaned URL, or use Copy all cleaned URLs to take the whole batch back into your spreadsheet or trafficking sheet.
  7. 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.

Frequently asked questions

What does a UTM validator actually check?
It parses the query string, extracts the five utm_ parameters, and reports missing or empty required parameters, duplicates, non-lowercase parameter names, whitespace, malformed percent-encoding, uppercase and spaces in values, unencoded special characters, a utm_source equal to utm_medium, and a non-standard utm_medium. It does not fetch the URL or check that the page loads.
Which UTM parameters are required?
utm_source, utm_medium and utm_campaign. Without all three, most analytics platforms will not assemble a usable campaign row, and the traffic typically falls into Direct, Referral or Unassigned depending on the tool. utm_term and utm_content are optional and add keyword and creative detail.
Are UTM parameters case-sensitive?
Treat them as case-sensitive. Parameter names are matched literally, so UTM_Source is not the same key as utm_source. Values behave inconsistently across platforms — some normalise certain fields, others compare the raw string — which is why Facebook and facebook can appear as two separate rows. Standardising on lowercase removes the question entirely.
Why is my campaign traffic showing as Direct?
The usual causes are a missing or misspelled required parameter, a redirect that strips the query string before the analytics tag fires, or a link shared through an app that rewrites URLs. Run the original link through the checker first; if it comes back clean, the problem is almost certainly a redirect chain rather than the tagging.
Can I check multiple campaign URLs at once?
Yes. Paste one URL per line, up to 200 in a single pass. You get a per-URL report plus a summary count of valid, warning and error links, and you can copy either the full report or just the cleaned URLs as a block for pasting back into a spreadsheet.
What does the cleaned URL change?
It strips known click identifiers such as fbclid, gclid, msclkid and srsltid, drops parameters with empty values, lowercases UTM parameter names, collapses duplicate UTMs to the first occurrence, and trims stray whitespace. Every other query parameter and any fragment after the # is preserved.
Should I use utm_term or utm_content?
utm_term holds the keyword or audience segment; utm_content holds which specific creative or link position was clicked. On paid search use both. On social, utm_term is a good home for the audience name and utm_content for the ad variant. Both are optional, but utm_content is the one that pays for itself fastest.
Are my URLs uploaded anywhere?
No. Validation, cleaning and report generation all run in your browser. Nothing is sent to a server or stored, so you can safely check pre-launch links for campaigns that have not been announced.