Free GA4 tool. Campaign tagging

UTM Builder and GA4 Channel Checker: Free, Runs in Your Browser

19 channelsChecked in the order Google lists them. First match wins
819 sourcesGoogle’s own search, social, shopping and video lists, in full
10,000 rowsPer bulk check, with every link and its channel in one CSV
0 uploadsYour links and your naming rules never leave this page

Built by Ram Kr Shukla, SEO and growth consultant, Google Analytics and Google Ads certified.

Private by design: nothing is uploaded. Your links, any CSV you choose and your saved naming rules are processed locally in your browser.

Build a UTM link and see its GA4 channel

The prediction updates as you type. Switch to Bulk CSV to check a whole sheet of links, or a GA4 source / medium export.

1. The page the link opens

The full address, with https://. Parameters it already has are kept.

2. Campaign tags

Where the click comes from: google, facebook, your newsletter’s name.
The type of traffic: cpc, paid_social, email, social, referral.
The campaign or promotion, for example spring_sale.
Tells two ads or two links in one email apart.
The paid keyword.
Campaign ID, needed if you upload cost data.
The buying or managing platform, for example Google Ads.
Your naming convention (saved in this browser)

List the sources and mediums your team may use, one per line or comma separated, plus your own domains. Anything outside the lists gets flagged in both modes. Your domains also catch tags on internal links.

The sample data is a made up store, Acme Trail Co at example.com. Tagging is one part of a wider attribution clean-up, covered in why your organic traffic numbers are lying to you.

Quick answer

This free UTM builder adds utm_source, utm_medium, utm_campaign and the optional tags to any page URL, then predicts which GA4 default channel group the click will land in. It runs Google’s published channel rules in order, against Google’s full list of 819 sources, and flags three kinds of trouble: tags that end up in Unassigned, paid links that GA4 will file as organic, and capitals or spaces that split one source into two report rows. If you tag email, social and ad links as a marketer, an agency or an analyst, it helps you get the channel report right the first time.

Most UTM builders stop at the link. That’s the easy part. GA4 doesn’t read your tags the way you meant them. It runs every source and medium through 19 channel rules, top to bottom, and drops the session into the first one that fits. Get one word wrong and a paid campaign shows up as Organic Social. Or a newsletter vanishes into Unassigned.

This page builds the link and runs those rules on it before anyone clicks. The rules come from Google’s [GA4] Default channel group help page, and the source lists come from the sources and categories file Google links from that page, captured live: 129 search sites, 592 social sites, 52 shopping sites and 46 video sites.

Bad tags are one of the quieter ways your organic number gets polluted. My guide on why your organic traffic numbers are lying to you covers the wider mess (paid clicks counted as organic, parameters that rewrite the source, campaign tags on internal links). This tool handles just the tagging part.

How to Use the UTM Builder

You need the page URL and two minutes. For bulk, add a sheet you can save as CSV.

1

Paste the page URL

Use the full address, with https://. If the page already has parameters, like a colour filter or a referral code, they stay and the campaign tags go after them. A # fragment stays at the end, because campaign tags belong in the query string before it. Google’s manual setup instructions put them after a question mark, separated by ampersands.

2

Fill in source, medium and campaign

Google says you should always use utm_source, utm_medium and utm_campaign. Source is where the click comes from (google, facebook, your newsletter’s name). Medium is the type of traffic (cpc, paid_social, email, social, referral). That pair decides the channel.

3

Add the optional tags

utm_content tells two ads, or two links in one email, apart. utm_term is for paid keywords. utm_id is the campaign ID, which you need if you upload cost data. utm_source_platform names the buying platform. Google’s own note says cross-channel reports still show Manual for it, so you can skip it.

4

Read the predicted channel and the flags

The coloured box shows the Session default channel group GA4 should assign, the source / medium pair it’ll record and the rule that matched. Every flag below it is labelled Fault, Check or Info. Open the rule table to see all 19 checks in order.

5

Save your naming convention

Open the naming convention panel, list the sources and mediums your team may use plus your own domains, and click Save to this browser. Any value outside the lists gets flagged, and so does one that only matches if you ignore capitals.

6

