Thiago Garofalogarofalodeveloper.com

Genesis: agentes de prospecção comercial B2B em produção

Período: julho de 2026 até hoje · Papel: idealização, arquitetura, código, operação e uso diário · Estado: em produção numa VPS própria, três instâncias

Resumo em uma frase: um motor de agentes que lê fontes públicas de dados (concessões minerárias, cadastro de CNPJ, contratos públicos, importações), descobre quem compra o que eu vendo, encontra o canal de entrada e me entrega todo dia uma lista curta de missões comerciais com roteiro pronto.

1. Contexto e problema

Vendo suprimentos industriais (engates rápidos, abraçadeiras, mangueiras, válvulas) para mineradoras, empreiteiras e distribuidores. O gargalo nunca foi produto nem preço. Era saber quem acionar, por onde (portal de fornecedor, e-mail de suprimentos, telefone) e quando, com uma equipe comercial pequena.

Prospecção manual tinha três custos:

Ferramentas de CRM e prospecção prontas não resolviam porque não conhecem as fontes brasileiras que importam neste nicho (ANM/SIGMINE, dump de CNPJ da Receita, PNCP, ComexStat) nem o conceito de “canal de entrada” em empresa industrial de grande porte, onde o caminho é o portal de homologação de fornecedores, e não um vendedor.

Restrição autoimposta: 100% open-source e self-hosted. Nada de plataforma gerenciada paga. O sistema tinha que rodar local no começo (máquina sem Docker) e depois na VPS, sem reescrever.

2. Resultado até agora

Indicador Valor
Empresas carregadas (instância mineração, 7 UFs) 35,8 mil
Processos minerários cruzados com empresas 156 mil
Mineradoras com canal de entrada verificado (seed curado) 25
Missões geradas por dia (configurável) 5
Instâncias em produção 3 (mineração, válvulas, obras do Metrô-SP)
Dependências pagas 0

O que mudou na prática: a rotina comercial começa abrindo a Central de Comando, que já mostra as cinco empresas do dia, por que elas (fase do processo minerário, contrato vigente, UF importadora), o canal de entrada com link e o roteiro de contato. O funil (novo, contatado, cadastrado, aprovado, cotação, cliente) fica registrado por empresa, com anotações datadas.

As métricas de conversão por canal e de precisão da priorização ainda não foram consolidadas. É o que a seção 7 propõe medir, e é a parte que interessa ao trabalho acadêmico.

3. Arquitetura

flowchart LR
  subgraph Fontes[Fontes públicas]
    ANM[ANM / SIGMINE<br/>processos minerários]
    CNPJ[Receita Federal<br/>dump CNPJ]
    PNCP[PNCP<br/>contratos públicos]
    COMEX[ComexStat<br/>importações por NCM]
  end

  subgraph M2[Módulo 2 · Robô de Buscas]
    COL[Coletores<br/>normalização + dedupe]
    ENR[Enriquecimento<br/>site, e-mail, portal de fornecedor]
  end

  subgraph DB[Base · PostgreSQL + Drizzle]
    EMP[(empresas)]
    PROC[(processos / obras / comex)]
    CONT[(contatos<br/>canal + confiança)]
    ACOES[(ações / missões)]
    LOG[(execucoes_cron)]
  end

  subgraph M3[Módulo 3 · Cron diário]
    GER[gerar-acoes<br/>ranking + seleção]
  end

  subgraph M1[Módulo 1 · Central de Comando]
    UI[Missões do dia<br/>playbook por canal]
    LEADS[Funil e ficha do lead]
    DASH[Dashboard]
  end

  HUM((Humano<br/>decide e aciona))

  ANM --> COL
  CNPJ --> COL
  PNCP --> COL
  COMEX --> COL
  COL --> EMP
  COL --> PROC
  EMP --> ENR --> CONT
  EMP --> GER
  PROC --> GER
  CONT --> GER
  GER --> ACOES
  GER --> LOG
  ACOES --> UI --> HUM
  HUM --> LEADS --> EMP
  EMP --> DASH

Módulos e fronteiras

O padrão de instância

Cada nicho é um fork do motor com banco, porta e coletores próprios. A instância de mineração usa ANM + Receita; a de válvulas usa Receita (CNAE 2813-3 e razão social) + ComexStat (NCM 8481.80.95 por UF e município, porque não existe mais dado público por importador); a do Metrô usa a API do PNCP filtrada pelo CNPJ do órgão, onde cada contrato já traz o fornecedor vencedor. O código de interface, funil, cron e playbook é o mesmo. Mudar de nicho é escrever um coletor e ajustar a função de ranking.

