UTM Builder + Governance Checker

Builder + URL auditor · no sign-up · shareable link

Half of all UTM chaos is created at build time (a space here, a capital there) and discovered three months later in a report with twelve spellings of "email". Build the URL with guardrails on the left; paste any existing URLs on the right to score them against the same rules. Everything runs in your browser — paste freely, nothing is uploaded.

Formula

Clean URL = base + utm_source + utm_medium + utm_campaign (lowercase, no spaces, one convention)

Builder

Enter a landing page URL to build the tagged link live.

Governance checker — paste URLs, one per line

Each URL gets scored on required params, lowercase, spaces and convention consistency.

Inputs

What each field wants

Builder fields
Base URL plus source (where: google, meta, newsletter), medium (how: cpc, social, email), campaign (the lowercase slug with dates, e.g. diwali-sale-2026), and optional term/content for paid keywords and creative variants.
Paste-to-audit box
One URL per line — exports from your ad platforms, newsletter tool, or influencer sheet. Each gets a pass/warn/fail on required parameters, lowercase, spaces, and convention consistency.
Methodology

How this number is derived

The five rules that prevent twelve spellings of email

Required: utm_source, utm_medium, utm_campaign. Lowercase everywhere — Email and email are two permanent rows in GA4 and BigQuery. No spaces or special characters — they get percent-encoded into unreadable sludge. One separator convention per workspace (underscores or dashes, never both). And never invent a sixth parameter when term/content already exist.

Audit scores consistency, not just validity

A URL can be technically valid and still poison reports: utm_source=Meta vs meta splits one channel into two rows forever. So the checker compares all pasted URLs against each other and flags convention drift — mixed separators, case variants of the same word — alongside per-URL failures.

Presets encode the house convention

The one-click presets (Google CPC, Meta, Email, Influencer) fill source/medium pairs from a fixed table. Conventions survive when the easy path is also the correct path — nobody hand-types utm_medium=cpc if a button does it.

Worked example

The influencer sheet with four conventions

Pasted
6 influencer URLs: Instagram/bio-link, instagram/Bio_Link, IG/biolink, …
Score
2 pass · 3 warn · 1 fail
Missing utm_campaign on 1 URL → fail
instagram vs Instagram vs IG → warn: one source, three rows
bio-link vs Bio_Link vs biolink → warn: mixed separators + case

Standardise to utm_source=instagram, utm_medium=influencer, utm_campaign=diwali-2026, utm_content={handle} before the next brief goes out — one decision that prevents a quarter of un-attributable spend. Copy the preset link into the influencer brief itself.

Reference

What good looks like

The bar is boring on purpose — boring URLs make exciting reports.

Pass rate on audit100%Anything under 90% means the convention is not written down anywhere the team reads.
Distinct sources per channel1One channel, one spelling. Two spellings is a report bug filed against your future self.
Spaces in values0Spaces become %20 and fracture every GROUP BY you will ever run.
Scope

What this assumes, and what it doesn't model

Assumptions

  • GA4/BigQuery treat parameter values case-sensitively (they do) and names case-insensitively by convention.
  • Your workspace picks one separator convention; the tool flags mixing but does not dictate which.

Deliberately not modelled

  • Cannot see your historical data, so it cannot tell you which misspelling already owns the most rows — fix forward, clean history in the warehouse.
  • Does not validate that the base URL exists or that the campaign slug matches any real campaign.
  • Does not handle redirect-wrapped or shortened URLs — expand them first.
FAQ

Common questions

Underscores or dashes?

Either — pick one and enforce it. Dashes read better in URLs and match slug conventions; underscores match older GA habits. The checker flags mixing, which is the actual enemy, not either choice.

Should I tag internal links (banners, cross-promos)?

No — internal UTMs overwrite the original session source and steal credit from the channel that actually brought the visitor. Use event parameters or anchor tags for internal tracking instead.

What about gclid, fbclid and msclkid?

Leave them alone — the platforms append those automatically for auto-tagging, and they coexist with your UTMs. The audit ignores them rather than flagging them.

Is pasting URLs here private?

Yes. Parsing happens in your browser with the URL API; nothing is sent anywhere. The page works identically offline once loaded.

Last reviewed September 6, 2026.