TapCub is live — analytics, insights and live chat, free on one platform

Free tool UTM checker: test UTM parameters for a whole list of links

Paste every link from a launch plan, an email or an ad export. Each one is checked for the mistakes that split reports or send visits to Unassigned, and you see which GA4 channel it would land in before a single click is wasted.

  • Up to 2,000 links at once
  • GA4 channel per link
  • Runs locally
Checker

Check a list of UTM links

One URL per line. The sample is a spring sale tagged by three people; it has six of the most common mistakes. Paste your own list to replace it.

One URL per line. A column pasted from a spreadsheet works too; empty lines are skipped.

Links checked

7

Fully tagged

5

Source, medium and campaign all present.

With errors

2

The tags will be lost or misread.

With warnings

2

Tags arrive, but reports split or land in the wrong channel.

Every link

GA4 channel: Google's default channel group for manually tagged traffic. TapCub channel: TapCub's default rules, assuming the click arrives without a referrer (an email app, a QR code, a pasted link).

LineURLutm_sourceutm_mediumutm_campaignGA4 channelTapCub channelStatus
1https://shop.example.com/spring?utm_source=newsletter&utm_medium=email&…newsletteremailspring_saleEmailEmailOK
2https://shop.example.com/spring?utm_source=Newsletter&utm_medium=Email&…NewsletterEmailSpring SaleEmailEmailCheck
3https://shop.example.com/spring?utm_source=facebook&utm_medium=paid_soc…facebookpaid_socialspring_salePaid SocialPaid socialOK
4https://shop.example.com/spring?utm_source=google&utm_medium=cpc&utm_ca…googlecpcspring_salePaid SearchPaid searchOK
5https://shop.example.com/#spring?utm_source=instagram&utm_medium=social…———DirectDirectFix
6https://shop.example.com/spring?utm_source=partner_blog&utm_medium=blog…partner_blogblog-postspring_saleUnassignedDirectCheck
7https://shop.example.com/spring?utm-source=linkedin&utm_medium=social—social—Organic SocialSocialFix

What to fix

  • Warningutm_source is spelled 2 ways in this list: newsletter / Newsletter. Reports count each spelling as a separate row, so pick one.
  • Warningutm_medium is spelled 2 ways in this list: email / Email. Reports count each spelling as a separate row, so pick one.
  • Warningutm_campaign is spelled 2 ways in this list: spring_sale / Spring Sale. Reports count each spelling as a separate row, so pick one.
  • WarningLine 2utm_source=Newsletter has capital letters. UTM values are case-sensitive in reports, so "Newsletter" and its lowercase version become separate rows.
  • WarningLine 2utm_medium=Email has capital letters. UTM values are case-sensitive in reports, so "Email" and its lowercase version become separate rows.
  • WarningLine 2utm_campaign contains a space encoded as %20. It works, but "spring sale", "spring%20sale" and "spring_sale" are easy to mix up; use underscores or hyphens.
  • WarningLine 2utm_campaign=Spring Sale has capital letters. UTM values are case-sensitive in reports, so "Spring Sale" and its lowercase version become separate rows.
  • NoteLine 3fbclid found: an ad click ID added by Meta. Keep it; it ties the visit to the ad click.
  • NoteLine 4gclid found: an ad click ID added by Google Ads. Keep it; it ties the visit to the ad click.
  • NoteLine 4This link has both UTM tags and a Google Ads click ID. With auto-tagging linked to GA4, GA4 normally uses the Google Ads data for these clicks, not your UTM values.
  • ErrorLine 5The "#" comes before the "?", so all the parameters sit in the fragment. Browsers never send the fragment to a server and analytics tags read UTM from the query string. Move the #section to the very end.
  • WarningLine 6GA4 has no default channel for medium "blog-post", so this traffic lands in Unassigned. Use a standard value such as email, social, cpc, referral or affiliate.
  • WarningLine 7utm-source looks like a typo for utm_source. Analytics tools ignore parameters they do not recognise.
  • ErrorLine 7utm_source is missing. Google recommends always setting source, medium and campaign; without a source the campaign shows up as (not set).
  • WarningLine 7utm_campaign is missing. The visit counts towards the right channel but campaign reports show (not set).
