UTM Builder
Add UTM parameters to any link so your analytics can tell where traffic came from. Handles URLs that already have query strings, which is where hand-built UTMs usually break.
Free, no signup, and everything is calculated in your browser.
What each parameter is for
utm_source is where the traffic came from (newsletter, twitter, partner-site). utm_medium is the channel type (email, social, cpc). utm_campaign names the initiative.
utm_term and utm_content are optional — term for paid keywords, content for distinguishing two links in the same email.
Keep them lowercase and consistent. Analytics tools treat Newsletter and newsletter as different sources, which quietly splits your reporting in half.
What are UTM parameters?
UTM parameters are key-value pairs added to the end of a link, after a question mark, that tell your analytics tool where a visit came from. The page itself ignores them; Google Analytics, Matomo, HubSpot and most other tools read them when the page loads and file the visit under the source, medium and campaign you wrote.
The builder above takes a destination URL and six fields and assembles the link for you. Paste a link that already has UTMs and the fields fill in from it, so you can change one value without losing the rest. It uses the browser's own URL parser, so a link that already has a query string (?ref=abc) gets the UTMs appended with an ampersand instead of a second question mark, which is the most common way hand-typed UTMs break.
Which UTM parameters does GA4 support?
Google's help centre lists nine campaign parameters. The builder covers the first five, which are the ones almost every report uses.
| Parameter | What it records | Google's guidance | In this builder |
|---|---|---|---|
| utm_source | Who sent the traffic: newsletter, linkedin, google, partner-site | Required | Yes |
| utm_medium | The channel type: email, social, cpc, referral | Required | Yes |
| utm_campaign | The initiative: spring-sale, webinar-oct-2026 | Required | Yes |
| utm_term | Paid search keyword | Optional | Yes |
| utm_content | Which link or creative, when one campaign has several | Optional | Yes |
| utm_id | A campaign ID, used to join cost data you import | Recommended | Yes |
| utm_source_platform | The platform that sent the traffic (for example a buying platform) | Recommended | No |
| utm_creative_format | Creative type: display, native, video, search | Accepted, not currently reported | No |
| utm_marketing_tactic | Targeting: remarketing, prospecting | Accepted, not currently reported | No |
Google says to always set utm_source, utm_medium and utm_campaign, and warns that missing parameters show up as (not set) in reports. If you run Google Ads with auto-tagging on, the auto-tagged values win over any UTMs on the same link.
Sources: Google Analytics Help — URL builders: collect campaign data with custom URLs · Google Analytics Help — Traffic-source dimensions, manual tagging, and auto-tagging
How do you build a UTM link? (worked example)
Say you are sending a newsletter on 6 October 2026 that links to a webinar sign-up page at https://example.com/webinar, and the email has two links to it: a button at the top and a text link at the bottom. You want to know which one people click.
Enter the page as the destination URL, newsletter as the source, email as the medium, and webinar-oct-2026 as the campaign. Build the link twice, once with header-button in the content field and once with footer-link. The first result is https://example.com/webinar?utm_source=newsletter&utm_medium=email&utm_campaign=webinar-oct-2026&utm_content=header-button.
Illustration: if GA4 later shows 120 sessions for header-button and 30 for footer-link, the top button drove 120 ÷ 150 = 80% of the tagged newsletter traffic to that page. Without utm_content the two links would be one row and you would never know.
Which GA4 channel will my utm_medium land in?
GA4 sorts every session into a default channel (Email, Organic Social, Paid Search and so on) using fixed rules on source and medium. The rules cannot be edited, and a medium that matches none of them sends the traffic to Unassigned, which is where most tagging mistakes end up.
The table below uses the rules from Google's channel definitions page. The pattern for paid channels is the regex ^(.*cp.*|ppc|retargeting|paid.*)$, so cpc, cpm, ppc and anything starting with paid all count as paid. Social and search channels also depend on the source matching Google's list of known social or search sites, so write the source as the site name (facebook, linkedin, google), not as social.
UTM naming conventions that map cleanly to GA4 channels
Suggested values. The right-hand column is what GA4's default rules do with them.
| Where the link goes | utm_source | utm_medium | GA4 default channel |
|---|---|---|---|
| Your email newsletter | newsletter | ||
| An organic LinkedIn post | social | Organic Social | |
| A paid Meta ad | paid-social | Paid Social | |
| Google Ads with auto-tagging off | cpc | Paid Search | |
| A text message | sms | sms | SMS |
| A partner's website | partner-name | referral | Referral |
| An affiliate link | affiliate-name | affiliate | Affiliates |
| A banner ad | site-name | display | Display |
| A podcast ad read | podcast-name | audio | Audio |
| A printed poster or flyer QR code | poster | qr or print | Unassigned (no offline channel) |
| Anything with medium newsletter | newsletter | newsletter | Unassigned — use email |
Print is the awkward case: GA4 has no offline channel, so QR traffic lands in Unassigned whatever medium you pick. If that matters, create a custom channel group (standard properties get two, and they apply to past data) with a rule such as medium exactly matches qr.
Sources: Google Analytics Help — [GA4] Default channel group · Google Analytics Help — [GA4] Custom channel groups
Are UTM parameters case sensitive?
Partly, and the difference catches people. Google states that channel definitions are not case sensitive, so utm_medium=Email still lands in the Email channel. But the values themselves are stored as you typed them, so Newsletter and newsletter show up as two rows in the source report and your totals are split between them.
The fix is a convention, written down: lowercase everything, use hyphens instead of spaces, and keep a shared sheet of approved sources and mediums. If you type a space into the builder, it is encoded as a plus sign in the link; hyphens are easier to read and to filter on.
Common UTM mistakes (and what they do to your reports)
Most tagging problems are not visible until someone opens a report weeks later. These are the ones to check before a campaign goes out.
Tagging internal links
A UTM on a link from your own homepage to your own pricing page tells analytics that the visit came from a campaign, which replaces the real source (a Google search, say) for whatever that visitor does next. Use UTMs only on links that point to your site from somewhere else. For internal clicks, use event tracking.
Source and medium swapped
utm_source=social&utm_medium=facebook reads naturally but matches none of GA4's rules: facebook is not a medium, and social is not on the list of social sites. The session goes to Unassigned. Source is the site, medium is the channel type.
Inventing a medium
newsletter, blast, mailer and e-blast are all reasonable words, and only email-style values (email, e-mail, e_mail, e mail) put traffic in the Email channel. Keep invented detail in utm_campaign or utm_content, where it cannot break channel grouping.
Losing the parameters before they are read
A redirect that drops the query string, a link shortener set up without forwarding, or a form in a plain iframe can all strip UTMs before anything records them. Click the finished link once and check that the parameters are still in the address bar of the page that loads.
When should you not use UTM parameters?
Skip them on internal links (see above), on Google Ads when auto-tagging is on (the auto-tagged values take precedence anyway), and on links in organic search results you do not control. Also skip them on links to tools that cannot read them: Google Forms, for example, does not let you add a Google Analytics tag and does not store URL parameters with responses, so a UTM on a Google Form link is recorded nowhere unless you build a pre-filled link into a question instead.
How do you capture UTM parameters in a form?
Analytics tells you which campaign brought a visitor. It does not tell you which campaign brought a specific lead, sign-up or order. To get that, the form has to save the UTM values with each response, and the standard way is hidden fields: form fields the respondent never sees, filled from the URL.
In Zunoform, declare the names under Settings → Hidden fields (utm_source, utm_medium, utm_campaign and so on). Any declared name present in the form link is saved with the response and appears in the response view and CSV export. It also goes out with deliveries: webhooks and Zapier catch hooks get a hidden object in the payload, Google Sheets and Excel get one column per hidden field, and Airtable fills same-named columns. HubSpot and Mailchimp do not receive hidden fields, so route CRM attribution through Zapier or a webhook.
If the form is embedded with Zunoform's embed script, the host page's query string is forwarded into the form automatically; a plain iframe snippet forwards nothing. Our full walkthrough, including how to keep UTMs when visitors browse several pages before the form, is in the guide to UTM tracking in forms.
Forms where UTM capture pays off
Each of these can take hidden fields for utm_source, utm_medium and utm_campaign.
Contact details, company size, goals, and buying timeline for inbound leads.
Session choice, role, and audience questions for live online events.
Email, topics, and send frequency — a subscribe form people finish.
Pre-launch email capture with use case and urgency for prioritizing invites.
Recruit early testers by platform, interest, and appetite for rough edges.
Ticket tiers with live pricing, track picks, and checkout in one flow.
UTM checklist before you send
- Source is the site or sender; medium is the channel type from GA4's list.
- Everything lowercase, hyphens instead of spaces.
- Campaign name matches the one in your shared naming sheet.
- utm_content set when one email or page has more than one link to the same place.
- No UTMs on links between pages of your own site.
- Clicked once: parameters survive any redirect or shortener.
- If the destination is a form, it has hidden fields to store the values.
Questions people ask
Do UTM parameters affect SEO?
Not directly, but tagged URLs can create duplicate crawlable versions of a page. Use them on links you share elsewhere, not on internal navigation, and set a canonical URL on the page so search engines index the clean version.
Is my data sent anywhere?
No. The URL is assembled in your browser and never leaves it. Nothing here requires an account, and nothing you type is stored.
Is a UTM builder the same as a UTM generator or UTM creator?
Yes. They are different names for the same thing: a form that assembles a URL with utm_ parameters attached. This one also handles links that already carry a query string, which is where a hand-typed UTM usually breaks.
Which UTM parameters are required?
Google says to always set utm_source, utm_medium and utm_campaign, and missing ones show as (not set) in GA4. utm_term and utm_content are optional. Google also recommends utm_id and utm_source_platform if you import cost data or use buying platforms. This builder has a utm_id field; add utm_source_platform by hand after copying the link.
Are UTM parameters case sensitive?
The values are stored as typed, so Newsletter and newsletter become two separate sources in your reports. GA4's channel rules themselves are not case sensitive, so Email still lands in the Email channel. Lowercase everything to keep reports in one piece.
Does the order of UTM parameters matter?
No. Analytics tools read parameters by name, so utm_medium before utm_source works the same as the reverse. What matters is the spelling of each name and value, and that the first parameter starts with ? and the rest with &, which the builder handles.
Why is my UTM traffic showing as Unassigned in GA4?
The utm_medium did not match any default channel rule. Common causes are a made-up medium like newsletter instead of email, source and medium swapped, or offline traffic such as QR codes, which has no default channel. Fix the medium, or create a custom channel group.
Can I shorten the tagged link?
Yes, and for print or social you probably should. Build the full tagged URL here first, then shorten it; a standard redirect keeps the parameters and analytics still sees them. Click the short link once to confirm. For posters, turn the tagged link into a QR code.
Related tools

Ready when you are
Better forms.
Better data.
Start with a conversation, a document or a single page.
Unlimited forms and 500 responses per month on Free.
No card required.
- No credit card
- Unlimited forms
- 500 responses / month