Skip to main content
📝 Outils d'IA

J'ai Construit un Moniteur de Marque IA qui Suit Tous les LLM

Comment j'ai construit un outil de surveillance de marque IA qui suit les mentions dans ChatGPT, Claude, Gemini et Perplexity. Guide complet de construction Next.js avec code.

8 min

Temps de lecture

1,584

Mots

Mar 29, 2026

Publié

Engr Mejba Ahmed

Écrit par

Engr Mejba Ahmed

Partager l'article

J'ai Construit un Moniteur de Marque IA qui Suit Tous les LLM

J'ai Créé un Moniteur de Marque IA qui Suit Tous les LLM

L'équipe marketing de Freshdesk avait un problème dont elle n'était pas consciente.

Leur produit était recommandé par Google Search. Mais quand quelqu'un ouvrait ChatGPT — qui gère aujourd'hui 900 millions d'utilisateurs actifs par semaine — et tapait "quel est le meilleur outil de support client pour une équipe de 50 personnes ?", Freshdesk n'apparaissait pas dans la réponse. Gorgias oui. Zendesk oui. Intercom oui. Freshdesk ? Invisible.

C'est le problème que j'ai décidé de résoudre en une seule session de code, une application Next.js et une API de scraping. Une application fonctionnelle qui interroge ChatGPT, Perplexity, Gemini, Grok, Copilot et Google Search pour n'importe quel nom de marque — puis vous dit exactement où vous apparaissez, où vous n'apparaissez pas, et à quoi ressemble le sentiment quand vous apparaissez.


Pourquoi le Classement Google de votre Marque ne Raconte Plus Toute l'Histoire

Le volume des recherches sur les moteurs de recherche devrait chuter de 25 % d'ici 2026, les utilisateurs migrant vers les chatbots IA. ChatGPT seul a dépassé 1 milliard d'utilisateurs actifs mensuels estimés en janvier 2026.

Les LLM ne classent pas des pages. Ils recommandent des marques. Et il y a moins d'une chance sur 100 que ChatGPT donne la même liste de recommandations de marques dans deux réponses à la même requête.

Des outils commerciaux comme Otterly.ai, l'AI Visibility Toolkit de Semrush et Siftly facturent entre 200 et 500 $/mois pour ce suivi. Mais je voulais comprendre les mécanismes en le construisant moi-même.


Le Problème API vs. Navigateur que Personne ne Vous Prévient

La réponse que vous obtenez de l'API de ChatGPT n'est pas la même que celle qu'un utilisateur voit dans le navigateur. L'application web ajoute des optimisations supplémentaires — formatage des citations, liens vers les sources, restructuration des réponses. L'API fournit une complétion brute. Le navigateur offre une expérience curatée avec sources et contexte.

Et Copilot n'a aucune API publique. Vous devez voir ce que l'interface réelle du navigateur affiche.

La géolocalisation ajoute une autre couche. Un utilisateur à Londres demandant à Perplexity "meilleur outil de gestion de projet" obtient des résultats différents d'un utilisateur à San Francisco. Les appels API ne capturent pas cette variance. Le scraping de l'interface utilisateur oui.

Cela a mis fin à mon plan "juste appeler les APIs" dès la première heure. Pour voir ce que voient les vrais utilisateurs, il faut scraper la véritable interface utilisateur.

C'est là que Bright Data est entré dans la construction.


Les Scrapers IA de Bright Data

Le scraper IA de Bright Data : des scrapers préconstruits pour les plateformes IA qui retournent des données structurées — texte de réponse, sources, citations — depuis les interfaces web orientées utilisateur de ChatGPT, Gemini, Copilot, Perplexity et Google SERP.

Les tarifs débutent à 0,001 $ par enregistrement.

Le scraping des plateformes IA n'est pas instantané. Le scraper charge la page, attend que le modèle génère sa réponse (10 à 30 secondes), puis extrait le résultat. Si le scraping prend plus de 60 secondes, Bright Data retourne un ID de snapshot. Vous sondez cet ID avec des requêtes GET jusqu'à ce que le résultat soit prêt.

C'est le pattern trigger-poll-download, et il a fondamentalement façonné l'architecture de l'application.


La Stack : Next.js, SQLite, Drizzle et un Agent de Programmation

  • Next.js avec React pour le frontend et les routes API
  • SQLite avec Drizzle ORM pour la persistance locale
  • Bright Data API pour scraper les six plateformes
  • Claude Code comme agent de programmation principal (avec un passage à Cursor à mi-parcours)

Trois tables : brands, scans et results. Chaque résultat stocke le nom du fournisseur, le statut de mention, le sentiment, le texte brut de la réponse et les sources éventuelles.


Ce qui a Mal Tourné : Les Modes de Défaillance de la Première Architecture

Problème 1 : Cascades de timeouts. Quand le scraping d'un fournisseur prenait trop de temps, tout le scan échouait.

Problème 2 : Pas de récupération. Si je fermais mon ordinateur portable, tous les scans en cours disparaissaient.

