Lista de IPs de rastreadores verificados: monte uma allowlist de bots bons a partir de 19 feeds oficiais
Uma lista de IPs de rastreadores verificados a partir de 19 arquivos oficiais de 10 operadores: datas dos arquivos, contagem de prefixos, código de allowlist e um bot verificado que ainda ficou em review.

Uma regra de firewall que desafia tráfego de redes de hospedagem também pega os rastreadores que você quer. Todos os endereços de rastreadores verificados que consultamos em 29 de outubro de 2026 estão em redes de hospedagem: ClaudeBot na Amazon, DuckDuckGo na Microsoft, AhrefsBot na OVH, Googlebot na rede do próprio Google. Se você afrouxar a regra pelo User-Agent, todo scraper que digitar "Googlebot" no cabeçalho entra.
Os operadores publicam a prova de graça, mas em 19 arquivos em 10 sites diferentes, com datas diferentes e sem cronograma de atualização declarado. Dois dos arquivos são a mesma lista. O tráfego é real. Ao anunciar o Bad Bot Report 2026 da Imperva, a Thales escreveu: "Os bots agora dominam a internet, respondendo por mais de 53% de todo o tráfego web, com 40% classificados como maliciosos."
A seguir estão todos os arquivos com a data que traziam em 29 de outubro de 2026, o que a API de consulta de IP do GeoIPHub retorna para endereços reais deles, um script que monta a allowlist, uma verificação de política que não falha em arquivos compartilhados e os bots que nenhum arquivo cobre.

