belun.app Blog

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 ↓

Generated campaign URL
Enter a website URL above — the tagged campaign link will appear here.

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. google
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.
email Email 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 google cpc Paid Search
Microsoft/Bing Ads bing cpc Paid Search
Facebook paid ad facebook paid_social Paid Social
Organic Instagram post instagram social Organic Social
Link in Instagram bio instagram social Organic Social
LinkedIn company post linkedin social Organic Social
YouTube video description youtube social Organic Video
Email newsletter newsletter email Email
Transactional email app email Email
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

How it works

  1. 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. 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. 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.

From the blog

UTM Parameters Explained: Tag Campaign Links Properly What utm_source, utm_medium, and utm_campaign actually mean, the naming mistakes that ruin reports, and a tagging convention that scales. Read the post →

Related tools