Free tool · nothing leaves your browser

UTM builder for ecommerce

Presets for the stack you actually run — Klaviyo flows and campaigns, Meta, Google, TikTok — and validation for the mistakes that do not look like mistakes until a quarter of reporting is already wrong.

What UTM parameters do

UTM parameters are five tags appended to a link — source, medium, campaign, content and term — that tell analytics where a visit came from. Source and medium are required and decide which channel gets credit; the rest add detail. They are read on arrival and stored with the session, which is why a mistyped value cannot be corrected afterwards.

Build the link.

Prefilled with a Klaviyo flow link on a Shopify product URL that already carries a variant — the case naive builders break.

Start from a preset

Presets fill source, medium and content. The campaign name is yours.

Convention: yyyy-mm-name, so campaigns sort chronologically a year from now.

Lowercases and hyphenates every field, leaving platform placeholders untouched.

Your tagged link

https://example-store.myshopify.com/products/daily-greens?variant=41982&utm_source=klaviyo&utm_medium=email&utm_campaign=2026-09-replenishment&utm_content=flow-day-30

Checks 1

  • Note This URL carries Shopify's ?variant= parameter. Fine, and kept — but it means the link must be built by appending, not by string-joining with a ?, which is how variant links usually break.

Built in this tab. No storage, no shortener, no endpoint — the campaign name never reaches us.

The four mistakes that cost real money

None of them looks like a mistake at the moment you make it. All four are unfixable afterwards, because the value is stored with the session on arrival.

  1. 1

    Capitals

    Facebook, facebook and FaceBook are three sources forever, each holding a slice of the truth. This is the most common way a channel's numbers get split into pieces nobody reconciles.

  2. 2

    Inventing a medium per campaign

    Medium is what analytics groups channels by. Every new value is a new channel, and the default channel grouping quietly stops working. Seven values cover everything an ecommerce brand does.

  3. 3

    Paid traffic on an organic medium

    A paid Instagram placement tagged social instead of paid-social makes paid spend look like free traffic. Every efficiency number downstream is then wrong in the flattering direction.

  4. 4

    Double-tagging with your ESP

    Klaviyo can append UTMs account-wide. If it does and you tag by hand as well, the link carries two values for one parameter and analytics keeps one at random. Check the setting before you tag a single link.

The five parameters, and the convention

The purposes are the documented ones. The conventions are ours — the point of a convention is that it is applied consistently, not that it is uniquely correct.

What each parameter is for, how we name it, and what ruins it
Parameter What it is for Our convention The mistake
utm_source Where the click came from — the platform or the partner. The platform, lowercase: klaviyo, meta, google, tiktok. For partners, the partner's name. Putting the campaign name here, which turns one source into hundreds and makes channel reporting useless.
utm_medium The kind of traffic. This is what analytics groups channels by. email · sms · paid-social · social · cpc · affiliate · referral. Nothing else, ever. Inventing a new medium per campaign. Every new value is a new channel in the report, and the default channel grouping stops working.
utm_campaign The specific initiative, so two things running at once can be told apart. yyyy-mm-name — dated first, so campaigns sort chronologically a year later. Undated names. Six months on, `spring-sale` is ambiguous and nobody remembers which year won.
utm_content Which creative or which link within the same send. For email: flow or campaign, plus the link position. For paid: the ad name or the platform's placeholder. Leaving it empty on emails with several links, so you cannot tell whether the header or the footer button did the work.
utm_term Paid search keyword. Rarely used outside search. Leave empty unless you are running search without auto-tagging. Using it as a second content field, which nothing downstream expects.

Reviewed 2026-09-09. The medium values in the convention column are chosen to match the default channel groupings analytics platforms ship with — deviating from them is what puts traffic in “unassigned”.

What tagging will not fix

Attribution. A UTM records the last link somebody clicked. It does not know about the three ads they saw first, the podcast, or the friend who told them. Perfect tagging still produces last-click attribution, and last-click systematically overcredits the channels that sit closest to the purchase.

In-app browsers and privacy defaults. Some traffic arrives stripped of referrer data whatever you do. Tagging every link is what keeps that traffic out of “direct”, but it will not recover what the browser refused to send.

Retroactive mistakes. The value is stored with the session on arrival. Fixing the link tomorrow does not fix yesterday's data, which is the entire reason a convention is worth agreeing before a campaign rather than after.

Disagreeing platforms. Meta, Klaviyo and GA4 will report different numbers for the same campaign no matter how well you tag, because they count different events over different windows. Consistent tagging makes the gap explainable; it does not close it.

Definitions

UTM
Urchin Tracking Module — the parameter format that predates Google Analytics and is still what every platform reads.
Source
Where the click came from: the platform or the partner.
Medium
The kind of traffic. What channel grouping is built on, and the value most worth standardising.
Auto-tagging
Google Ads appending its own GCLID parameter. Richer than UTMs, and it can conflict with manual tags.
Last-click attribution
Crediting the final touch before conversion. What UTMs measure, and not the same thing as what caused the sale.

Questions about UTM tagging

What is a UTM builder?

A tool that appends tracking parameters to a link so analytics can tell where a visit came from. Five parameters exist — source, medium, campaign, content and term — and the first two are what actually decide which channel the visit is credited to. Everything else is detail you may or may not need.

Do I need UTMs if Klaviyo tags links automatically?

No, and doing both is worse than doing neither. Klaviyo can append UTMs account-wide from its settings; if that is enabled and you also tag links by hand, the URL carries two values for the same parameter and analytics keeps one of them arbitrarily. Check the setting first, then pick one method. This tool flags a URL that already carries UTM parameters for exactly that reason.

Will UTMs break my Shopify variant links?

Not if they are appended properly. A product URL often already carries ?variant=41982, and a builder that joins with a naive question mark produces a URL with two, which breaks the variant selection. This one appends to the existing query string and keeps the variant intact — the worked example above is deliberately that case.

Why does capitalisation matter?

Because analytics is case-sensitive on these values. Facebook, facebook and FaceBook are three separate sources in your reports, permanently, and each holds a slice of the truth. It is the single most common way a channel's real numbers get split into pieces nobody reconciles. Lowercase everything, always.

What is the difference between social and paid-social?

One character of convention that decides whether your paid budget is credited to a paid channel or to organic. Keep organic posts on medium `social` and anything you paid for on `paid-social`. Without the split, paid spend appears to produce free traffic and every efficiency calculation downstream is wrong.

Should campaign names include a date?

Yes — lead with it, as yyyy-mm. Six months later, `spring-sale` is ambiguous and `2026-03-spring-sale` is not. It also makes campaigns sort chronologically in every report you will ever build, which costs nothing at tagging time and saves an hour every quarter afterwards.

Is my link sent anywhere?

No. The URL is assembled in this browser tab and never leaves it — no storage, no shortener, no endpoint. Campaign names are often the most commercially sensitive string a marketer types, so the tool is built not to see them.

Find out what you’re losing.

Before you commit to anything, we tell you exactly what you’re losing and what it costs to stop it. Two weeks. Fixed fee. Credited in full against any build you go ahead with.

Fee
$1,500–$3,000, fixed
Duration
Two weeks
Credited
In full, against any build
You supply
Read access + one 45-minute call