Skip to main content
📝 Ferramentas de IA

Construí um Monitor de Marca com IA que Rastreia Todos os LLMs

Como construí uma ferramenta de monitoramento de marca com IA que rastreia menções no ChatGPT, Claude, Gemini e Perplexity. Guia completo de construção com Next.js e código.

9 min

Tempo de leitura

1,609

Palavras

Mar 29, 2026

Publicado

Engr Mejba Ahmed

Escrito por

Engr Mejba Ahmed

Compartilhar Artigo

Construí um Monitor de Marca com IA que Rastreia Todos os LLMs

Criei um Monitor de Marca com IA que Rastreia Todos os LLM

A equipe de marketing da Freshdesk tinha um problema que não sabia que existia.

O produto deles estava sendo recomendado pelo Google Search. Mas quando alguém abria o ChatGPT — que hoje atende 900 milhões de usuários ativos semanais — e digitava "qual é a melhor ferramenta de suporte ao cliente para uma equipe de 50 pessoas?", a Freshdesk não aparecia na resposta. Gorgias sim. Zendesk sim. Intercom sim. Freshdesk? Invisível.

Esse é o problema que decidi resolver em uma única sessão de programação, com um app em Next.js e uma API de scraping. Uma aplicação funcional que consulta ChatGPT, Perplexity, Gemini, Grok, Copilot e Google Search para qualquer nome de marca — e então informa exatamente onde você aparece, onde não aparece, e como é o sentimento quando você aparece.


Por que o Ranking da sua Marca no Google já Não Conta a História Completa

O volume de buscas em motores de pesquisa deve cair 25% até 2026 à medida que os usuários migram para chatbots de IA. Só o ChatGPT superou 1 bilhão de usuários ativos mensais estimados em janeiro de 2026.

Os LLM não rankeiam páginas. Eles recomendam marcas. E há menos de 1 chance em 100 de que o ChatGPT dê a mesma lista de recomendações de marcas em duas respostas ao mesmo prompt.

Ferramentas comerciais como Otterly.ai, o AI Visibility Toolkit da Semrush e Siftly cobram entre $200 e $500 por mês por esse monitoramento. Mas eu queria entender a mecânica construindo por conta própria.


O Problema de API vs. Navegador que Ninguém te Avisa

A resposta que você obtém da API do ChatGPT não é a mesma que um usuário vê no navegador. A aplicação web adiciona otimizações extras — formatação de citações, links para fontes, reestruturação de respostas. A API entrega uma resposta bruta. O navegador entrega uma experiência curada com fontes e contexto.

E o Copilot não tem nenhuma API pública. Você precisa ver o que a interface real do navegador exibe.

A geolocalização adiciona mais uma camada. Um usuário em Londres perguntando ao Perplexity "melhor ferramenta de gerenciamento de projetos" obtém resultados diferentes de um usuário em São Francisco. Chamadas de API não capturam essa variação. O scraping da interface voltada ao usuário captura.

Isso acabou com meu plano de "apenas chamar as APIs" na primeira hora. Para ver o que os usuários reais veem, é preciso fazer scraping da interface real.

Foi aí que o Bright Data entrou na construção.


Os Scrapers de IA do Bright Data

O scraper de IA do Bright Data: scrapers pré-construídos para plataformas de IA que retornam dados estruturados — texto de resposta, fontes, citações — a partir das interfaces web voltadas ao usuário do ChatGPT, Gemini, Copilot, Perplexity e Google SERP.

Os preços começam em $0,001 por registro.

O scraping de plataformas de IA não é instantâneo. O scraper carrega a página, aguarda o modelo gerar sua resposta (10 a 30 segundos) e então extrai o resultado. Se o scraping demorar mais de 60 segundos, o Bright Data retorna um ID de snapshot. Você faz polling desse ID com requisições GET até o resultado estar pronto.

Este é o padrão trigger-poll-download, e ele moldou fundamentalmente a arquitetura do app.


A Stack: Next.js, SQLite, Drizzle e um Agente de Programação

  • Next.js com React para o frontend e as rotas de API
  • SQLite com Drizzle ORM para persistência local
  • Bright Data API para fazer scraping das seis plataformas
  • Claude Code como agente de programação principal (com uma mudança para Cursor na metade do processo)

