// UTM Builder

Free UTM Builder & Campaign URL Generator

Track your QR code campaigns in Google Analytics without invasive tracking.

5UTM Parameters
100%Client-Side
GA4Compatible
0Account Required

Build Your UTM URL

Fill in the fields below to generate a trackable URL for your QR code.

The full URL where you want to send people.
Required Parameters
Where the code is placed (e.g., "poster", "business-card")
Marketing medium (usually "qr" or "offline")
Your campaign identifier
Optional Parameters
For paid search keywords
To differentiate similar content (e.g., A/B testing)
Your Trackable URL
// 4-Step Setup

How to Use the UTM Builder

https://example.com
01

Paste Your URL

Source
Medium
Campaign
02

Fill In the Tags

Generate
03

Generate the URL

...utm_source=qr
04

Copy or Create a QR Code

// Use Cases

Perfect For

QuickQRC
Campaign Types · No. 0002
QR Code Campaigns Primary Use
Track scans from posters, flyers, and packaging in GA4.
Social Media Posts Per-Platform
See exactly which platform and post drove a click.
Email Newsletters Per-Campaign
Compare click-through rates across campaigns and lists.
Paid Search & Ads Per-Keyword
Tag keywords and creatives to measure real ROI.
QuickQRC
Technical Brief · No. 0003

How the UTM builder turns your inputs into a trackable URL

A UTM builder appends campaign tags to your destination link so analytics tools can report where each visit came from. This one also cleans every tag as it builds the link, so a poster, a flyer, and a table tent for the same campaign don't end up as three separate rows in your reports.

Everything runs in your browser. Your URL and campaign names are never sent to a server, saved, or logged.

What is a UTM code?

A UTM code is the string of tags added to the end of a web address after the question mark, such as ?utm_source=table-tent&utm_medium=qr. You will also see it called a UTM tag, a UTM parameter or a campaign URL. The code does not change the page. It only tells your analytics tool where the visit came from, and a UTM code generator saves you from typing and formatting it by hand.

QuickQRC UTM builder in a browser window with a cafe example filled in: website URL, source table-tent, medium qr, campaign spring-menu and content window-seats, and the generated trackable URL with Copy URL and Create QR Code buttons
The builder with a sample cafe campaign. The tags are cleaned as the link is built, and the result can be copied or turned into a QR code.

The five tags it writes

The tool builds a standard campaign URL using the parameters Google Analytics documents for manual tagging. Three are required; two are optional.

TagField labelWhat it recordsExample value
utm_sourceCampaign Source *Where the code or link sitstable-tent
utm_mediumCampaign Medium *The type of channelqr
utm_campaignCampaign Name *The promotion or initiativefall-menu-2026
utm_termCampaign TermA paid-search keywordoat-milk-latte
utm_contentCampaign ContentWhich specific placement or variantwindow-seats

It does not write utm_id, utm_source_platform, or the newer creative-format tags. If an ad platform hands you a campaign ID to pass through unchanged, add it to the link yourself after copying.

How each value is cleaned

When you press Generate UTM URL, every tag value runs through the same four steps before it goes into the link, and the field updates to show the cleaned version:

  1. Trim spaces from the start and end.
  2. Convert every letter to lowercase.
  3. Replace any run of spaces with a single hyphen.
  4. Remove every character that isn't a letter, digit, hyphen, or underscore.

That last step is worth watching. Accented letters and symbols are removed rather than converted, so the input and the output can differ more than you expect:

You typeThe link getsWhy
Summer Sale 2026!summer-sale-2026Spaces become hyphens; "!" is dropped
Café Flyercaf-flyer"é" is removed, not changed to "e"
email/newsletteremailnewsletter"/" is deleted, so the words run together
Poster #12poster-12Space becomes a hyphen; "#" is dropped

If a value matters, type it in the final form you want: lowercase, hyphen-separated, plain ASCII.

How the link is assembled

The tool takes your Website URL as entered, with two adjustments:

  • If it doesn't start with http:// or https://, then https:// is added to the front.
  • The tags are joined on with ? if the URL has no query string yet, or & if it already contains a ?.

The required tags are always written in the order source, medium, campaign, followed by term and content when you have filled them in. Each value is percent-encoded, though after cleaning there is rarely anything left that needs it.

The quick channel presets

The five preset buttons (Print Poster, Flyer / Mailer, Packaging Label, Tabletop Tent, and Business Card) fill in Campaign Source and Campaign Medium for you, and set a starter Campaign Name only if that field is still empty. Treat them as a starting point for offline placements and adjust any value before you generate.

Example: tagging a table-tent QR code for a café

Say Riverside Café prints a QR code on the table tents for its autumn menu launch, and wants scans from the window seats tracked separately from the rest of the room. (riverside-cafe.example is a placeholder domain; you would use your real one.) You enter:

