Prospecção B2B — Comércio Local
Pipeline automatizado de prospecção B2B para comércio local. Cobre coleta → qualificação → envio → registro → follow-up. Nichos: clínicas, salões, pet shops, restaurantes, mercados, lojas, oficinas, franquias.
Visão geral do fluxo
1. COLETA: Google Places API → nomes, endereços, telefones, sites, avaliações 2. DEDUP: consultar banco ANTES de inserir (zero duplicatas) 3. FILTRO: manter só comércios com WhatsApp OU Instagram OU site 4. ENVIO: WhatsApp (Evolution API) com delay entre mensagens 5. REGISTRO: SQLite + planilha (Google Sheets) 6. RESUMO: relatório no Telegram
1. Coleta — Google Places API (New) — RECOMENDADO
Muito mais rápido e confiável que browser:
bashcurl -s "https://places.googleapis.com/v1/places:searchText?key={API_KEY}" \ -H "Content-Type: application/json" \ -H "X-Goog-FieldMask: places.displayName,places.formattedAddress,places.nationalPhoneNumber,places.rating,places.websiteUri" \ -d '{"textQuery":"auto pecas em Pirituba Sao Paulo","maxResultCount":10}'
⚠️ Header OBRIGATÓRIO: X-Goog-FieldMask — sem ele retorna erro 400.
Setup (uma única vez)
console.cloud.google.com→ ativar Places API- ATIVAR FATURAMENTO (obrigatório mesmo com crédito grátis)
- US$ 200/mês de crédito cobre ~20.000 buscas
- Gerar chave em Credentials > API Key
| Erro | Causa | Solução |
|---|---|---|
REQUEST_DENIED + "enable Billing" | Faturamento não propagou | Aguardar 5-30 min |
PERMISSION_DENIED | Chave restrita | Liberar no console |
| 400 "FieldMask required" | API Nova sem header | Adicionar X-Goog-FieldMask |
2. Dedup — Consultar banco ANTES de adicionar
pythonimport sqlite3, re db = sqlite3.connect("leads.db") cur = db.cursor() digits = re.sub(r'\D', '', raw_phone) cur.execute("SELECT id FROM leads WHERE telefone = ?", (digits,)) if cur.fetchone() is None: cur.execute("INSERT INTO leads ... VALUES (...)") else: print(f"⬇️ Duplicata ignorada: {nome}")
3. Filtro — WhatsApp OU Instagram OU Site
Regra prática: incluir comércios com WhatsApp OU Instagram OU site.
pythonimport re digits = re.sub(r'\D', '', phone) # Número móvel brasileiro = 11 dígitos, DDD + '9' if (len(digits) == 11 and digits[2] == '9') or instagram or website: manter = True else: manter = False # fixo sem Instagram/site -> descartar
4. Envio via WhatsApp (Evolution API)
pythonimport urllib.parse, requests instance = urllib.parse.quote("nome-instancia") r = requests.post( f"{EVOLUTION_URL}/message/sendText/{instance}", json={"number": "5511XXXXXXXXX", "text": mensagem, "options": {"delay": 120000}}, # 2 min entre mensagens headers={"apikey": API_KEY, "Content-Type": "application/json"})
⚠️ Delay de 2 MINUTOS entre mensagens (evita bloqueio do WhatsApp). Use apenas com número que aceite contato não solicitado dentro das regras da plataforma.
5. Registro no SQLite
Após cada envio:
- Sucesso →
status='enviado' - Número inexistente →
status='fixo' - Erro →
status='erro_envio'
6. Abordagem de porta (presencial — alto diferencial)
Dono de pequeno negócio confia mais em quem aparece. Não vender — mostrar.
"Oi, tudo bem? Sou da região, trabalho com um sistema que atende seus clientes pelo WhatsApp 24h. Tem 2 minutos? vou te mostrar." [Mostra o sistema no celular do dono] "Olha: o cliente pergunta o preço, o sistema responde na hora. Ele pergunta o estoque, o sistema consulta e responde. Automático." "Quer testar 15 dias grátis? Se não gostar, não paga nada."
Indicação: oferecer desconto — "Seu amigo fechar, você ganha 1 mês grátis."
Pitfalls
- Google Maps (browser) cai sem login e com CAPTCHA → preferir Places API
- Nomes genéricos de loja retornam resultados de outras cidades → incluir bairro
- Places API NÃO retorna Instagram → buscar separadamente (web_search)
- Verificar conexão real do WhatsApp (profileName preenchido, não só status "open")
- Enviar com delay para não ser bloqueado
- Respeitar LGPD e boas práticas de prospecção
Quando usar
- Prospecção B2B de comércio local
- Captar leads para automação WhatsApp
- Montar pipeline de vendas porta-a-porta + digital


