Polyatic UTM Campaign URL Builder

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.

Base URL

Absolute http(s):// address. Any existing ?query is kept.

Source *

utm_source — where from.

Medium *

utm_medium — channel type.

Campaign name *

utm_campaign — the promotion or campaign identifier.

Campaign URL

Enter a base URL above to start building your campaign link.

Normalise values

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
Term

utm_term — paid-search keyword.

Content

utm_content — link/creative (A/B).

Campaign ID

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:

base https://shop.example.com/spring utm_source newsletter where the click came from utm_medium email the channel type utm_campaign spring_sale the campaign name utm_content hero-button which link (optional, for A/B) https://shop.example.com/spring?utm_source=newsletter &utm_medium=email&utm_campaign=spring_sale&utm_content=hero-button

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:

base https://ex.com/deal?ref=home&size=xl +utm utm_source=fb, utm_campaign=summer https://ex.com/deal?ref=home&size=xl&utm_source=fb&utm_campaign=summer

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

TagGood valueWhy
utm_sourcenewsletterthe specific origin, not "web"
utm_mediumemailthe channel class GA groups by
utm_campaignspring_sale_2026dated so it never collides next year
utm_contenthero-buttonidentifies 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.