Como prospectar em escala sem ser bloqueado: humanização log-normal e circuit breaker
Anti-bot do Google Maps detecta padrões, não bots. Distribuição log-normal nos intervalos, Bézier no mouse, backoff exponencial 30s→30min e como os 4 perfis de velocidade se equilibram.

Por que intervalos fixos entregam a automação?
Resposta direta: porque humanos variam. Uma pessoa real lê um perfil por 4 segundos, o próximo por 12, o outro por 1,5 — a distribuição desses tempos tem cauda à direita (log-normal), não é uniforme nem fixa.
Heurísticas anti-abuse medem exatamente isso: variância dos intervalos, periodicidade das requisições, retilineidade do cursor. Um script com sleep(2) tem variância zero — flag imediata. A humanização correta amostra cada intervalo de uma distribuição log-normal calibrada para o perfil de velocidade escolhido.
Definição citável: humanização log-normal é a amostragem de tempos de espera e deslocamentos a partir de uma distribuição log-normal (implementada com transformação de Box-Muller), reproduzindo a cauda longa natural do comportamento humano em vez de intervalos fixos ou uniformes.
O que mais conta além do tempo: mouse e scroll
Resposta direta: o caminho do cursor e a curva de rolagem. Cursor humano acelera e desacelera com antecipação e, frequentemente, passa do alvo e volta (overshoot); rolagem humana começa rápida e desacelera suavemente.
Implementação de referência: interpolação com curva cúbica Bézier entre origem e destino do mouse (com ponto de controle deslocado para gerar arco natural) e overshoot probabilístico; scroll por requestAnimationFrame com easing easeOutCubic, pedindo ao orquestrador pausas log-normais entre blocos. Bloqueio de carregamento de imagens/fontes pesadas reduz huellas de requisições e acelera a célula sem mudar o padrão de interação.
Como funciona o circuit breaker na prática?
Resposta direta: três gatilhos objetivos — página de CAPTCHA, redirecionamento para /sorry/index e resposta HTTP 429. Ao detectar qualquer um, o motor pausa, aplica backoff exponencial (30s → 2min → 8min → 30min) e desce um nível de velocidade permanente até nova avaliação.
- Detecção: inspecionar URL (path /sorry/index), título da página e status HTTP a cada navegação de célula.
- Reação imediata: parar a fila — nenhum lote é perdido (fila persistida em IndexedDB).
- Backoff: 30s na 1ª ocorrência, 2min na 2ª, 8min na 3ª, 30min na 4ª+.
- Downgrade: uma velocidade abaixo (ex.: Rápido → Moderado) — o degrau é mantido, não reiniciado a cada pausa.
- Retomada: célula atual é reprocessada do início; leads já extraídos não duplicam (dedup por place_id).
- Telemetria: ocorrências ficam visíveis no painel — se o CAPTCHA só aparece no Turbo, o dado fala.
Qual perfil de velocidade escolher?
Resposta direta: comece no Moderado (~700 lugares/h). Suba para Rápido/Turbo apenas se a telemetria de bloqueio estiver zerada por dias consecutivos e o volume exigir.
| Perfil | Intervalo entre ações | Throughput aproximado | Uso recomendado |
|---|---|---|---|
| Furtivo | 2,8–6,5s | ~250 leads/hora | Contas novas, sessões sensíveis, horários de pico |
| Moderado (default) | 1,2–3,0s | ~700 leads/hora | Operação contínua padrão |
| Rápido | 0,5–1,4s | ~1.800 leads/hora | Bases amplas com telemetria limpa |
| Turbo | 0,15–0,5s | ~4.000 leads/hora | Janelas curtas de alta demanda, monitoradas |
Qual é o limite prático de uma operação de alta velocidade?
Resposta direta: o limite prático raramente é o perfil de velocidade — é a cobertura da grade (veja o artigo sobre o teto de 120 resultados). Velocidade alta sem grade só repete amostras truncadas mais depressa.
Perguntas frequentes
Fontes e referências
Este artigo está disponível em português (pt-BR). · Play Google Scraper