Check links in bulk

Switch to Bulk CSV. Give it a sheet with a url column plus utm_source, utm_medium and utm_campaign. In Google Sheets, use File, Download, Comma-separated values. A column of links that are already tagged works too, and so does a GA4 export: Reports, Acquisition, Traffic acquisition, switch the table to Session source / medium, then Share this report, Download File, Download CSV. Click Download CSV on the results to keep every link with its channel and flags.

Sources for those steps: Google’s help on URL builders and campaign parameters, its default channel group definitions and its page on sharing and exporting reports. Google’s own Campaign URL Builder makes the same links, but it won’t predict the channel or check a list.

How to Read the Results

Three labels. A link’s status is the worst label it collects.

  • Fault. The link lands in Unassigned, in a channel that contradicts what it is (an ad filed as organic), or it’s a tagged internal link. Fix it before it goes out.
  • Check. The channel works, but something will cost you later: capitals that split one row into two, a source GA4 doesn’t recognise, or a campaign name that quietly changes the channel.
  • Info. Context. What the builder did to your URL, or how a platform setting changes the picture.

The 19 rules, in the order GA4 checks them

Google’s custom channel groups page says traffic goes into the first channel whose definition it matches. The default group lists its rules for manual traffic in the order below, and the checker applies them in that same order. Case doesn’t matter. Google says channel definitions aren’t case sensitive, so the checker lowercases values before it matches anything.

#ChannelGoogle’s rule for UTM trafficWhere tags trip
1DirectSource exactly (direct), medium (not set) or (none)You won’t hit this with UTMs
2Cross-networkCampaign name contains cross-networkAny campaign with cross-network in its name, from any source
3Paid ShoppingSource on the shopping list, or campaign name matches ^(.*(([^a-df-z]|^)shop|shopping).*)$, and medium matches ^(.*cp.*|ppc|retargeting|paid.*)$A cpc campaign called shop_launch lands here, even from Facebook
4Paid SearchSource on the search list, and the paid medium patterngoogle_ads isn’t on the list. google is
5Paid SocialSource on the social list, and the paid medium patterninsta, x and x.com aren’t on the list
6Paid VideoSource on the video list, and the paid medium patternyoutube with cpc or cpv
7DisplayMedium is display, banner, expandable, interstitial or cpmdisplay_ads isn’t on the list
8Paid OtherPaid medium pattern, source on none of the listsGA4 knows it’s paid, not which kind
9Organic ShoppingSource on the shopping list, or campaign name matches the shop patternChecked before Social and Email, so a newsletter called summer_shopping lands here
10Organic SocialSource on the social list, or medium is social, social-network, social-media, sm, social network or social mediasocial_media with an underscore isn’t listed
11Organic VideoSource on the video list, or medium contains videovideo_ads lands here as organic
12Organic SearchSource on the search list, or medium exactly organicorganic_search only works with a search engine source
13AI AssistantMedium exactly ai-assistantGA4 sets this itself for referrers on its AI list
14ReferralMedium is referral, app or linkreferal, with one r, falls through
15EmailSource or medium is email, e-mail, e_mail or e mailnewsletter isn’t on the list
16AffiliatesMedium exactly affiliateaffiliates, plural, falls through
17AudioMedium exactly audiopodcast falls through
18SMSSource or medium exactly smstext falls through
19Mobile Push NotificationsMedium ends with push, or contains mobile or notification, or source exactly firebasemobile_banner lands here
UnassignedNothing above matchedWhere most tagging mistakes end up

Source: Google’s default channel group page and its list of sources and categories. Two readings are mine. Google writes the shopping rules without brackets, so the checker reads them as (shopping source or shop campaign) and a paid medium. That’s the only reading that keeps Paid and Organic Shopping apart. And Google calls the social list a regex list but publishes plain names, so the checker matches whole values: m.facebook.com counts, facebook_ads doesn’t.

