Free tool, no login

UTM Builder

Build campaign URLs that follow one convention, and see which GA4 channel each link will land in before you send it.

Free, no login, no email. Nothing stored beyond a 24 hour cache. Markdown copy · API and MCP

Start from
Campaign URL

Add a destination URL, a source, and a medium. The link builds as you type.

Tagging convention

These rules are applied to every value before it goes in the link, so the whole team produces the same tag for the same placement. They are remembered in this browser.

Letter case
Spaces
Punctuation

Example with the current rules: Spring Sale 2026! becomes spring_sale_2026

Parameters written: utm_source, utm_medium, utm_campaign, utm_id, utm_term, utm_content. Empty fields are left out rather than written blank.

This tool runs entirely in your browser. The URLs you build are never uploaded, never logged, and never leave this tab. Only your convention settings are saved, in this browser, so you do not have to set them again.

How it works

  1. 1

    Paste the destination

    Any page URL. Existing tags on it can be loaded into the fields rather than duplicated.

  2. 2

    Fill in the placement

    Source and medium at minimum. Your convention is applied as you type, and each field shows the tag it will actually produce.

  3. 3

    Check the warnings, then copy

    The tool flags unrecognised mediums, personal data, and internal-link tagging before the link goes out. Add several to build a set.

Why this matters

Campaign reports break from consistency, not syntax

Every UTM builder joins five inputs with ampersands, and none of them get that wrong. What goes wrong is that one person types Facebook, another types facebook, and a third types FB. Analytics tools compare those as literal strings, so one campaign becomes three rows and every number is a third of what it should be.

Nothing alerts you. The report looks fine. You find it months later while trying to work out why a channel underperformed, and by then the history cannot be fixed because the values are already written into collected data. This tool applies one convention to every value, shows you the tag it produced, and remembers the rules so the next person gets the same result.

The medium decides where your traffic goes

GA4 sorts traffic into channel groups, and for most of them the decision comes down to utm_medium matching a value Google recognises. Use email and you land in Email. Use newsletter and you land in Unassigned, which is a bucket nobody opens. The campaign ran, the clicks arrived, and the report says nothing happened.

That rule is documented but almost never surfaced where you are actually typing. Here the channel appears under the medium field as you type it, so you find out while you can still change it instead of at the end of the quarter.

Two mistakes worth knowing about

The first is tagging internal links. A UTM on a link between two pages of your own site starts a fresh session and replaces the original source, so a visitor who came from a paid ad and clicked a tagged nav link is credited to the nav link. Paid spend disappears into internal traffic.

The second is personal data. Putting an email address or a customer ID in utm_content is common in lifecycle email, and it breaks Google's terms. They can delete the data, and the deletion is not selective. This tool flags both before you send the link.

Common questions

Source and medium. Without both, GA4 cannot place the visit in a channel and it usually ends up reported as direct. Campaign is strongly recommended because it is how you group placements together. Term and content are optional, and content is the one most people underuse: it is how you tell the hero button apart from the footer link in the same email.

Use it from a script or an agent

The same run this page does, as an HTTP endpoint and as the MCP tool build_utm_url. No account, no API key. Full reference.

Show the calls

HTTP

POST /api/tools/utm-builderbash
curl -sS https://usesuperflow.ai/api/tools/utm-builder \
  -H 'Content-Type: application/json' \
  -d '{"url":"example.com/pricing","source":"newsletter","medium":"email","campaign":"spring launch"}'

Returns { url, normalized, channel, issues[] with level, field and message }. None. The work is local and costs nothing. Allow up to 10 seconds.

MCP

Add the server oncebash
claude mcp add --transport http superflow https://usesuperflow.ai/api/mcp

Then ask your agent for build_utm_url. Setup for Claude Desktop, Cursor and VS Code is on the reference page.

Tagging the link is the easy half

Superflow agents watch every page your campaigns point at, and tell you when the landing page changes, breaks, or quietly stops matching the ad.

Start free