Reference

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.