Every agent that reads the web, and whether a request is really it.
In one sentence
This is the identity reference CrawlCheck keeps for the agentic web: every named crawler and fetcher it resolves from a site’s robots.txt and probes for, grouped by what each one is for — answer engines that live-fetch pages to quote them, search indexers, training-data collectors, regional search, social previews and SEO tools — with the operator, the user-agent string, how to verify a request against the IP ranges the operator publishes, and how each agent has actually behaved where it was measured (verified requests, forged claims, robots.txt conduct, request rate, and how many other sites checked it). Sites read it to decide what to serve; agents read it to decide what to trust; both can call the same answers at /api/v1/visitor, /api/v1/conduct, /api/v1/rights-feed and /api/tool/robots with no key.
115
named agents resolved from robots.txt
16
identities sent to your homepage on every scan
46/115
verifiable against a published range
129,796
verified requests measured here, 1,271 forged claims
Why the grouping matters
Three names, three permissions. A single Disallow aimed at the wrong one gives away training data you meant to keep, or removes you from answers you meant to appear in. Google (Google-Extended) and Apple (Applebot-Extended) split the same way.
The identity reference for the agentic web, read by sites deciding what to serve and by agents deciding what to trust: every crawler and fetcher this verification layer recognises — 115 policy identities resolved from robots.txt, of which 15 are represented by requests in the full scan — grouped by what each one is for, with how a request wearing the name is checked against the ranges its operator publishes, and how each agent has actually behaved where it was measured. The same company usually sends three different crawlers for three different purposes, and blocking one does not do what people expect the others to do.
The reference, as calls
Public, no key, nothing counted against a plan. Visitor Resolve and the conduct record are signed and verify offline.
One request
Is this request really the agent it names?
An address and a user-agent in, one of three outcomes out: verified against the operator’s published ranges, spoofed, or unverifiable because the operator publishes none. Never two.
GET /api/v1/visitor?ip=&ua=
Conduct
How has it behaved where it was measured?
Per agent, from verified requests only: whether it fetched a path robots.txt disallows, its busiest minute, how often its name is forged, and how many other sites checked it.
GET /api/v1/conduct
Rights
What may it do with what it reads?
Every site’s declared rights per use — train, ground, summarize, cite, transact — resolved from the signals it publishes, as a feed a crawler operator can read once a day.
GET /api/v1/rights-feed
One site
What does a robots.txt give each agent?
One fetch of the file, then every named agent resolved the way a crawler resolves it: its own group only, longest match, allow wins a tie, at the path you choose.
GET /api/tool/robots?domain=&path=
What each agent actually did
A census of this property, not a sample of the web: every request that named an agent, checked at arrival against the ranges its operator publishes. Conduct is judged from verified requests only. Signed at /api/v1/conduct.
| Agent | Operator | Verified requests | Forged share · claims | robots.txt | Rate | Checked by other sites, 14 d |
|---|---|---|---|---|---|---|
Amazonbot | Amazon | 27,295 | 0.4% · 119 | disallowed paths fetched | peak 34/min | — |
PerplexityBot | Perplexity | 22,875 | 0.4% · 93 | disallowed paths fetched | peak 119/min | 205 · 83 spoofed |
AhrefsBot | Ahrefs | 10,912 | 0.0% · 3 | disallowed paths fetched | peak 64/min | — |
Googlebot | 10,586 | 2.0% · 219 | respected | peak 13/min | 1586 · 444 spoofed | |
Applebot | Apple | 10,499 | 0.8% · 84 | disallowed paths fetched | peak 8/min | 584 · 47 spoofed |
YandexBot | Yandex | 10,323 | 0.2% · 19 | respected | peak 26/min | — |
ClaudeBot | Anthropic | 10,277 | 1.1% · 113 | disallowed paths fetched | peak 61/min | 273 · 97 spoofed |
Bingbot | Microsoft | 8,279 | 0.6% · 50 | disallowed paths fetched | peak 8/min | 869 · 85 spoofed |
GPTBot | OpenAI | 7,335 | 2.2% · 165 | never read robots.txt | peak 120/min | 335 · 311 spoofed |
OAI-SearchBot | OpenAI | 6,794 | 1.5% · 103 | respected | peak 119/min | 905 · 67 spoofed |
ChatGPT-User | OpenAI | 1,525 | 5.5% · 88 | not governed | peak 13/min | 123 · 32 spoofed |
SeznamBot | Seznam | 949 | 0.0% | respected | peak 3/min | — |
Baiduspider | Baidu | 559 | 5.9% · 35 | never read robots.txt | peak 5/min | — |
Google-CWS | 391 | 0.0% | not governed | peak 3/min | — | |
CCBot | Common Crawl | 379 | 0.0% | respected | peak 7/min | — |
Google-InspectionTool | 234 | 2.1% · 5 | respected | peak 7/min | 1 · 1 spoofed | |
Google-Agent | 217 | 0.0% | not governed | peak 17/min | — | |
DuckDuckBot | DuckDuckGo | 147 | 0.0% | never read robots.txt | peak 2/min | — |
Claude-User | Anthropic | 97 | 36.2% · 55 | not governed | peak 3/min | 34 · 34 spoofed |
GoogleOther | 87 | 0.0% | respected | peak 3/min | 1 · 1 spoofed | |
Perplexity-User | Perplexity | 9 | 85.2% · 52 | insufficient data | peak 1/min | 22 · 22 spoofed |
Google-NotebookLM | 7 | 0.0% | insufficient data | peak 4/min | — | |
Google-Read-Aloud | — | 7 | 0.0% | insufficient data | peak 3/min | — |
Yeti | Naver | 6 | 0.0% | insufficient data | peak 1/min | — |
AdsBot-Google | 4 | 0.0% | insufficient data | peak 2/min | — | |
Google-Site-Verification | 2 | 0.0% | insufficient data | not yet measured | — | |
Google-Safety | — | 1 | 0.0% | insufficient data | peak 1/min | — |
Counted, never judged: Meta-ExternalAgent 67,933 · SemrushBot 22,178 · DataForSeoBot 13,651 · Bytespider 9,964 · YouBot 2,058 · cohere-ai 51 · and 7 more — their operators publish no address ranges, so none of these requests can be told from an impersonator.
This page is the reference. The measurement is separate: a scan sends 19 request profiles to your homepage — GPTBot, ClaudeBot, OAI-SearchBot, Claude-SearchBot, PerplexityBot, ChatGPT-User, Claude-User, Perplexity-User, Googlebot, Googlebot Smartphone, Bingbot, Applebot, Amazonbot, Bytespider, Meta-ExternalAgent, CCBot, plus an unnamed client and two mobile-browser controls; the other named agents below are resolved from your robots.txt, not sent — and records what each one was actually served. A difference between two of them is your edge deciding what each one gets. It also resolves every named agent in your own robots.txt into what it is permitted to do, which is how a policy someone wrote two years ago turns out to say something they did not intend.
Every named crawler, its operator, its feed
Operator, purpose, and whether that operator publishes the IP ranges that make a claimed identity checkable. A crawler with no published feed is unverifiable here — never counted as forged.
- Crawler
GPTBot- Operator
- OpenAI
- What it is for
- Training and index crawl for ChatGPT
- Published IP ranges
- openai.com/gptbot.json
- Crawler
OAI-SearchBot- Operator
- OpenAI
- What it is for
- Search index behind ChatGPT answers
- Published IP ranges
- openai.com/searchbot.json
- Crawler
ChatGPT-User- Operator
- OpenAI
- What it is for
- Fetches a page because a user asked for it in a chat
- Published IP ranges
- openai.com/chatgpt-user.json
- Crawler
ClaudeBot- Operator
- Anthropic
- What it is for
- Index and training crawl
- Published IP ranges
- claude.com/crawling/bots.json
- Crawler
Claude-User- Operator
- Anthropic
- What it is for
- Fetches a page on a user's request
- Published IP ranges
- claude.com/crawling/bots.json
- Crawler
Claude-SearchBot- Operator
- Anthropic
- What it is for
- Search retrieval
- Published IP ranges
- claude.com/crawling/bots.json
- Crawler
PerplexityBot- Operator
- Perplexity
- What it is for
- Index crawl
- Published IP ranges
- www.perplexity.ai/perplexitybot.json
- Crawler
Perplexity-User- Operator
- Perplexity
- What it is for
- User-triggered fetch
- Published IP ranges
- www.perplexity.ai/perplexity-user.json
- Crawler
Googlebot- Operator
- What it is for
- Search index crawl
- Published IP ranges
- developers.google.com/static/crawling/ipranges/common-crawlers.json
- Crawler
Google-Extended- Operator
- What it is for
- Training permission token, not a separate crawler
- Published IP ranges
- robots.txt control token only — it never appears in a request, so there is no request to verify
- Crawler
Bingbot- Operator
- Microsoft
- What it is for
- Search index crawl
- Published IP ranges
- www.bing.com/toolbox/bingbot.json
- Crawler
Applebot- Operator
- Apple
- What it is for
- Search and Siri index crawl
- Published IP ranges
- search.developer.apple.com/applebot.json
- Crawler
Applebot-Extended- Operator
- Apple
- What it is for
- Training permission token, not a separate crawler
- Published IP ranges
- search.developer.apple.com/applebot.json
- Crawler
Amazonbot- Operator
- Amazon
- What it is for
- Alexa and shopping index crawl
- Published IP ranges
- developer.amazon.com/amazonbot/ip-addresses/
- Crawler
Meta-ExternalAgent- Operator
- Meta
- What it is for
- Training and preview fetch
- Published IP ranges
- no JSON feed — Meta publishes its crawler ranges as ASN AS32934 (whois -h whois.radb.net -- '-i origin AS32934')
- Crawler
Bytespider- Operator
- ByteDance
- What it is for
- Training crawl
- Published IP ranges
- none published — claims from this identity are unverifiable
- Crawler
CCBot- Operator
- Common Crawl
- What it is for
- Open crawl corpus many models train on
- Published IP ranges
- index.commoncrawl.org/ccbot.json
- Crawler
Amzn-SearchBot- Operator
- Amazon
- What it is for
- Amazon search eligibility (Alexa and shopping search); not used for generative-AI training
- Published IP ranges
- developer.amazon.com/amazonbot/searchbot-ip-addresses/
- Crawler
Amzn-User- Operator
- Amazon
- What it is for
- Live fetch for a user action such as an Alexa question
- Published IP ranges
- developer.amazon.com/amazonbot/live-ip-addresses/
- Crawler
MistralAI-Index- Operator
- Mistral
- What it is for
- Index crawl for Mistral search and Vibe answers; not used for training
- Published IP ranges
- mistral.ai/mistralai-index-ips.json
- Crawler
MistralAI-User- Operator
- Mistral
- What it is for
- Live fetch at a user’s request in Le Chat
- Published IP ranges
- mistral.ai/mistralai-user-ips.json
- Crawler
MistralAI-Training- Operator
- Mistral
- What it is for
- Training crawl only; not used for index or live answers
- Published IP ranges
- no published ranges — a request wearing this name cannot be checked
- Crawler
OAI-AdsBot- Operator
- OpenAI
- What it is for
- Validates pages submitted as ChatGPT ads; visits only submitted pages
- Published IP ranges
- openai.com/adsbot.json
- Crawler
Google-Agent- Operator
- What it is for
- User-triggered agent that navigates and acts on the web from Google infrastructure
- Published IP ranges
- developers.google.com/static/crawling/ipranges/user-triggered-agents.json
- Crawler
Google-GeminiNotebook- Operator
- What it is for
- Fetches URLs a Gemini Notebook user supplied (replaces Google-NotebookLM)
- Published IP ranges
- developers.google.com/static/crawling/ipranges/user-triggered-fetchers-google.json
- Crawler
GoogleOther-Image- Operator
- What it is for
- Google common crawler for public image URLs, governed by the GoogleOther family
- Published IP ranges
- developers.google.com/static/crawling/ipranges/common-crawlers.json
- Crawler
GoogleOther-Video- Operator
- What it is for
- Google common crawler for public video URLs, governed by the GoogleOther family
- Published IP ranges
- developers.google.com/static/crawling/ipranges/common-crawlers.json
- Crawler
KlaviyoAIBot- Operator
- Klaviyo
- What it is for
- Retrieves and indexes public sources connected to Klaviyo Customer Agent
- Published IP ranges
- Web Bot Auth; validate signed requests against Klaviyo’s public key directory
- Crawler
ExaSearchBot- Operator
- Exa
- What it is for
- Index crawl for Exa’s AI-oriented search and retrieval; honours robots.txt
- Published IP ranges
- Web Bot Auth — every request is cryptographically signed; directory at crawler.exa.ai/.well-known/http-message-signatures-directory
Every agent CrawlCheck checks
Named agents per purpose, counted from this page’s own tables — 115 in total
Six groups, and the grouping is the point: an agent that trains a model, one that builds a search index and one that fetches your page at the moment a person asks a question are three different things with three different consequences. The third column is the one to read — it says whether a request wearing that name can be checked at all.
Answer engines
These decide whether a chatbot can reach you, read you and quote you. Refusing one of these is the only kind of block that costs you answers.
| User-agent | What it is | Identity | How to verify it |
|---|---|---|---|
Meta-ExternalFetcher | Meta AI live fetch | user-triggered fetch · unverifiable | not published — a request wearing this name cannot be checked |
MistralAI-User | Le Chat live fetch | user-triggered fetch | mistral.ai/mistralai-user-ips.json |
DuckAssistBot | DuckDuckGo DuckAssist | answer-engine crawler | published IP ranges |
YouBot | You.com index | answer-engine crawler · unverifiable | not published — a request wearing this name cannot be checked |
OAI-SearchBot | ChatGPT search index | answer-engine crawler | openai.com/searchbot.json |
ChatGPT-User | ChatGPT live fetch | user-triggered fetch | openai.com/chatgpt-user.json |
Claude-SearchBot | Claude search index | answer-engine crawler | published IP ranges |
Claude-User | Claude live fetch | user-triggered fetch | published IP ranges |
PerplexityBot | Perplexity index | answer-engine crawler | published IP ranges |
Perplexity-User | Perplexity live fetch | user-triggered fetch | published IP ranges |
Gemini-Deep-Research | Gemini research agent | user-triggered fetch · unverifiable | not published — a request wearing this name cannot be checked |
PhindBot | Phind | answer-engine crawler · unverifiable | not published — a request wearing this name cannot be checked |
Kagibot | Kagi | answer-engine crawler · unverifiable | not published — a request wearing this name cannot be checked |
Copilot-User | Microsoft Copilot fetch | user-triggered fetch · unverifiable | not published — a request wearing this name cannot be checked |
Amzn-User | Amazon live fetch for Alexa questions | user-triggered fetch | developer.amazon.com/amazonbot/live-ip-addresses |
Google-Agent | Google user-triggered agent, acts on the web | user-triggered fetch | user-triggered-agents.json, plus Web Bot Auth on part of its traffic |
Google-GeminiNotebook | Gemini Notebook user-supplied URL fetch | user-triggered fetch | user-triggered-fetchers-google.json (Google-owned user-triggered fetchers) |
Search indexes
Classic crawling, and the source most AI answer surfaces still draw on.
| User-agent | What it is | Identity | How to verify it |
|---|---|---|---|
Googlebot | Google Search / AI Overviews | search index crawler | reverse DNS to googlebot.com |
bingbot | Bing / Copilot | search index crawler | reverse DNS to search.msn.com |
Applebot | Apple / Siri | search index crawler | reverse DNS to applebot.apple.com |
Amazonbot | Amazon | search index crawler | developer.amazon.com/amazonbot/ip-addresses |
Googlebot-Image | Google image crawler | search index crawler | Google common-crawler ranges (shared feed) + reverse DNS |
Googlebot-News | Google News | search index crawler | Google common-crawler ranges (shared feed) + reverse DNS to googlebot.com or google.com |
Googlebot-Video | Google video crawler | search index crawler | Google common-crawler ranges (shared feed) + reverse DNS |
Storebot-Google | Google Shopping | search index crawler | Google special-crawler ranges (shared feed) + reverse DNS |
Mediapartners-Google | Google AdSense | search index crawler | Google special-crawler ranges (shared feed) + reverse DNS to google.com |
APIs-Google | Google push delivery | search index crawler | Google special-crawler ranges (shared feed) + reverse DNS to google.com |
BingPreview | Bing page preview | search index crawler | reverse DNS to search.msn.com, then forward DNS back to the same address |
msnbot | Microsoft legacy crawler | search index crawler | reverse DNS to search.msn.com, then forward DNS back to the same address |
Slurp | Yahoo Slurp | search index crawler | reverse DNS to crawl.yahoo.net, then forward DNS back to the same address |
Yandex | Yandex (umbrella token) | search index crawler | reverse DNS to yandex.ru, yandex.net or yandex.com, then forward DNS back to the same address |
coccocbot-web | Coc Coc | search index crawler · unverifiable | not published — a request wearing this name cannot be checked |
DuckDuckBot | DuckDuckGo | search index crawler | published IP list at duckduckgo.com/duckduckgo-help-pages/results/duckduckbot |
YandexBot | Yandex | search index crawler | reverse DNS to yandex.ru, yandex.net or yandex.com, then forward DNS back to the same address |
Baiduspider | Baidu | search index crawler | reverse DNS to baidu.com or baidu.jp, then forward DNS back to the same address |
Seznambot | Seznam | search index crawler | reverse DNS to seznam.cz, then forward DNS back to the same address |
Neevabot | Neeva | search index crawler · unverifiable | not published — a request wearing this name cannot be checked |
PetalBot | Huawei Petal | search index crawler | reverse DNS to petalsearch.com, then forward DNS back to the same address |
Amzn-SearchBot | Amazon search eligibility, separate from Amazonbot | search index crawler | developer.amazon.com/amazonbot/searchbot-ip-addresses |
MistralAI-Index | Mistral search index for Vibe | search index crawler | mistral.ai/mistralai-index-ips.json |
ExaSearchBot | Exa AI search index, Web Bot Auth signed | search index crawler | Web Bot Auth — signed requests, directory at crawler.exa.ai |
Training crawlers
They collect pages to train models. Refusing them is a policy choice with no effect on whether you appear in answers — we report it and never score it.
| User-agent | What it is | Identity | How to verify it |
|---|---|---|---|
cohere-ai | Cohere | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
Diffbot | Diffbot knowledge graph | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
Timpibot | Timpi index | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
Google-CloudVertexBot | Vertex AI grounding | training crawler | Google special-crawler ranges (shared feed) + reverse DNS to google.com |
GPTBot | OpenAI training + index | training crawler | openai.com/gptbot.json |
ClaudeBot | Anthropic training | training crawler | published IP ranges |
Google-Extended | Gemini training and grounding | robots.txt control token (never sent) · unverifiable | control token only — never appears in a request |
Applebot-Extended | Apple training | robots.txt control token (never sent) · unverifiable | reverse DNS to applebot.apple.com |
CCBot | Common Crawl | training crawler | index.commoncrawl.org/ccbot.json, and reverse DNS for IPv4 |
Bytespider | ByteDance | training crawler · unverifiable | no published ranges |
meta-externalagent | Meta AI | training crawler | published IP ranges |
Magpie-crawler | Magpie AI | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
img2dataset | img2dataset image corpus | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
AwarioRssBot | Awario RSS | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
AwarioSmartBot | Awario smart | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
TurnitinBot | Turnitin | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
archive.org_bot | Internet Archive | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
ia_archiver | Internet Archive (legacy) | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
meta-webindexer | Meta web index | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
omgili | Webz.io omgili | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
cohere-training-data-crawler | Cohere training corpus | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
PanguBot | Huawei PanGu | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
Ai2Bot-Dolma | Allen Institute Dolma | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
FriendlyCrawler | FriendlyCrawler ML | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
VelenPublicWebCrawler | Velen | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
MyCentralAIScraperBot | MyCentral AI | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
DeepSeekBot | DeepSeek | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
ICC-Crawler | NICT ICC | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
GoogleOther | Google non-search fetch | training crawler | Google common-crawler ranges (shared feed) + reverse DNS to googlebot.com or google.com |
anthropic-ai | Anthropic legacy agent | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
Claude-Web | Anthropic legacy agent | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
FacebookBot | Meta legacy | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
Omgilibot | Webz.io | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
ImagesiftBot | Imagesift | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
AI2Bot | Allen Institute | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
Scrapy | Generic scraper framework | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
SemrushBot-OCOB | Semrush AI corpus | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
Applebot-Extended-Ads | Apple ads corpus | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
TikTokSpider | TikTok | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
QuillBot | QuillBot | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
Webzio-Extended | Webz.io extended | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
ProRataInc | ProRata | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
AwarioBot | Awario | training crawler · unverifiable | not published — a request wearing this name cannot be checked |
MistralAI-Training | Mistral training crawl | training crawler · unverifiable | no published ranges |
GoogleOther-Image | Google common crawler, public image URLs | training crawler | Google common-crawler ranges (shared feed) + reverse DNS |
GoogleOther-Video | Google common crawler, public video URLs | training crawler | Google common-crawler ranges (shared feed) + reverse DNS |
Regional search engines
Worth allowing if you serve those markets, harmless otherwise. Never scored.
| User-agent | What it is | Identity | How to verify it |
|---|---|---|---|
Yeti | Naver | search index crawler · unverifiable | not published — a request wearing this name cannot be checked |
YoudaoBot | Youdao | search index crawler · unverifiable | not published — a request wearing this name cannot be checked |
Exabot | Exalead | search index crawler · unverifiable | not published — a request wearing this name cannot be checked |
Sogou web spider | Sogou | search index crawler · unverifiable | not published — a request wearing this name cannot be checked |
YisouSpider | Shenma mobile search | search index crawler · unverifiable | not published — a request wearing this name cannot be checked |
360Spider | 360 Search | search index crawler · unverifiable | not published — a request wearing this name cannot be checked |
Sosospider | Soso | search index crawler · unverifiable | not published — a request wearing this name cannot be checked |
Social link previews
They render the card when someone shares your URL. Never scored.
| User-agent | What it is | Identity | How to verify it |
|---|---|---|---|
Facebot | Meta link crawler | link-preview fetcher · unverifiable | not published — a request wearing this name cannot be checked |
Twitterbot | X link preview | link-preview fetcher · unverifiable | not published — a request wearing this name cannot be checked |
LinkedInBot | LinkedIn link preview | link-preview fetcher · unverifiable | not published — a request wearing this name cannot be checked |
facebookexternalhit | Facebook link preview | link-preview fetcher · unverifiable | not published — a request wearing this name cannot be checked |
Pinterestbot | link-preview fetcher | reverse DNS to pinterest.com, then forward DNS back to the same address | |
Slackbot-LinkExpanding | Slack unfurl | link-preview fetcher · unverifiable | not published — a request wearing this name cannot be checked |
SEO and research crawlers
Third-party tools. Blocking them affects nobody’s answers, including yours. Never scored.
| User-agent | What it is | Identity | How to verify it |
|---|---|---|---|
KlaviyoAIBot | Klaviyo Customer Agent knowledge-source crawler | tool or developer fetch | Web Bot Auth signatures verified against Klaviyo’s public key directory |
AhrefsBot | Ahrefs link index | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
SemrushBot | Semrush crawler | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
MJ12bot | Majestic link index | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
DotBot | Moz link index | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
rogerbot | Moz site crawler | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
DataForSeoBot | DataForSEO | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
BLEXBot | WebMeUp link index | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
CloudflareBrowserRenderingCrawler | Cloudflare Browser Run /crawl | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
Cloudflare-AutoRAG | Cloudflare AutoRAG | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
Peer39_Crawler | Peer39 ad context | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
AdsBot-Google | Google Ads quality | tool or developer fetch | Google special-crawler ranges (shared feed) + reverse DNS to google.com |
AmazonAdBot | Amazon Ads | tool or developer fetch · unverifiable | not published — a request wearing this name cannot be checked |
AdIdxBot | Microsoft Ads | tool or developer fetch | reverse DNS to search.msn.com, then forward DNS back to the same address |
OAI-AdsBot | OpenAI ChatGPT ads page validation | tool or developer fetch | openai.com/adsbot.json |
Watchlist — 10 names
A name reaches the tables above only with a first-party operator page, an observed request, or a verifiable directory record. These have been seen in community blocklists or product notes and fail that gate today. They are not resolved from robots.txt and not sent to any site; each graduates on its own evidence, never as a batch.
| Candidate | Operator | Likely role | What would admit it |
|---|---|---|---|
kagi-fetcher | Kagi | user-triggered fetch | Confirm on Kagi’s own documentation, separately from the listed Kagibot |
iaskspider | iAsk | search index | Operator documentation or an observed full user-agent; only third-party directories name it today |
QwenBot | Alibaba / Qwen | AI crawler | First-party purpose and control documentation |
ERNIEBot | Baidu | AI crawler | First-party purpose and verification documentation |
DoubaoBot | ByteDance / Doubao | AI crawler | First-party documentation, and a stated distinction from Bytespider |
Bravebot | Brave Search | search index | Brave’s crawler page exists but does not name the token in readable form; needs the token confirmed first-party or observed in logs |
LinerBot | LINER | answer engine | getliner.com/linerbot returned 410 on 2026-09-16; needs a live first-party page |
FirecrawlAgent | Firecrawl | developer-operated fetch client | A decision on whether developer-run fetch clients belong beside operator-run crawlers |
Claude-Code | Anthropic (developer agent) | developer-agent fetch | A distinct developer-agents category; not equivalent to Anthropic’s centrally run search crawler |
Google-Gemini-CLI | Google (developer agent) | developer-agent fetch | A stable server-side identity and verification method from Google; the CLI is a local open-source agent |
What the tables cannot tell you
Blocking GPTBot does not remove you from ChatGPT
Blocking GPTBot does not remove you from ChatGPT. GPTBot collects training data. OAI-SearchBot builds the index ChatGPT search reads, and ChatGPT-User fetches your page live when someone asks about you. Those are three separate permissions, and a single Disallow aimed at the wrong one either gives away training data you meant to keep or removes you from answers you meant to appear in.
The same split applies to Google (Google-Extended controls Gemini training and grounding only — it has no effect on Search or AI Overviews) and to Apple (Applebot-Extended is training only).
The user-agent string is a claim, not a fact
Anyone can send a request calling itself GPTBot. Verification means matching the request against the address ranges the operator publishes — OpenAI, Anthropic and Perplexity all publish theirs; Common Crawl and ByteDance do not.
An access log records the string. It does not record whether the string was earned. That is the difference between GPTBot visited you and something called itself GPTBot, and on our own sites the same name has arrived both ways in a single day.
Being allowed is not the same as being served
A permission in robots.txt is a request, not a delivery. Your edge, your CDN or a bot-defence rule can refuse a named crawler regardless of what your file says — and it usually does so silently, because nothing in your analytics reports a crawler that never arrived.
We have measured sites returning 502 to GPTBot and ClaudeBot while serving Googlebot normally, and a robots.txt answering HTTP 200 with a verification page that no crawler could parse. Neither shows up in a rank tracker, a validator or an uptime check.
How to check your own site
Nothing installed; one request from outside your own session.
curl -sI -A "GPTBot/1.2" https://yoursite.com/robots.txt
Look at the status and the content type. A 200 that returns text/html means something is answering in place of your file.
For the full comparison — every agent above, what each one received, and how much of your page was readable text — run a free scan or read a real report first.
Which AI crawlers actually visit a small business site →The file that returned 200 and could not be read →The dataset →