Previsão de demanda de busca
Quando o planejador de palavras-chave finalmente mostra volume, o assunto já tem meses de conversa em algum lugar — e quem escreveu naquele mês já está na primeira página.
Este pipeline lê os lugares onde a conversa acontece primeiro, mede a aceleração de cada termo, descarta o que não tem nada a ver com o seu nicho e projeta a curva. O que sai não é uma lista de palavras — é uma data para escrever.
breakout — · nicho —
O run diário
Cada estágio existe para jogar coisa fora. Entram milhares de sinais brutos; sai um punhado de termos com data e intenção de busca associada.
ingest/hackernews · reddit · gdelt
Três fontes de conversa pública, buscadas em paralelo. Se uma cai, o run continua com as outras e registra o erro — perder o GDELT não pode derrubar o dia.
detect/breakout
Cada termo entra no histórico e ganha um score de aceleração. Abaixo de 0.50 não é breakout, é ruído de sempre.
filter/relevance
Similaridade vetorial contra os nichos cadastrados. Um termo pode estar explodindo e ainda assim não ter nada a ver com o que você publica.
forecast/chronos
Os 50 finalistas vão para o serviço do Chronos, que devolve a curva projetada com intervalo. É aqui que "está subindo" vira "vai estar aqui em N dias".
reason/expand
Um LLM abre cada termo em cauda longa e lacunas de conteúdo. Sai a pauta, não só a palavra.
Por que estas três
Nenhuma delas é uma ferramenta de SEO — e é exatamente por isso que funcionam. Cada uma trouxe sua própria armadilha, e as três estão anotadas aqui porque custaram tempo.
Onde ferramenta de desenvolvedor e mudança de plataforma aparecem primeiro, com semanas de vantagem sobre a busca.
ArmadilhaA API oficial é generosa, mas paginar histórico inteiro é caro. O pipeline lê só a janela recente e guarda o resto no term_history.
Onde a dúvida real é escrita com as palavras do usuário, não com as palavras do setor.
ArmadilhaA API bloqueia IP de datacenter com 403. A saída é o RSS Atom (/r/<sub>/hot/.rss), que responde 200 no mesmo lugar onde o .json nega.
Cobertura mundial de notícia em quase tempo real — o sinal macro que o fórum não dá.
ArmadilhaConsultar a tabela crua no BigQuery custa 423 GB e estoura a cota numa tacada. Usar gkg_partitioned com _PARTITIONTIME: 0,1 GB por dia.
Stack
O worker é Python. O Chronos roda isolado em :8001 porque previsão é a parte pesada
e não deve competir com a ingestão pelo mesmo processo. A expansão em cauda longa aceita
Ollama local (ilimitado, sem rate limit, ideal para testar) ou
Groq com llama-3.3-70b, mais esperto e limitado no free tier — é uma variável
de ambiente, não uma reescrita.
# 1 · subir banco, chronos e ollama docker compose up -d docker exec -it seo-forecaster-ollama-1 ollama pull nomic-embed-text # 2 · migration + nichos python -c "from worker.persist.db import run_migration; run_migration('worker/migrations/001_initial.sql')" python -m worker.tools.seed_niches # 3 · um run completo python -m worker.pipelineLer o código no GitHub