Ferramenta de linha de comando em Python que encontra negócios locais que não têm site (salões, agropecuárias, restaurantes, hamburguerias) e exporta uma planilha priorizada, pronta para prospecção comercial.
Stack: Python 3 (biblioteca padrão) · OpenStreetMap / Overpass API · Google Places API · openpyxl
O que o projeto demonstra: consumo e fallback entre múltiplas APIs públicas, classificação de dados por heurística de texto, normalização e deduplicação de registros, geração de planilha formatada e tratamento de rate limit.
python buscar_leads.py --cidade "Passo Fundo, RS" --raio 15Sai um leads_passo_fundo_rs_AAAA-MM-DD.xlsx (e um .csv) na pasta.
| Opção | O que faz |
|---|---|
--cidade |
Obrigatório. Ex: "Chapecó, SC" |
--raio |
Raio em km a partir do centro. Padrão: 15 |
--nichos |
salao,agropecuaria,restaurante,hamburgueria ou todos |
--fonte |
osm (grátis) ou google (precisa de chave) |
--chave |
Chave da API do Google |
--incluir-com-site |
Também lista quem já tem site |
--saida |
Nome do arquivo de saída |
Exemplos:
python buscar_leads.py --cidade "Erechim, RS" --nichos salao,hamburgueria --raio 10python buscar_leads.py --cidade "Passo Fundo, RS" --fonte google --chave SUA_CHAVEUsa o OpenStreetMap. Funciona na hora, mas é um mapa, não um cadastro de empresas.
Teste real em Passo Fundo/RS, raio 12 km: 91 leads sem site, e destes:
- 8 com telefone (~9%)
- 4 com WhatsApp
- 0 com Instagram
Ou seja: bom para descobrir nomes e localização, fraco para contato.
Usa o Google Places API. É de onde vem telefone confiável e, principalmente, a informação de quem tem ou não tem site — o filtro central da ferramenta.
Para conseguir a chave:
- Acesse https://console.cloud.google.com/
- Crie um projeto
- Ative a Places API (New)
- Em Credenciais, gere uma Chave de API
Para não digitar a chave toda vez:
setx GOOGLE_MAPS_API_KEY "sua_chave_aqui"Custo: a busca por texto do Places é cobrada por chamada. O script faz 4 a 6 buscas por nicho, cada uma com até 3 páginas — uma cidade com os 4 nichos dá em torno de 60 a 70 chamadas. Comece com um nicho só e confira o painel de faturamento antes de rodar em várias cidades.
Nenhuma das duas APIs entrega o Instagram. Por isso a planilha traz a coluna "Buscar Instagram": um link clicável que abre a pesquisa pronta do negócio + cidade. Raspar o Instagram violaria os termos de uso da plataforma.
Aba Leads, ordenada pelos melhores primeiro. Coluna Status digital:
| Cor | Significado |
|---|---|
🟩 SEM NADA - lead quente |
Sem site e sem rede social. É o alvo. |
🟨 So rede social |
Tem Instagram/Facebook, mas não tem site. |
⬜ TEM SITE |
Só aparece com --incluir-com-site. |
Dentro de cada faixa, quem tem WhatsApp vem antes de quem tem só telefone fixo, que vem antes de quem não tem contato nenhum.
A coluna Link WhatsApp só é preenchida quando o número é celular (DDD + 9 dígitos começando com 9) — número fixo não tem WhatsApp, então fica em branco de propósito.
Há também uma aba Resumo com contagem por nicho e por status.
- Cobertura. Nenhuma base tem 100% do comércio de uma cidade. O OSM depende de voluntários; o Google depende de o dono ter cadastrado o negócio.
- Não ter site no cadastro ≠ não ter site. Muito negócio tem site mas nunca preencheu o campo.
- Dado desatualizado. Estabelecimento fechado pode continuar listado. Na fonte Google os marcados como fechados já são descartados; no OSM, não dá.
- Falso positivo por nome. A classificação usa o nome do estabelecimento, então algo como "Celeiro Self Storage" cai como agropecuária. Confira a coluna Nicho antes de abordar.
Telefone comercial divulgado publicamente pode ser usado para contato B2B com base no legítimo interesse. Mas: identifique-se na primeira mensagem, diga onde conseguiu o contato, e pare na hora se pedirem. Não repasse a lista para terceiros.
As planilhas geradas contêm dados reais e não são versionadas (ver .gitignore).