Archive · retired utility · the lab builds agentic systems now
EST. 20241 makerBuilt in public
EXP-008 · Tool · No signup

UTM builder.

Build UTM-tagged URLs for campaign tracking. Everything runs in your browser — nothing is sent anywhere. Fill the fields, copy the URL.

§ 01

Build the URL

008 / UTM Builder

Campaign inputs

Source, medium and campaign name are required by GA4. The rest are optional.

Live output

Updates as you type. Existing query params on your URL are kept; existing utm_* keys are replaced.

Your tagged URL appears here…
Ready to copy.
params set0
base kept
fragment kept
length0 chars
§ 02

Parameter reference

What each key means
ParameterRequiredExampleUse it for
utm_sourceYesgoogle, newsletterWhere the click came from.
utm_mediumYescpc, email, socialHow it reached the user.
utm_campaignYessummer_saleWhich campaign gets credit.
utm_idNoabc.123Ads campaign ID for GA4 imports.
utm_termNorunning_shoesPaid-search keyword.
utm_contentNotop_bannerA/B variants of the same link.

House rules: keep names lowercase, use underscores, never put personal data in UTMs.

§ 03

How to use it

Guide · four steps

From blank fields to a tagged URL

Every control below maps to something already on this page. The output updates live — there is no submit button.

  1. Paste the destination page. Put the full page address in Website URL — https://example.com/pricing works, and so does a bare example.com/pricing, which this page upgrades to https automatically. If the address will not parse, or the hostname has no dot, you get a plain-language error instead of a broken link.
  2. Fill the required trio. GA4 needs utm_source, utm_medium and utm_campaign before it can attribute a session, so all three are marked required and the Copy button stays disabled until they are set. The clickable chips under source and medium (google, newsletter, cpc, email, social) drop in conventional values — pick one spelling per channel and reuse it everywhere so reports do not fragment.
  3. Add optionals, keep Tidy on. utm_id identifies the campaign for GA4 cost-data imports; utm_term records the paid-search keyword; utm_content separates variants of the same link, such as top_banner versus sidebar. The Tidy values checkbox lowercases entries and turns spaces into underscores, which keeps case-sensitive GA4 reports clean.
  4. Copy, open, or clear. Copy URL puts the finished link on your clipboard; Open launches it in a new tab for a final check; Clear resets every field. The Live output panel narrates what happened: params set counts your UTMs, base kept shows the untouched destination, fragment kept confirms any #section survived, and length reports the final character count.
§ 04

Examples & behavior

Copy-paste patterns

Three links worth copying

Type the left-hand values into the fields above and you get the finished URL on the right. Conventions follow Google's GA4 URL-builder docs: lowercase, underscores, no personal data.

ScenarioField valuesFinished URL
Newsletter featuresource newsletter · medium email · campaign spring_sale · content hero_buttonhttps://example.com/?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale&utm_content=hero_button
Paid social testsource instagram · medium social · campaign launch · content video_ahttps://example.com/pricing?utm_source=instagram&utm_medium=social&utm_campaign=launch&utm_content=video_a
Printed QR flyersource flyer · medium qr · campaign downtown_openinghttps://example.com/visit?utm_source=flyer&utm_medium=qr&utm_campaign=downtown_opening

Naming conventions that keep reports clean

GA4 treats UTM values as case sensitive and reports exactly what you send, so one spelling per concept, forever. Lowercase with underscores is the convention baked into this page's Tidy mode.

ElementConventionExample
utm_sourceOne lowercase name per distinct platform.newsletter, instagram, flyer — never Newsletter and newsletter side by side.
utm_mediumOne lowercase name per channel type.email, social, qr, cpc — the how, not the where.
utm_campaignOne name matching the campaign, underscores for spaces.spring_sale, downtown_opening — matches the campaign name everywhere it runs.
utm_contentVariant label for A/B comparisons.hero_button versus text_link tells you which creative earned the click.
utm_termPaid-search keyword, lowercase.running_shoes — skip for non-search channels.
utm_idSame ID used in cost-data imports.Must match the import file exactly or costs will not join.

