UTM Builder
Build clean, consistent campaign URLs for Google Analytics — with automatic lowercase and hyphen cleanup, quick presets for common channels, and a QR code for print or offline campaigns.
How to Build a Campaign URL
Features
The Traffic That Looks "Direct" But Isn't
Open any analytics dashboard and there's almost always a suspiciously large "(direct)" traffic bucket — visits with no recorded source at all. Some of that really is someone typing your URL from memory. A lot of it is a newsletter link, a social post, or a partner site that never got tagged in the first place, so the platform had nothing to attribute it to and shrugged. A UTM tag is the one thing that turns a mystery visit into a specific, attributable channel.
Proving a Channel Is Actually Working
Without consistent tagging, "how did the spring email campaign perform" is a question nobody can answer cleanly — the clicks exist in the data somewhere, just scattered under direct or referral traffic instead of grouped under one campaign name.
Comparing the Same Promotion Across Channels
Run one campaign across email, paid social and an influencer post, and giving all three the same utm_campaign value — while letting source and medium differ — is what makes a single filtered report showing all three side by side possible at all, instead of three disconnected numbers in three different places.
Who Actually Reaches for This
- Marketers — tagging every outbound email, social post and ad consistently before a campaign goes live
- Agencies — keeping tagging conventions identical across multiple client accounts
- Solo founders and small teams — finally answering "which channel actually brought in that signup" with real data instead of a guess
- Event and print teams — turning a campaign URL into a QR code for a flyer, poster or business card
- Anyone running paid ads — confirming ad platform click data lines up with what actually lands in analytics
What Each Parameter Is Actually For
utm_source names the specific place a click came from — google, newsletter, a partner site's exact domain. utm_medium categorizes that source into a broader channel type — cpc, email, social, referral. utm_campaign is the name of the specific push this link belongs to — a product launch, a seasonal sale, a single email send. utm_term and utm_content exist for finer detail: a paid search keyword, or telling two links in the same email apart. None of the optional fields are required for a campaign to be trackable — source, medium and campaign alone already unlock proper attribution.
Why the Last Five Campaigns Are Saved, Not Just the Current One
A single-use tool that forgets everything the moment you leave the page works fine for a one-off link, but campaign tagging is rarely a one-off — the same product launch usually needs five or six differently-tagged URLs across email, paid social, an influencer post and a QR code, all built in the same sitting. Keeping the last five built campaigns saved locally means the second and third link in that batch start from a real, already-typed campaign name and source instead of retyping the same values with a slightly different medium each time — which is exactly the kind of small inconsistency that leads to the fragmented-data problem described above.
Because that history lives only in your own browser's local storage, it's there for picking up a campaign you were building yesterday, but it won't follow you to a teammate's machine or a different browser — a shared tagging convention still needs to be agreed on separately, not assumed from whatever one person's saved history happens to contain.
Keeping Your Data Clean
- Agree on a naming convention before a team starts tagging links. Whether it's underscores or hyphens, all-lowercase or not, consistency across everyone doing the tagging matters more than which exact convention gets picked.
- Lower the TTL on this problem by turning cleanup on by default. Leave Lowercase All Values and Replace Spaces with Hyphens switched on unless you have a specific reason not to — they prevent the most common source of fragmented campaign data.
- Don't tag internal links. Save UTM parameters for links leaving your site toward an external channel, not navigation between your own pages.
- Reuse the campaign name, vary the source and medium. That's what makes one campaign comparable across every channel it ran on.
- Check the built URL before sending it anywhere. This tool preserves any existing query parameters on a URL, but it's still worth a glance to confirm nothing important got dropped.
The Mistake That Splits Your Own Data
The most common way UTM tagging goes wrong isn't a missing tag — it's an inconsistent one. Two people on the same marketing team tag the identical newsletter send as "Newsletter" and "newsletter," and instead of one clean row in the report, that campaign now shows up as two separate, smaller-looking ones, neither of which reflects its real total performance. The same thing happens when one person's shorthand for a campaign drifts slightly from another's — "spring-sale" versus "spring_sale" — weeks before anyone notices the numbers don't add up. None of this shows up as an error anywhere; it just quietly fragments a campaign's data until someone goes looking for why the totals feel low.
Agencies running the same tagging convention across several client accounts hit this even harder, since a convention that drifts on one account rarely gets caught until a report is being pulled for a client call. Building every link through the same tool, with the same lowercase-and-hyphen cleanup applied automatically, is a simpler fix than trying to enforce a style guide by memory across a whole team.
Where Tagging Alone Won't Save You
UTM parameters only track clicks that actually carry them — a link shared without the tag, copied and reposted elsewhere, or stripped by an overly aggressive email client's link-cleaning feature will still land as untracked traffic no matter how carefully the original link was built. And while this tool preserves whatever query parameters already exist on a URL, it can't know whether those existing parameters matter to your site's own functionality — always confirm nothing critical was riding on a parameter this tool doesn't recognize as UTM before sending a tagged link out widely. It's also worth running the finished link through our Open Graph Preview Tool before a big send — appending UTM parameters shouldn't change how a link's title, image or description render when shared, but it's a quick check that costs nothing and catches the rare case where it does.