Três tabelas: brands, scans e results. Cada resultado armazena o nome do provedor, o status de menção, o sentimento, o texto bruto da resposta e quaisquer fontes.


O que Deu Errado: Os Modos de Falha da Primeira Arquitetura

Problema 1: Cascatas de timeout. Quando o scraping de um provedor demorava demais, todo o scan falhava.

Problema 2: Sem recuperação. Se eu fechasse o notebook, todos os scans em andamento desapareciam.

Problema 3: Limitação de taxa. Múltiplos scans simultâneos atingiam limites de taxa sem um retry limpo.


Inngest: A Fila em Segundo Plano que Resolveu Tudo

Antes (frágil):

  1. O usuário clica em "Scan"
  2. A rota de API aciona todos os seis scrapers de forma síncrona
  3. Aguarda todos os resultados ou atinge o timeout

Depois (durável):

  1. O usuário clica em "Scan"
  2. A rota de API envia um evento para o Inngest
  3. O Inngest aciona todos os seis scrapers em paralelo, cada um como uma etapa separada
  4. Cada etapa gerencia seu próprio ciclo de polling de forma independente
  5. Os resultados são gravados no SQLite à medida que são concluídos
  6. O frontend faz polling por atualizações e renderiza os resultados de forma incremental
export const scanBrand = inngest.createFunction(
  {
    id: "scan-brand",
    concurrency: { limit: 3 },
  },
  { event: "brand/scan.requested" },
  async ({ event, step }) => {
    const { brandName, prompt, providers } = event.data;

    const results = await Promise.allSettled(
      providers.map((provider) =>
        step.run(`scrape-${provider}`, async () => {
          const snapshot = await triggerScrape(provider, prompt);
          const result = await pollForResult(snapshot.id);
          const analysis = analyzeMention(result, brandName);
          await saveResult(brandName, provider, analysis);
          return analysis;
        })
      )
    );

    return results;
  }
);

A Mudança de Claude Code para Cursor

Mudei para o Cursor executando Opus 4.6 na metade do processo. O problema era minha engenharia de contexto — ao alimentar documentação de múltiplos provedores para um agente de programação, estruture o trabalho como tarefas sequenciais, cada uma contendo apenas a documentação do provedor relevante.


Gerenciando os Seis Provedores

ChatGPT: Requer prompt. country opcional para geolocalização. Perplexity: Requer prompt. Retorna citações inline. Gemini AI Mode: Requer tanto url quanto prompt. Grok: Requer prompt. Copilot: Requer url. Não existe API pública. Google SERP: Requer query (não prompt).

const PROVIDER_CONFIG = {
  chatgpt: {
    datasetId: process.env.BRIGHTDATA_CHATGPT_ID,
    buildPayload: (prompt: string, country?: string) => ({
      prompt,
      ...(country && { country }),
    }),
  },
  perplexity: {
    datasetId: process.env.BRIGHTDATA_PERPLEXITY_ID,
    buildPayload: (prompt: string) => ({ prompt }),
  },
  copilot: {
    datasetId: process.env.BRIGHTDATA_COPILOT_ID,
    buildPayload: (prompt: string) => ({
      url: "https://copilot.microsoft.com",
      prompt,
    }),
  },
};

O que Eu Faria Diferente

Começar com Inngest desde o início. Construir a versão síncrona primeiro me custou quatro horas de retrabalho.

Simplificar o esquema do banco de dados. Os dados brutos podem ficar como um blob JSON.

Construir o sistema de agendamento desde o primeiro dia. Scans únicos são úteis. Rastrear mudanças ao longo do tempo é valioso.

Tratamento de erros mais granular. "Erro de limite de taxa" → tentar novamente em 30 segundos. "Elemento não encontrado" → a interface mudou, me notificar.


O Caso de Negócio

Empresas como Otterly.ai e Siftly cobram entre $200 e $500 por mês pelo monitoramento de LLM. A lacuna de visibilidade entre o SEO tradicional e as recomendações de IA é real.

Os LLM priorizam relevância semântica e clareza estrutural acima da autoridade de domínio isolada. Um comentário bem estruturado no Reddit ou uma avaliação detalhada em um blog de nicho pode influenciar uma recomendação de LLM mais do que uma página inicial com DA-90.


Expandindo o Sistema

