Recherche
Construisez une analyse concurrentielle utilisable par votre équipe commerciale
Rassemblez les pages du concurrent, la couverture autour de lui et ce que disent les acheteurs sur X, puis composez une analyse où chaque affirmation porte une source, une date et un statut.
Copier le prompt
Remplacez les champs entre crochets, puis collez dans Claude Code, Codex ou toute IA avec accès au terminal. Elle installe le skill Felo, demande avant de dépenser des crédits et exécute le workflow.
Rédige un teardown concurrentiel de [nom du concurrent] pour [notre produit]. Périmètre : [segment], [région], [langue]. Période : [90 derniers jours / 12 derniers mois]. Décision éclairée : [changement de prix / positionnement de lancement / traitement des objections]. Sources de départ : [domaine du concurrent], [URL de la page tarifs], [URL du changelog]. Produis un teardown Markdown avec : 1. Leur positionnement, dans leurs propres mots. 2. Un tableau de preuves : affirmation, titre de la source, URL, date, statut (Verified / Vendor claim / Third-party / Signal / Inference / Not verified). 3. Les tarifs : ce que dit la page, avec le lien et la date de vérification. Ne recopie jamais un tarif dans le texte sans la page et la date. 4. Les points de friction des acheteurs, avec comptes X et dates, étiquetés comme signal. 5. Ce que nous devrions faire ensuite, marqué comme recommandation. 6. Une liste complète des sources. Règles : - Cite leur positionnement ; ne le reformule pas en plus fort. - Sépare les affirmations du fournisseur, la couverture tierce et tes déductions. Étiquette chaque ligne. - N’invente jamais un prix, un chiffre, un nom de client ou un benchmark. Une donnée manquante s’écrit « Non disponible ». - Transforme la période et la région en valeurs explicites. - Avant de consommer des crédits, montre les appels API prévus et attends mon accord. - Ne publie, n’envoie, ne planifie rien et n’alimente aucun CRM. - Écris le résultat dans ./competitor-teardown.md et résume-le dans le chat.
La copie inclut aussi les étapes d'installation et les règles de sécurité.
Ce que vous obtenez
Exemple de sortie d'une exécution. Pas de génération en direct.
Teardown concurrentiel — [concurrent], vérifié le 2026-10-30
Leur positionnement
Titre de la page d’accueil : « La plateforme pour les équipes support en croissance. » Page catégorie : « Tout ce dont votre équipe support a besoin. » Deux affirmations fournisseur, citées telles quelles.
Tableau de preuves
| Affirmation | Source | Date | Statut |
|---|---|---|---|
| Se positionne comme plateforme, pas comme outil ponctuel | https://example.com/competitor/home | 2026-10-30 | Verified |
| Livre des changements chaque semaine | https://example.com/competitor/changelog | 2026-10-28 | Verified |
| Couvert par des synthèses indépendantes | https://example.com/roundup | 2026-10-27 | Third-party |
| Des acheteurs mentionnent un onboarding lent | publication X citée plus bas | 2026-10-14 | Signal |
| L’entreprise est leur plus grand segment | Non disponible | — | Not verified |
Tarifs
La page tarifs liste une offre par paliers et une offre à l’usage. Les tarifs ne sont pas répétés ici ; vérifiez la page live et la date : https://example.com/competitor/pricing (2026-10-30).
Où les acheteurs objectent
@example_dev, 2026-10-14 : « l’installation a pris plus de temps que la démo ne le suggérait. » Une publication datée ; une plainte, pas une estimation de fréquence.
Recommandation
Mettre en avant le temps jusqu’au premier résultat sur la page de comparaison. C’est notre déduction, pas une affirmation du concurrent.
Sources
- https://example.com/competitor/home
- https://example.com/competitor/pricing
- https://example.com/competitor/changelog
Les appels exacts
Pour les développeurs : le même workflow en code, dans l'ordre d'exécution.
Afficher les appels API
Partez d’une base sourcée
Chat renvoie une réponse et les pages utilisées, ce qui donne une carte des discussions sur le concurrent. Traitez la réponse comme une piste, pas comme une source : gardez les liens, ils fournissent les lignes tierces du tableau de preuves. Le helper ci-dessous envoie la clé une fois et lève une erreur hors 2xx.
competitor.ts const BASE = "https://openapi.felo.ai"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; async function felo<T>(path: string, body?: unknown): Promise<T> { const res = await fetch(`${BASE}${path}`, { method: body ? "POST" : "GET", headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<T>; } type ChatData = { data: { answer: string; resources: { link: string; title: string; snippet: string }[]; }; }; const competitor = "Example Competitor"; const segment = "mid-market support teams"; const baseline = await felo<ChatData>("/v2/chat", { query: `How does ${competitor} position itself for ${segment}? Include pricing and recent launches.`, }); const seedSources = baseline.data.resources.slice(0, 5);Exemple de sortie
{ "answer": "The competitor positions itself as …", "sources": [ { "link": "https://example.com/competitor", "title": "…", "snippet": "…" } ] }Récupérez les pages qu’il contrôle
La couverture tierce montre ce que pensent les gens ; les pages du concurrent montrent ce qu’il affirme. Extrayez accueil, tarifs et changelog en Markdown avec lisibilité et datez chaque récupération : une page tarifs sans date est un piège.
competitor.ts type ExtractData = { data: { content: string } }; const ownedPages = [ { url: "https://example.com/competitor/home", title: "Homepage" }, { url: "https://example.com/competitor/pricing", title: "Pricing" }, { url: "https://example.com/competitor/changelog", title: "Changelog" }, ]; const fetched = await Promise.all( ownedPages.map(async (page) => { const res = await felo<ExtractData>("/v2/web/extract", { url: page.url, output_format: "markdown", with_readability: true, with_cache: true, }); const checkedAt = new Date().toISOString().slice(0, 10); return { ...page, checkedAt, content: res.data.content }; }), );Exemple de sortie
{ "url": "https://example.com/competitor/pricing", "checkedAt": "2026-10-30", "content": "# Pricing\n\nExtracted page text…" }Regardez ce que disent les acheteurs sur X
Cherchez sur X les objections et contournements publiés sur le concurrent. Gardez le compte et la date de chaque post ; une citation datée prouve une plainte, pas sa fréquence. L’analyse la marque comme signal et ne transforme jamais quelques posts en pourcentage.
competitor.ts type XData = { data: { tweets: { content: string; author: { username: string }; created_at: string; metrics: { retweet_count: number; favorite_count: number }; }[]; }; }; const since = Math.floor((Date.now() - 90 * 24 * 60 * 60 * 1000) / 1000); const buyerSignal = await felo<XData>("/v2/x/tweet/search", { query: `"${competitor}" (pricing OR onboarding OR migration)`, limit: 25, since_time: since, }); const objections = buyerSignal.data.tweets.slice(0, 5);Exemple de sortie
{ "data": { "tweets": [ { "content": "setup took longer than the demo suggested", "author": { "username": "example_dev" }, "created_at": "2026-10-14T09:20:00Z", "metrics": { "retweet_count": 3, "favorite_count": 24 } } ] } }Assemblez l’analyse avec un tableau de preuves
C’est l’étape éditoriale : transformez les pages et posts en affirmations et donnez à chacune source, date et statut. La colonne statut garde le document honnête :
Verifiedpour ce que dit la page,Vendor claimpour le marketing,Third-partypour la couverture externe,Signalpour un post daté,Inferencepour votre lecture etNot verifiedquand la preuve manque.competitor.ts const today = new Date().toISOString().slice(0, 10); const row = (claim: string, source: string, date: string, status: string) => `| ${claim} | ${source} | ${date} | ${status} |`; const teardown = [ `# Competitor teardown — ${competitor}`, `Scope: ${segment}. Checked ${today}.`, "", "| Claim | Source | Date | Status |", "| --- | --- | --- | --- |", row("Free tier listed on the pricing page", ownedPages[1].url, fetched[1].checkedAt, "Verified"), row("Positions as a platform, not a point tool", ownedPages[0].url, fetched[0].checkedAt, "Vendor claim"), row("Discussed in independent coverage", seedSources[0]?.link ?? "Not available", today, "Third-party"), row("Buyers report onboarding friction", "X post, quoted below", today, "Signal"), row("Most revenue comes from enterprise", "Not available", "—", "Not verified"), "", "## Recommendation", "Lead with time-to-first-result on the comparison page. Inference, not a competitor claim.", ].join("\n"); console.log(teardown);Exemple de sortie
| Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
Archivez dans le LiveDoc pour la prochaine actualisation
Créez un LiveDoc par concurrent, ajoutez les pages récupérées comme ressources URL et l’analyse comme document. Réajouter une URL est dédupliqué : au prochain trimestre vous ne récupérez que les changements et l’analyse précédente reste dans la même archive.
competitor.ts type LiveDocData = { data: { short_id: string } }; const teardownDoc = await felo<LiveDocData>("/v2/livedocs", { name: `Teardown: ${competitor}`, description: `Sources and teardown checked ${today}`, }); await felo(`/v2/livedocs/${teardownDoc.data.short_id}/resources/urls`, { urls: fetched.map((page) => ({ url: page.url, title: page.title })), }); await felo(`/v2/livedocs/${teardownDoc.data.short_id}/resources/doc`, { title: `Teardown ${today}`, content: teardown, }); console.log(teardownDoc.data.short_id); // the next refresh reuses this LiveDocExemple de sortie
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Ce qui est inclus
- Base sourcée du Chat API et les pages derrière
- Page d’accueil, tarifs et changelog du concurrent extraits en Markdown
- Commentaires acheteurs datés de X, marqués comme signal et non preuve
- Tableau de preuves séparant faits vérifiés, déclarations fournisseur et inférence
- LiveDoc qui garde les sources pour ne pas repartir de zéro
Ce qu'elle ne fait pas
- Sources publiques uniquement ; pas d’entretiens gagné/perdu, de notes CRM ni de tableaux de bord privés
- Les tarifs sont liés et datés, jamais figés dans un tableau sans date de vérification
- La couverture X est incomplète et ne représente pas un échantillon d’acheteurs
- Il ne choisit pas votre positionnement ; les recommandations sont marquées comme inférence
- Il ne publie pas l’analyse et n’écrit pas dans un outil de battlecard
Questions
D’où viennent les preuves ?
Le Chat API renvoie une base sourcée et les pages utilisées, Web Fetch transforme les pages du concurrent en Markdown et X Search ajoute des posts datés. Chaque ligne garde source et date, et les inférences ont leur propre statut.
Puis-je couvrir plusieurs concurrents ?
Oui. Exécutez le même prompt une fois par concurrent et gardez un LiveDoc par entreprise. Une page comparative ne joint que les lignes marquées vérifiées, sans mélanger les preuves de deux exécutions.
Puis-je citer leurs tarifs ?
Le workflow enregistre ce que dit la page tarifs, avec lien et date de vérification. Il ne fige pas les tarifs dans le texte, car les prix changent et un chiffre périmé est pire que pas de chiffre.
Et nos notes gagné/perdu ?
Il ne lit que des sources publiques. Ajoutez les notes internes comme ressource document séparée dans le LiveDoc et marquez-les internes ; elles ne sont jamais citées dans les supports clients.
À quelle fréquence actualiser ?
Par déclencheur, pas par calendrier : changement de prix, lancement ou début de cycle commercial. Relancez le workflow dans le même LiveDoc pour garder l’analyse précédente à côté de la nouvelle.
Combien coûte une analyse ?
Chaque appel chat, extraction et recherche X consomme des crédits à l’usage ; les tarifs actuels sont sur la page des prix. Le prompt demande votre accord avant dépense.
Workflows liés
Transformez une question en brief de recherche sourcé
Interrogez le web, récupérez les pages derrière la réponse en Markdown, ajoutez ce que disent les praticiens sur X, puis conservez les preuves dans un LiveDoc que vous pourrez interroger plus tard.
Ouvrir le workflowRechercheTransformez une question de marché en brief go-to-market
Posez une question précise au marché, lisez les pages catégorie et tarifs derrière la réponse, collectez comment les acheteurs décrivent le problème sur X, puis enregistrez un brief GTM avec affirmations sourcées et questions ouvertes.
Ouvrir le workflowContenuPubliez un résumé quotidien d’actualité IA que votre équipe lit vraiment
Obtenez une synthèse sourcée, ajoutez ce que publient les praticiens sur X, récupérez une transcription vidéo, composez l’édition en Markdown et archivez-la dans un LiveDoc.
Ouvrir le workflowAdaptez-la
La même recette, adaptée à votre façon de livrer.
Actualisez par déclencheur, pas par calendrier
Relancez le même workflow quand le concurrent change ses prix, fait un lancement majeur ou avant un cycle commercial. Gardez chaque analyse comme document daté dans le même LiveDoc, pour que le trimestre précédent reste à côté du nouveau.
Transformez l’analyse en battlecards
À partir du même tableau, écrivez une page par persona — acheteur économique, champion, évaluateur technique — en utilisant seulement les lignes `Verified`, avec les liens joints. Laissez `Inference` hors de tout support client.
Comparez deux concurrents
Exécutez le workflow une fois par concurrent avec des LiveDocs séparés, puis construisez une page comparative uniquement avec les lignes `Verified` dans les deux exécutions. Ne fusionnez jamais deux exécutions sans colonne de statut.
Aller plus loin
Les pages de référence derrière cette recette et la suite.