UTM Builder
Tag links with UTM parameters for Google Analytics — checked, encoded and ready to share, or read back from a tagged link.
Your link appears here once it has an address and a UTM value.
Your QR code appears here as you type.
Adds UTM parameters to a link so Google Analytics can tell which campaign, source and medium brought each visitor. The tool encodes every value, keeps the link's own query string and fragment intact, and says which GA4 default channel the link will be reported under, before any traffic arrives.
Paste a link that is already tagged and its values fill the fields, so an old campaign link can be checked or changed. Each link also gets a QR code for print. Everything is worked out in your browser.
The parameters
- Source (
utm_source) — where the visitor comes from: google, newsletter, facebook. - Medium (
utm_medium) — the kind of traffic: cpc, email, social, referral. - Campaign name (
utm_campaign) — the campaign or promotion: spring_sale. - Campaign ID (
utm_id) — the campaign’s ID, matching any campaign data you upload. - Term (
utm_term) — the paid keyword. - Content (
utm_content) — which link or creative was clicked, when one campaign has several. - Source platform (
utm_source_platform) — the platform that directed the traffic, such as Search Ads 360. - Creative format (
utm_creative_format) — the type of creative: display, native, video. Google says it isn’t reported in Google Analytics yet. - Marketing tactic (
utm_marketing_tactic) — the targeting: remarketing, prospecting. Google says it isn’t reported in Google Analytics yet.
Google says to always set source, medium and campaign; the tool warns while one is empty. Empty fields add nothing to the link. Source and medium suggest common values as you type, and any other text is accepted. The extra three fields sit under More fields.
An address without https:// gets it. Values are trimmed and percent-encoded, a space as %20, so &, =, # and ? inside a value cannot break the link. UTM parameters the address already carries are replaced by the fields, with a warning; other parameters stay in place, and the new ones go before any #fragment. Spaces, quotes and non-Latin letters in the address's own parameters and fragment are percent-encoded as a browser sends them. A domain with non-Latin letters is written in Punycode in the link.
Lowercase values, off by default, lowercases every value in the link. GA4 reports values as typed, so Email and email are two sources; while the option is off, the tool warns of capitals instead. It also warns of spaces, of a link no channel rule matches, and of a link over 2,000 characters.
Examples
A newsletter link
- Website URL
- example.com/blog/autumn-guide
- Source (utm_source)
- newsletter
- Medium (utm_medium)
- Campaign name (utm_campaign)
- autumn_2026
- Content (utm_content)
- header_button
- Campaign URL
- https://example.com/blog/autumn-guide?utm_source=newsletter&utm_medium=email&utm_campaign=autumn_2026&utm_content=header_button
The address had no scheme, so https:// is added. The medium email puts the visit in the Email channel.
Paid social on a page with a query and a fragment
- Website URL
- https://shop.example/boots?size=42&colour=black#reviews
- Source (utm_source)
- Medium (utm_medium)
- paid_social
- Campaign name (utm_campaign)
- Winter Boots
- Campaign URL
- https://shop.example/boots?size=42&colour=black&utm_source=instagram&utm_medium=paid_social&utm_campaign=Winter%20Boots#reviews
- GA4 default channel
- Paid Social
The page's own parameters stay first and the fragment stays last. The space in the campaign name is sent as %20, and the capitals draw a warning: GA4 would report Winter Boots and winter boots apart. Instagram is on Google's list of social sites, and the medium matches the paid pattern.
Reading back a tagged link
- Pasted into Website URL
- https://shop.example/sale?utm_source=Facebook&utm_medium=paid_social&utm_campaign=autumn+sale
- Website URL
- https://shop.example/sale
- Source
- Medium
- paid_social
- Campaign name
- autumn sale
The + in the pasted link is read as a space, as web forms write one.
GA4 default channels for tagged links
| Channel | When |
|---|---|
| Direct | Source is “(direct)” and medium is “(not set)” or “(none)” |
| Cross-network | Campaign name contains “cross-network” |
| Paid Shopping | Source is a shopping site, or campaign name matches ^(.*(([^a-df-z]|^)shop|shopping).*)$; and medium matches ^(.*cp.*|ppc|retargeting|paid.*)$ |
| Paid Search | Source is a search site and medium matches the paid pattern |
| Paid Social | Source is a social site and medium matches the paid pattern |
| Paid Video | Source is a video site and medium matches the paid pattern |
| Display | Medium is display, banner, expandable, interstitial or cpm |
| Paid Other | Medium matches the paid pattern |
| Organic Shopping | Source is a shopping site, or campaign name matches the shopping pattern |
| Organic Social | Source is a social site, or medium is social, social-network, social-media, sm, social network or social media |
| Organic Video | Source is a video site, or medium matches ^(.*video.*)$ |
| Organic Search | Source is a search site, or medium is organic |
| AI Assistant | Medium is ai-assistant |
| Referral | Medium is referral, app or link |
| Source or medium is email, e-mail, e_mail or e mail | |
| Affiliates | Medium is affiliate |
| Audio | Medium is audio |
| SMS | Source or medium is sms |
| Mobile Push Notifications | Medium ends with push, or contains mobile or notification, or source is firebase |
| Unassigned | No rule matches |
Google’s rules
The parameters and their meanings are Google's, from its help page on custom campaign URLs. The channel rules are Google's default channel group definitions for traffic it cannot read from an ad platform, matched without case as Google states. The paid pattern is ^(.*cp.*|ppc|retargeting|paid.*)$.
Whether a source is a search, social, shopping or video site comes from the list of 819 sources Google publishes with these rules, last changed on 9 February 2023, matched as the whole source without case: facebook and fb are on it, facebook.com/ads is not. Google adds sites to its own copy over time, so a source added since then reads differently in GA4. Traffic tagged through Google Ads, Display & Video 360 or Search Ads 360 is classified from those platforms' own data instead.
Sources
- URL builders: Collect campaign data with custom URLs — Google Analytics Help
- Default channel group — Google Analytics Help
- GA4 Source Categories (Analytics' list of sources and categories) — Google Analytics Help
- Understand (direct) / (none) traffic — Google Analytics Help
Reviewed
Frequently asked questions
Facebook and facebook are two rows. For channels, no: the channel rules ignore case, so both reach the same channel. Google recommends lowercase throughout, which the Lowercase values option applies.See also
- URL Encoder & Decoder — to decode or encode a single value by hand.
- QR Code Generator — for a QR code with your own colours, logo and frame.