Free tool Channel classifier: which channel does each visit land in?
Paste a list of referrers, landing-page URLs or source / medium pairs. Each row gets two answers, GA4's default channel group and TapCub's channel rules, together with the exact rule that decided it, so you can see why a visit ended up in Direct, Referral or Unassigned.
- Two rule sets, one table
- Up to 1,000 rows
- Runs locally
Classify a list of visits
One visit per line: a referrer URL, a landing-page URL, both separated by a space, or a GA4-style source / medium. The sample covers the cases that most often surprise people.
Referrer and landing page can be in either order: a URL on your domain or with UTM / click-ID parameters counts as the landing page. A bare domain such as google.com counts as a referrer; - means no referrer.
Referrers from this domain and its subdomains count as internal, as they do in both tools.
Rows
12
GA4 ≠ TapCub
2
Rows where the two rule sets give different channels.
TapCub: Other
0
No TapCub rule matched.
GA4: Unassigned / Paid Other
1
Values GA4 does not recognise.
Every row
Green: both tools agree. Blue: they differ. "≈" marks a GA4 source / medium that GA4 derives from the referrer by rules Google does not publish in full; see the note under the rules table.
| Line | Visit | TapCub channel | TapCub rule | GA4 channel | GA4 source / medium |
|---|---|---|---|---|---|
| 1 | ← https://www.google.com/ | Organic search | R100 base=search | Organic Search | ≈ google / organic |
| 2 | ?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sal… | R60 medium~^(e-?mail|newsletter|edm)$ | newsletter / email | ||
| 3 | ?utm_source=newsletter&utm_medium=email&gclid=Cj0KCQiA8x ← — | Paid search | R1 click_id=gclid | Google Ads (auto-tagged) | google / cpc |
| 4 | ← https://l.facebook.com/l.php?u=https%3A%2F%2Fshop.example.com | Social | R110 base=social | Organic Social | l.facebook.com / referral |
| 5 | ?fbclid=IwAR2xYz ← — | Direct | R10 base=direct · no referrer · source=∅ · medium=∅ | Direct | (direct) / (none) |
| 6 | ← https://chatgpt.com/ | AI assistant | R80 base=ai | AI Assistant | ≈ chatgpt.com / ai-assistant |
| 7 | ← https://www.youtube.com/watch?v=abc123 | Video | R94 ref_host~VIDEO | Organic Video | youtube.com / referral |
| 8 | shop.example.com/spring ← https://blog.partner.io/best-running-… | Referral | R121 referrer | Referral | blog.partner.io / referral |
| 9 | ?utm_source=facebook&utm_medium=paid_social&utm_campaign=spring… | Paid social | R21 source~SOCIAL · medium~PAID | Paid Social | facebook / paid_social |
| 10 | ?utm_source=partner&utm_medium=blog-post&utm_campaign=spring_sa… | Direct | R130 base=direct · no referrer | Unassigned | partner / blog-post |
| 11 | ← android-app://com.google.android.gm/ | Direct | R10 base=direct · no referrer · source=∅ · medium=∅ | Direct | (direct) / (none) |
| 12 | ← https://news.ycombinator.com/item?id=4012 | Social | R110 base=social | Organic Social | news.ycombinator.com / referral |
By TapCub channel
How the rows in each TapCub channel are classified by GA4.
| TapCub channel | Rows | GA4 channel |
|---|---|---|
| Direct | 3 | Direct ×2 · Unassigned ×1 |
| Social | 2 | Organic Social ×2 |
| Organic search | 1 | Organic Search ×1 |
| 1 | Email ×1 | |
| Paid search | 1 | Google Ads (auto-tagged) ×1 |
| AI assistant | 1 | AI Assistant ×1 |
| Video | 1 | Organic Video ×1 |
| Referral | 1 | Referral ×1 |
| Paid social | 1 | Paid Social ×1 |
Things to know
- WarningLine 3TapCub ranks click IDs above UTM tags: gclid puts this visit in Paid search. Without the click ID the UTM tags would give Email.
- NoteLine 3This link has both UTM tags and gclid. With Google Ads auto-tagging GA4 normally uses the Google Ads data, not the UTM values.
- WarningLine 5fbclid with no referrer and no UTM tags counts as Direct in TapCub: the fbclid rule comes after the Direct rule. Facebook's in-app browser often drops the referrer, so tag Facebook links with UTM.
- WarningLine 10GA4 has no default channel for partner / blog-post, so it lands in Unassigned.
- NoteLine 11Referrer android-app://com.google.android.gm/ is not a web address. TapCub only reads http(s) referrers, so this visit counts as having no referrer.
line,landing,referrer,utm_source,utm_medium,utm_campaign,click_id,tapcub_base,tapcub_channel,tapcub_rule,ga4_source,ga4_medium,ga4_channel
1,,https://www.google.com/,,,,,search,organic_search,100,google,organic,organic_search
2,https://shop.example.com/spring?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale,,newsletter,email,spring_sale,,email,email,60,newsletter,email,email
3,https://shop.example.com/spring?utm_source=newsletter&utm_medium=email&gclid=Cj0KCQiA8x,,newsletter,email,,gclid,email,paid_search,1,google,cpc,ads
4,,https://l.facebook.com/l.php?u=https%3A%2F%2Fshop.example.com,,,,,social,social,110,l.facebook.com,referral,organic_social
5,https://shop.example.com/spring?fbclid=IwAR2xYz,,,,,fbclid,direct,direct,10,(direct),(none),direct
6,,https://chatgpt.com/,,,,,ai,ai_assistant,80,chatgpt.com,ai-assistant,ai_assistant
7,,https://www.youtube.com/watch?v=abc123,,,,,social,video,94,youtube.com,referral,organic_video
8,https://shop.example.com/spring,https://blog.partner.io/best-running-shoes,,,,,referral,referral,121,blog.partner.io,referral,referral
9,,,facebook,paid_social,spring_sale,,direct,paid_social,21,facebook,paid_social,paid_social
10,https://shop.example.com/spring?utm_source=partner&utm_medium=blog-post&utm_campaign=spring_sale,,partner,blog-post,spring_sale,,direct,direct,130,partner,blog-post,unassigned
11,,android-app://com.google.android.gm/,,,,,direct,direct,10,(direct),(none),direct
12,,https://news.ycombinator.com/item?id=4012,,,,,social,social,110,news.ycombinator.com,referral,organic_socialMachine-readable channel IDs plus the TapCub rule number.
Version v1.0Updated Update history
Two channels, one rule each
Both tools walk an ordered list of rules and stop at the first match. The table shows which rule that was, so a surprising channel always has a reason you can fix.
TapCub rule
R plus a number is the rule's position in TapCub's default rule set (the table below), followed by the conditions that matched: base is the channel TapCub first derives from the referrer, PAID, SOCIAL, VIDEO, SHOPPING and AI are the named patterns. A dash means no rule matched.
GA4 source / medium
For tagged links this is simply utm_source / utm_medium. For untagged visits GA4 builds them from the referrer: google / organic, l.facebook.com / referral, (direct) / (none). The channel follows from those two values.
When the columns differ
Usually a source one tool knows and the other does not (GA4's list has no Zhihu, Douyin or Xiaohongshu; TapCub's has no Audio or Push channel), a click ID TapCub reads and GA4 ignores, or a mail or AI referrer. Neither column is "right"; they are two reports you may need to reconcile.
Warnings
Rows where the result depends on a known quirk: click IDs beating UTM tags, fbclid without a referrer, unfilled ad macros, lookalike domains, and values GA4 cannot place. Fix the link where you can; otherwise note it when comparing reports.
GA4 also classifies Google Ads, DV360, CM360, SA360 and Merchant Center traffic from platform data rather than the URL. Those rows show "Google Ads (auto-tagged)" and are out of scope.
From a list of visits to a list of fixes
Most useful with real rows: referrers from a server log, landing URLs from an ad export, or the source / medium column of an analytics report.
-
1
Paste the rows
One visit per line. Put the referrer and the landing page on the same line when you have both, so UTM tags and the referrer are judged together the way analytics tools see them.
-
2
Set your domain
Referrers from your own domain and its subdomains are treated as internal. Leave it as is if you are only checking UTM links.
-
3
Read the rule column
Start with warnings and the rows where the tools disagree. Fix the link, or add a custom rule in your analytics tool, then download the CSV to keep with your tracking plan.
TapCub's default channel rules, in order
TapCub first derives a base channel from the referrer: a utm_medium of cpc / ppc / paid / cpm / display / banner / ad(s) makes it paid, email / newsletter / mail makes it email, social / sns makes it social; otherwise your own domain is internal, then 22 AI assistant domains, 12 search engines and 22 social sites are checked, mail hosts count as email and everything else is a referral. The rules below then run top to bottom.
PAID= medium iscpc,ppc,retargeting,cpv,cpa,cppor starts withpaid;SOCIAL,VIDEO,SHOPPING,AI= source contains one of the platform names TapCub lists (Facebook, WeChat, Douyin, Xiaohongshu…; YouTube, Bilibili…; Amazon, Taobao, JD…; ChatGPT, Kimi, DeepSeek…)- All patterns ignore case; a site can add its own rules, which run before these
- GA4 rules: Google Analytics Help, [GA4] Default channel group, checked 2026-11-10; the UTM checker page lists them in order
| # | Channel | Matches when |
|---|---|---|
| 1 | Paid search | click ID gclid, msclkid, wbraid, gbraid, yclid or bd_vid |
| 2 | Paid social | click ID ttclid, twclid, li_fat_id, ScCid, epik, rdt_cid, clickid, gdt_vid, qz_gdt or callback |
| 3 | Display | click ID dclid |
| 10 | Direct | no referrer, no source, no medium |
| 20–22 | Paid social | PAID medium with a social base or SOCIAL source; or medium paid_social / feed / 信息流 |
| 25–26 | Paid search | PAID medium with a search base; or medium cpc / ppc / sem / paid_search |
| 30 | Social | click ID fbclid |
| 32–33 | Shopping · Video | PAID medium with a SHOPPING or VIDEO source |
| 40 | Display | medium display, banner, cpm, expandable, interstitial, ad or ads |
| 50 · 60–62 · 70 | Affiliate · Email · SMS | medium affiliate(s) / aff · medium or source email / newsletter / edm (plus mailchimp, sendgrid), or a mail referrer · medium sms / mms |
| 80–81 | AI assistant | AI referrer, or an AI source |
| 90–94 | Shopping · Video | SHOPPING source or "shop" in the campaign · VIDEO source, medium video or a video referrer |
| 100–101 · 110–111 | Organic search · Social | search referrer or medium organic · social referrer or medium social / sns (and variants) |
| 120–121 | Referral | medium referral / app / link, or any other referrer |
| 130 | Direct | no referrer left |
| — | Other | nothing matched |
The sample, row by row
Twelve visits to a spring sale. These are the rows where the result is not obvious.
| Line | Visit | TapCub | GA4 | Why |
|---|---|---|---|---|
| 3 | newsletter / email + gclid | Paid search (R1) | Google Ads | TapCub ranks click IDs first; GA4 uses Google Ads data. The UTM tags lose in both. |
| 5 | fbclid only | Direct (R10) | Direct | No referrer and no UTM; the fbclid rule (R30) comes after Direct. |
| 6 | from chatgpt.com | AI assistant (R80) | AI Assistant ≈ | Both have an AI channel; GA4's list of AI referrers is not public. |
| 8 | blog.partner.io → your page | Referral (R121) | Referral | The landing page was recognised by your domain, so the order on the line did not matter. |
| 10 | partner / blog-post | Direct (R130) | Unassigned | An unknown medium and no referrer. TapCub falls through to Direct; GA4 cannot place it. |
| 12 | from news.ycombinator.com | Social (R110) | Organic Social | Both lists include Hacker News. |
Line 10 shows why mediums matter: the same click is Direct in one tool and Unassigned in the other, and a campaign report would lose it in both.
Where channel reports go wrong
Channel grouping is mechanical. Surprises almost always come from the input, not the tool.
Inventing mediums
blog-post, qr or whatsapp as a medium match no default rule. Keep mediums to the standard set and put the detail in campaign or content.
Untagged app and email links
Mail apps, chat apps and in-app browsers often send no referrer. Without UTM tags those clicks count as Direct, which is why Direct grows when a newsletter goes out.
Comparing tools row by row
GA4 and TapCub use different source lists and different priorities for click IDs. Compare channel totals after mapping the channels, not raw rows.
Testing with template URLs
A link copied from the ad editor still contains {gclid} or __CLICKID__. Analytics tools record the macro as a value. Test with the URL the ad actually opens.
The same rules, applied to every session
TapCub classifies each session once, when it starts, with the rule set this tool replays. AI assistants are a channel of their own.
Editable channel rules
Add rules per site that run before the defaults, test a source and medium against them, and recompute past data.
Learn moreClick IDs from 14 ad platforms
Google, Meta, TikTok, Microsoft and Chinese platforms such as Baidu, Ocean Engine and Tencent Ads, even without UTM tags.
Learn moreAI assistants as a channel
ChatGPT, Perplexity, Kimi, DeepSeek and others on their own line in the sources report.
Learn moreChannel classifier questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
What is GA4's default channel group?
A fixed set of rules that GA4 uses to put each session into a channel such as Organic Search, Paid Social, Email or Referral. For manually tagged traffic it looks at source, medium and campaign, compares the source with Google's published lists of search, social, video and shopping sites, and stops at the first rule that matches.
Why is my traffic Unassigned in GA4?
Because the source / medium combination matches no rule: usually a custom medium such as newsletter, qr or blog-post, or a missing medium. Paste the source / medium here to see which rule it misses, then switch to a standard value such as email, social, cpc or referral.
Why does a visit with fbclid show as Direct?
fbclid tells you the click came from Facebook or Instagram, but in TapCub's default rules the fbclid rule comes after the Direct rule, so a visit with no referrer and no UTM tags is Direct. GA4 ignores fbclid entirely. Tag your Meta links with UTM parameters to get a reliable channel in both.
Do UTM tags or click IDs win?
In TapCub's default rules, click IDs (rules 1–3) come first, so a gclid link tagged utm_medium=email is Paid search. In GA4, Google Ads auto-tagging normally takes precedence over UTM values for Google Ads clicks. If you want UTM to win in TapCub, add a site rule.
How does GA4 classify a referrer without UTM tags?
It sets the source and medium itself: known search engines become engine / organic, everything else domain / referral, no referrer becomes (direct) / (none), and traffic from AI assistants gets the medium ai-assistant. Google publishes the channel rules but not the complete lists behind the first and last step, so the tool marks those rows with ≈.
Why does ChatGPT traffic sometimes show as Direct?
When the click opens from the ChatGPT app or a browser that strips the referrer, no referrer reaches your site. Without a referrer or a utm_source, neither tool can tell it came from an AI assistant. Some AI tools add utm_source=chatgpt.com to links, which both rule sets recognise.
Can I use these rules in my own reports?
Yes. The CSV contains channel IDs and the TapCub rule number for each row, and the rules table above lists every condition. In GA4 you can copy the default group and add rules; in TapCub you add site rules that run before the defaults.
Is my list uploaded?
No. Classification runs in your browser and nothing is sent to TapCub. There is no share link, because URL 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)
- Ad platform click ID parameters — checked 2026-11-10, reviewed every 6 months (next review by 2027-05-10)
Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates
Fix the links, then watch the channels
Once links are tagged consistently, TapCub reports sessions and conversions per channel and keeps the first channel on the visitor profile.