Como detectar web scraping: logs, consultas de IP e pontos cegos
Como detectar web scraping nos seus logs de acesso: consultas reais de CCBot, AhrefsBot, uma saída do Tor e um servidor em nuvem, uma alegação de Googlebot rastreada e o que os IPs não mostram.

Uma requisição de um scraper é só um GET. Ela tem um código de status, um caminho e um User-Agent, como qualquer outra linha do seu log. O scraping só aparece ao longo de centenas de linhas e em uma rede inteira: um script Python em um servidor de nuvem, um navegador headless controlado por Puppeteer ou Playwright, um rastreador de treinamento de IA, um rastreador de SEO como o AhrefsBot, ou uma API de scraping que vende proxies rotativos por gigabyte.
Passamos sete IPs de classes de scrapers pela API da GeoIPHub em 2026-10-08. Quatro rastreadores verificados (Googlebot, CCBot, ClaudeBot, AhrefsBot) vieram todos de redes de hospedagem e pontuaram allow. Um servidor de nuvem Linode comum pontuou 10, também allow, e uma saída do Tor e um servidor de VPN da Mullvad pontuaram 100, block. O IP informa a rede. O veredito de scraping vem dos seus logs.
A seguir, mostramos como detectar bots de scraping em um log de acesso, rastreamos uma linha de log que diz ser o Googlebot, mostramos onde os dados de IP ficam cegos e associamos o que você encontrar a allow, limitar a taxa, desafiar ou bloquear. Se você quiser ver primeiro os sinais de IP um por um, nosso hub trata da detecção de bots por IP, sinal por sinal; este post os aplica ao scraping.

