Contexto#

Projeto pessoal de prospecção — uso interno pra abordar negócios locais. Nasceu de uma dor simples: lista de leads manual não escala e fica desatualizada rápido. A solução virou um pipeline completo, do scraping até a publicação.


Pipeline#

scraper (Google Maps, GuiaMais, Vivareal, Doctoralia)
        │
        ▼
cruzamento com CNPJ da Receita Federal (filtro por município/bairro)
        │
        ▼
confirmação de WhatsApp/Instagram/Facebook via site do próprio negócio
        │
        ▼
build_release.py → dataset cumulativo (nunca perde cidade antiga, upsert por nome+cidade)
        │
        ▼
release estática nova → symlink atômico → Docker (Caddy) serve, sem downtime

Decisões de arquitetura#

  • Estático, sem banco de dados — cada publicação gera uma release nova e imutável; rollback é só reapontar o symlink
  • Deploy atômico — a troca de release não tem downtime nem estado inconsistente
  • Superfície de ataque mínima — a imagem Docker publicada não contém Python nem os scripts, só os arquivos estáticos já gerados
  • Basic Auth sempre ativo — dado de contato de negócio não fica aberto publicamente
  • 100% no servidor — coleta e publicação não dependem de nenhuma máquina local ligada

Score de qualificação#

Cada lead é pontuado (0–27) considerando telefone, WhatsApp (por formato e confirmado via site), email, site próprio, Instagram, Facebook, avaliações/nota no Google e CNPJ ativo — pra priorizar quem vale a pena abordar primeiro.


Tecnologias#

Python · Docker · Caddy · Receita Federal (dados abertos de CNPJ) · Apify