Free tool · No sign-up

UTM builder

Build a tagged campaign URL, and find out what will break your reporting before you send it — a medium that will not group, capitals that split one source into two, a parameter already in the URL that has just been replaced. Free, no account, and nothing you type leaves your browser.

The page you want people to land on. Paste it with whatever query string it already has.

Start from

utm_source

Where the traffic comes from — the specific sender or site. “newsletter”, “linkedin”, “partner-blog”.

utm_medium

The kind of channel it is. This is the field analytics tools group by, so it wants a standard word.

utm_campaign

The thing you will report on. Use the same value across every link in the campaign, or you get several campaigns.

optional

Optional. Paid search keyword. Leave it empty unless you are buying keywords.

optional

Optional. Which of two links in the same message was clicked — the header button or the footer text.

Your campaign URL

Paste a destination above and it appears here.

Built in your browser. Nothing you type here is sent anywhere, stored or logged.

Doing this more than once?

Set the UTMs once, not on every link

A tagged URL is fine for one link. For a campaign it means typing the same campaign name into eight of them and hoping nobody types it differently — which is how one campaign becomes three rows in a report.

Your first 10 links, unlimited clicks, no credit card.

Campaign grouping and roll-up
Group links into the campaign you actually report on. Links inherit its UTM campaign, so attribution stays consistent across everyone who makes one.
UTMs as fields, not string surgery
Source, medium, campaign, term and content are editable fields on the link. A mistyped source is corrected in one place, without reissuing something already printed.
A short link and a QR code for it
A tagged URL is long and cannot go on a poster. Every link gets a short address you name yourself and a vector QR code, both pointing at the URL you just built.
And a click count that means something
Preview bots and mail-security scanners open your links before any recipient does. They are counted apart from people, and every exclusion is named. How a click is counted →

UTM parameters

The six questions that come with them

Written out rather than folded into an accordion. If you came here for one of these answers, it should not take a click to find it.

What is a UTM parameter?
Five optional pieces of text you add to the end of a link — source, medium, campaign, term and content — which your analytics tool reads to work out where a visitor came from. Without them, a click from your newsletter and a click from a paid ad look identical, and both usually get filed as direct traffic.
Which of the five actually matter?
Source, medium and campaign, as a set. Term and content are for paid keywords and for telling two links in the same message apart; inventing values for them when you do not need them fragments your own reporting for no gain.
Why does my campaign show up as “Unassigned”?
Almost always utm_medium. GA4 sorts traffic into channel groups by reading that field alone and pattern-matching it against a fixed list, so “email” works and “e-mail”, “Email newsletter” and “mail” do not. Nothing rejects them — the traffic simply lands in Unassigned, and most people find out a month later. The builder above flags it as you type.
Does capitalisation matter?
Yes, and it is the most common way one campaign quietly becomes two. Analytics tools compare these values as text, so LinkedIn and linkedin are two different sources in the same report. Lower case throughout is the convention for exactly this reason.
Where do the parameters go if my link has a # in it?
Before the fragment, never after. Anything following a # is handled by the browser and never sent to the server, so UTMs appended to the end of an anchored link record nothing at all while looking perfectly correct. The builder puts them in the right place automatically.
Is anything I type here sent to you?
No. The URL is assembled by JavaScript in your own browser. There is no request, no account, no cookie and nothing written down — you can check in your network tab, or turn your connection off after the page loads and it still works.