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
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).
| Line | URL | utm_source | utm_medium | utm_campaign | GA4 channel | TapCub channel | Status |
|---|---|---|---|---|---|---|---|
| 1 | https://shop.example.com/spring?utm_source=newsletter&utm_medium=email&… | newsletter | email | spring_sale | OK | ||
| 2 | https://shop.example.com/spring?utm_source=Newsletter&utm_medium=Email&… | Newsletter | Email | Spring Sale | Check | ||
| 3 | https://shop.example.com/spring?utm_source=facebook&utm_medium=paid_soc… | facebook | paid_social | spring_sale | Paid Social | Paid social | OK |
| 4 | https://shop.example.com/spring?utm_source=google&utm_medium=cpc&utm_ca… | google | cpc | spring_sale | Paid Search | Paid search | OK |
| 5 | https://shop.example.com/#spring?utm_source=instagram&utm_medium=social… | — | — | — | Direct | Direct | Fix |
| 6 | https://shop.example.com/spring?utm_source=partner_blog&utm_medium=blog… | partner_blog | blog-post | spring_sale | Unassigned | Direct | Check |
| 7 | https://shop.example.com/spring?utm-source=linkedin&utm_medium=social | — | social | — | Organic Social | Social | Fix |
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).
Version v1.0Updated Update history
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)".
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
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
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
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.
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,cpmincluded - Values are compared without case for channels, but kept as typed in reports
- Source: Google Analytics Help, [GA4] Default channel group
| Channel | Matches when |
|---|---|
| Direct | source is (direct) and medium is (not set) or (none) |
| Cross-network | campaign contains cross-network |
| Paid Shopping | (shopping site, or campaign matches the shop pattern) and paid medium |
| Paid Search / Social / Video | search / social / video site and paid medium |
| Display | medium is display, banner, expandable, interstitial or cpm |
| Paid Other | paid medium, any other source |
| Organic Shopping / Social / Video / Search | site lists, or medium social (and variants), contains video, or is organic |
| AI Assistant | medium is ai-assistant |
| Referral | medium is referral, app or link |
| source or medium is email, e-mail, e_mail or e mail | |
| Affiliates · Audio · SMS | medium affiliate · medium audio · source or medium sms |
| Mobile Push Notifications | medium ends with push or contains mobile or notification, or source is firebase |
| Unassigned | nothing above matched |
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.
| Line | Problem | Effect | Fix |
|---|---|---|---|
| 2 | Newsletter, Email, Spring%20Sale | Still Email in GA4, but three extra rows in source, medium and campaign reports | Lowercase, underscore |
| 3 | fbclid present | None; Meta adds it to every click | Keep |
| 4 | UTM tags plus gclid | GA4 normally uses Google Ads data for these clicks | Fine with auto-tagging; drop the UTM if it confuses |
| 5 | #spring before ? | Tags never reach analytics; counts as Direct | Move #spring to the end |
| 6 | Medium blog-post | GA4: Unassigned | Use referral |
| 7 | utm-source, no campaign | Source 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.
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.
Campaign data read once, on arrival
TapCub reads UTM parameters and ad click IDs from the landing URL, sorts each visit into a channel with ordered rules, and keeps the channel on the visitor's profile.
Channel rules you can edit
GA4-style default rules plus AI assistant as a channel. Add your own rules per site and test them against a source and medium.
Learn more14 ad platforms by click ID
gclid, fbclid, ttclid, msclkid and the Chinese platforms' IDs are recognised even when a link has no UTM.
Learn moreROI per channel
Import spend and compare return per channel next to the conversions it produced.
Learn moreUTM 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.
Update history
New features, fixes and data refreshes for this tool, newest first.
-
· 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
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.