Como detectar web scraping: taxa, caminho, cliente e rede
Para detectar web scraping, verifique quatro grupos de sinais: com que velocidade um cliente faz pedidos (taxa), o que ele pede e em que ordem (caminho), o que ele diz sobre si mesmo (cliente) e de onde ele se conecta (rede). A OWASP classifica o scraping como uma ameaça automatizada própria, a OAT-011, definida como coletar "conteúdo da aplicação e/ou outros dados para uso em outro lugar" (OWASP Automated Threats). Essa definição trata de intenção, que você não consegue ver. Os quatro grupos são o que você consegue ver.
- Taxa. Requisições por minuto por IP e por rede. Por rede queremos dizer o ASN ou, para um agrupamento mais fino, o /24 no IPv4 e o /64 no IPv6. Scrapers costumam rodar em uma taxa constante o dia inteiro; pessoas chegam em rajadas e dormem.
- Caminho. URLs de listagem e paginação percorridas em ordem, um sitemap lido de cima a baixo, apenas páginas de produtos ou de preços, e nenhuma requisição de CSS, JavaScript ou imagem.
- Cliente. A alegação do User-Agent, a ausência do cabeçalho
Accept-Language, nenhum cookie mantido entre requisições e marcadores de automação. No navegador,navigator.webdriveré true quando o Chrome roda com--headlessou--enable-automation(MDN), embora um scraper determinado consiga remover isso. Na borda, uma impressão digital de TLS (JA3 ou JA4) muitas vezes revela uma biblioteca HTTP por trás de um User-Agent que diz ser o Chrome. - Rede. O que uma consulta de IP retorna: um IP de datacenter (hospedagem), que a API sinaliza como
detection.is_hosting, um rastreador verificado, Tor, uma VPN ou um scanner.
A parte difícil da detecção de web scraping é que todo sinal tem um gêmeo inocente. Uma CDN buscando a sua origem, um monitor de disponibilidade, um escritório atrás de um único endereço NAT e um leitor de RSS parecem estranhos em algum eixo. O caso de scraping se forma a partir de sinais que concordam entre si.
| Sinal | Como um scraper aparece | Sósia inocente |
|---|---|---|
| Taxa por IP ou rede | Requisições constantes a cada 1 a 2 segundos por horas | NAT de escritório, CGNAT, uma CDN ou um serviço de monitoramento |
| Ordem das páginas | page=1, 2, 3 … em sequência, ou o sitemap na ordem do arquivo | Uma pessoa paginando resultados, mas com muito menos páginas |
| Recursos | Só HTML, sem CSS, JS ou imagens | Leitores de feed, prévias de links, navegadores em modo texto |
| Profundidade da sessão | Milhares de páginas em uma sessão | Um rastreamento interno de QA ou a sua própria ferramenta de auditoria de SEO |
| User-Agent | Nome de rastreador vindo de uma rede que o rastreador não usa | Um rastreador real em uma faixa adicionada nos últimos dias |
| Rede | Datacenter, saída do Tor ou de VPN | VPNs corporativas, agentes de compras com IA, ferramentas hospedadas em nuvem |
Como saber se seu site está sendo raspado: leia primeiro os seus logs de acesso
Para saber se seu site está sendo raspado, agrupe os logs de acesso por rede e procure clientes que buscam muitas páginas, em ordem, e nunca carregam os recursos que um navegador carregaria. Os sinais externos costumam chegar primeiro: os textos ou os preços dos seus produtos aparecem em outro site, ou a banda e o custo de servidor sobem nas páginas de listagem enquanto as conversões ficam estáveis. Para verificar de fora, pesquise entre aspas uma frase característica da sua página e observe se os seus preços reaparecem em sites agregadores poucas horas depois de uma mudança. Os logs dizem quem fez isso.
Veja como isso aparece em um log de acesso no formato combined. Estes são valores ilustrativos, não tráfego real. 45.33.32.156 é o host de teste público do Nmap na Linode, e ele não enviou essas requisições; ele representa "um servidor de nuvem" porque não podemos publicar o IP de um visitante real.
# illustrative values, not real traffic
45.33.32.156 - - [08/Oct/2026:03:14:07 +0000] "GET /products?page=34 HTTP/1.1" 200 48211 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:08 +0000] "GET /products?page=35 HTTP/1.1" 200 47960 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:10 +0000] "GET /products?page=36 HTTP/1.1" 200 48377 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:11 +0000] "GET /products?page=37 HTTP/1.1" 200 48102 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:13 +0000] "GET /products?page=38 HTTP/1.1" 200 47815 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:14 +0000] "GET /products?page=39 HTTP/1.1" 200 48290 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Três coisas chamam a atenção. As páginas sobem uma a uma, com 1 a 2 segundos de intervalo, às 3 da manhã. Não há referrer e nem uma única requisição de .css ou .js entre elas. E o cliente diz ser o Googlebot, o que as próximas seções testam.
Você não precisa de uma plataforma de logs para encontrar clientes assim. Estes comandos de uma linha funcionam em um log combined padrão; rode-os primeiro sobre uma hora movimentada:
# Busiest client IPs
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20
# Busiest IPv4 /24 networks (rotating scrapers often stay inside one block)
awk '{split($1,o,"."); print o[1]"."o[2]"."o[3]".0/24"}' access.log | sort | uniq -c | sort -rn | head -20
# Busiest User-Agents
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -20
# Clients with more than 100 page requests and zero asset requests
awk '{ if ($7 ~ /\.(css|js|png|jpe?g|webp|svg|woff2?)(\?|$)/) a[$1]++; else p[$1]++ }
END { for (ip in p) if (!(ip in a) && p[ip] > 100) print p[ip], ip }' access.log | sort -rn
Analise a saída com esta lista:
- Páginas acessadas. Os clientes mais ativos se concentram em listagens, preços, resultados de busca ou no sitemap?
- Taxa por IP, depois por rede. Depois de enriquecer os IPs, some as requisições por ASN; 50 endereços de hospedagem em um ASN percorrendo as mesmas páginas provavelmente são um único agente.
- Profundidade da sessão. Centenas de páginas por sessão, sem uso de carrinho, login ou caixa de busca.
- Ordem. URLs de paginação ou do sitemap buscadas em sequência.
- Recursos. Só HTML, sem CSS, JavaScript, fontes ou imagens.
- Alegações de rastreador. Todo User-Agent de Googlebot, Bingbot, GPTBot ou ClaudeBot entra em uma lista para verificação por IP.
- Marcadores de automação. User-Agents de bibliotecas (
python-requests,curl,Go-http-client) e indícios de navegador headless.
Endereços IP de scrapers: o que consultas reais na GeoIPHub retornam
Os endereços IP de scrapers se dividem em algumas classes de rede, e uma consulta diz qual classe você está vendo, não se a requisição foi de um scraper. Nas nossas consultas na GeoIPHub, rastreadores verificados pontuaram de 0 a 23 (allow); saídas do Tor e de VPN pontuaram 100 (block). Fizemos uma consulta anônima por classe em 2026-10-08, com quatro segundos de intervalo:
curl -s https://api.geoiphub.com/v1/lookup/18.97.14.81
| IP | Classe de bot | Rede (ASN) | Indicadores principais | fraud_score | recommended_action | detection_methods |
|---|---|---|---|---|---|---|
| 18.97.14.81 | Rastreador (categoria: archiver) | Amazon AMAZON-AES (AS14618) | is_hosting: true, crawler.name: CCBot, verified: true | 0 | allow | datacenter_ip, rdns_hosting, verified_crawler |
| 216.73.216.10 | Rastreador (categoria: ai) | Amazon AMAZON-02 (AS16509) | is_hosting: true, crawler.name: ClaudeBot, verified: true | 0 | allow | datacenter_ip, no_ptr_datacenter, verified_crawler |
| 5.39.1.230 | Rastreador (categoria: seo) | OVH (AS16276) | crawler.name: AhrefsBot, verified: true, is_abusive: true | 23 | allow | abusive_listed, datacenter_blocklisted, no_ptr_datacenter, verified_crawler |
| 192.178.4.40 | Rastreador (categoria: search_engine) | Google (AS15169) | crawler.name: Googlebot, verified: true | 0 | allow | datacenter_ip, no_ptr_datacenter, verified_crawler |
| 45.33.32.156 | Servidor de nuvem comum | Akamai Connected Cloud, Linode (AS63949) | is_hosting: true, crawler.name: none | 10 | allow | datacenter_ip |
| 185.220.101.47 | Saída do Tor | Stiftung Erneuerbare Freiheit (AS60729) | is_tor: true, is_spammer: true | 100 | block | tor_exit, datacenter_blocklisted, rdns_tor, known_spammer |
| 185.213.155.73 | VPN comercial | 31173 Services AB (AS39351) | is_vpn: true, vpn_provider: Mullvad, vpn_confidence: 95 | 100 | block | known_vpn_server, wireguard_open, datacenter_with_vpn_proxy, no_ptr_datacenter |
São consultas únicas em um único dia, não um benchmark, e os valores mudam à medida que as faixas mudam. Uma lacuna conhecida: no_ptr_datacenter nas linhas do Googlebot e do AhrefsBot é um problema dos nossos dados, não deles. A API não armazena registro PTR para algumas faixas de rastreadores, embora o DNS reverso resolva (192.178.4.40 resolve para crawl-192-178-4-40.googlebot.com). No IP do ClaudeBot o sinal está correto: ele não tem DNS reverso.
Aqui está a resposta do CCBot, reduzida, mas com valores reais e o aninhamento original:
{
"ip": "18.97.14.81",
"asn": {
"asn": 14618,
"org": "AMAZON-AES - Amazon.com, Inc.",
"asn_type": "hosting"
},
"detection": { "is_hosting": true, "is_vpn": false, "is_tor": false },
"threat": {
"is_crawler": true,
"crawler": {
"verified": true,
"name": "CCBot",
"operator": "CommonCrawl",
"category": "archiver",
"verification_method": "ip_range_list"
}
},
"scoring": {
"fraud_score": 0,
"recommended_action": "allow",
"detection_methods": ["datacenter_ip", "rdns_hosting", "verified_crawler"]
}
}
O próprio rastreador da Common Crawl roda na AWS e, mesmo assim, pontua 0. O IP fica em 18.97.14.80/29, uma faixa que a Common Crawl publica no seu arquivo ccbot.json, e o ajuste de rastreador verificado na nossa pontuação (−28,5) anula o sinal de datacenter. A GeoIPHub verifica dessa forma 19 feeds oficiais de faixas de rastreadores, entre eles os do Google, do Bing, da OpenAI, da Anthropic, da Common Crawl e da Ahrefs. Se você quer que um rastreador cujos dados alimentam modelos de IA, como o CCBot ou o GPTBot, leia suas páginas é uma questão de política. A consulta só resolve quem ele é.
O AhrefsBot foi a surpresa. Ele voltou como verificado (5.39.1.230 fica em 5.39.1.224/27 nas faixas de rastreador publicadas pela Ahrefs), mas também com is_abusive: true e abusive_listed nos métodos, com pontuação 23, ainda allow. Não rastreamos qual lista o sinalizou. A lição vale de qualquer forma: "verificado" diz quem um rastreador é, não se você o quer. Um rastreador de SEO que mapeia o seu site para o relatório de backlinks de um concorrente continua fazendo scraping, só que declarado.
Falsificação de rastreadores em logs de scraping: uma linha, rastreada
Uma requisição que diz Googlebot no User-Agent, mas vem de um servidor de nuvem, é uma alegação não verificada. A GeoIPHub pode dizer que o IP não está em uma faixa do Google, mas a comparação com o User-Agent acontece no seu código, porque a consulta nunca vê os seus cabeçalhos. Pegue a quarta linha do log ilustrativo: 45.33.32.156, GET /products?page=37, User-Agent Googlebot/2.1.
- Consulte o IP. A consulta real retornou o ASN 63949, Akamai Connected Cloud (Linode),
detection.is_hosting: true,threat.crawler.name: "none",verified: false,fraud_score10,allow, com os métodos["datacenter_ip"]. - Compare a alegação. O seu código confere o token do User-Agent com
threat.crawler.verifiedethreat.crawler.name. - Decida. O UA diz Googlebot; o IP não está em nenhuma faixa do Google. Isso o torna "não verificado como Googlebot". Limite a taxa ou desafie. Um desafio (um CAPTCHA ou uma verificação de JavaScript) é a forma de agir sobre a ação
step_upda API. Não o chame de falso: uma nova faixa do Google pode levar até cerca de dois dias para ser verificada nos nossos dados, porque os arquivos de faixas são baixados diariamente e o banco de dados de consulta é reconstruído diariamente. - Confira o contraste. O Googlebot real em
192.178.4.40retornouverified: true,name: "Googlebot",verification_method: "ip_range_list", pontuação 0.
O Google documenta duas formas de fazer você mesmo a mesma verificação: DNS reverso no IP seguido de uma consulta direta do nome de host, ou uma comparação com os arquivos de faixas publicados, como common-crawlers.json (Google Search Central). A comparação em código fica assim:
// Map User-Agent tokens to the crawler names the API returns.
// They don't always match: OpenAI's "ChatGPT-User" comes back as "ChatGPTUser".
const CRAWLER_NAMES = {
"Googlebot": "Googlebot",
"GPTBot": "GPTBot",
"CCBot": "CCBot",
"ClaudeBot": "ClaudeBot",
"AhrefsBot": "AhrefsBot",
"ChatGPT-User": "ChatGPTUser",
};
async function classifyRequest(ip, userAgent) {
const res = await fetch(`https://api.geoiphub.com/v1/lookup/${ip}`, {
headers: { "x-api-key": process.env.GEOIPHUB_API_KEY },
});
const { threat, scoring } = await res.json();
const token = Object.keys(CRAWLER_NAMES).find((t) => userAgent.includes(t));
if (token) {
const ok = threat.crawler.verified && threat.crawler.name === CRAWLER_NAMES[token];
return ok ? "allow_crawler" : "unverified_crawler_claim"; // rate-limit or challenge
}
return scoring.recommended_action; // allow, review, step_up or block
}
Este é o caso em que a pontuação diz allow e o padrão diz scraper. Só pelo IP, esta requisição é 10 e allow, porque um servidor de nuvem é um sinal fraco por si só. O veredito de scraping vem de três coisas que a pontuação não vê: a divergência do UA, a taxa constante e o percurso página por página. Para o procedimento completo do Google, veja como verificar o Googlebot por DNS reverso e pelos arquivos de faixas do Google; para GPTBot, ClaudeBot e agentes assinados, veja como verificar rastreadores de IA por IP, DNS reverso e Web Bot Auth.
O que os dados de IP não pegam: proxies residenciais e navegadores reais
Os dados de IP não pegam scrapers que passam por proxies residenciais ou móveis, e a GeoIPHub não detecta proxies residenciais; o campo is_residential_proxy é uma inferência grosseira baseada no ASN, então trate-o como ausência de sinal. Uma rede de proxies residenciais envia cada requisição pela conexão doméstica de alguém. Na camada de IP, a requisição parece vir dessa casa: um provedor de internet residencial, uma cidade real, nenhum indicador de hospedagem, uma pontuação limpa.
A rotação piora as coisas. Um pool pode dar a cada requisição um novo IP residencial, então os contadores por IP nunca sobem. Proxies móveis compartilham IPs de operadora com celulares reais, e um scraper em IPv6 pode percorrer um /64 inteiro sem tocar em uma rede nova.
Navegadores reais são o segundo ponto cego. Um script Playwright controlando o Chrome a partir de uma conexão de escritório ou residencial envia o mesmo IP, o mesmo handshake TLS e os mesmos recursos que a pessoa na mesa ao lado. Algumas configurações headless se denunciam; as bem ajustadas, não.
O que ainda denuncia esses scrapers é o padrão entre as requisições:
| Configuração do scraper | O que o IP mostra | O que ainda o denuncia |
|---|---|---|
| Proxies residenciais rotativos | Provedor residencial, pontuação limpa | Muitos IPs compartilhando uma mesma ordem de páginas, um mesmo ritmo e uma mesma impressão digital |
| Proxies móveis | IP de operadora compartilhado com celulares reais | Profundidade de sessão e ordem de caminhos que nenhum usuário de celular produz |
| Rotação de IPv6 dentro de um /64 | Um endereço novo por requisição | Contar requisições por /64 em vez de por endereço |
| Navegador headless em uma linha residencial ou de escritório | Rede de acesso comum | Marcadores de automação, impressões digitais de TLS, nenhuma continuidade de cookies |
| Qualquer scraper que segue todos os links | Qualquer rede que ele use | Requisições a um link oculto: um link escondido com CSS que nenhum visitante vê; qualquer coisa que o requisite está seguindo links às cegas |
Se você criar um link oculto, bloqueie o caminho dele no robots.txt, para que os rastreadores que respeitam o arquivo nunca o toquem. Dois posts aprofundam as camadas que ficam ao lado do IP. Leia por que impressão digital de dispositivo e inteligência de IP funcionam melhor juntas, e o que uma consulta pode e não pode mostrar em detecção de fraude com proxies residenciais.
Scraping vs rastreamento vs abuso de API
O rastreamento é declarado e verificável, o scraping leva o seu conteúdo ou os seus dados e muitas vezes não é declarado, e o abuso de API são chamadas automatizadas aos seus endpoints além dos seus termos ou limites. A linha entre eles é comportamento e identidade, não tecnologia: o Googlebot e um scraper de preços podem rodar a mesma biblioteca HTTP na mesma nuvem.
| Tipo de tráfego | O que ele visa | Como se identifica | O que verificar |
|---|---|---|---|
| Rastreamento | Páginas para um índice de busca, um arquivo ou um modelo de IA | Um User-Agent nomeado e faixas de IP publicadas | IP na faixa do operador; respeito ao robots.txt |
| Scraping | Conteúdo ou dados específicos: preços, listagens, artigos | Muitas vezes um UA de navegador ou um nome de rastreador emprestado | Taxa, ordem das páginas, recursos ausentes, UA vs rastreador verificado |
| Abuso de API | Os seus endpoints JSON, muitas vezes por trás do site | Uma chave de API, um token de sessão ou nada | Chamadas por chave e por rede, endpoints fora dos fluxos normais do aplicativo |
Um rastreador verificado ainda pode fazer scraping, como mostra o AhrefsBot, e um scraper ainda pode parecer um rastreador. Por isso a próxima seção começa liberando apenas os verificados.
Como evitar web scraping sem bloquear rastreadores de busca
Para evitar web scraping sem bloquear rastreadores de busca, libere primeiro os rastreadores verificados, depois limite a taxa por rede e desafie clientes que não se comportam como navegadores, e bloqueie apenas o que você confirmou. As faixas de pontuação da GeoIPHub dão o lado do IP: allow até 25, review até 50, step_up até 75 e block acima de 75. A ordem importa. Um bloqueio geral de datacenters aplicado primeiro teria atingido o Googlebot, o CCBot, o ClaudeBot e o AhrefsBot da nossa tabela, já que os quatro vieram de redes de hospedagem.
- Libere rastreadores verificados quando
threat.crawler.verifiedfor true ecrawler.namecorresponder ao token do User-Agent. Depois aplique a sua própria política por rastreador. Para rastreadores de IA, nossa comparação entre GPTBot, OAI-SearchBot e ChatGPT-User mostra como bloquear o treinamento sem sair da busca por IA. - Reaproveite as regras de IP. Faixas de pontuação, tratamento do Tor e limites de taxa por prefixo funcionam igual para scrapers e para qualquer bot; o hub trata deles. Trate um IP de datacenter como uma entrada ponderada, não como um bloqueio, já que hospedagem também abrange agentes de IA, proxies corporativos e as suas próprias ferramentas (veja o que é um endereço IP de datacenter).
- Limite a taxa por ASN nas páginas que os scrapers querem. Um pool que roda por um único provedor de hospedagem fica abaixo de qualquer limite por IP, mas um contador por ASN nas páginas de listagem, busca e preços soma tudo. Dê às grandes nuvens um teto maior, já que muitos clientes sem relação entre si compartilham um ASN.
- Limite a paginação e coloque as listagens completas atrás de um login. Sirva um número fixo de páginas de listagem para visitantes anônimos. Uma barreira de conta transforma cada scraper em contas que você pode contar e encerrar.
- Defina cotas por chave nos endpoints JSON que as suas páginas chamam. Scrapers muitas vezes pulam o HTML e chamam a API por trás dele; então emita chaves ou tokens de sessão e limite as chamadas por chave.
- Adicione uma camada de gestão de bots ou de WAF para os sinais de cliente que os seus logs não guardam, como impressões digitais de TLS e verificações de JavaScript na borda.
- Use regras de comportamento para tráfego residencial, onde o IP não diz nada.
As respostas formam uma escada: liberar, limitar a taxa, desafiar, bloquear. Alguns sites acrescentam um tarpit, que desacelera as respostas a um suspeito de scraping, ou servem conteúdo de isca, como preços alterados, para tráfego que já classificaram. Os dois custam algo se a classificação estiver errada, então use-os apenas em tráfego que você bloquearia de qualquer forma.
| Sinal | Ação padrão |
|---|---|
| threat.crawler.verified com um User-Agent correspondente | Liberar e depois aplicar a sua política por rastreador |
| User-Agent de rastreador, crawler.name é "none" | Limitar a taxa ou desafiar |
| Mesma ordem de páginas vinda de 20+ IPs em um ASN | Limitar a taxa do ASN e depois desafiar |
| Só HTML, 100+ páginas, sem CSS ou JS | Desafiar, não importa o que o IP diga |
| Acesso a um link que nenhuma pessoa consegue ver | Bloquear esse cliente |
| Provedor residencial, pontuação limpa, padrão de scraper | Regras de comportamento e impressões digitais |
Para as linhas que dependem só do IP (Tor, relays, scanners, prefixos IPv6), use o mapa de ações do nosso guia de detecção de bots por IP.
E o robots.txt? Ele pede; não impõe. A RFC 9309, o padrão de exclusão de robôs, diz que suas regras "não são uma forma de autorização de acesso" (RFC 9309). Mantenha-o para os rastreadores que o respeitam e imponha todo o resto no seu servidor. Nosso guia para bloquear rastreadores de IA mostra essa camada de imposição com código para nginx e Express.
Comece pelos logs de ontem. Exporte os 50 clientes mais ativos que não carregaram nenhum recurso, cole cada um na consulta de IP gratuita (30 consultas por minuto sem chave, 1.500 por dia com uma chave gratuita) e separe-os nas classes da tabela de consultas acima. Os que sobrarem, muito ativos e em redes residenciais, são onde as suas regras de comportamento entram em seguida.
Perguntas frequentes
Como bloqueio scrapers de IA como GPTBot ou CCBot?
Comece pelo robots.txt: o GPTBot e o CCBot o respeitam, então uma regra Disallow para os tokens deles detém os rastreadores declarados. O robots.txt é um pedido, não um controle de acesso (a RFC 9309 diz que suas regras não são uma forma de autorização de acesso), então aplique as regras também no seu servidor: verifique cada rastreador pelas faixas de IP que ele publica e trate como não verificado um cliente que usa o nome de fora dessas faixas. A OpenAI opera vários bots com funções diferentes; nosso post GPTBot vs OAI-SearchBot vs ChatGPT-User explica qual bloquear se você quiser continuar na busca do ChatGPT.
Quantas requisições por minuto indicam scraping?
Não existe um número universal. Meça a sua própria linha de base humana em um dia normal, por /24 no IPv4 e por /64 no IPv6, e depois procure redes muito acima dela. A taxa sozinha também sinaliza NAT de escritórios, CGNAT e serviços de monitoramento, então trate uma taxa alta como scraping só quando ela vier junto com páginas buscadas em sequência e nenhuma requisição de recursos.
É possível impedir totalmente o web scraping?
Não. Qualquer coisa que um navegador consiga renderizar, um scraper determinado consegue copiar, inclusive por meio de proxies residenciais e navegadores reais. O objetivo é tornar o scraping lento, caro e visível: verificar rastreadores, limitar a taxa por rede, desafiar clientes que não se comportam como navegadores e colocar dados de alto valor atrás de login ou de chaves de API.
Bloquear IPs de datacenter impede o scraping?
Em parte. Isso detém scrapers que rodam em servidores de nuvem baratos, mas também bloqueia rastreadores verificados, a menos que você os libere antes: nas nossas consultas de 2026-10-08, o CCBot na AWS pontuou 0 (allow) e o Googlebot real pontuou 0 (allow), ambos em redes de hospedagem. Um servidor Linode comum pontuou 10, também allow, então a pontuação sozinha não o bloqueia. Scrapers que alugam proxies residenciais passam totalmente por um bloqueio de datacenter.
Uma consulta de IP pode me dizer que um IP é um scraper?
Não. Uma consulta informa a classe da rede e o risco: um rastreador verificado, um servidor de datacenter, uma saída do Tor ou uma VPN. Se esse IP está fazendo scraping no seu site é algo que vem dos seus logs: a taxa de requisições, a ordem das páginas que ele busca, se carrega recursos e se o User-Agent corresponde ao rastreador que a consulta verifica.
Como sei se um scraper está usando proxies residenciais?
Não dá para saber pelo IP, e a GeoIPHub não detecta proxies residenciais. Procure muitos IPs de consumidores que compartilham um mesmo padrão de sessão: a mesma ordem de páginas, o mesmo intervalo entre requisições, os mesmos recursos ausentes e impressões digitais de TLS ou de dispositivo parecidas. O que denuncia o scraper é o padrão entre os endereços, não um endereço isolado.
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.


