Campaign URL Builder — UTM Generator for Google Analytics 4
Three fields do the work: utm_source (where the link lives), utm_medium (the channel type), and utm_campaign (your name for it). Add utm_id as well if you import campaign costs into GA4 — that is the field the import joins on.
The one that actually changes your reports is utm_medium: GA4 matches it against a fixed list of values to pick a channel group. Write cpc and the visit is Paid Search; write qr and GA4 has no rule for it, so the session lands in Unassigned and stays there.
all nine parameters ↓ · medium → GA4 channel ↓ · ready-made tags per platform ↓ · Google Ads template ↓
Enter your landing page URL and campaign details to get a tagged link ready for Google Analytics 4, Yandex Metrica, Matomo, or any other analytics platform. The URL updates live as you type, special characters are encoded automatically, and existing query parameters in your URL are preserved. Nothing is sent to any server.
All nine GA4 campaign parameters
Most builders stop at the original five. GA4 reads nine: it calls utm_id and utm_source_platform strongly recommended, and accepts two more that it stores but does not yet report on.
| Parameter | Status | What it holds | Example |
|---|---|---|---|
| utm_id | Recommended | Campaign ID. Use the same ID you upload with your campaign cost data so GA4 can join the two. | spring_2026_01 |
| utm_source | Required | Where the link physically lives — the referrer. | |
| utm_medium | Required | The channel type. This is the field that decides your GA4 channel group. | cpc |
| utm_campaign | Required | Your own name for the campaign, promo, or slogan. | spring_sale |
| utm_term | Optional | The paid keyword. Ad platforms can fill this in automatically. | running+shoes |
| utm_content | Optional | Which creative or which link was clicked — use it to tell two links in one email apart. | toplink |
| utm_source_platform | Recommended | The platform that routed the traffic, for example Search Ads 360. | Search Ads 360 |
| utm_creative_format | Optional | Creative type. Accepted by GA4 but not reported on yet. | native |
| utm_marketing_tactic | Optional | Targeting criteria. Accepted by GA4 but not reported on yet. | remarketing |
A fully tagged link with an ID looks like this: https://example.com/sale?utm_id=spring_2026_01&utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale
Which utm_medium lands in which GA4 channel
GA4 does not read your medium as free text. It tests it against a fixed set of rules and assigns a default channel group from the first one that matches. Paid channels are matched with the regex ^(.*cp.*|ppc|retargeting|paid.*)$; everything else is an exact value. The rules are case-insensitive.
| utm_medium | GA4 default channel | Condition |
|---|---|---|
| cpc | Paid Search | Matches the paid regex via .*cp.*. Falls back to Paid Other if the source is not a known search engine. |
| ppc | Paid Search | Literal match in the paid regex. Same source condition as cpc. |
| paid_social | Paid Social | Matches paid.*, so it needs the source to be a recognised social site — otherwise Paid Other. |
| social | Organic Social | social, social-media, social-network, sm and the spaced variants all work. |
| e-mail, e_mail and e mail are accepted too, and the rule fires on source as well as medium. | ||
| display | Display | banner, expandable, interstitial and cpm land in the same channel. |
| banner | Display | Exact-value match, not a pattern. |
| affiliate | Affiliates | Must be singular. affiliates in the plural matches nothing. |
| referral | Referral | app and link go to the same channel. |
| organic | Organic Search | Do not set this by hand — you will overwrite real organic attribution. |
| audio | Audio | Exact value only. Use it for podcast reads. |
| sms | SMS | Fires on source or medium. |
| push | Mobile Push Notifications | Any medium ending in push, or containing mobile or notification. |
Values that quietly become Unassigned
These all look like reasonable mediums and all match nothing, so GA4 cannot place the session in any channel: qr , qrcode , affiliates , newsletter , blog , post , telegram , banner_ad . Two traps stand out: affiliates in the plural (the rule is singular), and anything describing the source rather than the channel — newsletter is a source, its medium is email. Printed QR codes have no channel of their own; put the medium at referral and the surface in utm_source.
Ready-made tags for every placement
The pairs below are the ones that land where you expect in GA4. Use them as a house convention so two people tagging the same channel never write it two ways.
| Where the link lives | utm_source | utm_medium | GA4 channel |
|---|---|---|---|
| Google Ads search ad | cpc | Paid Search | |
| Microsoft/Bing Ads | bing | cpc | Paid Search |
| Facebook paid ad | paid_social | Paid Social | |
| Organic Instagram post | social | Organic Social | |
| Link in Instagram bio | social | Organic Social | |
| LinkedIn company post | social | Organic Social | |
| YouTube video description | youtube | social | Organic Video |
| Email newsletter | newsletter | ||
| Transactional email | app | ||
| Display/banner buy | adsense | display | Display |
| Affiliate partner link | partner_name | affiliate | Affiliates |
| Printed QR code | flyer | referral | Referral |
| SMS blast | sms | sms | SMS |
| Mobile push notification | app | push | Mobile Push Notifications |
| Guest post on a blog | site_name | referral | Referral |
| Podcast read | show_name | audio | Audio |
Google Ads: use a tracking template, not this form
Hand-tagging ad URLs goes stale the moment you rename a campaign. Set a tracking template once at account or campaign level and Google Ads substitutes the ValueTrack placeholders at click time, so the tags always describe the click that actually happened:
A template set above ad level must contain {lpurl}, which expands to the ad's final URL. Keep auto-tagging switched on as well — the gclid it appends is what joins Ads and GA4 together, and UTM tags are not a substitute for it.
| Placeholder | Replaced at click time with |
|---|---|
| {lpurl} | The final URL of the ad. A tracking template above ad level must contain it. |
| {campaignid} | Numeric campaign ID. |
| {adgroupid} | Numeric ad group ID. |
| {keyword} | The keyword that triggered the ad — the natural value for utm_term. |
| {creative} | Numeric ad ID — the natural value for utm_content. |
| {matchtype} | e, p or b — exact, phrase or broad match. |
| {network} | g search, s search partner, d Display. |
| {device} | m mobile, t tablet, c computer. |
| {targetid} | ID of whatever triggered the ad, prefixed kwd, dsa, aud, pla or hpi. |
How it works
- 1 Paste your landing page URL Enter the full address of the page the campaign should lead to, including https://. If your URL already has query parameters, they are kept.
- 2 Fill in the campaign parameters Source, medium, and campaign name are the three you should always set. Add utm_id if you upload campaign cost data to GA4. Term and content are optional — use them for paid keywords and A/B ad variants.
- 3 Copy the tagged URL The finished link appears below the form as you type. Click Copy and paste it into your ad platform, email tool, or social post.
Your data stays private
All processing happens entirely in your browser. No files, text, or data are ever sent to our servers. You can disconnect from the internet and this tool will still work.
Frequently asked questions
- Is this the same as Google's Campaign URL Builder?
- It produces the same output for the same input, including the utm_id field and Google's %20 encoding for spaces. The difference is what sits around the form: this page also documents all nine parameters GA4 reads and shows which utm_medium value lands in which GA4 channel group, which Google's builder does not. There is no signup and nothing is uploaded — the URL is assembled in your browser.
- What are UTM parameters?
- UTM parameters are query parameters added to a URL so analytics tools can report where a visit came from. They were introduced by Urchin, the product Google bought in 2005 and turned into Google Analytics — UTM stands for Urchin Tracking Module. The original set was five; GA4 now reads nine.
- What's the difference between utm_source and utm_medium?
- utm_source names the specific site or platform sending the traffic (google, facebook, newsletter). utm_medium names the channel type (cpc, email, social). A Facebook ad would be source=facebook, medium=paid_social; a link in your newsletter would be source=newsletter, medium=email. Only medium decides the GA4 channel group, so it is the field worth getting right.
- Which parameters are required?
- Google Analytics 4 only strictly needs utm_source, but you should always set source, medium, and campaign together — reports group traffic by source/medium pairs, and untagged fields show up as (not set). Google additionally calls utm_id and utm_source_platform strongly recommended. utm_term and utm_content are optional.
- What is utm_id for?
- utm_id carries a campaign ID rather than a campaign name. Its purpose is joining: when you upload campaign cost data to GA4, the import is matched on utm_id, so without it GA4 cannot put your spend next to the sessions it bought. Most UTM builders omit the field entirely, which is why so many GA4 cost imports never line up.
- Why does my tagged traffic show up as Unassigned in GA4?
- Almost always because utm_medium holds a value GA4 has no rule for. GA4 assigns a channel by matching medium against a fixed list — ^(.*cp.*|ppc|retargeting|paid.*)$ for paid, plus exact values like email, social, display, affiliate and referral. Plausible-sounding values such as qr, qrcode, affiliates or newsletter match nothing, and the session falls through to Unassigned. The medium table on this page lists every value that works.
- How do I tag Google Ads links?
- Do not hand-tag them. Put a tracking template on the account or campaign — {lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_term={keyword}&utm_content={creative} — and Google Ads fills the ValueTrack placeholders in at click time, so campaign and keyword stay correct as you edit the account. Also leave auto-tagging on: the gclid it adds is what links Ads and GA4 together, and UTM tags do not replace it.
- Should UTM values be lowercase?
- Yes, keep everything lowercase. Parameter values are case sensitive, so utm_source=Facebook and utm_source=facebook become two different sources and split your data across two report rows. GA4's channel rules are the one exception — those are matched case-insensitively — but pick one convention and use it everywhere anyway.
- Do UTM parameters affect SEO?
- Not directly, but tagged URLs can create duplicate-content noise if search engines index them. Only use UTM tags on links you place in ads, emails, and social posts — never in internal links on your own site, which would also overwrite the visitor's original source data.
- Does this work with Yandex Metrica and other tools?
- Yes. UTM tagging is a de facto standard: Google Analytics, Yandex Metrica, Matomo, Plausible, Fathom, and most CRM systems all read the same utm_ parameters. The channel-group table on this page is GA4-specific; Metrica reports source and medium as you wrote them.