get_ai_crawler_overview

get_ai_crawler_overview MCP tool: AI crawler visits to your site over a date range, from Cloudflare AI Crawl Control. Totals, previous period, visits by kind and by crawler, daily series, HTTP errors and your published pages and actions.

Updated 2026-09-29

get_ai_crawler_overview summarizes how AI crawlers visited the project's site over a date range: total visits and the previous period, visits by kind (answer reads, search indexing, training crawls), visits by crawler, a daily series, the HTTP errors served to AI crawlers, and the pages published with Mentionable plus the actions logged in the journal over the same range.

The visits come from Cloudflare AI Crawl Control. They are synced every night, through yesterday, once the project is connected to Cloudflare on its AI crawlers page. History starts 7 days before the connection.

When to use

Use it as the first call of any question about AI crawlers: "are AI bots reading my site more than last month?", "which crawler visits the most?", "did the pages I published last week get crawled?", "is my site serving errors to ChatGPT?".

The events list sits next to the daily series on purpose: an agent can line up a rise in answer reads with the page published or the action logged just before it. The tool reads stored data and costs no credits.

Input

Field Type Default Description
projectId string (CUID) required Project to query.
filters.dateRange.from string (ISO date) to minus 29 days First UTC day to read, included. A datetime is accepted, only its day is used.
filters.dateRange.to string (ISO date) yesterday Last UTC day to read, included. Yesterday is the latest synced day.
filters.crawlers string[] Crawler ids, e.g. chatgpt-user, gptbot, claudebot. See the table below.
filters.operators string[] Companies behind the crawlers: OpenAI, Anthropic, Perplexity, Mistral, DuckDuckGo, Apple, Amazon, Meta, ByteDance, Common Crawl.
filters.kinds string[] user (answer reads), search (search indexing), training (training crawls).

Without dateRange, the tool reads the last 30 full days, through yesterday. Filters add up: operators: ["OpenAI"] with kinds: ["user"] keeps ChatGPT-User only. A combination that matches no crawler (Meta with search, for instance) returns zeros instead of an error.

Crawlers

Id Crawler Operator Kind
gptbot GPTBot OpenAI training
oai-searchbot OAI-SearchBot OpenAI search
chatgpt-user ChatGPT-User OpenAI user
claudebot ClaudeBot Anthropic training
claude-searchbot Claude-SearchBot Anthropic search
claude-user Claude-User Anthropic user
perplexitybot PerplexityBot Perplexity search
perplexity-user Perplexity-User Perplexity user
mistralai-user MistralAI-User Mistral user
duckassistbot DuckAssistBot DuckDuckGo search
applebot Applebot Apple search
amazonbot Amazonbot Amazon search
meta-externalagent Meta-ExternalAgent Meta training
meta-externalfetcher Meta-ExternalFetcher Meta user
bytespider Bytespider ByteDance training
ccbot CCBot Common Crawl training

An answer read (user) is a crawler fetching the page live while someone asks the assistant a question. It is the signal closest to an answer built on your page. Search indexing (search) feeds the engine's search index, and training crawls (training) collect content to train models.

Response

A get_* tool: the payload sits next to success: true. All dates are UTC days (YYYY-MM-DD).

{
  "success": true,
  "connection": {
    "zoneName": "acme-coaching.com",
    "syncedThrough": "2026-09-28",
    "lastError": null
  },
  "dateRange": { "from": "2026-08-30", "to": "2026-09-28" },
  "visits": 4812,
  "previousVisits": 3970,
  "byKind": { "user": 612, "search": 1840, "training": 2360 },
  "byCrawler": [
    { "crawler": "gptbot", "label": "GPTBot", "operator": "OpenAI", "kind": "training", "visits": 1490 },
    { "crawler": "oai-searchbot", "label": "OAI-SearchBot", "operator": "OpenAI", "kind": "search", "visits": 1105 },
    { "crawler": "chatgpt-user", "label": "ChatGPT-User", "operator": "OpenAI", "kind": "user", "visits": 431 }
  ],
  "daily": [
    { "date": "2026-08-30", "user": 14, "search": 58, "training": 71 },
    { "date": "2026-08-31", "user": 19, "search": 61, "training": 80 }
  ],
  "errors": [
    { "path": "/blog/old-pricing", "status": 404, "visits": 37 }
  ],
  "events": [
    { "date": "2026-09-10", "type": "page", "title": "GEO audit checklist for coaches", "path": "/blog/geo-audit-checklist" },
    { "date": "2026-09-15", "type": "action", "title": "Rewrote the pricing page FAQ", "path": null }
  ]
}
  • connection: the Cloudflare site read (zoneName), the last synced day (syncedThrough, null before the first sync) and the message of the last failed sync (lastError, null when the last sync went through).
  • visits and previousVisits: visits over the range, and over the same number of days just before it, with the same filters. A range shorter than 7 days is compared with the same days one week earlier.
  • byKind: visits split into user (answer reads), search (search indexing) and training (training crawls).
  • byCrawler: one row per crawler seen, most visits first, with its label, operator and kind.
  • daily: one point per day of the range, days without visits at zero, split by kind.
  • errors: the path and HTTP status pairs of 400 or more served to AI crawlers, most visits first (up to 20).
  • events: pages published with Mentionable (type: "page", with their path when the published URL is known) and actions logged in the journal (type: "action", path: null), sorted by date.

Errors: { "success": false, "error": "cloudflare_not_connected" } when the project has no Cloudflare connection, invalid_date_range when from is after to.

Tips and patterns

  • Compare visits with previousVisits before digging: the ratio tells you at once whether AI crawling is growing or shrinking.
  • Watch byKind.user first. Training crawls say little about today's answers, answer reads say an assistant fetched your page to answer someone.
  • A non-empty errors list is a quick win: a 404 or a 5xx served to chatgpt-user is an answer that could not use your page. Pull the rows with list_ai_crawler_visits and filters.statuses.
  • To attribute a change, put events on top of daily and look at the days that follow each publication or action. Log your own actions with create_action_log so they show up here.
  • If connection.syncedThrough is several days old or lastError is set, the recent days are missing: reconnect Cloudflare on the project's AI crawlers page before drawing conclusions.

Related tools

You can see where you stand today.

Free trial. Start tracking your AI visibility, no credit card.