Felo API PlatformFelo API Platform

Recherche

Transformez 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.

Temps30 minutesNiveauIntermédiaireMis à jour2026-10-30
Pour quiFondateurs et opérateursMarketing produitResponsables commerciaux

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 brief de recherche go-to-market pour [produit] qui entre sur [segment ou ICP] en [région], en [langue].

Motion : [self-serve / sales-led / partenaire]. Décision éclairée : [lancement / prix / repositionnement]. Période : [90 derniers jours / 12 derniers mois].

Produis un brief Markdown avec :
1. Définition du segment : qui ils sont, ce qu’ils utilisent aujourd’hui, ce que les sources disent de la taille — cite une source ou écris « Non disponible ».
2. Le langage des acheteurs : comment ils décrivent le problème, avec liens et dates.
3. Les alternatives : ce qu’ils quittent, y compris les tableurs et le statu quo.
4. Les objections et les preuves que les acheteurs réclament.
5. Les questions ouvertes auxquelles les sources publiques ne répondent pas.
6. Une liste complète des sources.

Règles :
- Chaque affirmation de marché exige un lien et une date. N’estime jamais la taille, la croissance ou le budget au ressenti.
- Sépare les sources indépendantes, les pages fournisseur et tes déductions.
- Utilise X pour le langage et les objections, pas comme preuve de taille de marché.
- 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 ./gtm-brief.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.

Exemple de brief GTM (extrait)

Brief GTM — [segment] en [région]

Définition du segment

Petites équipes opérationnelles qui gèrent leur planning dans des tableurs. Taille : non disponible dans les sources publiques consultées — pas de chiffre dans le brief sans source.

Langage des acheteurs

  • « on fait encore ça dans un tableur » — publication X, 2026-10-18
  • « la configuration est la partie difficile » — publication X, 2026-10-02

Étiqueté comme langage, pas comme preuve de prévalence.

Alternatives citées par les acheteurs

Tableurs, une suite existante et ne rien faire. Source : https://example.com/thread (2026-10-18).

Objections et preuves exigées

Revue de sécurité et chemin de migration. Les acheteurs demandent une référence nommée ; nous n’en avons pas publiquement, donc cela reste une question ouverte.

Questions ouvertes

  • Quelle part du segment a déjà une ligne budgétaire dédiée ?
  • L’objection change-t-elle avec la taille de l’entreprise ?

Sources

  • https://example.com/category-page
  • https://example.com/pricing-page
  • https://example.com/thread

Les appels exacts

Pour les développeurs : le même workflow en code, dans l'ordre d'exécution.

