Quick answer
A UTM builder adds tags such as utm_source, utm_medium and utm_campaign to a link so Google Analytics can tell which campaign brought each visit. In Playxoft's free UTM builder, paste the page URL, pick a channel preset or type the source, medium and campaign, and copy the tagged link. It keeps the page's existing query string and #fragment, lowercases values so reports stay tidy, and estimates the GA4 default channel the traffic will land in.
- GA4 channel estimate
- Keeps query and #fragment
- Naming auto-fix
- 15 channel presets
- Bulk CSV in and out
- Ad macros kept
- QR code hand-off
How to use the UTM Builder
- 1Paste the Page URL people should land on. Its existing parameters and #fragment are kept.
- 2Pick a Channel preset (newsletter, Facebook ads, QR code on print…) or type the Source and Medium yourself.
- 3Add a Campaign name and, if you like, a Campaign ID and a Content value to tell links apart.
- 4Check the GA4 channel (estimate) panel and fix any warning, such as capitals or a site name used as the medium.
- 5Click Copy URL, or Make a QR code to turn the link into a printable code. For many links, switch to Bulk (CSV) and download the results.
What are UTM parameters?
UTM parameters are tags added to the query string of a link. When someone clicks it, your analytics tag reads them and files the visit under that campaign instead of a vague "referral" or "direct". Google lists nine in its URL builder documentation:
| Parameter | What it holds | Example | Shown in GA4 as |
|---|---|---|---|
utm_source | Where the link lives | newsletter, facebook | Session manual source |
utm_medium | The kind of channel | email, paid-social, cpc | Session manual medium |
utm_campaign | The promotion | spring-sale | Session manual campaign name |
utm_id | A stable campaign ID | spr26 | Session manual campaign ID |
utm_term | The paid keyword | running shoes | Session manual term |
utm_content | Which link or ad | hero-button | Session manual ad content |
utm_source_platform | The buying platform | Search Ads 360 | Session manual source platform |
utm_creative_format | The creative type | video | Not reported yet |
utm_marketing_tactic | The targeting | remarketing | Not reported yet |
Google notes that values are case sensitive: utm_source=Google and utm_source=google become two different sources, which is why the builder lowercases values by default.
Which utm_source and utm_medium should I use for each channel?
GA4 sorts manually tagged traffic into its default channel groups with fixed rules. A medium that matches ^(.*cp.*|ppc|retargeting|paid.*)$ counts as paid, and a source on Google's published list of search, social, video or shopping sites decides which paid or organic channel it is. The rules are not case sensitive, but they are strict about spelling:
| Channel | utm_source | utm_medium | GA4 channel |
|---|---|---|---|
| Email newsletter | newsletter | ||
| Facebook ads | paid-social | Paid Social | |
| LinkedIn post | social | Organic Social | |
| Google Ads, tagged by hand | cpc | Paid Search | |
| YouTube description | youtube | video | Organic Video |
| Affiliate partner | partner-name | affiliate | Affiliates |
| QR code on a poster | poster | qr | Unassigned |
Two traps show up often. Google's published source list still names Twitter (twitter, t.co) rather than x, so by those rules paid posts tagged utm_source=x fall into Paid Other. And no default channel covers print: give every printed code the same medium, such as qr, and add a custom channel group for it. The estimate panel applies these rules as you type.
How do I keep UTM naming consistent?
Agree on a few rules and write them down where the whole team can see them:
- Lowercase everything and use hyphens instead of spaces:
spring-sale, notSpring Sale. - Source is the place, medium is the type.
utm_source=facebook&utm_medium=paid-social, neverutm_medium=facebook. - One spelling per platform. Pick
facebookorfband never mix them. - Use utm_content to tell links apart within one email or ad set, rather than inventing new campaign names.
- Never put personal data in a tag. An email address in
utm_contentbreaks Google Analytics' policies; the builder blocks values that look like one. - Never tag internal links on your own site. The click starts a new campaign touch, and the visit's real source loses the credit for what happens next.
Also, don't click your own tagged links to test them: your visit counts as campaign traffic. Test the plain page URL instead.
Do UTM parameters work with Google Ads auto-tagging?
They do, but auto-tagging wins. Google Ads adds a gclid to every click, and when a link carries both, Google says GA4 "uses the auto-tagged values for source, medium, and other traffic-classification dimensions". If your Google Ads account is linked to GA4, leave auto-tagging on and skip manual tags; tag by hand only when there is no link.
Ad platforms can also fill in values for you. Google Ads' ValueTrack parameters such as {keyword} and Meta's dynamic parameters such as {{campaign.name}} are replaced per click, so the builder leaves the braces unencoded and keeps their capitals. Click IDs copied from an old visit (gclid, fbclid, msclkid) are flagged, because they belong to one click and credit the wrong visit.
What happens to existing query strings and #fragments?
Many landing pages already have parameters, and some single-page apps route with a fragment. The builder keeps both exactly as they are:
Page URL: https://example.com/app?plan=pro#/pricing
Tagged URL: https://example.com/app?plan=pro&utm_source=newsletter&utm_medium=email&utm_campaign=launch#/pricingExisting parameters keep their order and encoding, and the UTM parameters always go before the #: browsers never send the fragment to the server, and analytics tags read campaign values from the query string. A UTM key that is already on the page URL is replaced, and an already tagged link can be loaded back into the form for editing.
For a whole campaign, switch to Bulk (CSV): paste rows from a spreadsheet and download every tagged link with its channel estimate. Cells that start with = or + are escaped so the file opens safely in Excel.
Frequently asked questions
Last updated by the Playxoft engineering team.