Bot IP lists: whose crawler it is and how to prove it

What the search, AI, preview and SEO bots in your logs actually do — where each operator publishes the addresses its crawler uses, how to verify one yourself, and a ready list of verified ranges to download.

Updated 2026-08-21

A user agent is a claim, not an identity

Every request that reaches a web server carries a line of text saying what sent it. For a browser it says Chrome or Safari; for a crawler it says Googlebot or GPTBot. That line is written by whoever makes the request, and nothing on the internet checks it. Copying it takes one keystroke.

Microsoft states the consequence plainly in its own documentation: a bot using exactly the same user agent as Bingbot does not thereby become Bingbot. So the string is useful for reading logs and useless for making decisions. Anything that grants access, skips a rate limit, or exempts a request from a rule has to be based on something the sender cannot choose — and the only thing a sender cannot choose is the address the packets actually come from.

That is the entire subject of this page: turning a name into an address you can check.

Five kinds of bot, and they are not interchangeable

Server logs mix them all together, which is why "bot traffic" as a single number tells you almost nothing. They differ in what they take and what they give back:

KindWhat it doesWhat it gives you
SearchWalks the site to index itReaders, later, from search results
AI — trainingCollects text into a training corpusNothing measurable. No visits, no citation
AI — retrievalBuilds the index an assistant quotes fromCitations, and the traffic that follows them
Link previewFetches one page to draw a card in a chatA link that looks like something instead of a bare URL
SEO / analyticsBuilds a commercial link indexNothing, unless you are a paying customer of that product

The AI row is the one most often collapsed by mistake. A training crawler and a retrieval crawler belong to the same company, arrive from similar addresses, and want completely different things. Blocking training costs you nothing visible. Blocking retrieval removes you from the answers that assistant gives — and that is now a real share of how people find anything.

There is a fourth thing in the logs that is not a bot at all: port scanners and vulnerability tools. They never read robots.txt, they are not crawling, and they belong in a different conversation from the one on this page.

Path one: build the list yourself, from the source

This is the slower path and the one worth understanding, because it does not depend on anyone — including this page — being honest or up to date.

Method one: the published range file

Most large operators publish the addresses their crawlers use, as a JSON file at a fixed URL. The format settled into a common shape: a creationTime and a list of ipv4Prefix and ipv6Prefix entries in CIDR notation. You fetch the file, you check whether the address in your log falls inside one of the prefixes, and you have an answer that cannot be faked.

Three rules make the difference between doing this correctly and doing it badly:

One more caution that costs people hours: an address that is in the file proves the bot is genuine, but an address that is not in the file proves very little. User-triggered fetchers — the ones that run because a person asked an assistant about a specific link — legitimately come from ordinary cloud addresses outside the crawler ranges.

Method two: forward-confirmed reverse DNS

Several major search engines — Yandex, Baidu, Naver, Seznam and others — publish no range file at all, and their documentation says so explicitly: verify us by reverse DNS instead. The check has three steps and all three are required:

  1. Ask what hostname the address claims: dig -x 66.249.66.1 +short
  2. Check that the hostname ends in the operator's domain at a dot boundary.
  3. Resolve that hostname forward — dig crawl-66-249-66-1.googlebot.com +short — and confirm the answer contains the address you started with.

Step three is what makes it "forward-confirmed", and skipping it makes the whole check worthless: anyone who controls the reverse zone for their own addresses can point it at any name they like. Only the round trip proves the operator's own DNS agrees.

Step two hides a trap that is easy to write and hard to see. Testing whether the hostname merely ends with googlebot.com also accepts evilgooglebot.com. The comparison has to be against .googlebot.com with the leading dot, or against the bare domain itself. This is a one-character bug that turns a verification into a rubber stamp.

A missing reverse record is not evidence either way. It means "not confirmed", never "confirmed fake" — plenty of legitimate infrastructure has no reverse DNS at all.

Who publishes what

The addresses below are the operators' own pages. They are printed as plain text on purpose: copy the one you need and open it yourself, so that what you end up trusting is the vendor's file rather than anyone's transcription of it — including ours.

Search engines

They send readers. Blocking one removes you from that search engine, and nothing tells you it happened.

