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. kind is user (answer read), search (search indexing) or training (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] } with sortBy: "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 visits in your agent to regroup by week, by operator or by section.
  • For a large export, keep limit: 100 and follow nextCursor until hasMore is false.

Related tools

You can see where you stand today.

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