Case 03IA e inteligência comercial

LeadSpector

De 300 mil CNPJs à abordagem certa, com a IA citando a fonte.

Plataforma de prospecção que cruza a base da Receita Federal com reclamações do Reclame Aqui e avaliações do Glassdoor para mostrar onde cada empresa sofre e o que oferecer a ela. O vendedor filtra 300 mil empresas em segundos, abre um diagnóstico com score de oportunidade e sai com o email de abordagem pronto.

Cliente
Software house B2B · time comercial interno
Período
2025 — 2026
Equipe
Squad de 6 pessoas
Papel
Engenheiro full stack · frontend, RAG, insights e busca
Stack
Go · Rod · Apache Spark · PostgreSQL · Neo4j · Elasticsearch
Confidencialidade
Dados de clientes preservados
02

Resultados em números

  • 300 milempresas pesquisáveis em segundosbase da Receita Federal sincronizada com o Elasticsearch
  • 15 minpara preparar a abordagem de uma contaantes, cerca de 2 horas de pesquisa manual
  • 13 filtroscombináveis na busca de leadsregião, porte, CNAE, capital, tempo de atividade, score e status
  • 4 fatoresno score de oportunidade de 0 a 100dor, amplitude da oferta, fit de porte e confiança dos sinais
03

O contexto do negócio

Cliente
Software house B2B · time comercial interno
Período
2025 — 2026

A software house vende modernização de sistemas, integração, dados e IA para empresas médias e grandes. O gargalo do time comercial não era fechar negócio: era chegar na conta certa com o argumento certo. Cada SDR montava listas na mão, pesquisava a empresa, lia reclamações de clientes e avaliações de funcionários atrás de sistema legado, processo manual ou instabilidade, e só então escrevia o primeiro email. Eram horas por conta, pouca cobertura de mercado e abordagens genéricas.

04

O desafio

Os sinais existem, mas estão em três lugares que não conversam: o cadastro oficial de CNPJs, em dumps brutos com milhões de linhas; o Reclame Aqui, com a dor do cliente final; e o Glassdoor, com a dor de quem opera os sistemas por dentro. Era preciso unir tudo pelo CNPJ, pesquisar centenas de milhares de empresas em segundos e transformar texto solto em oportunidade comercial, sem deixar a IA inventar um problema que a empresa não tem.

  1. Três fontes, três formatos

    Dumps da Receita em lote, Reclame Aqui em HTML com JSON-LD e Glassdoor em GraphQL paginado. Cada fonte ganhou coletor próprio, ritmo próprio e status de coleta por CNPJ.

  2. Busca comercial em 300 mil empresas

    O vendedor combina região, porte, CNAE, capital social, tempo de atividade e score de IA na mesma consulta, e a lista precisa chegar em segundos, já sem leads de outro SDR.

  3. IA que não pode inventar

    Um diagnóstico errado queima a conta. Toda evidência citada pelo modelo precisa existir no texto recuperado daquele CNPJ; o que não tem âncora é descartado antes de chegar à tela.

05

O que entreguei

Dividi a plataforma em coleta, preparação, recuperação e uso. Um ETL em Spark limpa a base da Receita, um daemon mantém o Elasticsearch sincronizado com o PostgreSQL e crawlers em Go levam reclamações e avaliações para um grafo Neo4j com embeddings locais. Sobre esse grafo rodam o chat RAG e o motor de insights, que pontua cada empresa de 0 a 100. No topo, um workspace em React reúne busca, perfil, funil, agenda e emails.

  1. Busca em 300 mil empresas

    Índice Elasticsearch com 13 filtros combináveis, taxonomia CNAE em quatro níveis e filtros salvos por usuário.

  2. Diagnóstico com score de oportunidade

    Três frentes de análise por empresa, evidências auditadas e um score de 0 a 100 que ordena a fila do time.

  3. Chat RAG que cita a fonte

    Perguntas livres sobre uma empresa ou um setor, respondidas com trechos recuperados e tabela de evidências.

  4. Workspace de prospecção

    Funil com cinco status, agenda, cadências, emails gerados por IA com disparo SMTP e controle de prompts.

06

Como funciona