BotWhat it doesHow its owner says to verify it
Googlebot
Google
Googlebot
Indexes pages for Google Search; the same file also covers Googlebot-Image, -News and -Video.Published range file:
https://developers.google.com/static/crawling/ipranges/common-crawlers.json
Reverse DNS ends in googlebot.com
Documentation:
https://developers.google.com/search/docs/crawling-indexing/verifying-googlebot
AdsBot · Mediapartners-Google · Google-InspectionTool
Google
Mediapartners-Google
Special-purpose fetchers: ad quality checks, AdSense content matching, and the URL Inspection tool.Published range file:
https://developers.google.com/static/crawling/ipranges/special-crawlers.json
Reverse DNS ends in google.com
Documentation:
https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers
Google user-triggered fetchers
Google
Google-Site-Verification
Fetches a page because a person asked a Google product to — site verification, feed reading, safety checks.Published range file:
https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers.json
Documentation:
https://developers.google.com/search/docs/crawling-indexing/google-user-triggered-fetchers
Bingbot
Microsoft
bingbot
Indexes pages for Bing, and through Bing for a number of other search products.Published range file:
https://www.bing.com/toolbox/bingbot.json
Reverse DNS ends in search.msn.com
Documentation:
https://www.bing.com/webmasters/help/how-to-verify-bingbot-3905dc26
DuckDuckBot
DuckDuckGo
DuckDuckBot
Crawls for DuckDuckGo; the published file lists individual addresses, not wide ranges.Published range file:
https://duckduckgo.com/duckduckbot.json
Reverse DNS ends in duckduckgo.com
Documentation:
https://duckduckgo.com/duckduckgo-help-pages/results/duckduckbot/
Applebot
Apple
Applebot
Feeds Siri, Spotlight and Safari Suggestions; blocking it removes the site from all three.Published range file:
https://search.developer.apple.com/applebot.json
Reverse DNS ends in applebot.apple.com
Documentation:
https://support.apple.com/en-us/119829
YandexBot
Yandex
YandexBot
Indexes for Yandex Search. No range file exists: the documentation asks for reverse DNS instead.Reverse DNS ends in yandex.ru
Documentation:
https://yandex.com/support/webmaster/robot-workings/check-yandex-robots.html
Baiduspider
Baidu
Baiduspider
The main crawler of the largest Chinese search engine; verified by reverse DNS only.Reverse DNS ends in baidu.com
Documentation:
https://help.baidu.com/question?prod_id=99&class=0&id=3001
Sogou Spider
Sogou
Sogou
Chinese search crawler with a long-standing reputation for crawling harder than its traffic justifies.Reverse DNS ends in crawl.sogou.com
Documentation:
https://www.sogou.com/docs/help/webmasters.htm
SeznamBot
Seznam.cz
SeznamBot
The crawler of the Czech search engine Seznam — meaningful traffic if you have Czech readers.Reverse DNS ends in seznam.cz
Documentation:
https://napoveda.seznam.cz/en/full-text-search/seznambot-crawler/
Yeti (NaverBot)
Naver
Yeti
The dominant search engine in South Korea; reverse DNS is the documented check.Reverse DNS ends in naver.com
Documentation:
https://searchadvisor.naver.com/guide/seo-basic-robots
CocCocBot
Coc Coc
coccocbot
Vietnamese search engine and browser; relevant only if you have Vietnamese readers.Reverse DNS ends in coccoc.com
Documentation:
https://coccoc.com/searchengine
Yahoo! Slurp
Yahoo
Slurp
Much smaller than it once was, but still active; reverse DNS is the only check.Reverse DNS ends in crawl.yahoo.net
Documentation:
https://help.yahoo.com/kb/SLN22600.html
PetalBot
Huawei
PetalBot
Crawler of Huawei Petal Search; a real search engine, but frequently named in complaints about crawl volume.Reverse DNS ends in petalsearch.com
Documentation:
https://webmaster.petalsearch.com/site/petalbot
Mail.RU_Bot
VK
Mail.RU_Bot
Search and link-preview crawler of the Mail.ru group.Reverse DNS ends in mail.ru
Documentation:
https://help.mail.ru/webmaster/indexing/robots

AI crawlers

Three different jobs under one label: collecting training data, building the index an assistant cites, and fetching one page because a person asked.

