Crawl4AI e Firecrawl se tornaram a forma padrão de alimentar dados da web em pipelines de LLM — eles rastreiam, renderizam e devolvem Markdown limpo que seu modelo realmente consegue usar. Aí você os aponta para um alvo real e descobre o que todo scraper acaba aprendendo: a camada de extração nunca foi a parte difícil. A parte difícil é que seu crawler roda a partir de um único IP de datacenter, e a web consegue vê-lo.
Este guia mostra a configuração de proxy funcional para as duas ferramentas — Crawl4AI autoalojado e ambos os modos do Firecrawl — além da estratégia de sessão que impede que trabalhos de ingestão para RAG morram na página 50. Ele estende nosso guia de proxy para agentes de IA e o guia do browser-use para os frameworks de crawling.
O Crawl4AI (open-source, autoalojado) recebe proxies no nível do BrowserConfig — um proxy por instância de crawler:
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
browser_cfg = BrowserConfig(
headless=True,
proxy_config={
"server": "us.jibaoproxy.com:913",
"username": "USERNAME",
"password": "PASSWORD",
},
)
async with AsyncWebCrawler(config=browser_cfg) as crawler:
result = await crawler.arun(
url="https://example.com/docs",
config=CrawlerRunConfig(),
)
print(result.markdown[:500])
Para crawls profundos, rotacione a identidade por instância de crawler, não por página — páginas dentro de uma mesma visita ao site devem compartilhar um único IP de saída (um humano não muda de cidade entre a página 3 e a página 4):
def crawler_for(site_id: str) -> BrowserConfig:
# Sticky session per site: cookies + IP move together
return BrowserConfig(
headless=True,
proxy_config={
"server": "us.jibaoproxy.com:913",
"username": f"USERNAME-session-{site_id}",
"password": "PASSWORD",
},
)
# site A crawled through exit A, site B through exit B, in parallel
Cloud API: o proxy é um parâmetro da requisição — o Firecrawl roteia pelos seus próprios pools. Você controla o nível de qualidade, não os IPs:
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-YOUR-KEY")
result = app.scrape_url(
"https://example.com/pricing",
params={"proxy": "stealth"}, # basic | stealth | auto
)
O porém: requisições no nível stealth são cobradas a um múltiplo dos créditos básicos, e você não consegue fixar países com precisão nem manter sessões sticky entre chamadas. Bom para páginas ocasionais; caro e impreciso em volume de ingestão.
Firecrawl autoalojado: você fornece seu próprio proxy via variáveis de ambiente, com controle total:
# .env for self-hosted Firecrawl
PROXY_SERVER=http://us.jibaoproxy.com:1000
PROXY_USERNAME=USERNAME
PROXY_PASSWORD=PASSWORD
Autoalojado + seu próprio gateway residencial é a configuração mais racional em custo quando você já faz ingestão em escala: você paga por GB de banda em vez de créditos por página com um multiplicador stealth.
semaphore_count / delay do Crawl4AI existem para isso — 2–4 páginas concorrentes por site já bastam; distribua o paralelismo entre os sites.ETag/Last-Modified onde o framework permitir.| Configuração | Você paga por | Melhor quando |
|---|---|---|
| Firecrawl cloud, proxy stealth | Créditos por página × multiplicador stealth | Baixo volume, zero operação |
| Firecrawl autoalojado + GB residencial | Apenas banda (~$10/GB) | Volume de ingestão constante |
| Crawl4AI + GB residencial | Apenas banda, controle total | Pipelines customizados, crawls profundos |
Uma página típica com muito texto custa de 100–300 KB através de um proxy — aproximadamente 3.000–10.000 páginas por GB. São os loops de bloqueio-e-retry que estouram o orçamento, o que é mais um motivo para corrigir a detecção antes de escalar o volume.
proxy_config no BrowserConfig; identidade sticky por site, rotacione entre sites.proxy: "stealth", caro em volume; autoalojado: seu próprio gateway via variáveis de ambiente.Saídas residenciais, sessões sticky, preço por GB — 500MB de tráfego grátis, sem cartão.
Começar teste grátisNovos usuários recebem 500MB ao se cadastrar, mais um bônus na primeira recarga. Oferta por tempo limitado.