Runs entirely in your browser. Nothing you type here is uploaded or stored by TapCub.

Version v1.0Updated Update history

Read the result

Errors, warnings and the two channel columns

Every finding is tied to a line number, so you can fix the source sheet rather than the report.

Errors lose the tags

A "#" before the "?", parameters in the fragment, a misspelled or capitalised name like utm-source or UTM_Source, a missing source. These visits arrive untagged and count as Direct or Referral. Fix them before the links go out.

Warnings split the reports

Capital letters, spaces and spelling variants still carry data, but Newsletter and newsletter become two rows, and an unknown medium sends the traffic to Unassigned. The list-wide check catches variants that look fine one link at a time.

GA4 channel

The channel GA4's default channel group assigns from source, medium and campaign. Channel rules ignore case, but reports do not, which is why Email still counts as Email but shows up as its own row. Unassigned and Paid Other usually mean a medium or source GA4 does not know.

TapCub channel

The channel from TapCub's default rules, calculated as if the click arrived without a referrer. TapCub also recognises Chinese platforms, the feed medium and click IDs such as bd_vid and clickid, so the two columns differ for some links. Rows marked No UTM are classified by referrer in both tools.

GA4 also has rules for Google Ads, Display & Video 360, Campaign Manager 360 and Search Ads 360 traffic, which use platform data instead of UTM values. Those are out of scope here: a link with only a gclid shows "Google Ads (auto-tagged)".

How to use it

Check links before they ship

The best time to catch a UTM mistake is before the email is sent or the ad is approved.

  1. 1

    Collect the links

    Copy the URL column from your campaign sheet, the links from an email draft, or the final URLs from an ad export. One per line.

  2. 2

    Fix errors first

    Errors mean the tags will be lost. Then work through the list-wide spelling warnings: choose one spelling per source, medium and campaign and use it everywhere.

  3. 3

    Check the channel column

    Every link should land where you expect. Unassigned or Paid Other means the medium or source needs a standard value. Rebuild the corrected links with the bulk UTM builder.

Rules

How GA4 picks a default channel

GA4 checks manually tagged traffic against the rules below in this order and stops at the first match. "Search / social / video / shopping site" means the source is on Google's published list of sources (819 entries in the version used here), compared exactly and without case.

  • The paid-medium pattern is ^(.*cp.*|ppc|retargeting|paid.*)$, so any medium containing "cp" counts as paid, cpm included
  • Values are compared without case for channels, but kept as typed in reports
  • Source: Google Analytics Help, [GA4] Default channel group
GA4 default channel group rules for manually tagged traffic, in evaluation order
ChannelMatches when
Directsource is (direct) and medium is (not set) or (none)
Cross-networkcampaign contains cross-network
Paid Shopping(shopping site, or campaign matches the shop pattern) and paid medium
Paid Search / Social / Videosearch / social / video site and paid medium
Displaymedium is display, banner, expandable, interstitial or cpm
Paid Otherpaid medium, any other source
Organic Shopping / Social / Video / Searchsite lists, or medium social (and variants), contains video, or is organic
AI Assistantmedium is ai-assistant
Referralmedium is referral, app or link
Emailsource or medium is email, e-mail, e_mail or e mail
Affiliates · Audio · SMSmedium affiliate · medium audio · source or medium sms
Mobile Push Notificationsmedium ends with push or contains mobile or notification, or source is firebase
Unassignednothing above matched
Worked example

The spring sale sample, line by line

Three people tagged the same campaign. Here is what the checker found and what it means in the report.