BotWhat it doesHow its owner says to verify it
Google user-triggered agents
Google
Google-CloudVertexBot
The newest of the five Google range files: agents acting on behalf of a specific user request.Published range file:
https://developers.google.com/static/crawling/ipranges/user-triggered-agents.json
Documentation:
https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers
GPTBot
OpenAI
GPTBot
Collects content for model training. Sends no visitors and produces no citations.Published range file:
https://openai.com/gptbot.json
Documentation:
https://platform.openai.com/docs/bots
OAI-SearchBot
OpenAI
OAI-SearchBot
Builds the index ChatGPT search cites from. This is the one that decides whether you can be cited at all.Published range file:
https://openai.com/searchbot.json
Documentation:
https://platform.openai.com/docs/bots
ChatGPT-User
OpenAI
ChatGPT-User
Fetches one page because a live person asked the assistant about that exact link.Published range file:
https://openai.com/chatgpt-user.json
Documentation:
https://platform.openai.com/docs/bots
OAI-AdsBot
OpenAI
OAI-AdsBot
Checks pages in the context of advertising products.Published range file:
https://openai.com/adsbot.json
Documentation:
https://platform.openai.com/docs/bots
ClaudeBot · Claude-User · Claude-SearchBot
Anthropic
ClaudeBot
One published file covers the training crawler, the user-triggered fetcher and the search crawler.Published range file:
https://claude.com/crawling/bots.json
Documentation:
https://support.claude.com/en/articles/8896518
PerplexityBot
Perplexity
PerplexityBot
Indexing crawler, not a training one — Perplexity does not build foundation models.Published range file:
https://www.perplexity.ai/perplexitybot.json
Documentation:
https://docs.perplexity.ai/guides/bots
Perplexity-User
Perplexity
Perplexity-User
Fetches a page on the spot because a person asked about it.Published range file:
https://www.perplexity.ai/perplexity-user.json
Documentation:
https://docs.perplexity.ai/guides/bots
CCBot
Common Crawl
CCBot
A non-profit archive whose corpus is the raw material for a large share of public model training.Published range file:
https://index.commoncrawl.org/ccbot.json
Documentation:
https://commoncrawl.org/ccbot
Amazonbot
Amazon
Amazonbot
Amazon publishes three separate files; this one is the general crawler.Published range file:
https://developer.amazon.com/amazonbot/ip-addresses/
Documentation:
https://developer.amazon.com/amazonbot
Amzn-SearchBot
Amazon
Amzn-SearchBot
Builds the search index behind Amazon products.Published range file:
https://developer.amazon.com/amazonbot/searchbot-ip-addresses/
Documentation:
https://developer.amazon.com/amazonbot
Amzn-User
Amazon
Amzn-User
A live fetch started by a person inside an Amazon assistant.Published range file:
https://developer.amazon.com/amazonbot/live-ip-addresses/
Documentation:
https://developer.amazon.com/amazonbot
Meta-ExternalAgent · Meta-ExternalFetcher
Meta
meta-externalagent
Meta publishes no range file: the documented check is that the address belongs to its network AS32934.Reverse DNS ends in facebook.com
Documentation:
https://developers.facebook.com/documentation/sharing/webmasters/web-crawlers
Google-Extended
Google
Google-Extended
Not a crawler and has no addresses of its own: a robots.txt token that opts you out of Gemini training without touching Search.No published ranges and no reverse DNS — the user agent is all there is.
Documentation:
https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers
Applebot-Extended
Apple
Applebot-Extended
The same idea as Google-Extended: opts out of Apple Intelligence training while keeping Siri and Spotlight.No published ranges and no reverse DNS — the user agent is all there is.
Documentation:
https://support.apple.com/en-us/119829

Link previews

Not crawls at all. One request, made because a human pasted your link into a chat.