Where tagged traffic appears in GA4

Open Acquisition, then the Traffic acquisition report: Session source, Session medium and Session campaign break down the tagged visits, and the manual-tagging dimensions carry your exact values into explorations and audience building. Expect up to 24–48 hours before fresh tags settle into standard reports, and check the realtime view for an immediate sanity check that parameters arrived intact. If rows show (not set), the link went out missing a value — see the FAQ in § 05, then rebuild it here. Teams that tag often usually keep one shared sheet of approved source, medium and campaign spellings; this page enforces the formatting, the sheet enforces the vocabulary, and together they keep every quarter comparable.

What this page does to your URL

Documented from the page's own script, verified Sep 2026 — no surprises.

SituationBehavior
Existing query paramsKept. A destination like /pricing?plan=annual keeps plan=annual and gains your UTMs alongside it.
Existing utm_* keysReplaced. Old campaign tags on a pasted URL are overwritten by the values in the form, never duplicated.
#fragmentPreserved untouched. UTMs are appended to the query string before the fragment, which is where Analytics expects them.
Tidy values onValues are trimmed, lowercased, spaces become underscores. Turn it off only when a destination system demands exact original casing.
Missing or bad inputThe output stays parked, the buttons stay disabled, and a message names exactly which field is missing or unparseable.

Background reading, both official: Google's GA4 URL-builder guide defines each parameter and the required trio, and the traffic-source dimensions reference explains how manual tagging maps to report dimensions and why missing values surface as (not set).

§ 05

UTM FAQ

Six honest answers

Questions this page can answer precisely

Each answer describes this tool's real behavior or cites Google's official Analytics docs. Nothing is invented.

Should I tag links inside my own site with UTMs?

No. UTM parameters are for inbound links from outside properties, newsletters, ads, social posts, QR codes. Tagging your own internal links overwrites the visitor's original source with your site itself, a classic self-referral that fragments campaign reports. Keep internal navigation clean and save UTMs for traffic arriving from elsewhere.

Where do UTMs go when my URL has a #fragment?

Before the fragment. This page appends UTMs to the query string and preserves your #fragment untouched, shown as fragment kept in the Live output panel. Analytics reads the query part, so page?utm_source=x#section works. Anything after the # is never sent as a query, so never place UTMs after it.

What does (not set) mean in my campaign reports?

A tagged session arrived missing one or more UTM values. Google's GA4 documentation warns explicitly that if you set one UTM parameter you should set all relevant ones, especially source, medium, campaign and id, because missing values surface as (not set) in reporting. Rebuild the link on this page with every required field filled.

What is utm_id for?

The campaign ID, used to identify a specific campaign or promotion and to join cost-data imports in GA4. Use the same IDs you upload when importing ad costs. It is optional for basic source, medium and campaign reporting, and needed when you import cost data. Verified Sep 2026 against Google's GA4 URL-builder docs.

Does case matter — is Email the same as email?

No, they are different. Google documents UTM values as case sensitive, so utm_source=google and utm_source=Google split into two report rows. Keep the Tidy values box checked, this page lowercases entries and converts spaces to underscores, and pick one spelling per channel forever.

Can I put names or emails in UTM values?

Never. UTMs travel inside URLs, visible in address bars, server logs, referrers and reports, and Google prohibits personally identifiable information in Analytics data. Use anonymous labels such as welcome_series, never a customer's name or address. Verified Sep 2026.

§ 06

Method, limits

Verified Sep 2026

How this page was checked

Behavior above was read directly from this page's script and re-verified Sep 2026: required trio of source, medium and campaign before output unlocks; existing query parameters preserved while existing utm_* keys are replaced; #fragments carried through untouched; Tidy mode lowercasing with spaces to underscores; hostname sanity check before build. Parameter meanings follow Google's GA4 URL-builder and traffic-source documentation linked in § 04. Everything is 100% client-side: no account, no network calls, no logging of your URLs — tagged links are assembled in the tab and leave only via your own clipboard.

Related tools

More free client-side utilities from the same lab.

Retired toolbox →Character Counter →JSON Viewer →Field Notes →