Scans agendados usando o gatilho cron do Inngest:

export const scheduledScan = inngest.createFunction(
  { id: "scheduled-brand-scan" },
  { cron: "0 */6 * * *" },
  async ({ step }) => {
    const brands = await step.run("get-brands", () =>
      db.select().from(brands).where(eq(brands.active, true))
    );
    for (const brand of brands) {
      await step.sendEvent("trigger-scan", {
        name: "brand/scan.requested",
        data: { brandName: brand.name, prompt: brand.defaultPrompt, providers: brand.providers },
      });
    }
  }
);

Alertas: Notificação no Slack: "Sua marca foi mencionada pelo ChatGPT ontem, mas não aparece hoje para 'melhor CRM para startups'."

Análise de tendências: "Quando publiquei aquele artigo comparativo, minha taxa de menção nos LLM aumentou?"


O Padrão Pronto para Produção que Vale a Pena Copiar

A combinação de Bright Data + Inngest + Next.js lida com a parte mais difícil do desenvolvimento backend: tornar coisas pouco confiáveis em confiáveis.

Pare de tentar tornar chamadas externas não confiáveis em confiáveis apenas por meio do tratamento de erros. Use um motor de fluxo de trabalho que trate a falta de confiabilidade como padrão, e construa sua lógica como uma série de etapas individualmente duráveis.


Perguntas Frequentes

O que é monitoramento de marca com IA e por que é importante?

Rastreia como plataformas de IA como ChatGPT, Perplexity e Gemini mencionam sua marca quando usuários pedem recomendações.

Dá para usar a API do ChatGPT em vez de fazer scraping?

As respostas da API diferem significativamente da interface do navegador. O scraping captura o que os usuários reais veem.

Quanto custa para rodar?

O Bright Data começa em $0,001 por registro. Para 10 marcas em 6 provedores diariamente, aproximadamente $54/mês — muito menos do que as alternativas comerciais de $200-$500/mês.

Por que as recomendações de marcas dos LLM mudam entre consultas?

As respostas dos LLM são não determinísticas. Há menos de 1 chance em 100 de o ChatGPT dar a mesma lista de marcas em dois prompts idênticos.

O que é o padrão trigger-poll-download?

Um fluxo de trabalho assíncrono em que você aciona uma operação de longa duração, faz polling pela conclusão e então baixa o resultado quando estiver pronto.


Vamos Trabalhar Juntos

Coffee cup

Gostou deste artigo?

Seu apoio me ajuda a criar mais conteúdo técnico aprofundado, ferramentas open-source e recursos gratuitos para a comunidade de desenvolvedores.

Tópicos Relacionados

Engr Mejba Ahmed

Sobre o Autor

Engr Mejba Ahmed

Engr. Mejba Ahmed builds AI-powered applications and secure cloud systems for businesses worldwide. With 10+ years shipping production software in Laravel, Python, and AWS, he's helped companies automate workflows, reduce infrastructure costs, and scale without security headaches. He writes about practical AI integration, cloud architecture, and developer productivity.

Discussion

Comments

0

No comments yet

Be the first to share your thoughts

Leave a Comment

Your email won't be published

8  x  4  =  ?

Continue Aprendendo

Artigos Relacionados

Ver Todos

Comments

Leave a Comment

Comments are moderated before appearing.

Learning Resources

Expand Your Knowledge

Accelerate your growth with structured courses, verified certificates, interactive flashcards, and production-ready AI agent skills.

Sample Certificate of Completion

Sample certificate — complete any course to earn yours

Engr Mejba Ahmed

Engr Mejba Ahmed

Claude Code Expert · Online

👋

Hey there!

Quick Actions

WhatsApp Instant reply

Chat on WhatsApp

+880 1723 741224 · Instant reply

Popular Questions

Engr Mejba Ahmed is connected
Engr Mejba Ahmed is typing...
Engr Mejba Ahmed avatar

✉ Want me to follow up? Drop your email

Engr Mejba Ahmed avatar

📞 Connect Directly

Choose how you'd like to reach me

WhatsApp

+880 1723 741224

Email

[email protected]

✓ Details sent! I'll get back to you shortly.

Powered by OpenAI

335+

Blog Posts

25

AI Courses

63

Projects

Services & Expertise

Pricing & Process

Learning & Resources

Connect & Support