← Todos os projetos
P.03 dados + IA

Inteligência de Leilões de Imóveis

Transforma anúncios de leilão espalhados numa base consultável, com o conteúdo da matrícula lido por modelo e a história de preço de cada imóvel preservada — inclusive a dos leilões que já terminaram.

Papel
Projeto próprio
Período
fevereiro a agosto de 2026
Estado
Coleta ativa, painéis locais
Escala
2.841 imóveis, 3 estados

O problema

O anúncio de um leilão não diz se o imóvel merece atenção. O que decide isso está na matrícula — ônus, penhoras, consolidação — que vem como PDF digitalizado, e boa parte dos anúncios chega incompleta, sem valor avaliado, sem área ou sem número de matrícula.

E há uma janela que não reabre: quando o leilão termina, o anúncio simplesmente some do site e não volta. Quem não guardou no dia perdeu para sempre — não existe arquivo público de desfechos.

O que faz

  • Coleta os anúncios com um Chrome real dirigido por Playwright, atravessando a proteção anti-robô do portal.
  • Reconcilia com o arquivo oficial da Caixa, que passou a ser a fonte primária para os imóveis dela.
  • Lê a matrícula em PDF e a transforma em análise de risco estruturada — ônus, sinalizações, consolidação — conferindo a área contra o anúncio.
  • Acompanha o ciclo de vida de cada leilão (ativo, fora da listagem, saiu) e guarda a série histórica de preço.
  • Serve tudo por uma API que é também o agendador, com painéis de frescor, qualidade, cobertura e movimento de preço.
  • Mapa por município e busca conversacional sobre os trechos de matrícula, com banco vetorial.

Como foi construído

Arquitetura Medallion em Python: bronze imutável em disco, silver validado por schema em SQLAlchemy, gold a construir — com três pipelines (coleta, extração de matrícula e re-visita) instrumentados pela mesma telemetria.

A extração da matrícula é feita em duas etapas separadas de propósito — primeiro transcrever o documento com fidelidade, só depois estruturar o texto em JSON de risco — com os prompts versionados e um conjunto de documentos de referência que serve de teste de regressão quando o prompt muda.

Guardar o original bruto antes de entender qualquer coisa

Todo download é gravado em disco com hash sha256, tamanho e timestamp antes de qualquer interpretação. Regravar o mesmo conteúdo não faz nada; conteúdo diferente no mesmo caminho não sobrescreve — levanta erro de integridade e vira uma versão nova. Cada linha da camada tratada aponta de qual arquivo bruto veio, e com qual hash.

A razão está escrita no próprio projeto: reprocessar é barato, recoletar o passado é impossível. Um bug de parser nunca destrói histórico — conserta-se o código e reprocessa-se o bruto. O preço é cerca de 2,4 GB de armazenamento duplicado, a impossibilidade de "limpar" dado feio no lugar, e uma escrita extra em cada passo. O complemento é a quarentena: registro que não passa na validação vai para um canto com o motivo anotado, não entra sujo, não é descartado em silêncio, e como não conta como coletado, é tentado de novo na próxima execução.

Stack

Coleta

  • Python 3.12
  • Playwright
  • httpx
  • Chrome headful

Dados

  • Pydantic
  • SQLAlchemy
  • Alembic
  • SQLite (WAL)

IA e busca

  • LLM OCR
  • Qdrant
  • sentence-transformers
  • PyMuPDF

Serviço

  • FastAPI
  • Next.js
  • Leaflet
  • Recharts

Números

2.841imóveis acompanhados em PR, RS e SC
615ainda ativos; 2.219 já saíram do leilão
3.516snapshots de preço ao longo do tempo
9.188registros de coleta desde fevereiro de 2026

Medido diretamente no banco em 29/08/2026, com a coleta indo de 17/02/2026 a 28/08/2026. O número de ativos muda sozinho com o tempo, porque imóvel que sai do leilão continua na base — é justamente esse histórico que o projeto existe para guardar.

Telas

Sala de controle — execuções de coleta, score de completude, quarentena, cobertura por estado e variação de preço. Modo de demonstração, com dados sintéticos.
Detalhe de uma execução do pipeline: o que entrou, o que foi para a quarentena e por quê.