BotWhat it doesHow its owner says to verify it
TelegramBot
Telegram
TelegramBot
Draws the link card when someone sends your URL in a chat. One request, no crawl.Published range file:
https://core.telegram.org/resources/cidr.txt
Documentation:
https://core.telegram.org/bots/faq
facebookexternalhit
Meta
facebookexternalhit
Link previews for Facebook, Instagram and Messenger. Blocking it makes shared links look broken.Reverse DNS ends in facebook.com
Documentation:
https://developers.facebook.com/documentation/sharing/webmasters/web-crawlers
Twitterbot
X
Twitterbot
Renders the card for links posted on X.Reverse DNS ends in twitter.com
Documentation:
https://developer.x.com/en/docs/x-for-websites/cards/guides/troubleshooting-cards
LinkedInBot
LinkedIn
LinkedInBot
Link previews inside LinkedIn posts and messages.Reverse DNS ends in linkedin.com
Documentation:
https://www.linkedin.com/help/linkedin/answer/a522991
Pinterestbot
Pinterest
Pinterestbot
Fetches pages behind saved pins.Reverse DNS ends in pinterest.com
Documentation:
https://help.pinterest.com/en/business/article/pinterest-crawler
Discordbot
Discord
Discordbot
Link previews in Discord. No published ranges and no reverse DNS — user agent is all there is.No published ranges and no reverse DNS — the user agent is all there is.
Documentation:
https://discord.com/developers/docs/reference
Slackbot-LinkExpanding
Slack
Slackbot-LinkExpanding
Unfurls links posted in Slack channels.No published ranges and no reverse DNS — the user agent is all there is.
Documentation:
https://api.slack.com/robots

SEO and analytics

Commercial link indexes. They can be verified like anyone else — the question is not whether they are real, but whether they are worth the bandwidth.

BotWhat it doesHow its owner says to verify it
AhrefsBot
Ahrefs
AhrefsBot
Builds a commercial backlink index. Brings no visitors; the data is sold to whoever buys it, including competitors.Reverse DNS ends in ahrefs.com
Documentation:
https://help.ahrefs.com/en/articles/78658-what-is-the-list-of-your-ip-ranges
SemrushBot
Semrush
SemrushBot
Same purpose as AhrefsBot. No machine-readable list is published; the operator points at its own network number instead.Reverse DNS ends in semrush.com
Documentation:
https://www.semrush.com/bot/
DataForSeoBot
DataForSEO
DataForSeoBot
Collects SEO data resold through an API.No published ranges and no reverse DNS — the user agent is all there is.
Documentation:
https://dataforseo.com/dataforseo-bot

Path two: take the list that is already assembled

The reference above is the honest way to do it and the slow way to do it. If you need the ranges today, here they are: one snapshot, rebuilt daily, containing every range that verification actually confirmed — from the published files above and from forward-confirmed reverse DNS for the operators who publish no files.

Ranges5 165
IPv44 095
IPv61 070
Crawlers20

Snapshot built 2026-08-25T02:15:02Z (UTC). Crawler addresses change; a copy older than a week or two is already wrong at the edges.

All ranges (.txt)With bot names (.csv)Manifest (.json)

BotRangesFile
Applebot
Apple
383
IPv4 383 · IPv6 0
crawlers-applebot.txt
Baiduspider
Baidu
248
IPv4 248 · IPv6 0
crawlers-baidu.txt
Bingbot
Microsoft
1 220
IPv4 1 220 · IPv6 0
crawlers-bingbot.txt
CCBot
Common Crawl
5
IPv4 4 · IPv6 1
crawlers-ccbot.txt
ChatGPT-User
OpenAI
204
IPv4 204 · IPv6 0
crawlers-chatgpt-user.txt
ClaudeBot · Claude-User · Claude-SearchBot
Anthropic
26
IPv4 26 · IPv6 0
crawlers-claudebot.txt
DuckDuckBot
DuckDuckGo
481
IPv4 481 · IPv6 0
crawlers-duckduckbot.txt
Google user-triggered agents
Google
20
IPv4 12 · IPv6 8
crawlers-google-agents.txt
AdsBot · Mediapartners-Google · Google-InspectionTool
Google
270
IPv4 135 · IPv6 135
crawlers-google-special.txt
Google user-triggered fetchers
Google
1 550
IPv4 775 · IPv6 775
crawlers-google-user.txt
Googlebot
Google
638
IPv4 492 · IPv6 146
crawlers-googlebot.txt
GPTBot
OpenAI
21
IPv4 21 · IPv6 0
crawlers-gptbot.txt
OAI-AdsBot
OpenAI
2
IPv4 2 · IPv6 0
crawlers-oai-adsbot.txt
OAI-SearchBot
OpenAI
35
IPv4 35 · IPv6 0
crawlers-oai-searchbot.txt
Perplexity-User
Perplexity
4
IPv4 4 · IPv6 0
crawlers-perplexity-user.txt
PerplexityBot
Perplexity
8
IPv4 8 · IPv6 0
crawlers-perplexitybot.txt
PetalBot
Huawei
2
IPv4 2 · IPv6 0
crawlers-petalbot.txt
Sogou Spider
Sogou
31
IPv4 31 · IPv6 0
crawlers-sogou.txt
TelegramBot
Telegram
14
IPv4 9 · IPv6 5
crawlers-telegram-preview.txt
YandexBot
Yandex
9
IPv4 9 · IPv6 0
crawlers-yandex.txt