Siga o trabalho atravessando o sistema, etapa por etapa, ou clique em qualquer componente do quadro para ver o que ele faz.

12 componentes · 14 conexões · 5 camadas

Clique em um componente para ver detalhes←→para navegarPercorra o fluxo abaixo

ENTRADACrawler GlassdoorGo / RodENTRADACrawler ReclameAquiGo / RodENTRADABase da ReceitaSpark / PostgreSQLSERVIÇOEmbeddings locaisOllamaSERVIÇOWorker de resumosGo / GroqBANCOGrafo de contextoNeo4jBANCOÍndice de buscaElasticsearchSERVIÇOChat RAGLangChain /FastifySERVIÇOMotor de insightsLangChain /PostgreSQLSERVIÇOBusca de leadsFastify / RedisSAÍDAWorkspace devendasReact 19SAÍDAProspecção eemailsFastify / SMTP

arraste para ver o fluxo

Legenda

  • Síncrono
  • Assíncrono
  • Canal seguro
  • Integração externa
Descrição textual do fluxo
  1. De Crawler Glassdoor para Grafo de contexto — Avaliações (assíncrono).
  2. De Crawler Reclame Aqui para Embeddings locais — Reclamações (síncrono).
  3. De Base da Receita para Worker de resumos — Dados cadastrais (síncrono).
  4. De Base da Receita para Índice de busca — Sync a cada 5 min (assíncrono).
  5. De Embeddings locais para Grafo de contexto — Chunks + vetores (assíncrono).
  6. De Worker de resumos para Grafo de contexto — Perfil por CNPJ (assíncrono).
  7. De Grafo de contexto para Chat RAG — Contexto (síncrono).
  8. De Grafo de contexto para Motor de insights — Sinais de dor (síncrono).
  9. De Índice de busca para Busca de leads — Resultados (síncrono).
  10. De Chat RAG para Workspace de vendas — Respostas com fonte (síncrono).
  11. De Motor de insights para Workspace de vendas — Diagnóstico (síncrono).
  12. De Motor de insights para Prospecção e emails — Rascunho de abordagem (assíncrono).
  13. De Busca de leads para Workspace de vendas — Leads filtrados (síncrono).
  14. De Workspace de vendas para Prospecção e emails — Lead em prospecção (síncrono).

Percorra o fluxo

←→trocam de etapa

6 etapas

Do começo ao fim

Escolha uma etapa ou pressione Reproduzir para acompanhar o fluxo inteiro. Enquanto isso, o quadro destaca por onde o trabalho passa.

07

