UTM link builder

Build tagged campaign URLs that survive a copy-paste, with the parameters spelled correctly.

The page the link opens. Any query string already on it is kept.

Where the link lives: newsletter, linkedin, partner_site.

How it reaches them: email, cpc, social, qr.

The thing being run — one name, used identically everywhere.

Paid keyword. Usually set by the ad platform.

Which link, when two point at the same page.

Campaign URL

Enter a destination URL to build the link.

    Give it the page you are sending people to, fill in the tags, and it stitches them onto the end as a proper query string. Anything already on the address survives: a link that arrives carrying `?ref=partner` keeps `ref=partner` and gains the utm_ parameters alongside it.

    The encoding is done by the browser's own URL and URLSearchParams rather than by string concatenation, so a space in a campaign name comes out as `+` and an ampersand comes out as `%26` instead of quietly starting a new parameter. That is the failure hand-written links actually hit — one raw `&` in a campaign name and everything after it becomes a tag nobody asked for.

    The tags themselves are just text, and analytics tools match them literally: `Email` and `email` are two sources, `spring sale` and `spring_sale` are two campaigns, and nothing tells you at the moment the data splits in half. So the warnings here cover exactly that — capitals, spaces, and a campaign with no source or medium to file it under. Nothing is uploaded; the builder runs in your browser, and the link it produces is the same link you would have written by hand, only spelled correctly.

    Source and medium travel as a pair

    Analytics reports group traffic as source / medium — "newsletter / email", not one or the other. Fill in only one and the other side shows up as (not set), which is where campaigns go to be miscounted. utm_campaign, utm_term and utm_content are detail hung off that pair.

    Case is not normalised for you

    Values are compared character for character, so Email, email and EMAIL are three separate sources in the same report and no tool merges them afterwards without a filter. Lowercase everything and stay with it; the button under the fields does the whole set at once.

    The query string you already had is kept

    The address is parsed rather than appended to, so an existing ?ref= or ?page= is preserved and the utm_ tags merge in beside it. A fragment stays on the end where it belongs. If the link already carried a utm_ tag, the value you type replaces it and the tool says so.

    Nothing leaves the page

    No shortening, no redirect, no click tracking of our own — the output is a plain link to your own domain. The tags never reach us, and once the page has loaded it works offline.

    Frequently asked questions

    What is the difference between utm_term and utm_content?

    utm_term was built for the paid keyword that triggered an ad, and most ad platforms fill it in for you. utm_content separates two links that are otherwise identical — the header button versus the footer link in the same email, or two creatives in the same ad set. If you are not running ads or A/B testing a placement, leaving both empty is the right answer.

    Do the values have to be lowercase?

    Nothing rejects capitals, which is the problem: the link works and the report quietly splits. Because values are matched literally, one Facebook among a hundred facebook rows becomes a second source line. Lowercase is the convention because it is the one rule everybody on a team can follow without a document.

    Will the tags follow someone from my landing page to a form?

    No. UTM tags live on the address that was opened and disappear the moment someone clicks through to another page. To tag a response, the tags have to be on the form link itself. On a formformform form that means one hidden field per parameter, labelled exactly utm_source, utm_medium and so on — the value on the link then lands in its own column next to the answers and in the CSV export.

    Does a URL shortener break the tags?

    Not if the shortener keeps the query string on the destination, which the mainstream ones do — the tags are read after the redirect resolves, from the final address. What does break attribution is shortening a link that was tagged wrongly in the first place, because the mistake is now invisible. Build it here, test it, then shorten.

    Other free tools

    Want the form to collect the answers too?

    Hand-written HTML still needs somewhere to post to. formformform gives you the form, the hosting, the responses and the notifications — free while we are in early access.

    Start free