AI host labels
The by AI host chart on /analytics + every per-agent caller breakdown groups requests into 87 buckets, derived from the User-Agent header. This page is the full reference — partner vendors can verify their UA gets classified correctly, and operators can read what each label means.
Mismatches? Crawlers (tagged ⚠ training/index below) are excluded from page-view counts so they don't inflate visitor stats. User-initiated browse buckets (Claude / ChatGPT / Perplexity / Grok / Gemini followed by (browse)) ARE counted — those are real per-message AI sessions, not training scrapes.
Anthropic (Claude family)
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Claude Desktop |
claude_desktop
|
\bclaude[-_]?desktop\b \bClaude/
|
✓ counted |
| Claude (browse) |
claude_user
|
\bClaude-User\b \bClaude-Web\b
|
✓ counted |
| Anthropic SDK |
claude_api
|
\banthropic[-_]?mcp[-_]?client\b \banthropic[-_]?sdk\b ^anthropic-ai/
|
✓ counted |
| Claude Code |
claude_code
|
^claude-code\b
|
✓ counted |
| ClaudeBot (training crawler) |
claudebot
|
\bClaudeBot\b \bClaude-SearchBot\b
|
⚠ crawler |
OpenAI family
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| ChatGPT (browse) |
chatgpt_user
|
\bChatGPT-User\b
|
✓ counted |
| OpenAI Responses API |
openai_responses
|
^OpenAI/
|
✓ counted |
| OpenAI SDK |
openai_sdk
|
^openai-python\b
|
✓ counted |
| GPTBot (training crawler) |
gptbot
|
\bGPTBot\b
|
⚠ crawler |
| OAI-SearchBot |
oai_searchbot
|
\bOAI-SearchBot\b
|
⚠ crawler |
Google (Gemini / Vertex)
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Gemini |
gemini_user
|
\bGemini\b
|
✓ counted |
| Google GenAI SDK |
gemini_sdk
|
^google-genai-sdk\b
|
✓ counted |
| Vertex AI SDK |
vertex_sdk
|
\bgoogle-cloud-aiplatform\b
|
✓ counted |
| Googlebot (search) |
googlebot
|
\bGooglebot\b
|
⚠ crawler |
| Google-Extended (training) |
google_extended
|
\bGoogle-Extended\b
|
⚠ crawler |
| GoogleOther (Google AI, mixed) |
google_other
|
\bGoogleOther\b
|
⚠ crawler |
Microsoft (Copilot / Bing)
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Copilot |
copilot
|
\bGitHub[-_]?Copilot\b \bCopilot[/-]
|
✓ counted |
| Bingbot |
bingbot
|
\bbingbot\b \bBingPreview\b
|
⚠ crawler |
Perplexity
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Perplexity (browse) |
perplexity_user
|
\bPerplexity-User\b
|
✓ counted |
| PerplexityBot (crawler) |
perplexitybot
|
\bPerplexityBot\b
|
⚠ crawler |
xAI Grok
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Grok (browse) |
grok_user
|
\bGrok-User\b
|
✓ counted |
| Grok / xAI |
grok
|
\b(?:xAI-)?Grok(?:Bot)?\b
|
✓ counted |
Meta / Facebook
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Meta-ExternalAgent |
meta_external_agent
|
\bMeta-ExternalAgent\b
|
⚠ crawler |
| Facebook link preview |
facebook_externalhit
|
\bfacebookexternalhit\b
|
⚠ crawler |
Other AI search + crawlers
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| You.com (YouBot) |
youbot
|
\bYouBot\b
|
✓ counted |
| Kagi |
kagibot
|
\bKagiBot\b
|
⚠ crawler |
| Applebot |
applebot
|
\bApplebot\b
|
⚠ crawler |
| Applebot-Extended (training opt-out) |
applebot_extended
|
\bApplebot-Extended\b
|
⚠ crawler |
| Amazonbot |
amazonbot
|
\bAmazonbot\b
|
⚠ crawler |
| ByteSpider (TikTok) |
bytespider
|
\bbytespider\b
|
⚠ crawler |
| DuckDuckBot |
duckduckbot
|
\bDuckDuckBot\b
|
⚠ crawler |
Other LLM API clients
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Cohere SDK |
cohere_sdk
|
\bcohere-(?:python|typescript|node)\b
|
✓ counted |
| Mistral SDK |
mistral_sdk
|
\bmistralai\b
|
✓ counted |
IDE / agent platforms
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Cursor |
cursor
|
\bCursor[/-]
|
✓ counted |
| Cline |
cline
|
\bCline\b
|
✓ counted |
| Continue |
continue_dev
|
\bContinue\b
|
✓ counted |
| Zed |
zed
|
\bZed/
|
✓ counted |
| Windsurf / Codeium |
windsurf
|
\b(?:Windsurf|Codeium)[/-]
|
✓ counted |
| Aider |
aider
|
\bAider/
|
✓ counted |
| Replit Agent |
replit_agent
|
\bReplit\b.*\bAgent\b
|
✓ counted |
| bolt.new |
bolt_new
|
\bbolt\.new\b
|
✓ counted |
LLM frameworks
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| LangChain |
langchain
|
\blangchain(?:-(?:py|python|js))?\b
|
✓ counted |
| LlamaIndex |
llama_index
|
\bllama[-_]?index\b
|
✓ counted |
| Haystack |
haystack
|
\bhaystack-ai\b
|
✓ counted |
| AutoGen |
autogen
|
\bautogen\b
|
✓ counted |
| CrewAI |
crewai
|
\bcrewai\b
|
✓ counted |
| Open Interpreter |
open_interpreter
|
\bopen-?interpreter\b
|
✓ counted |
MCP protocol SDKs
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| MCP Python SDK |
mcp_python_sdk
|
\bmcp-python-sdk\b
|
✓ counted |
| MCP TypeScript SDK |
mcp_ts_sdk
|
\bmcp-typescript-sdk\b|@modelcontextprotocol/sdk\b
|
✓ counted |
| MCP Go SDK |
mcp_go_sdk
|
\bmcp-go\b
|
✓ counted |
Automation runners
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| n8n |
n8n
|
\bn8n\b
|
✓ counted |
| Zapier |
zapier
|
\bZapier\b
|
✓ counted |
| Make.com |
make
|
\bMake\.com\b
|
✓ counted |
A2A peers
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| A2A peer |
a2a_peer
|
\bA2A[-/]
|
✓ counted |
| Agenstry peer |
agentfinder_peer
|
\bagentfinder\b \bagenstry\b
|
✓ counted |
HTTP libraries / CLI
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| curl |
curl
|
^curl/
|
✓ counted |
| Wget |
wget
|
^Wget/
|
✓ counted |
| HTTPie |
httpie
|
\bhttpie\b
|
✓ counted |
| Python (requests) |
python_requests
|
^python-requests/
|
✓ counted |
| Python (httpx) |
python_httpx
|
^python-httpx/
|
✓ counted |
| Python (urllib) |
python_urllib
|
^Python-urllib/
|
✓ counted |
| Node fetch |
node_fetch
|
^node-fetch/
|
✓ counted |
| Axios |
axios
|
\baxios/
|
✓ counted |
| Go http.Client |
go_http
|
\bGo-http-client\b
|
✓ counted |
| reqwest (Rust) |
reqwest
|
^reqwest/
|
✓ counted |
| OkHttp (JVM) |
okhttp
|
^okhttp/
|
✓ counted |
Internal markers
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Enterprise seat |
enterprise_seat
|
(set explicitly in code, no UA pattern) | ✓ counted |
| Managed agent |
managed_agent
|
(set explicitly in code, no UA pattern) | ✓ counted |
Catch-all
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| Web browser |
browser
|
^Mozilla/
|
✓ counted |
| Other crawler |
bot
|
(?:bot|crawler|spider|fetcher)\b
|
⚠ crawler |
| Unknown (no UA) |
unknown
|
(set explicitly in code, no UA pattern) | ⚠ crawler |
Uncategorised (review needed)
| Display label | caller_kind | UA pattern (regex) | Counts as visit? |
|---|---|---|---|
| GoogleOther-Image |
google_other_image
|
\bGoogleOther-Image\b
|
⚠ crawler |
| GoogleOther-Video |
google_other_video
|
\bGoogleOther-Video\b
|
⚠ crawler |
| Vertex AI grounding (CloudVertexBot) |
google_vertex_grounding
|
\bGoogle-CloudVertexBot\b
|
⚠ crawler |
| NotebookLM |
google_notebooklm
|
\bGoogle-NotebookLM\b
|
⚠ crawler |
| DuckAssist (DuckDuckGo AI) |
duckassist
|
\bDuckAssistBot\b
|
⚠ crawler |
| YandexBot |
yandexbot
|
\bYandexBot\b
|
⚠ crawler |
| BaiduSpider |
baiduspider
|
\bBaiduspider\b
|
⚠ crawler |
| CCBot (Common Crawl) |
ccbot
|
\bCCBot\b
|
⚠ crawler |
| Slack link preview |
slackbot
|
\bSlackbot[-/]
|
✓ counted |
| Twitter / X link preview |
twitterbot
|
\bTwitterbot\b
|
✓ counted |
| LinkedIn link preview |
linkedinbot
|
\bLinkedInBot\b
|
✓ counted |
| Discord link preview |
discordbot
|
\bDiscordbot\b
|
✓ counted |
| Telegram link preview |
telegram_preview
|
\bTelegramBot\b
|
✓ counted |
| WhatsApp link preview |
whatsapp_preview
|
\bWhatsApp\b
|
✓ counted |
| Skype link preview |
skype_preview
|
\bSkypeUriPreview\b
|
✓ counted |
| Mattermost link preview |
mattermost_preview
|
\bMattermost\b
|
✓ counted |
Missing a host?
If your AI host / agent platform sends a User-Agent that doesn't land in any of the buckets above, it'll show up as unknown on /analytics. File a PR with the UA pattern + label in app/call_log.py — or open an issue with a sample UA string and we'll add it.
Source of truth: app/call_log._UA_PATTERNS + _CALLER_KIND_LABELS. Every entry here is generated from those at request time, so it can never drift.