Three plain-text formats, because they get used differently. The single .txt is what you feed to a firewall or an ipset. The .csv adds the column the flat file cannot have — whose range each line is — and without it you cannot treat a search crawler differently from a training crawler. The .json is the manifest: counts per crawler and the build timestamp, for scripts that want to check freshness before trusting anything.

What being on this list means: that address really does belong to that crawler. What it does not mean: that you should let it through. Those are two different questions and only the first one has a factual answer. The second depends on what your site is for, and nobody else's list knows that.

What is deliberately missing

Some well-known bots cannot appear in any address list that is honest about its sources:

Listing them anyway, with ranges guessed from observation, would be the single most damaging thing this page could do: an allow-list built on a guess is a hole that looks like diligence.

Bots people usually limit, and why

"Bad bot" flattens three unrelated problems together, and the treatment differs for each.

BotWhy it is usually limitedKind
Bytespider
ByteDance
Collects training data for ByteDance models. Widely reported to ignore robots.txt and to crawl far harder than search engines do.ignores robots.txt
MJ12bot
Majestic
Backlink index for a paid SEO product. Distributed across volunteer machines, so its addresses are all over the place.costs more than it gives
BLEXBot
WebMeUp
Another backlink crawler; appears in most published block lists.costs more than it gives
DotBot
Moz
Feeds the Moz link index. Useful if you pay for Moz; otherwise you are indexing yourself for competitors.costs more than it gives
Barkrowler
Babbar.tech
Link graph crawler; a regular entry in hosting providers own block lists.costs more than it gives
SEOkicks
SEOkicks
Backlink database, mostly of interest in the German-speaking market.costs more than it gives
SerpstatBot
Serpstat
Commercial SEO crawler with the same trade-off as the rest of this group.costs more than it gives
ZoominfoBot
ZoomInfo
Harvests company and contact data for a sales database.costs more than it gives
ia_archiverHistorically Alexa, now mostly impersonated: no verification method exists, so a log line proves nothing. The real Internet Archive agent is archive.org_bot.name without an owner
masscan · zgrab · nuclei · sqlmap · nikto · wpscanNot crawlers at all: port scanners and vulnerability tools. They never read robots.txt, so the only answer is a server rule.not a crawler at all
Googlebot (підроблений)The single most common bot on the web that is not what it says. Copying the user agent costs nothing, which is exactly why the address check below exists.not a crawler at all

For the first group — the ones that behave, but cost more than they return — robots.txt is the right tool, because they read it:

robots.txt — asking the polite ones to leave
User-agent: MJ12bot
Disallow: /

User-agent: BLEXBot
Disallow: /

User-agent: DotBot
Disallow: /

User-agent: Barkrowler
Disallow: /

User-agent: SEOkicks
Disallow: /

User-agent: SerpstatBot
Disallow: /

User-agent: ZoominfoBot
Disallow: /

For the second group, robots.txt is a note left for someone who does not read notes. Enforcement has to happen at the server or the edge. The rule below also repeats the names above, for the case where asking politely produced nothing:

A server rule, for when asking did not work
map $http_user_agent $bad_bot {
    default 0;
    "~*bytespider"  1;
    "~*mj12bot"  1;
    "~*blexbot"  1;
    "~*dotbot"  1;
    "~*barkrowler"  1;
    "~*seokicks"  1;
    "~*serpstatbot"  1;
    "~*zoominfobot"  1;
}

server {
    if ($bad_bot) { return 403; }
}

