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.
Clean URL = base + utm_source + utm_medium + utm_campaign (lowercase, no spaces, one convention)
Enter a landing page URL to build the tagged link live.
Each URL gets scored on required params, lowercase, spaces and convention consistency.
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.
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.
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 + caseStandardise 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.
What good looks like
The bar is boring on purpose — boring URLs make exciting reports.
| Pass rate on audit | 100% | Anything under 90% means the convention is not written down anywhere the team reads. |
|---|---|---|
| Distinct sources per channel | 1 | One channel, one spelling. Two spellings is a report bug filed against your future self. |
| Spaces in values | 0 | Spaces become %20 and fracture every GROUP BY you will ever run. |
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.
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.