list_ai_crawler_visits
list_ai_crawler_visits MCP tool: raw AI crawler visit rows from Cloudflare AI Crawl Control, one per day, path, crawler and HTTP status. Filter by date, crawler, operator, kind, path or status codes.
Updated 2026-09-29
list_ai_crawler_visits returns the raw AI crawler visits stored for the project, one row per day, URL path, crawler and HTTP status, with the number of visits. It is the data behind the other AI crawler tools, for the analyses they do not cover.
The visits come from Cloudflare AI Crawl Control, 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 when the aggregated tools are not enough: export a month of crawls to a spreadsheet, list every 404 served to AI crawlers, follow one crawler on one page day by day, or build your own chart in an agent.
For totals, trends and per-page rankings, get_ai_crawler_overview and list_ai_crawler_pages answer in one call without paging. The tool reads stored data and costs no credits.
Input
| Field | Type | Default | Description |
|---|---|---|---|
projectId |
string (CUID) | required | Project to query. |
cursor |
string | Opaque pagination cursor from a prior pageInfo.nextCursor. |
|
limit |
integer | 20 | 1 to 100. |
filters.dateRange |
{ from?, to? } |
last 30 full days | UTC days, bounds included. to defaults to yesterday, the latest synced day. |
filters.crawlers |
string[] | Crawler ids, e.g. chatgpt-user, gptbot, claudebot. |
|
filters.operators |
string[] | OpenAI, Anthropic, Perplexity, Mistral, DuckDuckGo, Apple, Amazon, Meta, ByteDance, Common Crawl. |
|
filters.kinds |
string[] | user (answer reads), search (search indexing), training (training crawls). |
|
filters.path |
string | Exact URL path, starting with /, up to 500 characters. |
|
filters.pathContains |
string | Case-sensitive substring of the URL path, up to 200 characters. Ignored when path is set. |
|
filters.statuses |
integer[] | HTTP status codes, e.g. [404, 500]. |
|
sortBy |
enum | date_desc |
date_desc (latest day first, then most visits), visits_desc. |
The crawler ids, operators and kinds are listed on get_ai_crawler_overview. All filters add up.
Response
data holds one row per day, path, crawler and status, pageInfo the usual pagination envelope, and summary the range actually read and the last synced day.
{
"data": [
{
"id": "cmg4k2x9p0004l20812hd7fqa",
"date": "2026-09-28",
"path": "/blog/old-pricing",
"crawler": "chatgpt-user",
"label": "ChatGPT-User",
"operator": "OpenAI",
"kind": "user",
"status": 404,
"visits": 6
},
{
"id": "cmg4k2x9p0005l208a3kq1zte",
"date": "2026-09-27",
"path": "/blog/old-pricing",
"crawler": "gptbot",
"label": "GPTBot",
"operator": "OpenAI",
"kind": "training",
"status": 404,
"visits": 4
}
],
"pageInfo": { "hasMore": true, "nextCursor": "cmg4k2x9p0005l208a3kq1zte", "totalCount": 23 },
"summary": {
"connected": true,
"dateRange": { "from": "2026-08-30", "to": "2026-09-28" },
"syncedThrough": "2026-09-28"
}
}
date: the UTC day of the visits (YYYY-MM-DD).path: the URL path, without the domain and without a trailing slash.crawler,label,operator,kind: the crawler id and how to read it.kindisuser(answer read),search(search indexing) ortraining(training crawl).status: the HTTP status the site served.visits: number of visits that day for this path, crawler and status.
pageInfo.totalCount counts every row matching the filters. When the project is not connected to Cloudflare, the tool returns an empty data with summary: { "connected": false }. An invalid range (from after to) or filters that match no crawler return an empty data with summary: { "connected": true }.
Tips and patterns
filters: { statuses: [404, 410, 500, 502, 503] }withsortBy: "visits_desc"lists the broken URLs AI crawlers hit the most. Redirect or fix them first.filters: { path: "/pricing", kinds: ["user"] }follows the answer reads of one page day by day.- Rows are already grouped by day. Sum
visitsin your agent to regroup by week, by operator or by section. - For a large export, keep
limit: 100and follownextCursoruntilhasMoreis false.
Related tools
get_ai_crawler_overview: the same data summarized for the whole sitelist_ai_crawler_pages: the same data grouped by page, with citationsget_ai_crawler_page: one page in detail