Componentes do sistema

  1. Crawler Glassdoor

    O que resolve
    Trazer a visão de quem opera os sistemas por dentro: avaliações de funcionários ligadas ao CNPJ.
    Como funciona
    Um pool de goroutines, com três workers por padrão, lê as empresas ativas do PostgreSQL. Para cada uma, o resolvedor encontra o empregador no Glassdoor cruzando nome e domínio do site, o que elimina homônimos. O interceptor captura as respostas GraphQL paginadas, até 100 avaliações por empresa, com timeout de 30 s por página e retry com backoff exponencial. O status de cada empresa fica no PostgreSQL e as avaliações vão para o Neo4j.

    Go · Rod · PostgreSQL · Neo4j

  2. Coleta de reputação

    O que resolve
    Levar a dor do cliente final para um corpus pesquisável, sem leitura manual.
    Como funciona
    O crawler do Reclame Aqui, em Go com navegador headless, descobre a página da empresa, extrai as reclamações do JSON-LD e guarda até 10 por CNPJ, com 15 s entre empresas e 3 s entre reclamações. Um daemon leva o material coletado para o grafo em lotes de 50: ritmo reduzido no horário comercial, velocidade total fora dele.

    Go · Rod · PostgreSQL · Neo4j

  3. Base cadastral e índice

    O que resolve
    Deixar a base inteira de empresas ativas pesquisável com filtros comerciais.
    Como funciona
    Um job Apache Spark lê os dumps da Receita, deduplica por CNPJ base, mantém só empresas ativas e grava no PostgreSQL. Um daemon de sincronização roda a cada 5 minutos: indexa o que mudou em lotes bulk e, a cada ciclo, reconcilia o conjunto completo de CNPJs entre PostgreSQL e Elasticsearch, para nenhuma empresa ficar invisível na busca.

    Java · Apache Spark · PostgreSQL · Elasticsearch

  4. Chunking e embeddings

    O que resolve
    Transformar texto coletado em trechos recuperáveis, sem enviar dado bruto para fora.
    Como funciona
    O texto é segmentado por sentenças em português e agrupado em chunks de até 1.000 caracteres, com uma sentença de sobreposição e hash de conteúdo para evitar duplicatas. Os vetores saem do nomic-embed-text rodando no Ollama, dentro da nossa infraestrutura, e ficam no próprio nó do Neo4j, com busca por similaridade de cosseno.

    TypeScript · Ollama · Neo4j

  5. Resumo institucional

    O que resolve
    Entregar ao vendedor um primeiro parágrafo sobre quem é a empresa antes de qualquer pergunta.
    Como funciona
    Um worker em Go encontra empresas sem resumo no grafo, ancora segmento e site no PostgreSQL, junta os dados da Receita e gera o perfil com um LLM open-weight via Groq. Cadência fixa entre empresas, backoff maior para erros 429 e nenhuma empresa marcada como enriquecida se a escrita no grafo falhar.

    Go · Groq · PostgreSQL · Neo4j

  6. Chat RAG

    O que resolve
    Responder perguntas comerciais com trechos da própria empresa e mostrar de onde veio cada afirmação.
    Como funciona
    Saudações são respondidas sem chamar o modelo. Um classificador separa pergunta sobre uma empresa de busca ampla. No primeiro caso, a recuperação traz chunks por similaridade restritos aos 8 dígitos do CNPJ base, mais resumo institucional e firmografia do PostgreSQL. No segundo, setor e UF são reconhecidos de forma determinística e viram os mesmos filtros da tela de leads. Citações sem âncora no contexto são removidas e um segundo modelo confere se a resposta está sustentada. Limite de 30 perguntas por minuto e timeout de 75 s.

    TypeScript · Fastify · LangChain · Neo4j · Elasticsearch

  7. Motor de insights e score

    O que resolve
    Dizer ao vendedor onde a empresa sofre, com qual evidência, e quanto vale a pena abordá-la.
    Como funciona
    Três frentes de análise (Arquitetura e Escalabilidade, IA e Automação, Modernização e Engenharia) rodam em paralelo. Cada uma recupera até 8 reclamações e 6 avaliações de funcionários acima do limiar de similaridade, e o modelo devolve criticidade, evidências e serviços recomendados. Evidência sem âncora é descartada; frente sem evidência não acende. O score soma dor (40%), amplitude da oferta (25%), fit de porte (20%) e confiança dos sinais (15%). Um lease com fencing token no PostgreSQL garante uma única geração por empresa entre rota individual, lote de até 200 e job em background.

    TypeScript · LangChain · Neo4j · PostgreSQL

  8. Workspace comercial

    O que resolve
    Levar o vendedor da lista ao email enviado sem trocar de ferramenta.
    Como funciona
    React 19 com TanStack Router e Query. Busca com filtros em abas e taxonomia CNAE; perfil da empresa com sócios, contatos, resumo, insights e chat; funil de cinco status com Kanban; agenda do SDR e visão do gestor; cadências multicanal; emails gerados a partir das frentes acesas, com disparo SMTP e resposta rastreada por IMAP. Os prompts do chat e de cada frente são editáveis na tela, com validação dos campos obrigatórios.

    React · TypeScript · TanStack Router · Fastify

08

Decisões que sustentam o sistema

  1. Grafo para contexto, índice para busca

    O Neo4j conecta empresa, chunks, resumo e avaliações pelo CNPJ, com o vetor no mesmo nó: a recuperação encontra os trechos certos da empresa certa. O Elasticsearch responde 13 filtros sobre 300 mil documentos. Cada um faz o que faz melhor.

  2. Auditoria antes da tela

    Toda evidência e toda citação é comparada com o contexto entregue ao modelo, por trecho literal ou sobreposição de palavras. O que não bate é removido. O vendedor só vê afirmações que consegue rastrear até a fonte.

  3. Embeddings locais, prompts na mão do time

    Vetores gerados no Ollama mantêm o dado coletado dentro da infraestrutura e zeram o custo por documento. Os prompts ficam no banco, editáveis pela tela, com os placeholders obrigatórios validados ao salvar: o time ajusta tom e foco sem quebrar a geração.

  4. Uma geração por empresa, mesmo sob concorrência

    Insights saem por três caminhos: clique no perfil, lote na listagem e job em background com 10 workers e checkpoint persistente. Um lease com fencing token no PostgreSQL impede gerações e emails duplicados, e o job retoma de onde parou depois de um deploy.