What to do about each flag

  • Unassigned. Change the medium to one Google lists: newsletter becomes email, affiliates becomes affiliate, social_media becomes social. The flag tells you which value works and the channel it’d land in.
  • An ad in an organic channel. Usually it’s a medium like social_paid or remarketing that misses the paid pattern, or a google link with no medium. Start paid mediums with paid, or use cpc.
  • Paid Other. The medium says paid but the source isn’t on Google’s lists, so use the listed name: instagram for insta, twitter for x.com. Threads and Bluesky aren’t listed at all. For those, a custom channel group is the only fix.
  • Campaign name decides the channel. Rename campaigns containing shop, shopping or cross-network unless they really are shopping or cross-network campaigns. Watch the edges, too: eshop matches and workshop doesn’t, because of the [^a-df-z] in Google’s pattern.
  • Capitals and spaces. The channel still comes out right, but your report splits, because Google says utm_source=google and utm_source=Google are different values. Click Tidy case and spaces: it lowercases everything and swaps spaces for hyphens. Why hyphens? Google lists social-media and e-mail but not social_media.
  • Tagged internal link. Remove the tags. To measure banners and promo blocks, use a click event, or GA4’s select_promotion event from Google’s recommended events.
  • Click IDs in the page URL. Delete gclid, fbclid, msclkid and the like from the base URL. Platforms add a fresh one to every click, and Google says that when a gclid is present, auto-tagged values win over your utm_source and utm_medium.

Worked example: the Acme Trail Co sample

Open the Bulk CSV tab and click Load sample data. You’ll get 15 links for a made up outdoor store at example.com. The checker puts 3 of them in Unassigned, gives 6 a Fault and 6 a Check, and passes 3 clean: the Facebook ad, the blog referral and the text message.

The faults are the interesting part.

  • Row 3, Facebook / social_paid. Predicted Organic Social. The word paid comes second, so the paid pattern misses, and facebook is on the social list. That’s a paid campaign reported as unpaid social.
  • Row 6, google with no medium. Predicted Organic Search, because google is on the search list and nothing else is set. If that link sits in an ad, it inflates organic. That’s exactly the pollution the attribution guide describes.
  • Row 14, youtube / video_ads. Predicted Organic Video. The medium contains video, but it doesn’t start with paid or contain cp.
  • Rows 4, 9 and 15. Unassigned, because newsletter, affiliates and qr_code aren’t values Google lists. The first two are one word away: email lands in Email and affiliate lands in Affiliates. The QR code has nowhere to go, since there’s no offline channel.

Then the checks. Row 2 uses insta, the short name Google’s own UTM best practice table suggests for Instagram. It lands in Paid Other anyway, because the source list only has instagram, instagram.com, l.instagram.com and ig. Row 11 has the same problem with x.com. Row 5 is an email, but its campaign is called summer_shopping_edit, so the Organic Shopping rule grabs it before the Email rule is reached. Row 12 is a homepage banner with tags on it. And row 10, linkedin / Paid Social, lands in Paid Social as intended but will sit in its own row, apart from paid_social.

Fix the five faults that have a listed fix, swap the two source names and rename the row 5 campaign. Now 13 of the 15 links land where the team meant them to. The other two are honest calls you’ll have to make: the homepage banner should lose its tags, and the QR code needs a decision about which channel offline belongs in.

Once the tags are fixed, two things follow. Old sessions keep the channel they were given, so a month that mixes old and new tags will show Email jumping and Unassigned falling. That’s a labelling change, which why GA4 comparisons show fake growth after a tracking fix explains. And if you report organic in Looker Studio, filter on Session default channel group as set out in the Looker Studio SEO dashboard guide. That only works when your tags put traffic in the right group.

AI assistants are the newest wrinkle. You can’t tag a link ChatGPT cites, and Perplexity isn’t named in Google’s AI list. Measuring ChatGPT and Perplexity referrals in GA4 shows the custom channel group that catches them. If the channels look right but your ecommerce numbers don’t, run the GA4 funnel checker next. Then go back to the attribution clean-up checklist for the bits tagging can’t fix, like bots and self-referrals.

Limits of This Checker

