FileKiln

UTM Link Builder

Build campaign URLs with utm_source, utm_medium, and utm_campaign parameters, correctly encoded, in your browser. No spreadsheet templates, no uploads.

Ready when you areutm builder
Runs on your computer. Nothing gets uploaded.

Your stuff stays yours. The conversion happens in this page's JavaScript. Nothing you paste here leaves your machine, and the tool keeps working with the network unplugged.

First line is the destination URL; the lines below it are your campaign parameters as key: value pairs. The builder produces a link with proper utm_source, utm_medium, and utm_campaign parameters, percent-encoding values with spaces or special characters correctly - the part hand-typed UTM links most often get wrong - and preserving any query parameters the URL already carries. Consistency is the whole game with UTMs: analytics splits Email, email, and e-mail into three different channels, so pick lowercase conventions once and let a builder enforce the spelling.

How to build a campaign link

  1. On the first line of URL + parameters in, paste the full destination address, starting with http:// or https://.
  2. On each following line, add one parameter as key: value. The keys are source, medium, campaign, term, and content, and key=value works too. Key names are not case-sensitive, but values are kept exactly as you type them.
  3. Include at least a source line. The builder refuses to produce a link without one.
  4. Press Build URL. The finished link appears in Campaign URL out.
  5. Press Copy result and paste the link into your email, ad, or post. Click it once yourself before the campaign goes out.

What each UTM parameter is for

UTM parameters are ordinary query-string values that analytics tools read when a visitor lands on your page. The page ignores them. Your reports use them to say where each visit came from. Google Analytics 4 maps them to its traffic dimensions, and most other analytics products read the same five names.

LineBecomesAnswersExamples
sourceutm_sourceWho sent the visitor?newsletter, facebook, partner-blog
mediumutm_mediumWhat kind of channel?email, cpc, paid_social, referral
campaignutm_campaignWhich push or promotion?fall-drop, 2026-webinar
termutm_termWhich paid keyword?running-shoes
contentutm_contentWhich ad, link, or creative?header-link, carousel-v2

Medium deserves the most care. GA4 sorts traffic into default channel groups such as Email, Paid Social, and Organic Social, partly by matching the medium value against known patterns. A medium of email lands in Email. An invented medium like blast or promo may end up as Unassigned. Before you invent a new medium, check your analytics tool's channel definitions.

A worked example

Suppose a product page already has its own query parameter, a leftover tag, and an anchor:

https://shop.example.com/p?utm_source=old&color=red#reviews
source=Facebook
medium: paid_social
campaign: fall-drop
content: carousel-v2

Pressing Build URL gives:

https://shop.example.com/p?utm_source=Facebook&color=red&utm_medium=paid_social&utm_campaign=fall-drop&utm_content=carousel-v2#reviews

Four details show how the builder behaves:

  • The existing utm_source=old was replaced in place, not duplicated. Setting a key you already have overwrites it.
  • color=red survived untouched, so the page still opens on the right variant.
  • New parameters were added before #reviews. Anything after # is never sent to the server, so parameters placed after it would be lost.
  • Facebook kept its capital F. The builder does not lowercase values, so if your convention is lowercase, type it that way.

Common problems and fixes

Spaces turned into plus signs

A value like spring sale comes out as spring+sale, and & inside a value becomes %26. The plus sign is the standard form encoding for a space in a query string, and analytics tools decode it back. Some link shorteners and email platforms re-encode URLs and can mangle it, though. Hyphens avoid the question entirely: spring-sale.

"Line 1 must be the full destination URL"

example.com/pricing without a scheme is rejected. Add https://. Note that a bare domain gains a trailing slash in the output (https://example.com/?utm_source=...), which is the same address.

The error names the wrong line

Blank lines are removed before the input is checked, so if you left an empty line between parameters, the line number in the error is counted without it. Look for a misspelled key (such as utm_source: or camp:), which is the usual cause.

Campaign data disappears after a redirect

If the destination redirects, for example from http to https or to a login page, some redirects drop the query string. Build the link against the final address the browser ends up on.

Internal links are overwriting your sources

Tagging links between pages of your own site tells analytics that the visitor arrived from your own campaign, which replaces the real source (a search engine, say) in your reports. Keep UTMs on links that live outside your site.

Related tasks

Preview how the tagged page will appear when shared with the Open Graph preview. To encode or decode a single value by hand, use the URL encoder and decoder.

Questions this tool gets asked

Which parameters do I actually need?

utm_source (where the click comes from: newsletter, google, linkedin) and utm_medium (the channel type: email, cpc, social) cover most reporting. utm_campaign names the push; term and content are for paid-keyword and creative-level detail.

Why did my values get percent-encoded?

Spaces and special characters are not legal in URLs; encoding them is what makes the link work everywhere. This builder encodes a space as a plus sign (spring+sale), the standard form for query strings. Analytics tools decode them back for reports. If you dislike the look, use hyphens: spring-sale.

Do UTM parameters affect SEO or change the page?

The page loads identically - UTMs are inert freight read only by analytics. For SEO, keep tagged URLs out of your own site's internal links and sitemaps (they create duplicate URLs); they belong on external campaigns.

Uppercase or lowercase?

Lowercase everything, always. UTM values are case-sensitive in every major analytics tool, and mixed case silently splits one campaign into several rows of reporting.

Related tools