09

Resultado para o negócio

  • O vendedor monta uma lista qualificada em segundos, como indústrias de médio porte no Sul com mais de dez anos de atividade e score alto, em vez de garimpar planilhas.

  • Cada conta chega com o diagnóstico pronto: onde a empresa sofre, a evidência que comprova e qual serviço da casa resolve.

  • A preparação de uma abordagem caiu de cerca de duas horas de pesquisa para 15 minutos de leitura.

  • Pesquisa, funil, agenda e email no mesmo lugar: a gestão enxerga a carteira de cada SDR e nenhum contexto se perde entre ferramentas.

10

Meu papel

Papel
Engenheiro full stack · frontend, RAG, insights e busca
Equipe
Squad de 6 pessoas

Construí o crawler do Glassdoor e o frontend inteiro do LeadSpector. No backend, o leadspector-rag, desenhei e implementei o chat RAG, o motor de insights com score de oportunidade, a listagem de leads sobre Elasticsearch, a gestão de prospecção, a geração de emails a partir das oportunidades encontradas e o controle de prompts que deixa o time comercial ajustar cada geração sem esperar deploy.

Pelo que respondi

  • Escrevi o crawler do Glassdoor em Go: pool de workers, resolução do empregador por nome e domínio, captura do GraphQL paginado e retry com backoff exponencial.
  • Construí o frontend em React 19 com TanStack Router e Query: busca com filtros inteligentes, perfil da empresa, funil, agenda, emails e configurações.
  • Implementei o chat RAG: classificação de intenção, recuperação restrita ao CNPJ, busca por setor e UF, auditoria de citações e verificação da resposta por um segundo modelo.
  • Criei o motor de insights: três frentes de análise, auditoria anti-alucinação, score ponderado e lease no PostgreSQL para nunca gerar duas vezes a mesma empresa.
  • Levei a listagem de leads para o Elasticsearch, com 13 filtros, ordenação por score e visibilidade por papel de usuário.
  • Desenvolvi a geração e o disparo de emails, o rastreio de respostas por IMAP e o controle de prompts com campos obrigatórios validados ao salvar.
11

Stack por camada

  • Coleta

    • Go
    • Rod
    • Java
    • Apache Spark
  • Dados e busca

    • PostgreSQL
    • Neo4j
    • Elasticsearch
    • Redis
  • IA

    • RAG
    • LangChain
    • Ollama
    • nomic-embed-text
    • Groq
  • Produto

    • TypeScript
    • Fastify
    • React 19
    • TanStack Router
    • TanStack Query
    • Tailwind CSS
  • Infra

    • Docker
    • AWS EC2
    • Caddy
    • GitHub Actions
    • Prometheus
    • Grafana
12

O que levo deste projeto

  1. IA comercial ganha a confiança do time quando mostra a prova. A tabela de evidências com a fonte de cada trecho valeu mais para a adoção do que qualquer troca de modelo.

  2. Escopo por CNPJ precisa de trava dupla: filtro na consulta e sanitização depois da recuperação. Misturar duas empresas num diagnóstico é o pior erro possível em prospecção.

  3. Colocar o controle de prompts na mão do time comercial cortou pedidos de ajuste ao time técnico e deixou cada frente de análise falar a língua de quem vende.

Próximo case 04 GymOS Matrícula, mensalidade e check-in de duas unidades num só sistema.

Qual é o próximo sistema que a sua empresa precisa?

Me conte o contexto: um problema, uma ideia ou um sistema que precisa evoluir. Eu respondo com um caminho técnico claro e o primeiro passo para tirar do papel.