It predicts. GA4 decides. Here’s where the two can differ.

  • It only knows the manual traffic rules. Google Ads, Display and Video 360, Campaign Manager 360, Search Ads 360 and Merchant Center traffic is classified from integration data like ad network type and campaign type. A UTM can’t send that.
  • The lists move. Google says its definitions may change as the market does. The checker carries the list as captured live from Google’s help page, so a source Google adds later won’t be on it until this page is updated.
  • Whole-value matching is my reading. Google calls the social list a regex list but publishes plain names. If GA4 matches more loosely than that, a few sources the checker calls Paid Other could land in Paid Social.
  • It can’t see referrers. Untagged clicks are classified from the referring site, and GA4’s AI Assistant detection works from the referrer too. The checker only reads what’s in your link.
  • Your property may use its own channels. Reports built on a custom or primary channel group use your own rules. This checker only knows Google’s default.
  • One session, one source. Google says GA4 doesn’t start a new session when a new campaign shows up mid-visit (campaigns and traffic sources). The prediction is about the session the click starts.
  • Bulk tops out at 10,000 rows per run. The screen shows the first 1,000 in your chosen sort order. The download has the lot.

UTM Builder and GA4 Channel FAQ

Why is my UTM traffic showing as Unassigned in GA4?

Because the source and medium pair doesn’t match any of GA4’s 19 default channel rules. The usual culprits are mediums Google doesn’t list, like newsletter, affiliates, social_media or qr_code, and links with no utm_medium at all. Change the medium to a listed value such as email, affiliate or social, and new sessions land in a channel. Sessions already recorded keep their old label.

Are UTM parameters case sensitive in GA4?

For reports, yes. Google says utm_source=google and utm_source=Google are different values, so they show up as two rows. For channel grouping, no: Google says channel definitions aren’t case sensitive, so Facebook / CPC and facebook / cpc both land in Paid Social. Use lowercase anyway so your rows don’t split.

Should I use cpc or paid_social for Facebook ads?

Either works. GA4’s paid pattern matches any medium containing cp, ppc or retargeting as the whole value, and anything starting with paid. With utm_source=facebook, both cpc and paid_social land in Paid Social. Putting paid second, as in social_paid, breaks it, and so does remarketing.

Is email or e-mail correct for utm_medium?

Both are. Google’s Email rule accepts email, e-mail, e_mail and e mail, in the source or the medium. newsletter isn’t on that list, so utm_medium=newsletter lands in Unassigned unless the source is one of those four. One trap: a campaign name containing shop or shopping sends email traffic to Organic Shopping, because that rule is checked first.

Should I put UTM parameters on internal links?

No. Google says GA4 doesn’t start a new session when it sees a new campaign mid-visit, but the new values attach to the events that follow and feed event-based attribution. So a tagged homepage banner can take credit for key events that search, email or ads brought in. Track banners with a click event or GA4’s select_promotion event instead.

What does utm_source_platform do in GA4?

It names the platform that bought or managed the traffic, such as Search Ads 360 or Display and Video 360, and fills the Source platform dimension. Google’s note on traffic source dimensions says cross-channel reports still show Manual there for now. The checker predicts with the manual traffic rules either way.

Do I need UTM parameters if Google Ads auto-tagging is on?

Not for the channel. With auto-tagging on, GA4 takes source, medium and channel from the gclid and ignores your utm_source and utm_medium, while utm_content and utm_term still fill Manual ad content and Manual term. Google does suggest adding UTMs as a fallback for cases where the gclid can’t be used, such as when ad_user_data consent is denied.

Does this UTM builder upload my links anywhere?

No. Everything runs in your browser. The links you type, any CSV you choose and the naming convention you save stay on your device. The convention sits in this browser’s local storage until you clear it.

Channel report still doesn’t add up?

I audit GA4 attribution end to end: which tags land where, what’s sitting in Unassigned and why, and which naming convention your team should use. Then I write it down so the next campaign doesn’t undo it.

GA4 Conversion TrackingRead the attribution guide

More free tools that run in your browser are on the SEO tools page. For reading channel numbers once they’re clean, see how to read an e-commerce SEO report without being fooled.

RS

Built by Ram Kr Shukla

SEO and growth consultant with 20+ years in the field across 50+ brands, working as a consultant or Fractional Chief Digital Officer. Google Analytics and Google Ads certified. Works daily in GA4, Search Console and Looker Studio.