Bots bons vs bots maliciosos: a diferença é a prova, não o nome
Um bot bom é aquele que você decidiu deixar entrar e cujo IP você consegue provar que pertence ao operador. Um bot malicioso falha em qualquer um dos dois testes, e o tipo mais comum é um scraper usando o User-Agent de um bot bom.
Os bots bons incluem rastreadores de busca, buscas de IA e fetchers acionados por usuários, ferramentas de SEO e arquivadores da web. Os bots maliciosos incluem scrapers, bots de credential stuffing, bots de cliques e bots de spam. Muitos glossários dizem que os bots bons "se identificam". Os bots maliciosos também fazem isso: eles copiam a identidade, e é justamente por isso que scrapers usam nomes de rastreadores.
Então a pergunta útil não é "este é um bot bom?", mas "esta requisição vem do operador que ela nomeia?". Essa segunda pergunta tem uma resposta mecânica, e ela é o núcleo da detecção de bots pelo IP: o operador controla as próprias faixas de IP, e ninguém mais. Se você vai admitir um bot comprovado é, então, uma questão da sua política, e ela pode variar por site.
A lista de IPs de rastreadores verificados: 19 arquivos oficiais de 10 operadores
Ela funciona como uma lista de IPs de bots de buscadores e vai além: os 19 arquivos de faixas que o GeoIPHub carrega vêm de 10 operadores, de buscadores e empresas de IA a um arquivo da web e uma ferramenta de SEO. Aqui está cada um, com a contagem de prefixos e a data escrita dentro do arquivo, baixados em 29 de outubro de 2026 entre 04:41 e 04:42 UTC. Os 19 responderam com HTTP 200 e têm o mesmo formato: um array prefixes com entradas ipv4Prefix ou ipv6Prefix.
| Operador | Bot (arquivo) | URL do arquivo | Prefixos (IPv4 / IPv6) | Data no arquivo | crawler.name na API |
|---|---|---|---|---|---|
| Rastreadores comuns, incl. Googlebot | common-crawlers.json | 170 / 147 | 28 out. 2026 | Googlebot | |
| Rastreadores de casos especiais, incl. AdsBot | special-crawlers.json | 136 / 136 | 28 out. 2026 | GoogleSpecialCrawler | |
| Fetchers acionados por usuários | user-triggered-fetchers.json | 534 / 534 | 28 out. 2026 | GoogleUserTriggeredFetcher | |
| Fetchers acionados por usuários (google.com) | user-triggered-fetchers-google.json | 252 / 252 | 28 out. 2026 | GoogleUserTriggeredFetcherGoogle | |
| Agentes acionados por usuários (Google-Agent) | user-triggered-agents.json | 12 / 8 | 28 out. 2026 | GoogleUserTriggeredAgent | |
| Microsoft | Bingbot | bingbot.json | 28 / 0 | 3 jan. 2024 | Bingbot |
| Apple | Applebot | applebot.json | 24 / 0 | 15 set. 2026 | Applebot |
| DuckDuckGo | DuckDuckBot | duckduckbot.json | 486 / 0 | 1 set. 2026 | DuckAssistBot (veja abaixo) |
| DuckDuckGo | DuckAssistBot | duckassistbot.json | 486 / 0 | 1 set. 2026 | DuckAssistBot |
| OpenAI | GPTBot | gptbot.json | 18 / 0 | 22 set. 2026 | GPTBot |
| OpenAI | ChatGPT-User | chatgpt-user.json | 235 / 0 | 27 out. 2026 | ChatGPTUser |
| OpenAI | OAI-SearchBot | searchbot.json | 39 / 0 | 2 jan. 2026 | OAISearchBot |
| Anthropic | ClaudeBot, Claude-User, Claude-SearchBot | bots.json | 14 / 0 | 20 out. 2026 | ClaudeBot |
| Perplexity | Perplexity-User | perplexity-user.json | 10 / 0 | 28 out. 2026 | PerplexityUser |
| Perplexity | PerplexityBot | perplexitybot.json | 13 / 0 | 28 out. 2026 | PerplexityBot |
| Mistral | MistralAI-User | mistralai-user-ips.json | 4 / 0 | 19 fev. 2025 | MistralAIUser |
| Mistral | MistralAI-Index | mistralai-index-ips.json | 2 / 0 | 19 abr. 2026 | MistralAIIndex |
| Common Crawl | CCBot | ccbot.json | 4 / 1 | 11 ago. 2026 | CCBot |
| Ahrefs | AhrefsBot | crawler-ip-ranges | 81 / 0 | sem data no arquivo | AhrefsBot |
O scanner do GeoIPHub baixa de novo cada arquivo diariamente. Em 27 de outubro de 2026 consultamos um endereço de cada arquivo, e os 19 voltaram verificados; os dois endereços da Perplexity vieram dos arquivos que ela substituiu em 28 de outubro.
São 3.626 prefixos no total, e os cinco arquivos do Google têm 2.181 deles. E são apenas 18 listas distintas: os dois arquivos do DuckDuckGo eram idênticos byte a byte quando os baixamos (mesmo hash MD5). Os dois arquivos da Perplexity mudaram entre 27 e 28 de outubro, de 4 e 8 prefixos para 10 e 13, o que é um bom aviso contra copiar à mão a tabela de quem quer que seja, inclusive esta, para um arquivo de configuração.
Quatro observações. O caminho antigo do Google, developers.google.com/search/apis/ipranges/googlebot.json, agora responde com um redirecionamento 301 para common-crawlers.json, então guias mais antigos que apontam para ele continuam funcionando se o seu código seguir redirecionamentos. O arquivo da Microsoft é de janeiro de 2024. A documentação da Perplexity ainda aponta para URLs em www.perplexity.com, que redirecionam para os arquivos em www.perplexity.ai acima. E www.gstatic.com/ipranges/goog.json cobre todos os endereços do Google, então não é uma lista de rastreadores. Para ver como os cinco arquivos do Google se dividem entre os grupos de rastreadores, consulte nosso guia sobre o Googlebot.
O que uma correspondência retorna: quatro consultas reais
Uma correspondência na API do GeoIPHub retorna threat.crawler.verified: true, o operador, um rótulo do arquivo e verification_method: "ip_range_list". Um endereço fora de todos os arquivos retorna verified: false, o que significa "não verificado", nada mais. Este é o endereço do ClaudeBot, resumido da resposta ao vivo (29 de outubro de 2026, 04:42:21 UTC):
{
"asn": {
"asn": 16509,
"org": "AMAZON-02 - Amazon.com, Inc."
},
"threat": {
"is_crawler": true,
"crawler": {
"verified": true,
"name": "ClaudeBot",
"operator": "Anthropic",
"category": "ai",
"verification_method": "ip_range_list"
}
},
"scoring": {
"fraud_score": 0,
"recommended_action": "allow",
"detection_methods": ["datacenter_ip", "no_ptr_datacenter", "verified_crawler"]
}
}
dig -x 216.73.216.10 não retornou nenhum registro PTR em 29 de outubro de 2026, então o DNS reverso não pode atestar este endereço. Só o arquivo da Anthropic pode. Mais três endereços, consultados entre 04:42:28 e 04:42:44 UTC:
| IP | Origem | verified | operator | name | category | Pontuação, ação |
|---|---|---|---|---|---|---|
| 216.73.216.10 | Arquivo da Anthropic | true | Anthropic | ClaudeBot | ai | 0, allow |
| 107.178.192.1 | Arquivo de fetchers acionados por usuários do Google | true | GoogleUserTriggeredFetcher | fetcher | 0, allow | |
| 104.43.54.127 | Os dois arquivos do DuckDuckGo | true | DuckDuckGo | DuckAssistBot | ai | 0, allow |
| 31.13.64.1 | Rede da Meta, AS32934 | false | Meta | Facebook-Bot | social_preview | 0, allow |
Agora acompanhe uma requisição. Suponha que uma requisição declare DuckDuckBot a partir de 104.43.54.127, um endereço listado como /32 nos dois arquivos do DuckDuckGo. A consulta diz verified: true e operator: "DuckDuckGo", mas name: "DuckAssistBot" e category: "ai". Uma política escrita como "liberar bots de busca, aplicar rate limit a bots de IA" e baseada no nome ou na categoria limitaria o rastreador de busca real do DuckDuckGo. Baseada no bot declarado e no operador dele, ela passa. Esperávamos o nome DuckDuckBot e recebemos DuckAssistBot: o campo de nome nos disse qual arquivo foi carregado por último, não qual bot bateu à porta.
A Meta é a outra armadilha. Reconhecemos a rede da Meta (AS32934) pelo ASN, então is_crawler é true, mas verified é false e verification_method é "none". Trate como não verificado. Nossa documentação lista os campos de rastreador e o que cada um significa.
Um arquivo pode cobrir vários bots, então baseie sua política no operador
Associe o User-Agent declarado a um operador e então exija verified: true e esse mesmo operador. Nunca use crawler.name ou category como chave, porque um arquivo pode representar vários bots:
- DuckDuckGo: dois arquivos, uma lista. Nosso scanner carrega
duckassistbot.jsonem segundo lugar, então a última gravação vence e todo endereço do DuckDuckGo leva o rótulo DuckAssistBot. - Anthropic: um arquivo para ClaudeBot, Claude-User e Claude-SearchBot. A página de ajuda sobre rastreadores da Anthropic diz: "Se um rastreador tem um endereço IP de origem nesta lista, isso indica que o rastreador vem da Anthropic." Então uma correspondência significa verificado como Anthropic; o User-Agent diz qual bot.
- Google: o arquivo de rastreadores comuns cobre vários rastreadores do Google sob um único rótulo, Googlebot.
is_crawler sozinho também não é forte o bastante para uma allowlist, já que ele é true para a correspondência não verificada da Meta. E a API nunca vê os cabeçalhos da sua requisição. Ela recebe um IP, então o lado da alegação na verificação sempre roda no seu código.
Como montar uma allowlist de rastreadores em quatro passos
Monte em quatro passos: associe cada User-Agent que você libera ao seu operador, carregue os arquivos desse operador, verifique o IP contra eles e envie toda alegação que falhar para o rate limiter.
- O mapa de alegações. Liste os tokens de User-Agent que você libera (WAFs mais antigos chamam isso de whitelist) e o operador cujo arquivo deve conter o IP.
- Os arquivos. Monte a sua própria lista consolidada com o script abaixo, ou faça uma consulta por IP novo e guarde o veredito em cache por algumas horas, não semanas, porque as faixas mudam.
- A correspondência. Verifique o IP apenas contra os prefixos do operador declarado.
- O caminho não verificado. Não responda com um 403. Aplique rate limit ao que você não consegue verificar, para que um rastreador real em um prefixo novo fique mais lento em vez de desaparecer.
Por que por operador, e não por arquivo? Porque alguns operadores tornam impossível fixar por arquivo. Os três bots da Anthropic compartilham um arquivo, e os dois bots do DuckDuckGo compartilham uma lista, então uma verificação que exige "o próprio arquivo do Claude-SearchBot" não tem com o que comparar. A correspondência por operador perde um pouco de precisão no Google, na OpenAI, na Perplexity e na Mistral, onde os arquivos são separados, e em troca nunca falha em um arquivo compartilhado.
Duas regras. Compare com os prefixos publicados exatos, nunca com o ASN: nas nossas consultas, o AS8075 da Microsoft transporta Bingbot, GPTBot, ChatGPT-User e DuckDuckGo, então liberá-lo admite todos os clientes do Azure. E nunca libere apenas pelo User-Agent. Para bots sem arquivo, use DNS reverso com confirmação direta quando o operador documentar esse método.
O script de montagem baixa os 19 arquivos, agrupa os prefixos por operador e grava allowlist.json com o horário de download de cada arquivo. Se um arquivo falhar no download, falhar no parsing, vier vazio ou encolher para menos da metade da última cópia boa, ele mantém os prefixos anteriores desse arquivo. O scanner do GeoIPHub faz o mesmo, com uma contagem mínima fixa de prefixos por arquivo.
// build-allowlist.mjs: Node 18+, no dependencies. Run once a day.
import fs from "node:fs";
const FEEDS = {
Google: [
"https://developers.google.com/static/crawling/ipranges/common-crawlers.json",
"https://developers.google.com/static/crawling/ipranges/special-crawlers.json",
"https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers.json",
"https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers-google.json",
"https://developers.google.com/static/crawling/ipranges/user-triggered-agents.json",
],
Microsoft: ["https://www.bing.com/toolbox/bingbot.json"],
Apple: ["https://search.developer.apple.com/applebot.json"],
DuckDuckGo: [
"https://duckduckgo.com/duckduckbot.json",
"https://duckduckgo.com/duckassistbot.json",
],
OpenAI: [
"https://openai.com/gptbot.json",
"https://openai.com/chatgpt-user.json",
"https://openai.com/searchbot.json",
],
Anthropic: ["https://claude.com/crawling/bots.json"],
Perplexity: [
"https://www.perplexity.ai/perplexity-user.json",
"https://www.perplexity.ai/perplexitybot.json",
],
Mistral: [
"https://mistral.ai/mistralai-user-ips.json",
"https://mistral.ai/mistralai-index-ips.json",
],
CommonCrawl: ["https://index.commoncrawl.org/ccbot.json"],
Ahrefs: ["https://api.ahrefs.com/v3/public/crawler-ip-ranges"],
};
const OUT = "allowlist.json";
const previous = fs.existsSync(OUT)
? JSON.parse(fs.readFileSync(OUT, "utf8"))
: { files: {} };
const files = {};
for (const [operator, urls] of Object.entries(FEEDS)) {
for (const url of urls) {
try {
const res = await fetch(url, { signal: AbortSignal.timeout(15000) });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const body = await res.json();
const prefixes = (body.prefixes || [])
.map((p) => p.ipv4Prefix || p.ipv6Prefix)
.filter(Boolean);
if (prefixes.length === 0) throw new Error("no prefixes in file");
const last = previous.files[url];
// A real shrink this large is rare: check it by hand before you trust it.
if (last && prefixes.length < last.prefixes.length / 2) {
throw new Error(`${prefixes.length} prefixes, last good copy had ${last.prefixes.length}`);
}
files[url] = {
operator,
prefixes,
file_date: body.creationTime || null,
fetched_at: new Date().toISOString(),
};
} catch (err) {
// Fail safe: a broken fetch keeps yesterday's prefixes for that file.
if (previous.files[url]) files[url] = previous.files[url];
console.error(`${url}: ${err.message}; ${files[url] ? "kept previous prefixes" : "no previous copy"}`);
}
}
}
fs.writeFileSync(`${OUT}.tmp`, JSON.stringify({ built_at: new Date().toISOString(), files }, null, 1));
fs.renameSync(`${OUT}.tmp`, OUT);
console.log(`${Object.keys(files).length} files written to ${OUT}`);
Agende-o com uma linha de cron, como 20 5 * * * cd /srv/bots && node build-allowlist.mjs. A verificação de política lê esse arquivo ou uma resposta de consulta, e os dois caminhos se baseiam no operador do bot declarado:
// check-claim.mjs: decide whether a bot claim is proven.
import net from "node:net";
// Claimed User-Agent token, and the operator whose file must contain the IP.
// Not exhaustive; add the bots you allow.
const CLAIMS = [
["googlebot", "Google"], ["adsbot-google", "Google"], ["google-agent", "Google"],
["bingbot", "Microsoft"], ["applebot", "Apple"],
["duckduckbot", "DuckDuckGo"], ["duckassistbot", "DuckDuckGo"],
["gptbot", "OpenAI"], ["oai-searchbot", "OpenAI"], ["chatgpt-user", "OpenAI"],
["claudebot", "Anthropic"], ["claude-searchbot", "Anthropic"], ["claude-user", "Anthropic"],
["perplexitybot", "Perplexity"], ["perplexity-user", "Perplexity"],
["mistralai-user", "Mistral"], ["mistralai-index", "Mistral"],
["ccbot", "CommonCrawl"], ["ahrefsbot", "Ahrefs"],
];
function findClaim(userAgent) {
const ua = (userAgent || "").toLowerCase();
return CLAIMS.find(([token]) => ua.includes(token)) || null;
}
// Path 1: your own allowlist.json from build-allowlist.mjs.
export function loadLists(allowlist) {
const lists = {};
for (const file of Object.values(allowlist.files)) {
lists[file.operator] ||= new net.BlockList();
for (const cidr of file.prefixes) {
const [addr, len] = cidr.split("/");
lists[file.operator].addSubnet(addr, Number(len), net.isIPv6(addr) ? "ipv6" : "ipv4");
}
}
return lists;
}
export function checkWithLists(userAgent, ip, lists) {
const claim = findClaim(userAgent);
if (!claim) return { claimed: null, verified: false };
const family = net.isIPv6(ip) ? "ipv6" : "ipv4";
return { claimed: claim[0], verified: lists[claim[1]]?.check(ip, family) === true };
}
// Path 2: one lookup per new IP, using the API's crawler fields.
export async function lookup(ip, apiKey) {
try {
const res = await fetch(`https://api.geoiphub.com/v1/lookup/${ip}`, {
headers: { "x-api-key": apiKey },
signal: AbortSignal.timeout(2000),
});
return res.ok ? await res.json() : null;
} catch {
return null; // a failed lookup proves nothing: treat it as unverified
}
}
export function checkClaim(userAgent, result) {
const claim = findClaim(userAgent);
if (!claim) return { claimed: null, verified: false };
const c = result?.threat?.crawler;
return { claimed: claim[0], verified: c?.verified === true && c?.operator === claim[1] };
}
Rodamos os dois caminhos contra os arquivos e as consultas de 29 de outubro de 2026, além dos casos de falha. O caso do GPTBot usa 45.33.32.156, o host de teste público do Nmap, que nunca enviou uma requisição desse tipo. A verificação é por operador, não por bot: uma alegação de Googlebot vinda de um endereço no arquivo de fetchers do Google também passa como Google.
PASS ClaudeBot UA, 216.73.216.10 verified (name ClaudeBot)
PASS Claude-SearchBot UA, 216.73.216.10 verified as Anthropic (name ClaudeBot)
PASS DuckDuckBot UA, 104.43.54.127 verified (name DuckAssistBot)
PASS AhrefsBot UA, 5.39.1.230 verified
PASS Googlebot UA, 66.249.66.1 verified
PASS GPTBot UA, 45.33.32.156 not verified (no file match)
PASS ChatGPT-User UA, 66.249.66.1 not verified (operator is Google)
PASS facebookexternalhit UA, 31.13.64.1 no claim in the map
PASS Browser UA, 216.73.216.10 no claim
PASS Lookup error, ClaudeBot UA not verified
10/10 passed, lookup path and allowlist path agree
builder, bots.json forced to fail: kept previous prefixes (14)
builder, bingbot.json returns HTML: kept previous prefixes (28)
builder, applebot.json returns []: kept previous prefixes (24)
builder, chatgpt-user.json shrinks to 1: kept previous prefixes (235)
Esse código é o lado da liberação. Para aplicar uma política de bloqueio por bot, veja a configuração de nginx e Express no nosso guia de rastreadores de IA.
Um bot verificado ainda pode ser um bot malicioso? O AhrefsBot diz que sim
Sim. A verificação prova quem opera o endereço, não que o endereço é limpo ou bem-vindo. O 5.39.1.230 do AhrefsBot mostra as duas coisas ao mesmo tempo (29 de outubro de 2026, 04:42:51 UTC):
| Campo | Valor |
|---|---|
threat.crawler.verified | true |
threat.crawler.operator | Ahrefs |
threat.crawler.category | seo |
threat.is_spammer | true |
threat.dnsbl_sources | zen.spamhaus.org |
scoring.fraud_score | 35 |
scoring.recommended_action | review |
scoring.detection_methods | datacenter_blocklisted, no_ptr_datacenter, verified_crawler, known_spammer |
O sinal de rastreador verificado subtrai 28,5 pontos (menos 30 com confiança de 0,95), mas não anula uma inclusão em blocklist; o guia de motivos da pontuação de risco mostra a conta. Guardamos dois valores anteriores para este endereço: 59, step_up em 19 de outubro, quando uma listagem de abuso também foi acionada, e 35, review desde 22 de outubro. Quando investigamos este endereço em 19 de outubro, o registro do RIPE mostrava o /27 registrado em nome da Ahrefs dentro de um bloco da OVH.
A sua allowlist decide se o AhrefsBot entra. A pontuação diz que a faixa dele tem histórico. Muitos sites não têm uso para rastreadores de SEO e muitos têm, então essa decisão é sua.
Bots bons que ignoram o robots.txt por design
"Obedece ao robots.txt" não é um teste de bot bom, porque os próprios operadores dizem que os seus fetchers acionados por usuários podem não segui-lo:
- Google: "Como a busca foi solicitada por um usuário, esses fetchers geralmente ignoram as regras do robots.txt." (fetchers acionados por usuários do Google)
- OpenAI, sobre o ChatGPT-User: "Como essas ações são iniciadas por um usuário, as regras do robots.txt podem não se aplicar." (bots da OpenAI)
- Perplexity, sobre o Perplexity-User: "Como um usuário solicitou a busca, este fetcher geralmente ignora as regras do robots.txt." (rastreadores da Perplexity)
O raciocínio é o mesmo nos três: a busca age em nome de uma pessoa, então bloqueá-la bloqueia a requisição dessa pessoa. Um fetcher verificado que ignora o seu robots.txt está se comportando como documentado, não se comportando mal.
O robots.txt pede; uma allowlist impõe. Se você quer barrar um fetcher acionado por usuários, precisa de uma regra na borda, não de uma linha em um arquivo de texto. Para ver o que cada bot da OpenAI faz e quanto custa bloquear cada um, veja nossa comparação da OpenAI.
Quão atualizada é a lista? Datas dos arquivos, download diário e atraso de dois dias
A lista é tão atualizada quanto a última edição do operador mais o seu download. Na API do GeoIPHub, isso significa um download diário e até cerca de dois dias até uma mudança entrar no ar.
Esta é a mecânica, a partir do código e da configuração do scanner do GeoIPHub, conferidos em 29 de outubro de 2026. A etapa de rastreadores baixa cada arquivo no máximo uma vez por dia. Se um download falhar, ou retornar menos prefixos do que o mínimo desse arquivo, o scanner mantém as últimas faixas boas. Um prefixo que o operador remove deixa de ser verificado após o próximo download bom e a reconstrução diária seguinte. O banco de dados de consulta é então reconstruído diariamente às 00:00 UTC e fica no ar por volta das 04:00 UTC.
A regra prática: guarde um veredito verificado em cache por horas, baixe os arquivos de novo diariamente e espere que um prefixo recém-adicionado falhe na verificação por até cerca de dois dias. Esse é mais um motivo para o caminho não verificado ir para um rate limiter, e não para um bloqueio.
A Perplexity é o único operador nas nossas verificações cuja documentação diz algo sobre a cadência: "Esses endereços são atualizados regularmente e devem ser a fonte da verdade para as suas configurações de WAF." A página de verificação do Google não informa frequência. As datas dos arquivos que baixamos em 29 de outubro de 2026 vão de janeiro de 2024 (Microsoft) a 28 de outubro de 2026 (Google e Perplexity). Uma data estável não é um erro; algumas frotas não mudam.
Uma lacuna do nosso lado: a API não mostra qual arquivo correspondeu nem quando o baixamos. Se você precisa dessa trilha de auditoria, rode o script de montagem e guarde os valores de fetched_at.
Bots sem lista publicada, e o que fazer com eles
Alguns bots que você pode querer não publicam nenhum arquivo que o GeoIPHub carregue, então esta lista não consegue verificá-los:
- OAI-AdsBot: a OpenAI o documenta e publica o adsbot.json, mas nosso scanner ainda não o carrega. Adicione-o ao seu próprio script de montagem se você veicula anúncios no ChatGPT.
- Amazonbot: a Amazon mostra as faixas dele dentro de uma página web, sem arquivo para baixar. Não o carregamos.
- Meta: a página de rastreadores da Meta diz "Adicione à sua allow list as strings de user agent ou os endereços IP (mais seguro) usados pelo rastreador", mas não fornece nenhum arquivo de faixas. Reconhecemos a rede dela apenas pelo ASN, sem verificação.
- Yandex e Baidu: apenas DNS reverso. O guia da Yandex descreve a verificação: o nome do DNS reverso deve terminar em yandex.ru, yandex.net ou yandex.com, e uma consulta direta desse nome deve retornar o mesmo IP.
- Bytespider: não encontramos nenhum arquivo de faixas da ByteDance.
- Monitores de disponibilidade e webhooks de pagamento: muitos publicam as próprias listas. A Stripe publica os IPs de webhook em JSON, documentados na sua página de endereços IP. Use a lista do fornecedor; esses não são rastreadores e não estão nos nossos feeds.
- Bots que assinam requisições: o Web Bot Auth permite que um bot se comprove com uma assinatura criptográfica em vez de um IP, tema do nosso guia de verificação de rastreadores. O diretório de bots verificados da Cloudflare aceita um bot validado pelo Web Bot Auth ou por uma lista de IPs publicada com um User-Agent estável.
O que fazer: use o método de DNS reverso do operador quando existir, a lista do próprio fornecedor para serviços e o rate limiter para todo o resto.
Rode o script de montagem hoje à noite, ou cole um IP dos seus logs na consulta de IP e veja se a linha Crawler mostra "Verified crawler" ou "Unverified crawler". O nome no cabeçalho é uma alegação; o arquivo do operador é a prova.
Perguntas frequentes
O que é uma lista de IPs de rastreadores verificados?
Uma lista montada a partir dos arquivos de faixas de IP que os operadores de bots publicam para os próprios rastreadores. O GeoIPHub carrega 19 desses arquivos de 10 operadores, incluindo Google, Microsoft, Apple, OpenAI e Anthropic; a OpenAI publica um 20º, adsbot.json, que ainda não carregamos. Uma requisição vem de um rastreador verificado quando o User-Agent dela nomeia um bot e o IP está dentro do arquivo desse operador.
Uma consulta de IP vê o User-Agent?
Não. Uma consulta do GeoIPHub recebe apenas o IP. Ela pode dizer que o endereço está no arquivo da Anthropic ou do Google, e o seu próprio código compara esse operador com o bot que o User-Agent declara.
Um bot verificado ainda pode ser um bot malicioso?
Sim. O 5.39.1.230 do AhrefsBot correspondia às faixas publicadas da Ahrefs e também estava listado no Spamhaus ZEN, com pontuação 35, review, na API do GeoIPHub em 29 de outubro de 2026. A verificação diz quem opera o endereço, não se você deve deixá-lo entrar.
Com que frequência as faixas de IP de rastreadores mudam?
Depende do operador, e a maioria não informa. Em 29 de outubro de 2026, as datas dos arquivos iam de janeiro de 2024 (Microsoft) a 28 de outubro de 2026 (Google e Perplexity). O GeoIPHub baixa de novo cada arquivo diariamente, e uma mudança pode levar até cerca de dois dias para chegar à API.
Devo liberar rastreadores pelo ASN?
Não. Muitos rastreadores rodam em nuvens compartilhadas: a rede da Microsoft transporta o Bingbot, o GPTBot e os bots do DuckDuckGo, então liberá-la admite todos os clientes dessa nuvem. Compare com os prefixos exatos do arquivo de cada operador.
Quais bots não podem ser verificados por uma lista de IPs?
Bots cujos operadores não publicam nenhum arquivo, como Yandex e Baidu (que usam DNS reverso), Meta (sem arquivo de faixas; o GeoIPHub reconhece a rede dela pelo ASN, sem verificação) e Bytespider. A Amazon mostra as faixas do Amazonbot apenas dentro de uma página web. Aplique rate limit ao que você não consegue verificar.
A equipe por trás da API do GeoIPHub
Escrito pela equipe do GeoIPHub, as pessoas que constroem a API de inteligência de IP do GeoIPHub e seu scanner. Os rascunhos são preparados com auxílio de IA e editados pela equipe; os exemplos de API são consultas reais à API em produção, salvo quando indicados como ilustrativos.