Findings for the seven sample links
LineProblemEffectFix
2Newsletter, Email, Spring%20SaleStill Email in GA4, but three extra rows in source, medium and campaign reportsLowercase, underscore
3fbclid presentNone; Meta adds it to every clickKeep
4UTM tags plus gclidGA4 normally uses Google Ads data for these clicksFine with auto-tagging; drop the UTM if it confuses
5#spring before ?Tags never reach analytics; counts as DirectMove #spring to the end
6Medium blog-postGA4: UnassignedUse referral
7utm-source, no campaignSource lost, campaign (not set)Rename to utm_source, add utm_campaign

Line 1 is the reference spelling. After the fixes, all seven links report as one campaign, spring_sale, in five GA4 channels: Email, Paid Social, Paid Search, Organic Social and Referral.

Common mistakes

Where UTM tagging goes wrong

Most broken campaign data comes from a few habits, not from the analytics tool.

Mixing case

Facebook, facebook and FB are three sources in every report. Agree on lowercase and a fixed list of sources before the campaign starts.

Anchor before the query

Adding #section to a landing page and then appending ?utm_… puts the tags in the fragment, where they are never read. The fragment always goes last.

Inventing mediums

blog-post, newsletter or whatsapp as a medium give GA4 nothing to match, so the visits land in Unassigned. Keep inventive names for campaign and content.

Tagging internal links

UTM on links within your own site starts a new campaign mid-visit and overwrites where the visitor really came from. Use events or content groups for internal clicks.

FAQ

UTM checker questions

Still have a question?

Chat with the team behind TapCub — we usually reply within a few hours on business days.

How do I check if my UTM parameters are correct?

Paste the links here. A correct link has utm_source, utm_medium and utm_campaign in the query string (after ? and before any #), lowercase values without spaces, and a medium that GA4 maps to the channel you expect. The checker reports anything that breaks one of those, with the line number.

Are UTM parameters case-sensitive?

Yes. Google's own help says parameter values are case-sensitive: utm_source=google and utm_source=Google are different sources in reports. GA4's channel rules ignore case, so both still count as the same channel, which is why the problem often goes unnoticed until someone exports the source table.

Why is my campaign traffic Unassigned in GA4?

Usually because the medium (or source) matches none of the default channel rules: values like newsletter, blog-post or qr as a medium. Missing source or medium causes it too. Change the medium to a standard value such as email, social, cpc or referral; the rules table above lists them all.

Can UTM parameters go after a # in the URL?

No. Everything after # is the fragment; browsers do not send it to the server and analytics tags read campaign parameters from the query string. If the page needs an anchor, write it last: /page?utm_source=x#pricing. Single-page apps with hash routing have the same problem.

Should I use underscores or hyphens instead of spaces?

Either, as long as the whole team uses the same one. Spaces get encoded as %20 or +, look different depending on where you copy the link from, and are often typed differently on the next campaign. Underscores are the most common convention.

What are gclid, fbclid and msclkid?

Click IDs that ad platforms append automatically: Google Ads, Meta and Microsoft Ads respectively, with ttclid for TikTok. They identify the ad click itself. Leave them in place; they do not conflict with UTM parameters, though for Google Ads clicks GA4 normally prefers the auto-tagging data.

Why do the GA4 and TapCub channels differ for some links?

The rule sets are similar but not identical. TapCub adds Chinese sources and click IDs (WeChat, Douyin, Baidu, Tencent Ads and others), treats feed as paid social and newsletter as email, and ranks click IDs above UTM. GA4 has channels TapCub folds together, such as Audio and Mobile Push Notifications.

Are the links I paste uploaded?

No. The check runs in your browser and nothing is sent to TapCub. There is no share link, because campaign lists can contain unreleased campaign names.

Changelog

Update history

New features, fixes and data refreshes for this tool, newest first.

  1. · v1.0

    LaunchedFirst release.

Data this tool relies on

  • GA4 default channel group source lists — checked 2026-11-09, reviewed every 6 months (next review by 2027-05-09)

Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates

Next step

See which campaigns actually convert

Once the links are clean, TapCub reports each campaign, source and medium with its sessions and conversions, and the channel stays on the visitor for later purchases.

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics