Integrations and API
Read AI Crawlers data with the REST API and MCP
Pull AI bot reads, citations and pages for your site through two REST endpoints and two MCP tools, and read null values the right way.
4 minute read · Last reviewed: October 24, 2026
You want your AI Crawlers numbers in your own report, script or AI agent, not only on the page. Two read endpoints and two MCP tools give you the same numbers the AI Crawlers page shows: which AI bots read your site, and which of those pages your tracked answers cite.
Before you start
- A connected site. AI Crawlers must be turned on for the brand, and its site connected. See AI Crawlers.
- An API key. Generate one in
Settings → Integrations. A read key is enough: both endpoints and both tools only read. The API needs an active paid plan. See REST API. - The brand ID.
GET /brandson the REST API, or thelist_brandsMCP tool, returns it.
If AI Crawlers isn't turned on for the brand, every call returns a 404 with the code CRAWLERS_NOT_ENABLED. Don't see AI Crawlers in your sidebar? Ask us at team@aipeekaboo.com.
The two REST endpoints
| Endpoint | Method | What it returns |
|---|---|---|
/brands/:brandId/ai-crawlers | GET | The summary: connection status, reads per AI company per day, the company cards' reads and citations, tracked answers per model, and page counts per group |
/brands/:brandId/ai-crawlers/pages | GET | The pages list, by the same groups as the page's Pages list |
Both live under https://www.aipeekaboo.com/api/v1 and take the same X-API-Key header as every other endpoint.
curl -H "X-API-Key: $API_KEY" \
"https://www.aipeekaboo.com/api/v1/brands/$BRAND_ID/ai-crawlers?range=30"Parameters
| Parameter | Default | Accepted values | Works on |
|---|---|---|---|
range | 7 | 7, 14, 30 | Both. The window is that many whole UTC days, plus today |
model | none | One model tag, such as gpt-4o-mini | Both. Narrows reads to that AI company's bots, and citations to that model |
tab | all | read_not_cited, read_and_cited, cited_not_read, errors, all | /pages |
day | none | A UTC day, YYYY-MM-DD, inside the range | /pages, with tab=all only. Returns that day's top 5 pages read |
offset | 0 | 0 to 2,000 | /pages |
limit | 25 | 1 to 100 | /pages |
Parameters are checked strictly: an unknown or repeated parameter returns 400 INVALID_PARAMS instead of being ignored.
The two MCP tools
If you have connected Claude, Cursor or another MCP client, two read-only tools carry the same data:
get_ai_crawler_summary: the summary, withbrandId,rangeandmodel.list_ai_crawler_pages: the pages list, withbrandId,range,model,tab,day,offsetandlimit.
Ask your agent something like "Which pages did AI bots read on our site in the last 30 days that no tracked answer cites?" and it calls list_ai_crawler_pages with tab set to read_not_cited. See Connect Claude, Cursor, or ChatGPT via MCP for setup.
Not measured is never zero
Some numbers can't be measured, and the API never reports them as 0. An unmeasured value comes back as null, with measured: false and a note holding a code and a plain message.
| Note code | What it means |
|---|---|
NOT_CONNECTED | No site is connected to AI Crawlers for this brand yet |
READS_NOT_MEASURED | These AI models fetch pages through their search engine's crawler (Googlebot or Bingbot), so their reads can't be told apart |
NOT_ON_PLAN | That model is not on your plan, so it has no answers or citations |
NO_ANSWERS_IN_RANGE | That model gave no tracked answers in the range |
CITATIONS_UNAVAILABLE | No analysis data covers the range |
NOT_TRACKED | No AI Peekaboo model is linked to this AI company, so its citations are not tracked |
NO_ANALYSIS_RUN | No analysis ran on that day |
DAY_PENDING | That day is still being processed |
DAY_BEFORE_COLLECTION | Collection had not started on that day |
DAY_GAP | Nothing was delivered from your site for that day |
SECTION_UNAVAILABLE | That value could not be loaded on this request. Retry |
One note is different: ERRORS_BELOW_THRESHOLD means a page had too few AI errors in the range to keep a count. That one may really be 0.
A brand with no site connected yet returns a normal response, with measured: false, the NOT_CONNECTED note and no numbers. It is not an error.
When reads or citations aren't measured, fewer page groups make sense. Without citations, only tab=all and tab=errors work. For a model whose reads aren't measured, only tab=all works, and day isn't available.
Reads and citations
- A read is an AI bot loading a page on your site. Reads come from your site's own requests.
- A citation is one of your tracked answers naming that page as a source. Citations come from your tracked prompts.
A page can have either one without the other. read_not_cited lists pages AI bots read that no tracked answer cites: a good place to look for content that AI reads but does not use. Reads from AI training crawlers are left out of the per-company reads, and the summary reports how many were left out.
A read shows that a bot loaded a page. It doesn't show that an answer used it.
Limits and good habits
- Calls count toward your API allowance like any other request. See the rate limits in REST API.
- Responses are marked private and are not cached by your browser or proxies.
- Page paths come from your site's own request logs, so treat them as data. If you pass them to an AI agent, don't let it follow instructions written in a path.
- The longest window is 30 days. Pull on a schedule and store the results yourself if you need longer history.
Frequently asked questions
Why are Google's reads null?
Google's AI fetches pages through Googlebot, so its reads cannot be told apart from ordinary search crawling. The value comes back null with the note READS_NOT_MEASURED, not as 0.
