Free tool
AI traffic rules for your analytics
Last verified
When someone clicks a link in a ChatGPT, Perplexity or Claude answer, the visit reaches your analytics as a referral from that assistant's hostname. Counting those visits needs a list of the hostnames, and many of the lists in circulation are stale: some still match Bard and Neeva, which send nobody, and some match by substring, so unrelated sites count as AI.
This is a maintained list of 13 hosts, each with the evidence behind it and the date it was checked, plus rules generated from it for GA4, Plausible, PostHog and Matomo. Version 1.0.0; the same list is published as JSON.
The hosts
A rule matches each host and any subdomain of it, so www.perplexity.ai counts as perplexity.ai. Documented means the operator says so itself; observed, not documented by the operator means an analytics vendor lists the host from the traffic it sees. Retired hosts are listed so you can remove them, and are in no rule.
| Assistant | Referrer hosts | utm_source | Evidence | Checked |
|---|---|---|---|---|
| ChatGPT OpenAI OpenAI documents that ChatGPT adds utm_source=chatgpt.com to links from search results, so these visits are attributable even when the referrer is missing. |
| chatgpt.com
|
Observed, not documented by the operator. | |
| Perplexity Perplexity AI |
| none documented |
Observed, not documented by the operator. | |
| Claude Anthropic |
| none documented |
Observed, not documented by the operator. | |
| Gemini Google Bard was renamed Gemini in February 2024 and its host now redirects, so no visitor arrives with a Bard referrer any more. |
| none documented |
| |
| Microsoft Copilot Microsoft |
| none documented |
Observed, not documented by the operator. | |
| DeepSeek DeepSeek |
| none documented |
Observed, not documented by the operator. | |
| Grok xAI Grok inside X (x.com/i/grok) shares the x.com host, so only the standalone site is separable by host. |
| none documented |
Observed, not documented by the operator. | |
| Meta AI Meta |
| none documented |
Observed, not documented by the operator. | |
| Le Chat Mistral AI |
| none documented |
Observed, not documented by the operator. | |
| You.com You.com |
| none documented |
Observed, not documented by the operator. | |
| Qwen Chat Alibaba |
| none documented |
Observed, not documented by the operator. | |
| Duck.ai DuckDuckGo |
| none documented |
Observed, not documented by the operator. | |
| Neeva Neeva (acquired by Snowflake) Still present in many copied GA4 regexes. It sends no visitors. |
| none documented |
Observed, not documented by the operator. |
Scroll the table sideways for more.
What referrer data cannot see
Read any AI traffic number as a floor. A referral rule only sees visits that arrive with a referrer, and many do not.
- Links opened from an app arrive with no referrer and land in direct traffic. PostHog says so in its direct traffic troubleshooting, and the assistants' desktop and mobile apps are apps. We do not know a measured share, so we do not quote one.
- By default a browser sends only the origin of the page to another site (Referrer-Policy), so a rule can match a host but never a path.
- ChatGPT is the exception that helps: OpenAI documents that it adds
utm_source=chatgpt.comto links from its search results, so those visits are attributable even without a referrer. Every rule below includes it.
Assistants a host rule cannot separate
- Google AI Mode and AI Overviews
- Clicks arrive with a google.com referrer, the same as an ordinary Google result, so no host rule can separate them.
- Kagi Assistant
- Served from kagi.com/assistant, the same host as Kagi Search; by default browsers send only the origin to another site, so the path is not there to match.
- Grok inside X
- Served from x.com/i/grok, the same host as every other link on X.
- Copilot in Bing
- Answers inside bing.com share the host with Bing's ordinary results.
Google Analytics 4
In Admin, under Data display, open Channel groups and Create new channel group. Use Add new channel, name it AI assistants, add a condition on Source with matches regex, and paste the expression. Google's own instructions say to reorder the list so the channel sits above Referrals, because traffic goes to the first channel it matches (custom channel groups).
^(.+\.)?(chatgpt\.com|chat\.openai\.com|perplexity\.ai|claude\.ai|gemini\.google\.com|copilot\.microsoft\.com|chat\.deepseek\.com|grok\.com|meta\.ai|chat\.mistral\.ai|you\.com|chat\.qwen\.ai|duck\.ai)$
GA4 regex is RE2, case sensitive and matches the whole value (GA4 regex reference), which is why the expression is anchored and lowercase. A tagged ChatGPT visit has Source chatgpt.com, so it matches too.
Why not the regex in Google's help article
The example in the channel group article, as published when we checked, is below. It matches by substring: any source ending in "ai" counts, and so does any source containing "gpt" or "copilot", and it still lists Bard.
^.*ai|.*\.openai.*|.*chatgpt.*|.*gemini.*|.*gpt.*|.*copilot.*|.*perplexity.*|.*google.*bard.*|.*bard.*google.*|.*bard.*|.*.*gemini.*google.*$
Plausible
Plausible already groups known assistants into an AI Assistants channel in the dashboard (Plausible on AI traffic). Use this filter when you query the Stats API v2 and want the exact list on this page. It goes in the filters of a POST /api/v2/query body; matches uses RE2, and visit:referrer is the referrer without the scheme or www (Stats API reference).
{
"filters": [
[
"or",
[
[
"matches",
"visit:referrer",
[
"^(.+\\.)?(chatgpt\\.com|chat\\.openai\\.com|perplexity\\.ai|claude\\.ai|gemini\\.google\\.com|copilot\\.microsoft\\.com|chat\\.deepseek\\.com|grok\\.com|meta\\.ai|chat\\.mistral\\.ai|you\\.com|chat\\.qwen\\.ai|duck\\.ai)([/?#:]|$)"
]
],
[
"is",
"visit:utm_source",
[
"chatgpt.com"
]
]
]
]
]
}PostHog
PostHog has a built-in AI channel type (channel type docs). For your own list, use this SQL expression as an SQL filter or in a WHERE clause on events. It uses match() (SQL expressions), which runs ClickHouse's RE2 matcher; dots are written as [.] because ClickHouse string literals would otherwise need every backslash doubled (ClickHouse match).
match(properties.$referring_domain, '^(.+[.])?(chatgpt[.]com|chat[.]openai[.]com|perplexity[.]ai|claude[.]ai|gemini[.]google[.]com|copilot[.]microsoft[.]com|chat[.]deepseek[.]com|grok[.]com|meta[.]ai|chat[.]mistral[.]ai|you[.]com|chat[.]qwen[.]ai|duck[.]ai)$') OR properties.utm_source = 'chatgpt.com'
Matomo
Matomo classifies assistants itself: the segment referrerType==ai selects its own AI channel. Matomo segments have no regex operator, so this list becomes one "starts with" condition per host and its www form, joined by commas, which Matomo reads as OR, with each value URL-encoded as the API requires (segmentation reference). It is the value of the segment parameter in a Reporting API call. It matches referrers only, so it does not include ChatGPT's utm_source.
referrerUrl=^https%3A%2F%2Fchatgpt.com%2F,referrerUrl=^https%3A%2F%2Fwww.chatgpt.com%2F,referrerUrl=^https%3A%2F%2Fchat.openai.com%2F,referrerUrl=^https%3A%2F%2Fwww.chat.openai.com%2F,referrerUrl=^https%3A%2F%2Fperplexity.ai%2F,referrerUrl=^https%3A%2F%2Fwww.perplexity.ai%2F,referrerUrl=^https%3A%2F%2Fclaude.ai%2F,referrerUrl=^https%3A%2F%2Fwww.claude.ai%2F,referrerUrl=^https%3A%2F%2Fgemini.google.com%2F,referrerUrl=^https%3A%2F%2Fwww.gemini.google.com%2F,referrerUrl=^https%3A%2F%2Fcopilot.microsoft.com%2F,referrerUrl=^https%3A%2F%2Fwww.copilot.microsoft.com%2F,referrerUrl=^https%3A%2F%2Fchat.deepseek.com%2F,referrerUrl=^https%3A%2F%2Fwww.chat.deepseek.com%2F,referrerUrl=^https%3A%2F%2Fgrok.com%2F,referrerUrl=^https%3A%2F%2Fwww.grok.com%2F,referrerUrl=^https%3A%2F%2Fmeta.ai%2F,referrerUrl=^https%3A%2F%2Fwww.meta.ai%2F,referrerUrl=^https%3A%2F%2Fchat.mistral.ai%2F,referrerUrl=^https%3A%2F%2Fwww.chat.mistral.ai%2F,referrerUrl=^https%3A%2F%2Fyou.com%2F,referrerUrl=^https%3A%2F%2Fwww.you.com%2F,referrerUrl=^https%3A%2F%2Fchat.qwen.ai%2F,referrerUrl=^https%3A%2F%2Fwww.chat.qwen.ai%2F,referrerUrl=^https%3A%2F%2Fduck.ai%2F,referrerUrl=^https%3A%2F%2Fwww.duck.ai%2F
Plain regex and JSON
For anything else that takes a hostname: anchored, lowercase, and written in syntax that RE2, PCRE and JavaScript read the same way.
^(.+\.)?(chatgpt\.com|chat\.openai\.com|perplexity\.ai|claude\.ai|gemini\.google\.com|copilot\.microsoft\.com|chat\.deepseek\.com|grok\.com|meta\.ai|chat\.mistral\.ai|you\.com|chat\.qwen\.ai|duck\.ai)$
The list itself, with status, evidence and dates for every host, is at /tools/ai-traffic-rules/hosts.json. It carries a version and an updated date, so a script can tell when to refresh. It is published under CC BY 4.0: reuse it, with a link back.
Considered and left out
- x.ai
- xAI's company site, not the Grok assistant (grok.com). No referrer list we found includes it.
- phind.com
- Could not verify on 2026-10-04 that the product is still serving answers; the site blocked our check.
- notebooklm.google.com
- Now redirects to notebook.google.com, a host no published referrer list includes yet.
- labs.openai.com
- DALL-E's former web app, not a source of answer links.
- app.writesonic.com
- A writing tool rather than an answer engine; still matched by widely copied regexes.
- app.jasper.ai
- A writing tool rather than an answer engine.
- chat-gpt.org
- A third-party site not operated by OpenAI; counting it as ChatGPT would be wrong.
Changelog
- v1.0.0 ·
- First published list: 12 assistants, 13 hosts in the rules, ChatGPT's documented utm_source.
- bard.google.com and neeva.com listed as retired and kept out of every rule.
Where this list comes from
GetCited's visitor script records the referrer and landing page of each visit. Our server puts sessions from these assistants, or carrying ChatGPT's utm_source, in their own AI channel and reports them as aggregates per assistant, alongside the AI visibility checks that show which engines cite your site. The product's list and this one are compared in a test, so neither drifts quietly.