UTM Builder

Build UTM-tagged campaign URLs that GA4 reads correctly. Presets for Google Ads, Meta, LinkedIn, TikTok, email, SMS and more; automatic lower-casing and space handling; a prediction of the GA4 default channel group each source/medium pair reports in; bulk mode with CSV and Excel export. Free, no signup, nothing stored.

Existing query parameters and #fragments are kept; https:// is added when missing.

Where the traffic comes from: the platform, site or sender.

The marketing channel. This value decides the GA4 default channel group.

Campaign name, promotion or product line. Keep one naming convention.

Campaign ID — used to join cost data imports in GA4. Optional.

Paid keyword, or audience for social. Optional.

Differentiates ads or links that share a campaign: creative, placement, position. Optional.

Options
Tagged URLhttps://www.example.com/spring-collection?utm_source=newsletter&utm_medium=email&utm_campaign=spring_launch_2026&utm_content=hero_banner
Open
GA4 default channel groupEmailPredicted from Google's published default channel rules; the source lists cover common platforms, not Google's full list.

Checks

  • OKReports as Email in GA4's default channel group.

Everything runs in your browser; nothing you type is sent anywhere. The channel prediction follows Google's published GA4 rules and is an estimate — your property's custom channel groups can differ.

How it works

1. Take the landing page URL; keep its existing query parameters and #fragment, add https:// when the scheme is missing
2. Normalise each UTM value: trim, lower-case (GA4 is case-sensitive), replace spaces with _ or - or %20, URL-encode the rest
3. Append utm_source, utm_medium, utm_campaign, utm_id, utm_term and utm_content in that order; replace utm_ parameters already on the URL unless told to keep them
4. Predict the GA4 default channel group by running the source, medium and campaign name through Google's published rules in Google's order: Direct → Cross-network → AI Assistant → Paid Shopping → Paid Search → Paid Social → Paid Video → Display → Paid Other → Organic Shopping → Organic Social → Organic Video → Organic Search → Email → Affiliates → Referral → Audio → SMS → Mobile Push → Unassigned
5. Report checks: missing source or medium, medium that matches no channel rule, upper-case or spaces that were changed, http:// scheme, Google Ads auto-tagging precedence, URLs over 2,000 characters
6. Bulk mode: one campaign per line (optionally campaign | content | term) with a shared source, medium and ID → a table of URLs with their channel, downloadable as CSV or Excel

About UTM parameters and how GA4 reads them

UTM parameters are five (in GA4, six) query-string keys that tell an analytics tool where a visit came from: utm_source names the platform or sender, utm_medium names the channel, utm_campaign names the effort, and utm_content, utm_term and utm_id add detail. Nothing about them is technical — they are plain text appended to a link — which is exactly why they go wrong: a capital letter, a space or a medium spelled three ways splits one campaign into several rows, and a medium GA4 does not recognise sends the whole campaign into the Unassigned channel.

GA4 assigns every session to a default channel group by testing source, medium and campaign name against a fixed list of rules, in a fixed order. The rules are public: a medium matching cpc, ppc, paid or retargeting counts as paid; the source then decides whether that is Paid Search, Paid Social, Paid Shopping or Paid Video, based on Google's lists of search engines, social networks, shopping sites and video platforms. Email needs a source or medium of email; social posts need social; anything else that matches nothing is Unassigned. This builder runs the same rules on what you type and tells you the channel before the campaign ships — the mistake is cheap to fix here and expensive to fix in a report.

The matching is case-sensitive and exact. utm_medium=Email is not email, so it misses the Email rule and lands in Unassigned; utm_medium=e-newsletter misses it too, because the rule accepts only email, e-mail, e_mail or e mail. A paid medium has to start with paid, contain cp, or be exactly ppc or retargeting — paid_social and paid-social both work, social_paid does not. The builder lower-cases everything by default and replaces spaces, and it says so in the checks, so a team can agree on one convention and see it enforced. Turn lower-casing off only if you have a reason, and expect the warning.

Two things the tool deliberately does not do. It does not shorten links — a shortener is a third-party service that sees every click, and it would break the promise that nothing you type leaves your browser. And it does not guess your property's custom channel groups; the prediction is the default grouping every GA4 property starts with. Google Ads is a special case worth knowing: with auto-tagging on, GA4 uses the gclid and ignores manual UTMs unless the property setting to let manual tagging override is enabled, so the preset says so rather than letting you believe the tags are doing the work.

Frequently asked questions

Which UTM parameters are required?
For GA4 to attribute a session to a campaign it needs utm_source and utm_medium; without them the visit is classified by referrer or as Direct. utm_campaign is not technically required but without it campaign reports show (not set). utm_id, utm_term and utm_content are optional detail — utm_id matters if you import cost data, because it is the join key.
Why does my campaign traffic show as Unassigned in GA4?
Almost always because utm_medium matches none of GA4's default channel rules. Values like social_paid, newsletter, banner_ad or Social (capitalised) match nothing. The checks list here tells you when a medium will land in Unassigned and which common values do match: cpc, paid_social, email, social, display, affiliate, referral. Unassigned can also come from sessions with only a source and no medium.
Are UTM parameters case-sensitive?
Yes, in GA4 and in most tools. Email, email and EMAIL are three different mediums, three rows in your reports, and only the lower-case one matches the Email channel rule. The builder lower-cases every value by default and tells you when it changed something.
Should I use utm_medium=cpc or paid_social for Facebook ads?
Either lands in Paid Social, because GA4 treats any medium matching cpc, ppc, retargeting or paid.* as paid and then looks at the source: facebook is on the social list, so the result is Paid Social. paid_social is the more descriptive choice; the important thing is to use one value consistently.
Do I need UTMs on Google Ads links?
Not for GA4 itself: auto-tagging appends a gclid and GA4 reads the campaign, ad group and keyword from it, with more detail than UTMs can carry. If you add UTMs too, GA4 ignores them by default and uses the gclid, unless you enable “Allow manual tagging to override auto-tagging” in the property. UTMs on Google Ads links are still useful for other tools that do not read gclid.
Does the tool shorten the URL or store it?
No to both. Shortening needs a third-party service that records every click, and storing links would mean keeping your campaign plans on a server. Everything here runs in your browser; use your own domain's redirect or a shortener you control if you need a short version.
What does the bulk mode do?
It takes one campaign name per line — optionally with content and term after a | — and builds every URL with the shared source, medium and ID, then shows the GA4 channel for each and exports the table as CSV or Excel. Useful for a newsletter with many links, an influencer list, or a QR-code batch.