Tag any link with utm_source, utm_medium and campaign parameters, or paste a finished link and read its fields back out. Existing query strings survive.
Analytics counts Newsletter and newsletter as two separate sources. Nothing warns you. The traffic simply arrives as two rows in a report that should have held one, and by the time anyone notices, the campaign is over. UTM Parameter Builder settles casing and whitespace before the link is assembled, then writes the parameters on in a fixed order so two people tagging the same campaign produce the same URL.
Tagging here is a merge, not an append. A destination already carrying ?variant=20l keeps it. A #pricing-table fragment is re-attached after the query string rather than before it, which matters because a browser discards every parameter written after the #. Any utm_ pair already sitting on the link is replaced by whatever the form holds.
The trip runs in both directions. Paste a finished campaign link, press Parse URL, and it comes apart: parameters drop into their fields, the clean address stays behind, and nothing about an unpublished campaign is sent anywhere, because the assembly happens in the page you are reading.
Press Load Sample and the form fills with the lead entry from the pool: https://acmeanalytics.example.com/pricing, tagged newsletter over email for the spring-launch-2026 campaign, with hero-cta in the content slot. What the copy button hands back is:
https://acmeanalytics.example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring-launch-2026&utm_content=hero-cta
Press Load Sample again for a different campaign. The pool cycles through four, and the second one carries a paid-search keyword with spaces inside it, which is the case the Spaces control exists for.
utm_source and utm_medium together decide which channel a click is filed under. Leave source blank and the tool answers “utm_source is empty. Google Analytics needs it to attribute the click, so the session lands in Direct traffic instead of your campaign.” Medium offers 11 conventional values as you type — cpc, paid_social, affiliate and the rest — without stopping you typing your own.utm_campaign names the effort; utm_id is its numeric twin, matched against the campaign ID you set in the ad platform rather than read as a label.utm_term belongs to keyword auctions and stays empty everywhere else. utm_content is what separates two links on the same page pointing at the same destination, so a hero button and a footer link report separately.Non-campaign parameters survive untouched and are listed as kept rows in the table under the output, so you can see exactly what rode along. Spaces inside a value become %20 rather than the + that URLSearchParams would emit; both decode to a space, but %20 is the form that survives being pasted through an email client. Every value is measured as it goes in, and anything longer than 100 characters is flagged red in that same table, because Google Analytics truncates each campaign parameter at 100 rather than rejecting the hit. An empty field is dropped instead of emitted blank, so a link tagged with only source and medium is a two-parameter URL, not one padded with utm_term=.
Query strings and #fragments already on the link are kept.
Add a base URL to start tagging, or press Load Sample for a fully filled campaign.
Parse URL runs the whole thing backwards: paste a link someone already tagged into the base URL field, press it, and the utm_ pairs move into the form while the clean address stays behind. Useful when a campaign name has a typo in it and you would rather fix one field than retype the link. Everything is assembled in this page, so an unpublished campaign never reaches a server.