A UTM builder that stops Analytics from splitting your sources in two.
Campaign links built as you type: URL plus the five UTM parameters, with channel presets and a history of what you’ve already used. Every value is normalized to lowercase without spaces, so “Facebook” and “facebook” stop being two different sources in your report. Offline, in your menu bar.
Already have Toolbox? Open this widget
Build your campaign link
Fill the fields and copy the URL. It is built in your browser — the URL is never sent anywhere.
source = where it comes from (google, linkedin). medium = what kind of traffic it is (cpc, email, social).
100% local · your URL never leaves the browser
The link is finished before you finish typing.
Paste the destination URL, then fill the parameters: source, medium, campaign, and optionally term and content. The final link is assembled live under the fields — no “generate” button, no waiting — and one tap copies it, opens it, or clears the form.
Two things make the second link faster than the first. The channel presets fill source and medium together for LinkedIn, a newsletter, Google Ads or Instagram. And the history remembers up to eight values per field, shown as chips — so the campaign name you invented last Tuesday is one tap away instead of retyped slightly differently. If one of the three parameters GA needs is missing, the widget names it and lets you continue anyway.
- All five canonical UTM parameters, assembled live
- Presets: linkedin/social · newsletter/email · google/cpc · instagram/social
- History chips — up to 8 remembered values per field
- Copy, open in your browser, or clear
- Tells you which required parameter is missing, without blocking you
One capital letter is enough to split a channel in half.
UTM values are just strings, and Analytics compares them literally. Write
Facebook on Monday and facebook on Thursday and you now
have two sources in the report, each holding part of the truth. Add a stray space
or an “Email” next to an “email” and the acquisition table becomes a list of
near-duplicates that nobody trusts — which is usually the moment someone decides
the analytics are broken and stops looking at them.
Nothing can fix that after the fact: the clicks are already recorded under both spellings. So the widget prevents it at the only point where prevention is possible — as you type. Everything is lowercased and de-spaced before it reaches the link, which means consistency is the default instead of a discipline you have to remember at 11pm while scheduling a post.
- Lowercased and de-spaced automatically, every field
- Consistent mediums via presets — no “email” vs “e-mail”
- History chips reuse the exact string you used last time
- Prevention at write time — the only time it works
Paste a tagged link and it comes apart cleanly.
Most campaign links are variations of a link that already exists. Paste one with
UTMs already on it and the widget reads them back into the fields — change the
campaign, keep everything else, copy the new version. Old UTM values are
replaced rather than appended, so you never end up with
utm_source twice in one URL.
Anything that was already on the URL survives: the existing query string and the
#fragment are both preserved, because a link to a specific section of
a page should still land there after you tag it.
The parsing is also careful about the things that go wrong when you prefix a
string with https:// blindly. It checks the scheme before
completing it, so a mailto: address doesn’t silently become a URL with
credentials in the host; it rejects URLs carrying a username and password; and it
still understands that localhost:3000 is a port, not a scheme.
- Reads existing UTMs back into the form
- Replaces old UTM values instead of duplicating them
- Preserves the original query string and the
#fragment - Rejects non-http(s) schemes and URLs with embedded credentials
localhost:3000keeps working
ref=blog kept · #plans kept · old UTM replaced, not duplicatedInstalled from the catalog, in one click.
UTM Builder isn’t bundled into the app — it’s a widget in the Webstarted Toolbox catalog. Download Toolbox, open the catalog tab (🧰), press the “+” next to UTM Builder, and it lands in the Marketing tab of your Business space. No reinstall, no app update. Here are a few of its neighbors:
Questions, answered.
Why does it lowercase everything?
Because Google Analytics treats utm_source values as case-sensitive strings. Paste “Facebook” in one post and “facebook” in the next and your report shows two sources, each with half the traffic, and any comparison you make from it is wrong. The widget lowercases and removes spaces from every value as you type, so the same channel always lands in the same row. It is a small rule that quietly saves a quarter’s worth of reporting.
Will it break the query parameters my URL already has?
No. It preserves the existing query string and the fragment (the #anchor), appends the UTMs alongside them, and replaces old UTM values instead of appending a second copy. That last part matters: hand-editing a link that already carries utm_source is how you end up with the same parameter twice and an ambiguous URL.
Can I edit a link that already has UTMs?
Yes — paste it in and the widget reads its existing parameters back into the fields, so you can change the campaign name on last month’s link instead of rebuilding it from scratch. Combined with the history chips, tagging the next post is usually four taps.
Which parameters are actually required?
Source, medium and campaign are the three GA needs to attribute a visit properly; term and content are optional refinements for paid keywords and A/B variants. If one of the three is missing the widget tells you which — but it does not block you, because sometimes you genuinely want a partial link and being nagged into a fake value is worse.
What are the channel presets?
One-tap source and medium pairs for the channels most people use: LinkedIn (linkedin / social), newsletter (newsletter / email), Google Ads (google / cpc) and Instagram (instagram / social). Consistent medium values are half the battle in a clean report — “email” and “e-mail” are two mediums as far as GA is concerned.
Does my link leave my machine?
No. Everything is assembled locally and the value history lives in the widget’s own storage on your device — up to eight remembered values per field. Nothing is uploaded, which also means an unannounced campaign URL is not sitting in someone else’s logs before you publish it.
How is it different from Google’s Campaign URL Builder?
Google’s version is a web page: you open a tab, fill five boxes, copy, and lose everything you typed the moment you close it. This one lives in your menu bar, remembers the values you have already used, offers channel presets, normalizes casing for you, and works with no connection. What Google’s has that this does not: it is the canonical reference and includes the Play Store / iOS variants of the form.
Is it free?
Yes. Webstarted Toolbox is free and needs no account, and UTM Builder is a free widget in its catalog — you install it in one click from inside the app.
Get Webstarted Toolbox
Free to use. Download the app, then add UTM Builder from the catalog in one click. macOS 12+ and Windows 10+.
One icon, many small tools
This is just one of the widgets in Webstarted Toolbox. Here are the rest: