UTM Campaign URL Builder
Assemble a Google Analytics campaign link live — correctly encoded, merged with any existing query string. Paste a link to read its tags back.
Absolute http(s):// address. Any existing ?query is kept.
utm_source — where from.
utm_medium — channel type.
utm_campaign — the promotion or campaign identifier.
Enter a base URL above to start building your campaign link.
Built in your browser — nothing is tracked or stored. Links are assembled and parsed locally with the built-in URL/URLSearchParams functions and a small script you can read; there are no network requests and no analytics on this tool.
Optional tags — term, content, id
utm_term — paid-search keyword.
utm_content — link/creative (A/B).
utm_id — GA4 campaign ID, ties the link to imported cost data.
Parse an existing link — edit its UTM tags
Paste a full campaign URL above, then Load it into the fields.
What a UTM link is for
When someone clicks a link into your site, the analytics tool has to guess where they came from. UTM parameters remove the guess: you spell out the campaign in the URL's query string, and Google Analytics reads those tags to file the visit under the right source, medium and campaign in its acquisition reports. This builder takes a base URL and your tags, encodes each value correctly, and glues them together the instant you type — no button to hunt for. The result appears on the right, ready to copy.
The five tags, with a worked example
Say you are emailing a newsletter that links to a spring-sale landing page and you want to know later how that email performed. You would set:
utm_source, utm_medium and utm_campaign are the three core tags you should always set. utm_term carries a paid-search keyword and utm_content distinguishes two links to the same page so you can A/B them — put hero-button on one and footer-link on the other and the report tells you which drove the click. GA4 also reads utm_id to join a link to an imported cost dataset.
Merging with a URL that already has a query string
Real landing pages often already carry parameters — a referral code, a variant flag. This tool merges rather than clobbers. Given ?ref=home&size=xl already on the base, your utm_ tags are appended and ref and size survive untouched:
The one value that is overwritten is a utm_ tag of the same name: if the base already had utm_source=old and you type utm_source=new, you get a single utm_source=new, never a duplicate. That is what makes the parse box safe — load a tagged link, change one field, copy the fix.
Encoding, and why a space becomes a plus
Every value is run through the browser's URLSearchParams, which encodes to the application/x-www-form-urlencoded rule: a space turns into +, an ampersand into %26, and non-ASCII into UTF-8 percent-escapes, so café is caf%C3%A9. Google Analytics decodes + back to a space, so spring+sale reads as "spring sale" in your report and re-parses here exactly. Both + and %20 are legal in a query string.
Honest limits
Because UTM values are case-sensitive in GA, Email and email become two rows and split your numbers — this is the single most common UTM mistake. The cure is a naming convention you never break: turn on lowercase all values and pick spaces → underscores (or hyphens) so every value is normalised the same way. Decide underscores-or-hyphens once and stay consistent; mixing spring_sale and spring-sale fragments the data exactly like casing does. This tool normalises values but does not invent them — good, memorable, consistent names are still your job.
Naming conventions that keep reports clean
| Tag | Good value | Why |
|---|---|---|
| utm_source | newsletter | the specific origin, not "web" |
| utm_medium | the channel class GA groups by | |
| utm_campaign | spring_sale_2026 | dated so it never collides next year |
| utm_content | hero-button | identifies the exact creative/link |
Keep utm_medium to GA's known channel groups — email, cpc, social, referral, organic — so visits land in the right default channel bucket instead of "(Other)". Date your campaign names, lowercase everything, and never put personal data (an email address, a name) in a UTM value: query strings are logged and visible.
Round-trip: parse a link back
Paste any campaign URL into Parse an existing link and press Load. The tool decodes each utm_ tag into its field and drops the rest of the URL — base path plus any non-UTM parameters — into the base field, so you can correct one value and re-copy. Build and parse are exact inverses: a link generated here re-parses to the values it was built from.