Felo API PlatformFelo API Platform

Research

Eine Marktfrage in ein Go-to-Market-Briefing verwandeln

Stelle dem Markt eine präzise Frage, lies die Kategorie- und Preisseiten hinter der Antwort, sammle auf X, wie Käufer das Problem beschreiben, und speichere ein GTM-Briefing mit belegten Aussagen und offenen Fragen.

Dauer30 MinutenLevelFortgeschrittenAktualisiert2026-10-30
Für wenGründer & BetreiberProduktmarketingVertriebsleiter

Prompt kopieren

Ersetze die Felder in eckigen Klammern und füge den Prompt in Claude Code, Codex oder eine KI mit Terminalzugriff ein. Sie installiert den Felo-Skill, fragt vor Credits und führt den Workflow aus.

Erstelle ein Go-to-Market-Recherche-Briefing für [Produkt], das in [Segment oder ICP] in [Region] eintritt, auf [Sprache].

Motion: [Self-Serve / Sales-led / Partner]. Entscheidung, die es stützt: [Launch / Preis / Neupositionierung]. Zeitraum: [letzte 90 Tage / letzte 12 Monate].

Erstelle ein Markdown-Briefing mit:
1. Segmentdefinition: wer sie sind, was sie heute nutzen und was die Quellen zur Größe sagen — zitiere eine Quelle oder schreibe „Nicht verfügbar“.
2. Käufersprache: wie sie das Problem beschreiben, mit Links und Daten.
3. Alternativen: wovon sie wechseln, einschließlich Tabellen und „nichts tun“.
4. Einwände und die Beweise, die Käufer verlangen.
5. Offene Fragen, die öffentliche Quellen nicht beantworten.
6. Einer vollständigen Quellenliste.

Regeln:
- Jede Marktaussage braucht Link und Datum. Schätze Marktgröße, Wachstum oder Budget niemals aus dem Bauch.
- Trenne unabhängige Quellen, Anbieterseiten und deine Schlussfolgerungen.
- Nutze X für Sprache und Einwände, nicht als Beweis für Marktgröße.
- Löse Zeitraum und Region in explizite Werte auf.
- Bevor Credits verbraucht werden, zeige die geplanten API-Aufrufe und warte auf meine Freigabe.
- Veröffentliche, versende, plane oder schreibe nichts in ein CRM.
- Schreibe das Ergebnis nach ./gtm-brief.md und fasse es im Chat zusammen.

Die Kopie enthält auch die Installationsschritte und Sicherheitsregeln.

Das bekommst du

Beispielausgabe eines Laufs. Keine Live-Generierung.

Beispiel-GTM-Briefing (Auszug)

GTM-Briefing — [Segment] in [Region]

Segmentdefinition

Kleine Operationsteams, die Terminplanung in Tabellen machen. Größe: Nicht verfügbar in den geprüften öffentlichen Quellen — ohne Quelle keine Zahl ins Briefing.

Käufersprache

  • „wir machen das noch in einer Tabelle“ — X-Beitrag, 2026-10-18
  • „das Setup ist der schwierige Teil“ — X-Beitrag, 2026-10-02

Als Sprache markiert, nicht als Beleg für Verbreitung.

Alternativen der Käufer

Tabellen, eine bestehende Suite und nichts tun. Quelle: https://example.com/thread (2026-10-18).

Einwände und geforderte Nachweise

Sicherheitsprüfung und Migrationspfad. Käufer verlangen eine namentliche Referenz; öffentlich haben wir keine, also bleibt es eine offene Frage.

Offene Fragen

  • Wie viel des Segments hat bereits eine eigene Budgetlinie?
  • Ändert sich der Einwand mit der Unternehmensgröße?

Quellen

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

Die konkreten Aufrufe

Für Entwickler: derselbe Workflow als kopierbarer Code in Ausführungsreihenfolge.

