Skip to content
Documentation menu

Documentation

AI traffic and crawler logs

Connect your request logs to see which AI agents read your pages, how sure we are who each one was, and which AI assistants send people back.

Every other surface measures what the engines say. AI traffic measures what they do: the crawlers and agents that fetch your pages and the assistants that send real people back, from your own request logs. No JavaScript tracker, because bots do not run JavaScript.

What you get

NumberWhat it is
Agent visits by purposeRequests from an AI agent, split by what it came for: AI training (GPTBot, ClaudeBot), AI search (OAI-SearchBot, PerplexityBot, Googlebot), a user fetch (ChatGPT-User, Claude-User, Perplexity-User, Google-GeminiNotebook), an agentic browser (ChatGPT's agent, Google-Agent) or a coding agent. Agentic browser and coding agent are always inferred. OpenAI's ads check (OAI-AdsBot) is counted as a visit, never as interest in your page.
Verification levelEvery visit is filed by the strongest check it passed. Signed: a Web Bot Auth signature checked against the agent's published keys. IP: an address the vendor publishes, or its reverse DNS. User agent only: it mentioned itself and nothing confirmed it. Inferred: it mentioned nothing, and its behaviour points to an agent. A visit from outside the vendor's addresses is user agent only: still counted in the crawler total, never as verified. Only signed and IP visits count as verified.
Agent filesHow often agents fetched llms.txt, Markdown pages, your OpenAPI document, sitemaps and an MCP server card. A count of reads, never a score: publishing llms.txt is hygiene.
Docs and the rest of the siteAgent visits to your documentation (a docs subdomain, or a first folder such as /docs or /reference) against every other page.
AI referral sessionsPeople who arrived from chatgpt.com, perplexity.ai, gemini.google.com, copilot.microsoft.com, claude.ai and the rest, attributed from the referrer without GA4.
Read, never citedPages crawlers fetch that no measured answer has ever cited. The engines are reading it and not trusting it: the most specific finding this product makes.
Note

Counts, never estimates. A zero means nothing happened, not that a model guessed low. Only AI classified requests are stored; ordinary visitors and other bots are counted in the delivery receipt and dropped. Visits stored before levels were recorded show as not recorded, neither verified nor unverified.

Setup in two steps

  1. 1Open AI traffic in the console and create an ingest key. It is an ingest only credential: it can write traffic rows and nothing else. Creating a key revokes the one it replaces.
  2. 2Pick your hosting platform on the same page. The guide, the URLs and the code already carry your key, so setup is a paste. The Connected sources strip turns green on the first delivery.

Platforms

PlatformHowPlan
VercelA log drain to a custom endpoint, NDJSON, with an Authorization header. No code changes.Vercel Pro or Enterprise
CloudflareA Worker on your zone that forwards after the response, or a Logpush job with the http_requests dataset.Worker on any plan; Logpush on Enterprise
NetlifyAn Edge Function on any plan, or a General HTTP log drain for traffic logs.Edge Function any plan; log drain Enterprise
AWS CloudFrontStandard logging v2 to an Amazon Data Firehose stream with an HTTP endpoint destination, JSON or w3c output.Any distribution
FastlyReal time log streaming to an HTTPS endpoint with the JSON format string we provide.Any service
AkamaiDataStream 2 to a custom HTTPS endpoint, JSON format, X-Ansengine-Key header.DataStream 2 entitled
Google CloudA Cloud Logging sink for load balancer request logs into Pub/Sub, pushed to us with the key on the URL.Any project
WordPress, Kinsta, WP EngineA must use plugin that forwards AI traffic from the origin, non blocking. Full page caches that skip PHP miss some hits.Any host
Next.js, NodeA middleware that forwards only AI traffic, off the request path.Any host
Anything elsePOST batches of up to 500 events to the REST endpoint with the ingest key as a Bearer token.Any

What is collected

Per request: path, host, user agent, referrer, the Accept header, client IP and, where the source records it, the status your site answered with. A request signed with Web Bot Auth also sends its method, its full URL and its three signature headers; only the code collectors (the Worker, the Edge Function, the plugin and the middleware) can see them, and log drains cannot carry them. Every log drain carries the status; the Next.js middleware runs before the answer exists, so it sends none. Not collected: cookies, request bodies, or any other identifier. The path is stored without its query string. The IP, the Accept header and the signature material are used in memory and dropped; what lands in the table is the classified agent, what it came for, its verification level, whether it asked for Markdown, the status, the path, the host and the referrer host.

Know this

Platform log drains deliver every request, humans included. The api keeps only AI classified lines; the rest are counted and discarded. Over the daily row cap the api answers 429 and drops the batch rather than truncating it silently, and the Connected sources strip shows the cap as an error.

Verification, honestly

A user agent is a claim, not an identity. Published measurements put spoofed AI crawler traffic at about 6 percent of everything bearing an AI crawler user agent, and most sites accept it. Address lists are fetched live from the vendors' own files (OpenAI, Perplexity, Anthropic, Google, Bing), cached, and treated as valid when stale, so a vendor's slow republish never turns real bots into spoofs. Anthropic publishes one list for its three bots, so a match there proves Anthropic, not which bot; Google's and Bing's lists cover several of their agents the same way. Reverse DNS is a second check, never a veto: some of Google's agent addresses have no reverse DNS name at all.

Signatures follow the IETF Web Bot Auth draft. Two signers are checked today, ChatGPT's agent (chatgpt.com) and Google-Agent (agent.bot.goog), each against the keys it publishes, and a signature that cannot be checked is never counted as signed. Only signed and IP visits count as verified.