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).visitsandpreviousVisits: 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 intouser(answer reads),search(search indexing) andtraining(training crawls).byCrawler: one row per crawler seen, most visits first, with itslabel,operatorandkind.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 theirpathwhen 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
visitswithpreviousVisitsbefore digging: the ratio tells you at once whether AI crawling is growing or shrinking. - Watch
byKind.userfirst. Training crawls say little about today's answers, answer reads say an assistant fetched your page to answer someone. - A non-empty
errorslist is a quick win: a 404 or a 5xx served tochatgpt-useris an answer that could not use your page. Pull the rows withlist_ai_crawler_visitsandfilters.statuses. - To attribute a change, put
eventson top ofdailyand look at the days that follow each publication or action. Log your own actions withcreate_action_logso they show up here. - If
connection.syncedThroughis several days old orlastErroris set, the recent days are missing: reconnect Cloudflare on the project's AI crawlers page before drawing conclusions.
Related tools
list_ai_crawler_pages: the pages AI crawlers visit, with answer reads and citations per pageget_ai_crawler_page: one page in detail, from publication to first citationlist_ai_crawler_visits: the raw visit rows for custom analysislist_action_logs: the full project journal