Konkrete API-Aufrufe zeigen
  1. Die Marktfrage rahmen

    Chat gibt Antwort und genutzte Seiten zurück, also beginne mit einer Frage, die eng genug zum Beantworten ist: Wer kauft, was nutzen sie heute, welche Einwände kommen. Behalte die Ressourcen als Hinweislinks; die Antwort ist ein Hinweis, die Links sind Belege und schließen am Ende die Quellenliste.

    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);

    Beispielausgabe

    {
      "answer": "Buyers in this segment usually start from spreadsheets and …",
      "sources": [
        { "link": "https://example.com/category-page", "title": "…", "snippet": "…" }
      ]
    }
  2. Die Kategorieseiten selbst lesen

    Lade die Seiten, die den Markt rahmen: Kategorieübersicht, Vergleichsseite und Preisseite. Extrahiere sie mit Lesbarkeit als Markdown und stemple das Abrufdatum, denn die Qualität der Marktlesart hängt von den Seiten dahinter ab.

    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 };
      }),
    );

    Beispielausgabe

    {
      "url": "https://example.com/category",
      "checkedAt": "2026-10-30",
      "content": "# Category overview\n\nExtracted page text…"
    }
  3. Sammle, wie Käufer das Problem beschreiben

    Suche auf X nach den Worten, die Käufer nutzen, wenn sie auf das Problem stoßen, nicht nach deinem Produktnamen. Behalte Handles und Daten; das Briefing nutzt die Posts für Sprache und Einwände, nie als Maß für Marktgröße oder Häufigkeit eines Einwands.

    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);

    Beispielausgabe

    { "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. Das Briefing um die Entscheidung schreiben

    Bringe Segmentdefinition, Käufersprache, Alternativen, Einwände und offene Fragen in ein Markdown. Jede Aussage behält Quelle und Datum, Marktgröße wird nur mit Quelle genannt, und was öffentliche Quellen nicht beantworten, geht in offene Fragen statt in Schlussfolgerungen.

    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);

    Beispielausgabe

    # GTM brief — operations teams at 50-200 person companies in DACH
  5. Belege für den nächsten Markt sichern

    Lege pro Segment und Region ein LiveDoc an, füge geladene Seiten als URL-Ressourcen und das Briefing als Dokument hinzu. Der nächste Markt startet mit denselben Quellen ohne erneutes Laden, und erneutes Hinzufügen einer URL wird dedupliziert.

    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

    Beispielausgabe

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Enthalten

  • Belegte Marktlesart aus der Chat API und die Seiten dahinter
  • Kategorie-, Vergleichs- und Preisseiten als Markdown
  • Käufersprache und Einwände aus X mit Handles und Datum
  • Ein um die Launch-Entscheidung herum strukturiertes Briefing
  • Ein LiveDoc, damit die nächste Region oder der nächste Launch die Belege wiederverwendet

Was es nicht macht

  • Nur öffentliche Quellen; keine bezahlten Marktberichte, Panels oder Kundeninterviews
  • Es schätzt nie Marktgröße oder Wachstum – fehlende Daten heißen „Nicht verfügbar“
  • X-Posts sind Sprache und Signal, keine repräsentative Käuferstichprobe
  • Es wählt Segment und Preis nicht für dich
  • Es veröffentlicht das Briefing nicht und schreibt nicht ins CRM

Fragen

Brauche ich einen bezahlten Marktbericht?

Nein. Der Workflow liest öffentliche Quellen und markiert Lücken. Wenn du einen Bericht hast, füge ihn als Dokument im LiveDoc hinzu und zitiere ihn wie jede andere Quelle.

Kann ich einen Markt in einer anderen Sprache recherchieren?

Ja. Setze Region und Sprache. Zitate bleiben in der Originalsprache mit Übersetzung daneben, damit ein lokaler Reviewer die Formulierung prüfen kann.

Bekomme ich eine Marktgröße?

Nur wenn eine Quelle sie nennt, mit Link und Datum. Sonst schreibt das Briefing „Nicht verfügbar“, statt eine Zahl zu erfinden oder aus einem einzelnen Post zu extrapolieren.

Kann es mit Kunden sprechen?

Nein. Es liest öffentliche Quellen. Füge Interviewnotizen als Dokument hinzu und markiere sie als intern; das Briefing präsentiert private Notizen nie als öffentliche Belege.

Wie unterscheidet es sich vom Research-Briefing?

Das Research-Briefing beantwortet eine Frage. Dieser Workflow strukturiert Belege um eine Go-to-Market-Entscheidung – Segment, Käufersprache, Alternativen, Einwände und die geforderten Nachweise –, damit das Ergebnis in einen Launch-Plan fließen kann.

Was kostet ein Briefing?

Jeder Chat-, Extraktions- und X-Search-Aufruf verbraucht nutzungsbasierte Credits; aktuelle Preise stehen auf der Preisseite. Der Prompt fragt vor Ausgaben nach Bestätigung.

Verwandte Workflows

Mach es zu deinem

Dasselbe Rezept, angepasst an deinen tatsächlichen Ablauf.

Pro Region ausführen

Behalte die Abschnittsstruktur und ändere nur Region und Sprache. Ein LiveDoc pro Region und dieselben Fragen, damit die Briefings vergleichbar bleiben.

Eigene Interviewnotizen hinzufügen

Füge Notizen aus Kundengesprächen als Dokument hinzu und markiere sie als intern. Das Briefing kann sie neben öffentlichen Belegen referenzieren, präsentiert private Notizen aber nie als öffentliche Quelle.

Den Launch-Deck füttern

Gib Einwände und Nachweise an den Deck-Workflow weiter und behalte die Quellenliste. Das Briefing bleibt die Belegschicht; der Deck ist eine Darstellung, keine zweite Wahrheitsquelle.

Die Referenzseiten hinter diesem Rezept und die nächsten Schritte.