4. O ciclo do agente

Uso a definição clássica de agente: percebe o ambiente, mantém estado, decide e age, e é avaliado por uma medida de desempenho. No Genesis cada parte está num módulo:

Função cognitiva Onde está Como funciona hoje
Percepção Coletores do Módulo 2 Leitura periódica das fontes públicas; normalização de nomes (SIGMINE não tem CNPJ, o cruzamento com a Receita é por razão social normalizada)
Memória Banco (empresas, contatos com confiança, funil, anotações, log do cron) Idempotência por chave única em contatos; histórico de estágio por empresa; auditoria de cada rodada
Raciocínio / decisão gerar-acoes Ranking determinístico por sinais: canal conhecido, depois fase quente do processo (concessão de lavra), depois contrato vigente, depois porte. Exclui quem já tem ação aberta. Seleciona N por dia
Ação Central de Comando + playbook Gera a missão com objetivo (cadastrar no portal ou abrir relacionamento), tempo estimado e roteiro por tipo de canal, incluindo mensagem pronta. A ação externa é humana
Aprendizado Ainda não existe em malha fechada O funil registra o desfecho, mas o ranking ainda não é ajustado por ele. É o próximo passo

Duas escolhas de projeto são deliberadas:

  1. Humano no circuito. O agente não envia e-mail nem preenche portal sozinho. Em venda industrial B2B um primeiro contato ruim fecha a porta por anos. O agente reduz o custo de decidir; não decide.
  2. Sem dados pessoais raspados. Contatos de pessoas são inseridos manualmente pelo usuário. O enriquecimento automático busca apenas canais institucionais (site, e-mail de suprimentos, portal de fornecedor).

5. Decisões de engenharia

6. Lições

7. Próximos passos e plano de avaliação

A camada cognitiva planejada (Fase 4 do backlog) é onde o projeto encontra a pós-graduação. A proposta é tratar cada adição como um experimento com métrica definida antes de codar.

Camadas a adicionar

  1. Personalização da mensagem por LLM local (Ollama, Llama 3.1 ou Qwen 2.5). O playbook hoje é um template por canal. O LLM recebe empresa, substância ou obra, UF e canal, e gera a mensagem. Avaliação: taxa de resposta por mensagem gerada contra template, em teste A/B por semana.
  2. RAG sobre documentos do nicho (pgvector, nomic-embed-text, 768 dimensões). Editais, normas de homologação de fornecedores, páginas de portal. Objetivo: o agente responder “o que esta empresa exige para homologar” a partir de fonte citada.
  3. Qualificação do lead por LLM em paralelo ao ranking determinístico. Mesmos candidatos, duas listas. Avaliação: concordância entre as listas e, no desfecho do funil, qual lista acertou mais quem virou cotação.
  4. Malha fechada de aprendizado. O desfecho do funil (cadastrado, aprovado, cotação, descartado) realimenta os pesos do ranking. Começa com ajuste manual mensal e evolui para ajuste automático.

Métricas que passam a ser coletadas

Métrica Como medir Por que importa
Precisão da priorização % das missões do dia que avançam no funil em 30 dias Mede se o raciocínio escolhe bem
Taxa de resposta por canal respostas / contatos, por tipo de canal Define onde o agente deve concentrar esforço
Conversão por etapa novo, contatado, cadastrado, cotação, cliente Funil completo, por instância
Custo por lead acionável horas humanas + infra / leads com canal verificado Compara com prospecção manual
Tempo humano por missão estimado vs. real, registrado na conclusão Mede o ganho operacional de verdade
Concordância regra vs. LLM sobreposição das listas e acerto no desfecho Decide se o LLM entra no ranking ou só na mensagem

Possíveis recortes para trabalho acadêmico

8. Stack

Next.js 16 · React 19 · TypeScript · Tailwind 4 · Drizzle ORM · PostgreSQL 16 + pgvector · PGlite · Playwright · cheerio · node-cron · Ollama · Docker Compose · Caddy · Ubuntu numa VPS própria.

9. Código

O código das três instâncias é privado: contém a lógica de priorização e o seed curado de canais, que são a vantagem comercial do negócio. Pode ser apresentado em entrevista ou avaliação acadêmica com dados sintéticos. Documentos de arquitetura, banco, deploy e runbook de restauração existem no repositório e seguem este case.