UTM builder
Build clean campaign URLs for Google Analytics 4. Presets put each link in the right GA4 channel, and the checks catch the case and spacing mistakes that split your reports.
Fill in the URL, source, medium and campaign.Bulk: tag many URLs with the same parameters
4 steps, no signup
- 01
Paste the page URL
The page people should land on. Existing query parameters are kept.
- 02
Pick a preset or fill the fields
Presets fill source and medium with values GA4 sorts into a predictable channel (print and QR codes have no GA4 channel, so they land in Unassigned). Campaign name is up to you.
- 03
Fix the warnings
Mixed case, spaces and mismatched values are flagged, because GA4 treats "Email" and "email" as different sources.
- 04
Copy the link
Copy the tagged URL. Each link you copy is saved in your browser (the last eight) so you can reuse a naming pattern.
Short answer: a UTM builder adds tracking tags such as utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale to a link, so Google Analytics can tell which campaign sent each visit. Fill in the URL, source, medium and campaign above and copy the result. Use lowercase values that GA4's channel rules recognise.
What this UTM builder does
Without UTM tags, a click from your newsletter, a LinkedIn post or a partner's site often shows up in Google Analytics as "direct" or a vague referral, and you can't tell which campaign worked. The UTM builder adds the tags that fix that: utm_source, utm_medium and utm_campaign, plus the optional ones, to any URL.
It goes further than a form that glues parameters together. Presets use the source and medium values GA4's default channel grouping actually recognises, so a newsletter link lands in "Email" and not "Unassigned". It also catches the mistakes that quietly wreck reports: mixed capitals, spaces, and links tagged as one thing but sent as another.
The UTM parameters
| Parameter | Answers | Example | Required? |
|---|---|---|---|
utm_source | Where did the click come from? | linkedin, newsletter | Yes |
utm_medium | What kind of channel? | social, email, cpc | Yes |
utm_campaign | Which campaign? | spring-sale-2026 | Yes |
utm_content | Which link or creative? | hero-button | Optional |
utm_term | Which paid keyword? | running-shoes | Optional |
utm_id | Campaign ID for data import | c-1042 | Optional |
How GA4 sorts your links into channels
GA4's default channel grouping uses your source and medium to decide the channel. Simplified, from Google's documentation (Analytics Help):
| Channel | Medium that triggers it (examples) |
|---|---|
| Cross-network | Campaign name contains cross-network |
| Paid Search / Social / Video / Shopping | A search, social, video or shopping site as source, with a paid medium (matches ^(.*cp.*|ppc|retargeting|paid.*)$, so cpc, ppc, paid_social) |
| Display | display, banner, expandable, interstitial, cpm |
| Paid Other | Any other paid medium |
| Organic Social | A social site as source, or social, social-network, social-media, sm as medium |
| Organic Video | A video site as source, or a medium containing video |
| Organic Search | A search engine as source, or organic as medium |
| AI Assistant | ai-assistant as medium (GA4 also detects some AI assistant referrers) |
| Referral | referral, app, link |
email, e-mail, e_mail, e mail as source or medium | |
| Affiliates | affiliate |
| Audio / SMS | audio as medium / sms as source or medium |
| Mobile Push Notifications | Medium ending in push or containing mobile or notification, or source firebase |
| Unassigned | Anything GA4 can't match |
Rules are listed in the order Google's page lists them; a link that matches an earlier rule (say, linkedin / paid_social) never reaches a later one. GA4 matches sources against its own long lists of search, social, video and shopping sites, while this builder knows only the common names, and Google updates the rules occasionally, so treat the prediction as a guide.
A naming convention that keeps reports clean
- Lowercase everything. GA4 is case-sensitive.
- Hyphens, not spaces. Spaces become
%20and are easy to mistype. - Source = the site or list, medium = the channel type.
linkedin / social, notsocial / linkedin. - Campaign names that sort well:
2026-11-black-fridaygroups by date in reports. - Write the convention down and share it with anyone who builds links for you.
A worked example
Say I'm linking to a pricing page from the header button of a November newsletter. I paste https://example.com/pricing?ref=nav, click the Newsletter preset (source newsletter, medium email), type 2026-11 Black Friday as the campaign and header-button as the content. With lowercase on, the campaign becomes 2026-11-black-friday and the link comes out as:
https://example.com/pricing?ref=nav&utm_source=newsletter&utm_medium=email&utm_campaign=2026-11-black-friday&utm_content=header-button
The existing ref=nav parameter stays. Under the link the builder says Likely GA4 channel: Email. Change the medium to newsletter and the prediction flips to Unassigned, which is the mistake the presets exist to prevent.
What it doesn't do
- It doesn't shorten links or host redirects. Build here, then shorten with whatever you already use.
- It doesn't check that the page exists. A typo in the URL still produces a tagged link.
- The channel prediction is an estimate. It follows Google's published rule order, but GA4 checks sources against much longer site lists, and custom channel groups in your property can change the result.
- It doesn't sync anywhere. Your recent links live in this browser only; a different device or a cleared cache starts empty.
Troubleshooting
- "That URL doesn't look valid." The address couldn't be parsed. Check for spaces or stray characters; the
https://part is optional. - The Copy link button is greyed out. URL, source, medium and campaign are all required before a link is built.
- "Looks like a source, not a medium." You put a platform name such as
linkedinin the medium field. Move it to source and usesocialas the medium. - Bulk output shows
INVALID:That line couldn't be read as a URL. Fix it and the line updates as you type. - Visits still show as direct in GA4. Check the tags survive the click: some redirects and in-app browsers strip query strings. Open the final URL and look at the address bar.
Common UTM mistakes
- UTMs on internal links. They start a new session and overwrite the real source.
- UTMs on Google Ads links when auto-tagging is on. Let
gcliddo the work. - Inconsistent spellings:
fb,facebook,Facebook.com. Pick one per platform. - Putting the campaign in the medium, which sends traffic to "Unassigned".
- Tagging organic search links. Google already attributes those.
Related tools
Before you send the campaign, preview how the landing page looks in Google with the SERP snippet preview and test your email's subject line with the subject line tester. If AI assistants are sending you traffic, the AI traffic loss calculator and the AI crawler log analyzer cover the other side. Google's own guide to custom campaign URLs lists every parameter GA4 reads.
Privacy
Links are built in your browser. Your recent links are saved only in this browser's local storage, never on a server, and the Clear button deletes them.
Last checked and updated: . Everything on this page runs in your browser; nothing you enter is sent anywhere.
Frequently asked questions
What are UTM parameters?
?utm_source=newsletter&utm_medium=email) that tell analytics tools where a visit came from. Google Analytics reads them to attribute traffic to a source, medium and campaign.Which UTM parameters are required?
Are UTM parameters case-sensitive?
What should utm_medium be?
email, social, cpc or paid variants for paid search, display, affiliate, referral, organic. A custom medium like "newsletter-blast" lands in "Unassigned".Should I use UTMs on Google Ads?
gclid parameter) passes richer data to Google Analytics automatically. Use UTMs for every other platform: Meta, LinkedIn, newsletters, partners, QR codes.Should I use UTMs on internal links?
Do UTM parameters affect SEO?
What is utm_content for?
header-button and footer-link.