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

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
Classifier

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 marked ≈ in the GA4 column were derived from the referrer alone. Google publishes the channel rules but not the full list it uses to turn a referrer into an AI assistant or organic search source, so those rows are an approximation.

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.

LineVisitTapCub channelTapCub ruleGA4 channelGA4 source / medium
1← https://www.google.com/Organic searchR100 base=searchOrganic Search≈ google / organic
2?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sal…EmailR60 medium~^(e-?mail|newsletter|edm)$Emailnewsletter / email
3?utm_source=newsletter&utm_medium=email&gclid=Cj0KCQiA8x ← —Paid searchR1 click_id=gclidGoogle Ads (auto-tagged)google / cpc
4← https://l.facebook.com/l.php?u=https%3A%2F%2Fshop.example.comSocialR110 base=socialOrganic Sociall.facebook.com / referral
5?fbclid=IwAR2xYz ← —DirectR10 base=direct · no referrer · source=∅ · medium=∅Direct(direct) / (none)
6← https://chatgpt.com/AI assistantR80 base=aiAI Assistant≈ chatgpt.com / ai-assistant
7← https://www.youtube.com/watch?v=abc123VideoR94 ref_host~VIDEOOrganic Videoyoutube.com / referral
8shop.example.com/spring ← https://blog.partner.io/best-running-…ReferralR121 referrerReferralblog.partner.io / referral
9?utm_source=facebook&utm_medium=paid_social&utm_campaign=spring…Paid socialR21 source~SOCIAL · medium~PAIDPaid Socialfacebook / paid_social
10?utm_source=partner&utm_medium=blog-post&utm_campaign=spring_sa…DirectR130 base=direct · no referrerUnassignedpartner / blog-post
11← android-app://com.google.android.gm/DirectR10 base=direct · no referrer · source=∅ · medium=∅Direct(direct) / (none)
12← https://news.ycombinator.com/item?id=4012SocialR110 base=socialOrganic Socialnews.ycombinator.com / referral

By TapCub channel

How the rows in each TapCub channel are classified by GA4.

TapCub channelRowsGA4 channel
Direct3Direct ×2 · Unassigned ×1
Social2Organic Social ×2
Organic search1Organic Search ×1
Email1Email ×1
Paid search1Google Ads (auto-tagged) ×1
AI assistant1AI Assistant ×1
Video1Organic Video ×1
Referral1Referral ×1
Paid social1Paid 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.
CSV
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_social

Machine-readable channel IDs plus the TapCub rule number.

Runs entirely in your browser. Nothing you type here is uploaded or stored by TapCub.

Version v1.0Updated Update history

Read the result

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.

How to use it

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. 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. 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. 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.

Rules

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 is cpc, ppc, retargeting, cpv, cpa, cpp or starts with paid; 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
TapCub default channel rules (packages/shared/src/channels.ts), first match wins
#ChannelMatches when
1Paid searchclick ID gclid, msclkid, wbraid, gbraid, yclid or bd_vid
2Paid socialclick ID ttclid, twclid, li_fat_id, ScCid, epik, rdt_cid, clickid, gdt_vid, qz_gdt or callback
3Displayclick ID dclid
10Directno referrer, no source, no medium
20–22Paid socialPAID medium with a social base or SOCIAL source; or medium paid_social / feed / 信息流
25–26Paid searchPAID medium with a search base; or medium cpc / ppc / sem / paid_search
30Socialclick ID fbclid
32–33Shopping · VideoPAID medium with a SHOPPING or VIDEO source
40Displaymedium display, banner, cpm, expandable, interstitial, ad or ads
50 · 60–62 · 70Affiliate · Email · SMSmedium affiliate(s) / aff · medium or source email / newsletter / edm (plus mailchimp, sendgrid), or a mail referrer · medium sms / mms
80–81AI assistantAI referrer, or an AI source
90–94Shopping · VideoSHOPPING source or "shop" in the campaign · VIDEO source, medium video or a video referrer
100–101 · 110–111Organic search · Socialsearch referrer or medium organic · social referrer or medium social / sns (and variants)
120–121Referralmedium referral / app / link, or any other referrer
130Directno referrer left
—Othernothing matched
Worked example

The sample, row by row

Twelve visits to a spring sale. These are the rows where the result is not obvious.

Selected rows from the sample
LineVisitTapCubGA4Why
3newsletter / email + gclidPaid search (R1)Google AdsTapCub ranks click IDs first; GA4 uses Google Ads data. The UTM tags lose in both.
5fbclid onlyDirect (R10)DirectNo referrer and no UTM; the fbclid rule (R30) comes after Direct.
6from chatgpt.comAI assistant (R80)AI Assistant ≈Both have an AI channel; GA4's list of AI referrers is not public.
8blog.partner.io → your pageReferral (R121)ReferralThe landing page was recognised by your domain, so the order on the line did not matter.
10partner / blog-postDirect (R130)UnassignedAn unknown medium and no referrer. TapCub falls through to Direct; GA4 cannot place it.
12from news.ycombinator.comSocial (R110)Organic SocialBoth 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.

Common mistakes

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.

FAQ

Channel 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.

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)
  • 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

Next step

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.

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