UTM Builder

A field guide to tagging links so your analytics actually show what worked.

What are UTMs?

UTMs are five small query-string parameters you append to any link. When a visitor clicks the link, the parameters travel with them. Analytics tools (Google Analytics, Plausible, Matomo, GA4, HubSpot, etc.) read those parameters and group the visit under the campaign you named.

They look like this:

https://example.com/landing?utm_source=facebook&utm_medium=paid-social&utm_campaign=spring-promo-2026

Without UTMs, analytics typically reports "direct traffic" or "social referral" — broad buckets that don't tell you which ad / email / channel actually drove the visit. UTMs make that question answerable.

Why use them?

Required vs optional parameters

ParameterRequired?PurposeExamples
utm_source RequiredWhere the traffic came from. facebook, newsletter, podcast
utm_medium RequiredHow the traffic arrived. cpc, paid-social, email
utm_campaign RequiredThe named campaign. spring-promo-2026
utm_term OptionalPaid search keyword. spring-shoes
utm_content OptionalDifferentiate variants of the same destination.blue-button, header-cta
utm_id OptionalGA4 campaign identifier (linked to Campaign Manager).cmp_4821
Custom parameters: if your analytics stack expects an additional utm_* key (e.g. utm_source_platform, utm_creative_format), enable Advanced Mode and add it. Any name starting with utm_ is accepted.

Best practices

How to use the tool

Single Link mode

  1. Paste the destination URL into the Website URL field.
  2. Optionally click a Quick fill template (Email Campaign, Paid Social, etc.) to prefill source and medium.
  3. Fill the three required fields. Suggestions appear as you type.
  4. Enable Advanced Mode for utm_term / utm_content / utm_id / custom parameters.
  5. Copy the tagged URL — full URL, query string only, CSV row, or JSON — using the buttons.

Multi-Channel mode

  1. Enter the landing URL and campaign name once.
  2. Tick the channels you're publishing to.
  3. Click Generate links. Every channel gets its own tagged URL with sensible source / medium defaults.
  4. Copy each link individually, or export them all as CSV / JSON.

CSV Bulk mode

  1. Click Download sample CSV to see the expected format.
  2. Fill in the file (one row per link). Drop it on the dropzone — the file is read entirely in your browser; nothing is uploaded.
  3. Optionally enable Auto-fix to lowercase values and replace spaces with dashes on every row.
  4. Click Generate. The cleaned rows render inline with any warnings; download the result CSV when ready.

Warnings explained

CodeWhat it meansAuto-fix?
uppercase A value contains uppercase letters. Reports will treat the uppercase and lowercase forms as different campaigns.Yes — Convert to lowercase.
spaces A value contains spaces. These become %20 in the URL. Yes — Replace spaces with dashes.
special_chars A value contains characters outside [a-z 0-9 _ - .]. These can break some tracking pipelines.Yes — Remove special characters.
source_medium_equal utm_source and utm_medium are identical. They're meant to capture different signals.No — manual review.
internal_domain The landing URL is on your own site. UTMs overwrite the visitor's original referrer on same-site clicks.No — usually a mistake.
url_too_long URL exceeds ~2000 characters. Some browsers and servers truncate at this point.No — shorten manually.
invalid_url The Website URL is not a valid http:// or https:// URL. No.
missing_required One of utm_source / utm_medium / utm_campaign is missing. No.

CSV format guide

The CSV format is straightforward — one row per link, with these columns. The file is never uploaded; it's read by your browser, validated locally, and used to generate the tagged URLs on this page.

ColumnRequired?Maps to
landing_url RequiredThe full destination URL.
source Requiredutm_source
medium Requiredutm_medium
campaign Requiredutm_campaign
term Optionalutm_term
content Optionalutm_content
id Optionalutm_id

Output CSV: every input row + a built full_url column + a warnings column listing any issue codes the validator detected. The output file is UTF-8 BOM-prefixed so Excel opens it cleanly.

Limits: 500 rows per CSV, enforced in your browser. There is no file-size cap — the file is never uploaded. A small analytics beacon fires once per generation so admin counts work; that beacon is per-IP rate-limited to prevent abuse.

FAQ

Do you store my links?

Every mode — single link, multi-channel, and CSV bulk — runs entirely in your browser. URLs, campaign names, and CSV files are never sent to our servers. The only thing the server sees is a small analytics beacon that records the mode (single / multi / bulk) and the URL count, used for admin analytics. No URL strings, no campaign names, and no CSV bytes are transmitted or stored.

Why is uppercase a problem?

Most analytics tools treat UTM values as case-sensitive strings. utm_source=Facebook and utm_source=facebook end up as two different rows, splitting your numbers in half. Stick to lowercase everywhere.

Can I use UTMs in emails?

Yes — that's one of the most useful places. Tag every CTA in a newsletter with the same utm_campaign + a per-CTA utm_content to find out which one drives clicks.

What about utm_id?

GA4 introduced utm_id to bind a click to a Campaign Manager / Google Ads campaign ID. If you don't use those tools, leave it empty.

Will UTMs hurt my SEO?

No — UTMs only appear on links pointing TO your site from external places (ads, emails, social posts). Search engines crawl your canonical URLs (without the parameters). The risk is internal links: don't tag those.