Problème 3 : Limitation de débit. Plusieurs scans simultanés atteignaient les limites de débit sans mécanisme de retry propre.


Inngest : La File d'Attente en Arrière-Plan qui a Tout Résolu

Avant (fragile) :

  1. L'utilisateur clique sur "Scan"
  2. La route API déclenche les six scrapers de manière synchrone
  3. Attend tous les résultats ou expire

Après (durable) :

  1. L'utilisateur clique sur "Scan"
  2. La route API envoie un événement à Inngest
  3. Inngest déclenche les six scrapers en parallèle, chacun comme une étape séparée
  4. Chaque étape gère sa propre boucle de polling de manière indépendante
  5. Les résultats sont écrits dans SQLite au fur et à mesure de leur complétion
  6. Le frontend interroge les mises à jour et rend les résultats de manière incrémentielle
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;
  }
);

Le Passage de Claude Code à Cursor

J'ai basculé vers Cursor utilisant Opus 4.6 à mi-parcours. Le problème venait de mon ingénierie du contexte — quand on alimente plusieurs documentations de fournisseurs à un agent de programmation, il faut structurer le travail comme des tâches séquentielles, chacune ne contenant que la documentation du fournisseur concerné.


Gestion des Six Fournisseurs

ChatGPT : Requiert prompt. country optionnel pour la géolocalisation. Perplexity : Requiert prompt. Retourne des citations inline. Gemini AI Mode : Requiert à la fois url et prompt. Grok : Requiert prompt. Copilot : Requiert url. Pas d'API publique. Google SERP : Requiert query (pas 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,
    }),
  },
};

Ce que j'Aurais Fait Différemment

Commencer avec Inngest dès le départ. Construire d'abord la version synchrone m'a coûté quatre heures de refactorisation.

Simplifier le schéma de la base de données. Les données brutes peuvent vivre sous forme de blob JSON.

Construire le système de planification dès le premier jour. Les scans uniques sont utiles. Suivre les changements dans le temps est précieux.

Gestion des erreurs plus granulaire. "Erreur de limite de débit" → réessayer dans 30 secondes. "Élément introuvable" → l'interface a changé, me prévenir.


L'Argumentaire Business

Des entreprises comme Otterly.ai et Siftly facturent 200 à 500 $/mois pour la surveillance des LLM. L'écart de visibilité entre le SEO traditionnel et les recommandations IA est réel.

Les LLM privilégient la pertinence sémantique et la clarté structurelle par rapport à la seule autorité de domaine. Un commentaire Reddit bien structuré ou un avis détaillé sur un blog de niche peut influencer une recommandation LLM davantage qu'une page d'accueil avec un DA-90.


Étendre le Système

Scans planifiés utilisant le déclencheur cron d'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 },
      });
    }
  }
);

Alertes : Notification Slack : "Votre marque a été mentionnée par ChatGPT hier mais ne l'est plus aujourd'hui pour 'meilleur CRM pour les startups'."

Analyse de tendances : "Quand j'ai publié cet article comparatif, mon taux de mention dans les LLM a-t-il augmenté ?"


Le Pattern Prêt pour la Production qui Vaut la Peine d'être Copié

La combinaison Bright Data + Inngest + Next.js gère la partie la plus difficile du développement backend : rendre les choses peu fiables fiables.

Arrêtez d'essayer de rendre des appels externes peu fiables fiables uniquement par la gestion des erreurs. Utilisez un moteur de workflow qui traite le manque de fiabilité comme la norme, et construisez votre logique comme une série d'étapes individuellement durables.


Foire aux Questions

Qu'est-ce que la surveillance de marque IA et pourquoi est-ce important ?

Elle suit comment les plateformes IA comme ChatGPT, Perplexity et Gemini mentionnent votre marque quand les utilisateurs demandent des recommandations.

Peut-on utiliser l'API de ChatGPT plutôt que de scraper ?

Les réponses de l'API diffèrent significativement de l'interface du navigateur. Le scraping capture ce que voient les vrais utilisateurs.

Combien cela coûte-t-il de faire tourner le système ?

Bright Data commence à 0,001 $ par enregistrement. Pour 10 marques sur 6 fournisseurs quotidiennement, environ 54 $/mois — bien moins que les alternatives commerciales à 200-500 $/mois.

Pourquoi les recommandations de marques des LLM changent-elles entre les requêtes ?

Les réponses des LLM sont non déterministes. Moins d'une chance sur 100 que ChatGPT donne la même liste de marques dans deux prompts identiques.

Qu'est-ce que le pattern trigger-poll-download ?

Un workflow asynchrone où l'on déclenche une opération longue, on sonde sa complétion, puis on télécharge le résultat quand il est prêt.


Travaillons Ensemble

Coffee cup

Vous avez apprécié cet article ?

Votre soutien m'aide à créer davantage de contenu technique approfondi, d'outils open source et de ressources gratuites pour la communauté des développeurs.

Sujets connexes

Engr Mejba Ahmed

À propos de l'auteur

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

14  +  1  =  ?

Continuer l'apprentissage

Articles connexes

Tout parcourir

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