Start
Concepts
Visitor types
Every report splits traffic four ways:
| Visitor type | Means |
|---|---|
| Human | A person in a normal browser |
| AI-referred human | A person who clicked through from ChatGPT, Perplexity, Claude, Gemini or Copilot |
| Agent | Software acting for someone: signed and declared AI agents, HTTP clients and scripts, headless or automated browsers, and impostors |
| Crawler | Search and AI crawlers indexing or collecting training data |
Actor classes
Underneath the visitor types, each request gets one class:
| Class | How it's recognized |
|---|---|
signed_agent |
A cryptographic Web Bot Auth signature from a known operator |
declared_agent |
Says it's a user-triggered fetcher (ChatGPT-User, Claude-User, …) and its IP matches the operator's published ranges |
crawler |
Says it's a known crawler (GPTBot, Googlebot, …) and its IP matches |
fetcher |
A non-browser HTTP client (curl, python-requests, …) or a client asking for plain text or llms.txt |
suspected_agent |
A headless browser, a browser on a cloud network, or a machine-like request rate |
spoofed_bot (shown as impostor) |
Claims a known agent's name, but its address doesn't match |
human, ai_referred_human |
Everyone else |
Confidence tiers and the filter
| Tier | Meaning |
|---|---|
verified |
Cryptographically signed |
declared |
Says who it is, and its IP checks out |
inferred_high |
Strong evidence: an impostor, a scripted client, a headless browser |
inferred_low |
Weaker patterns: a cloud network, a steady request rate |
The Agent labels filter decides which tiers count as agents. Labels below the chosen level count as human: confirmed only trades recall for precision; everything does the opposite.
Every label shows its work
Classification is rules, not machine learning. Each request records which rules fired (R1–R13) and the evidence, for example "claims a known crawler name · address doesn't match · tier: inferred, high". Open any session to see it.
Sessions without cookies
Requests are grouped into sessions with a daily visitor hash: a one-way hash of a random salt, your site, the IP address and the user agent. The salt is replaced every day and the old one deleted, so hashes can't be linked across days or reversed. A session ends after 30 minutes of inactivity or at midnight UTC. Browsers that send Global Privacy Control get no hash at all.
Why agents fetch: live retrieval vs crawls
| Purpose | Means |
|---|---|
user_triggered |
An assistant fetched the page because someone is asking right now (ChatGPT-User, Claude-User, Perplexity-User) |
agent |
An agent acting in a browser for someone |
search |
Indexing for search or answers (OAI-SearchBot, Claude-SearchBot, Googlebot, …) |
training |
Collecting training data (GPTBot, ClaudeBot, CCBot) |
other_automation |
Scripts and automated browsers with no declared identity |
impostor |
Claimed a known name; not counted as any of the above |
Live retrieval (user-triggered + agent) is a real-time demand signal; crawls are slow-moving visibility. Reports keep them separate.
Channels
A channel is how a visit arrived: AI assistants (people sent by ChatGPT, Claude, Perplexity and others), organic search, paid, email, social, affiliate, other campaigns, referral or direct. Who made the visit (a person, an agent or a crawler) is a separate dimension, visitor_type, so agents aren't a channel: each agent visit has a channel like any other, and most arrive direct. Overview shows sessions by channel split into people, agents and crawlers.
Privacy thresholds
Outside your own dashboard (API, MCP, shared reports), any group containing fewer than 5 people's page views is withheld and counted in meta.suppressed_rows. Groups of only agents and crawlers are always shown.
Ask the docs
Answers come from these docs only, written by Claude (Anthropic). Your question is sent to answer it, and isn't stored.