Afficher les appels API
  1. Cadrez la question de marché

    Chat renvoie une réponse et les pages utilisées : commencez par une question assez étroite pour être répondue : qui achète, qu’utilisent-ils aujourd’hui, quelles objections émergent. Gardez les ressources comme liens-pistes ; la réponse est une piste, les liens sont les preuves et ferment la liste des sources.

    gtm.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 product = "scheduling tool"; // replace with your product
    const segment = "operations teams at 50-200 person companies";
    const region = "DACH";
    
    const market = await felo<ChatData>("/v2/chat", {
      query: `Who buys ${product} for ${segment} in ${region}, what do they use today, and what objections come up?`,
    });
    
    const seedSources = market.data.resources.slice(0, 5);

    Exemple de sortie

    {
      "answer": "Buyers in this segment usually start from spreadsheets and …",
      "sources": [
        { "link": "https://example.com/category-page", "title": "…", "snippet": "…" }
      ]
    }
  2. Lisez les pages catégorie elles-mêmes

    Récupérez les pages qui cadrent le marché : vue catégorie, page comparative et page tarifs. Extrayez-les en Markdown avec lisibilité et datez chaque récupération, car la qualité d’une lecture de marché dépend des pages derrière.

    gtm.ts
    type ExtractData = { data: { content: string } };
    
    const marketPages = [
      { url: "https://example.com/category", title: "Category overview" },
      { url: "https://example.com/comparison", title: "Comparison page" },
      { url: "https://example.com/pricing", title: "Pricing page" },
    ];
    
    const pages = await Promise.all(
      marketPages.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/category",
      "checkedAt": "2026-10-30",
      "content": "# Category overview\n\nExtracted page text…"
    }
  3. Collectez comment les acheteurs décrivent le problème

    Cherchez sur X les mots que les acheteurs utilisent face au problème, pas le nom de votre produit. Gardez comptes et dates ; le brief utilise ces posts pour le langage et les objections, jamais comme mesure de taille de marché ou de fréquence d’une objection.

    gtm.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 language = await felo<XData>("/v2/x/tweet/search", {
      query: `(spreadsheet OR "scheduling tool") (alternative OR "looking for")`,
      limit: 25,
      since_time: since,
    });
    
    const quotes = language.data.tweets.slice(0, 5);

    Exemple de sortie

    { "data": { "tweets": [
      {
        "content": "we are still doing this in a spreadsheet",
        "author": { "username": "example_ops" },
        "created_at": "2026-10-18T11:05:00Z",
        "metrics": { "retweet_count": 1, "favorite_count": 18 }
      }
    ] } }
  4. Écrivez le brief autour de la décision

    Réunissez définition du segment, langage acheteur, alternatives, objections et questions ouvertes dans un Markdown. Chaque affirmation garde source et date, la taille de marché n’est écrite qu’avec une source, et ce que les sources publiques ne répondent pas va dans les questions ouvertes au lieu d’être inféré.

    gtm.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const sourceLine = (title: string, url: string, date: string) =>
      `- ${title}: ${url} (checked ${date})`;
    
    const brief = [
      `# GTM brief — ${segment} in ${region}`,
      "",
      "## Segment definition",
      "See the category page for how the segment is described. Market size: Not available from public sources reviewed.",
      "",
      "## Buyer language",
      ...quotes.map((post) => `- @${post.author.username}, ${post.created_at.slice(0, 10)}: ${post.content}`),
      "",
      "## Alternatives buyers mention",
      "Spreadsheets, an incumbent suite, and doing nothing. Treated as language until a source ranks them.",
      "",
      "## Objections and proof required",
      "Migration path and a named reference. Marked open: whether the objection changes by company size.",
      "",
      "## Open questions",
      "- How much of the segment already has a dedicated budget line?",
      "- Which objection blocks a pilot most often?",
      "",
      "## Sources",
      ...pages.map((page) => sourceLine(page.title, page.url, page.checkedAt)),
      ...seedSources.map((source) => `- ${source.title}: ${source.link}`),
    ].join("\n");
    
    console.log(brief);

    Exemple de sortie

    # GTM brief — operations teams at 50-200 person companies in DACH
  5. Gardez les preuves pour le prochain marché

    Créez un LiveDoc par segment et région, ajoutez les pages récupérées comme ressources URL et le brief comme document. Le prochain marché part des mêmes sources sans récupérer à nouveau les pages catégorie, et réajouter une URL est dédupliqué}.

    gtm.ts
    type LiveDocData = { data: { short_id: string } };
    
    const briefDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `GTM: ${segment} — ${region}`,
      description: `Market evidence checked ${today}`,
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/urls`, {
      urls: pages.map((page) => ({ url: page.url, title: page.title })),
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/doc`, {
      title: `GTM brief ${today}`,
      content: brief,
    });
    
    console.log(briefDoc.data.short_id); // reuse for the next region

    Exemple de sortie

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Ce qui est inclus

  • Lecture de marché sourcée du Chat API et les pages derrière
  • Pages catégorie, comparaison et tarifs extraites en Markdown
  • Langage et objections acheteurs de X, avec comptes et dates
  • Brief structuré autour d’une décision de lancement, pas d’un sujet
  • LiveDoc pour réutiliser les preuves à la prochaine région

Ce qu'elle ne fait pas

  • Sources publiques uniquement ; pas de rapports payants, panels ou entretiens clients
  • N’estime jamais la taille ou la croissance du marché — sans données, écrit « Non disponible »
  • Les posts X sont langage et signal, pas un échantillon représentatif d’acheteurs
  • Il ne choisit pas le segment ni le prix à votre place
  • Il ne publie pas le brief et n’écrit pas dans le CRM

Questions

Ai-je besoin d’un rapport de marché payant ?

Non. Le workflow lit des sources publiques et signale les lacunes. Si vous avez déjà un rapport, ajoutez-le comme document dans le LiveDoc et citez-le comme les autres sources.

Puis-je étudier un marché dans une autre langue ?

Oui. Définissez la région et la langue. Les citations restent dans la langue d’origine avec une traduction à côté, pour qu’un relecteur local vérifie la formulation.

Obtiens-je une taille de marché ?

Seulement si une source l’indique, avec lien et date. Sinon le brief écrit « Non disponible » au lieu d’inventer un chiffre ou d’extrapoler d’un post.

Peut-il parler aux clients ?

Non. Il lit des sources publiques. Ajoutez les notes d’entretien comme document et marquez-les internes ; le brief ne présente jamais des notes privées comme preuves publiques.

Quelle différence avec le brief de recherche ?

Le brief de recherche répond à une question. Ce workflow organise les preuves autour d’une décision go-to-market — segment, langage acheteur, alternatives, objections et preuves demandées — pour alimenter un plan de lancement.

Combien coûte un brief ?

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

Adaptez-la

La même recette, adaptée à votre façon de livrer.

Exécutez par région

Gardez la structure des sections et ne changez que région et langue. Un LiveDoc par région et les mêmes questions, pour que les briefs se comparent au lieu de devenir trois documents sans lien.

Ajoutez vos notes d’entretien

Collez les notes d’appels clients comme ressource document et marquez-les internes. Le brief peut les citer à côté des preuves publiques, mais ne présente jamais une note privée comme source publique.

Alimentez le deck de lancement

Transmettez la section objections et preuves au workflow deck en gardant la liste des sources. Le brief reste la couche de preuves ; le deck en est une présentation, pas une seconde source de vérité.

Les pages de référence derrière cette recette et la suite.