BlipLeads
Toda empresa de serviço local tem cliente esperando no Google Maps. Ninguém tem tempo de garimpar isso um por um. O BlipLeads faz essa varredura, prioriza quem precisa de ajuda de verdade e entrega pronto pro time de vendas abordar.
Galeria do Produto
A promessa central do produto: o próximo cliente já está listado no Google, só falta alguém ligar.
Saiba mais sobre a arquitetura técnica
Quer entender como isso foi construído por baixo do capô? Abra o mergulho técnico abaixo.
expand_more
Saiba mais sobre a arquitetura técnica
Quer entender como isso foi construído por baixo do capô? Abra o mergulho técnico abaixo.
Visão Técnica
O Google Maps já mostra quem precisa de ajuda: sem site, sem WhatsApp respondendo, nota baixa, comentário sem resposta. O BlipLeads varre o Maps por nicho e região, prioriza quem tem mais chance de fechar e entrega o lead pronto, com pitch de WhatsApp escrito, organizado num Kanban.
Tecnologias Principais
O Desafio
Ler dado do Google é a parte fácil. O difícil é virar isso numa esteira de vendas B2B que aguenta vários clientes ao mesmo tempo sem estourar limite de API, misturar conta de um com a de outro, ou travar numa busca demorada:
- / Processar buscas de longa duração (Google Places + probe de site) sem bloquear a requisição HTTP, via jobs assíncronos.
- / Isolar dados por tenant (campanhas, leads, métricas) e por papel de usuário (owner/admin/operator/viewer).
- / Evitar leads duplicados por tenant mesmo com múltiplas campanhas rodando para o mesmo nicho e região.
- / Detectar automaticamente sites 'mortos' listados no Google, transformando um falso positivo em uma oportunidade de venda.
A Solução
O fluxo é campanha → job → lead. Criar campanha publica um job no Upstash QStash, que dispara a busca de forma assíncrona — sem travar a página. A rotina normaliza o telefone, testa se o site listado está mesmo no ar, calcula o score de prioridade e grava tudo com índice único por conta. Dois clientes rodando campanha pro mesmo nicho não duplicam lead.
export function calculatePriorityScore(input: ScoringInput): number {
let score = 0;
if (!input.websiteUri) score += 30;
if (input.rating != null) {
score += (input.rating / 5) * 20;
}
if (input.reviewCount != null && input.reviewCount > 0) {
score += Math.min(25, Math.log10(input.reviewCount + 1) * 15);
}
if (input.businessStatus === 'OPERATIONAL') {
score += 5;
}
return Math.round(score * 100) / 100;
} Infraestrutura
Deploy & Jobs Assíncronos
Next.js na Vercel, Postgres na Neon, fila de jobs no Upstash QStash. O scraping roda fora do ciclo da requisição — nunca trava quem está usando o produto.