Neither snippet helps against the last group, and it is worth being clear about why: a rule that matches on the user agent only stops the bots that tell the truth about themselves. Something pretending to be Googlebot will call itself a browser the moment the first rule bites. That is not a gap in the snippet — it is the reason the whole first half of this page exists.

Do not paste that list without reading it. facebookexternalhit appears in many published block lists, and blocking it makes every link to your site look broken in Facebook, Instagram and Messenger. Applebot is another: block it and you leave Siri, Spotlight and Safari Suggestions at the same time. The most expensive block-list entries are the ones copied without knowing what they do.

Three mistakes that cost more than the bots

Allowing a whole hosting network instead of a published range
The crawler and every attacker who rented a virtual machine beside it share that network number. Allowing it launders an impostor into a guest.
Treating "not in the list" as proof of a fake
It is not. Ranges get added; user-triggered fetchers arrive from ordinary cloud addresses by design; your copy of the file may simply be old. In range is proof of genuine. Out of range is only a reason to look closer.
Copying a list from a blog post and calling it verification
Second-hand lists are frozen at the moment someone pasted them, and they go stale without ever saying so. If the address you check against did not come from a file the operator publishes, you have not verified anything — you have agreed with a stranger.

The underlying principle is short enough to keep: a name in a log is something the sender chose, and an address is something they could not. Decide on the second one.

Frequently asked questions

Can I just block by User-Agent?

For bots that tell the truth about themselves, yes — that is exactly what robots.txt and a user-agent rule are for. For anything else, no. The string is written by whoever sends the request and nothing checks it, so a rule based on it stops the polite and misses the rest. Worse, it works in reverse for allow-lists: a rule that grants access to anything calling itself Googlebot grants access to everyone.

How do I verify a crawler by IP address?

Two ways, and which one applies depends on the operator. If they publish a range file, fetch it and check whether the address falls inside one of the listed CIDR prefixes. If they do not — Yandex, Baidu, Naver and Seznam are the usual examples — use forward-confirmed reverse DNS: look up the hostname for the address, check it ends in their domain at a dot boundary, then resolve that hostname forward and confirm the original address comes back.

Why is checking the ASN not good enough?

Because most crawlers run on rented cloud infrastructure. The autonomous system that hosts Bingbot also hosts every virtual machine anyone else rents in the same cloud, and the one that hosts Amazonbot hosts all of EC2. Allowing an ASN therefore allows the crawler and everybody sitting next to it. It is the most tempting shortcut here precisely because the number is already in your log — and it turns an impostor into a trusted guest.

An address is not in the published list. Is it a fake?

Not necessarily, and treating it that way causes real damage. Being in the list proves genuine; being outside it is inconclusive. Ranges get added and your copy may be old, and user-triggered fetchers legitimately arrive from ordinary cloud addresses outside the crawler ranges by design. Out of range is a reason to look closer, not a verdict.

Which bots should I never block?

The ones whose absence you would not notice until it costs you something. Blocking Applebot removes the site from Siri, Spotlight and Safari Suggestions at once. Blocking facebookexternalhit makes every link to your site look broken in Facebook, Instagram and Messenger. Both appear in copied block lists regularly, which is exactly why block lists should not be copied without reading them.

What is the difference between a training crawler and a search crawler?

What they give back. A training crawler collects text into a corpus: no visits, no citations, nothing measurable in return. A retrieval crawler builds the index an assistant quotes from, so it decides whether you can be cited at all — and citations bring readers. They belong to the same companies and arrive from similar addresses, which is why treating "AI bots" as one category makes it impossible to decide anything.

Does robots.txt stop bots that ignore it?

No, and it never claimed to. It is a request, not a mechanism: the file has no enforcement behind it, so it works exactly as well as the crawler chooses to let it. Bytespider is the name most often cited for ignoring it. For those, the only thing that acts is a rule at the server or the edge that answers the request itself.

How often do published crawler IP ranges change?

Often enough that a frozen copy is a bug. The files carry a creation timestamp and are typically regenerated daily; individual addresses come and go continuously, and a single address can belong to one operator this month and an unrelated company next. Refresh on a schedule, keep the previous copy when a fetch fails, and never leave a hand-pasted range in a firewall rule.

Related checks