FieldYou enterCleaned to
Website URLriverside-cafe.example/menuhttps://riverside-cafe.example/menu
Campaign SourceTable Tenttable-tent
Campaign MediumQRqr
Campaign NameFall Menu 2026fall-menu-2026
Campaign ContentWindow Seatswindow-seats

The tool prepends https://, sees no existing ?, and joins the tags in order. The result box shows:

https://riverside-cafe.example/menu?utm_source=table-tent&utm_medium=qr&utm_campaign=fall-menu-2026&utm_content=window-seats

Press Copy URL to take that link, or Create QR Code to open the generator with the URL already loaded. For the next placement (the counter sign, say), reuse the same source, medium, and campaign, and change only Campaign Content to counter-sign.

What the tagged URL tells you, and what it doesn't

Once someone opens the link, Google Analytics 4 reads the tags and files the visit under Session source, Session medium, and Session campaign in the Reports → Acquisition → Traffic acquisition report. You can then compare visits, engaged sessions, and key events by placement.

What a UTM tag can't do: count scans, count people, or record anything that happens before the link opens. Someone who scans a code, reads the URL preview, and closes it never reaches your site and never appears in analytics. A blocked script, a declined consent prompt, or a redirect that strips the query string each cost you the visit too. For how those numbers behave in practice, and how redirect analytics differ, see the QR code tracking guide.

UTM tags vs. dynamic-code scan tracking

Two different things get called "QR tracking", and they measure at different points.

 UTM tags on a static codeDynamic (redirect) code
What it measuresVisits that reach your analytics-tracked pageRequests hitting the redirect service
Needs a paid serviceNoUsually, on an ongoing basis
Destination editable after printNo, unless you control the redirectYes
Counts a visitor who leaves before the page loadsNoRecords the request anyway
Campaign attribution in GA4Yes, directlyOnly if you also add UTM tags

For a short campaign pointing at a page you already measure, UTM-tagged static codes are usually enough, and you own the whole chain. The static vs. dynamic comparison covers the trade-offs in full.

Tips, limits, and common mistakes

  • Don't paste a URL with a # fragment: the tags are added to the end of whatever you type, so example.com/page#menu becomes example.com/page#menu?utm_source=…; the tags sit inside the fragment and never reach analytics. Remove the #menu part first.
  • Strip existing utm_ tags before pasting: if your link already carries them, the tool adds a second set rather than replacing the old one, which makes attribution unpredictable.
  • Accented and non-Latin characters vanish: as the cleaning table above shows, they are deleted, not transliterated. Spell campaign names in plain ASCII.
  • Keep personal data out of the tags: names, emails, and customer IDs in a URL end up in browser history, server logs, and shared screenshots.
  • Match your existing naming: the tool lowercases for you, but it can't know you have been writing newsletter elsewhere and typing email-newsletter here. Pick one convention and reuse it.
  • It builds one link at a time: for dozens of placements, build a master link, create the QR code, then vary utm_content per placement by hand or with the bulk generator.

Test the whole chain before printing

Generate the code, scan it with a real phone, and confirm a test visit shows up in GA4 with the right source, medium, and campaign. Note the time so you can exclude that test traffic from your analysis later.

// FAQ

Frequently Asked Questions

Enter your destination URL, then fill in Campaign Source, Campaign Medium, and Campaign Name, and press Generate UTM URL. The tool cleans each value, appends the tags, and shows a link you can copy or turn into a QR code. Campaign Term and Campaign Content are optional.

Use one consistent label such as qr or offline for every printed placement. Google Analytics reports whatever medium you send, but its default channel groups may put an unfamiliar medium under Unassigned, so define a custom channel group if you want QR traffic shown as its own channel. Reusing the same label across posters, flyers and packaging keeps all QR-driven traffic together.

Google Analytics treats Poster and poster as two different sources, which splits one campaign across several rows. The tool converts every value to lowercase and hyphens as it builds the link, so the campaign URLs you create stay consistent without you having to remember the rule.

Yes. Put a UTM-tagged URL behind the QR code, and any scan that opens your site is attributed to that campaign in Google Analytics. It will not count scans that never load the page, and it cannot tell two identical codes apart unless you give each its own Campaign Content value.

Not directly. UTM tags do not change the page content, and Google generally treats tagged and untagged URLs as the same page, though a canonical tag on the page removes any doubt. Keep tagged links out of your own site navigation, because internal clicks that carry campaign tags can re-trigger campaign attribution in the middle of a session.

Source is the specific place a visit comes from, like table-tent or spring-newsletter. Medium is the broader channel that place belongs to, like qr, email, or cpc. Source answers which placement; medium answers what kind of channel.

No. It writes the five classic tags only: source, medium, campaign, term, and content. If your ad platform gives you a utm_id or other parameters to pass through, copy the generated link and add them yourself, keeping their original capitalization.

Only for placements you will actually compare. Give each one its own Campaign Content value, such as window-seats or counter-sign, while keeping source, medium, and campaign the same. Creating a unique code for every leaflet you will never analyze separately just makes your reports noisier.