Felo API PlatformFelo API Platform

Research

Ein Wettbewerbs-Teardown erstellen, das dein Vertrieb direkt nutzt

Sammle die Seiten des Wettbewerbers, die Berichterstattung darum und die Stimmen von Käufern auf X und baue daraus ein Teardown, in dem jede Aussage Quelle, Datum und Status trägt.

Dauer30 MinutenLevelFortgeschrittenAktualisiert2026-10-30
Für wenProduktmarketingCompetitive IntelligenceSales Enablement

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 einen Wettbewerbs-Teardown zu [Wettbewerbername] für [unser Produkt].

Umfang: [Segment], [Region], [Sprache]. Zeitraum: [letzte 90 Tage / letzte 12 Monate]. Entscheidung, die es stützt: [Preisänderung / Launch-Positionierung / Einwandbehandlung].
Startquellen: [Wettbewerber-Domain], [Preisseite URL], [Changelog URL].

Erstelle einen Markdown-Teardown mit:
1. Wie sie sich selbst positionieren, in ihren eigenen Worten.
2. Einer Evidenztabelle: Aussage, Quellentitel, URL, Datum, Status (Verified / Vendor claim / Third-party / Signal / Inference / Not verified).
3. Preisen: was auf der Seite steht, mit Link und Prüfdatum. Übernimm niemals einen Tarif ohne Seite und Datum in den Fließtext.
4. Wo Käufer widersprechen, mit X-Handles und Daten, als Signal gekennzeichnet.
5. Was wir als Nächstes tun sollten, als Empfehlung markiert.
6. Einer vollständigen Quellenliste.

Regeln:
- Zitiere ihre Positionierung; formuliere sie nicht stärker um.
- Trenne Anbieteraussagen, Berichterstattung Dritter und deine Schlussfolgerungen. Beschrifte jede Zeile.
- Erfinde niemals Preise, Kennzahlen, Kundennamen oder Benchmarks. Fehlende Daten heißen „Nicht verfügbar“.
- 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 ./competitor-teardown.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-Teardown (Auszug)

Wettbewerbs-Teardown — [Wettbewerber], geprüft am 2026-10-30

Wie sie sich positionieren

Homepage-Headline: „Die Plattform für wachsende Support-Teams.“ Kategorieseite: „Alles, was Ihr Support-Team braucht.“ Beides Anbieteraussagen, wörtlich zitiert.

Evidenztabelle

BehauptungQuelleDatumStatus
Positioniert sich als Plattform, nicht als Punktlösunghttps://example.com/competitor/home2026-10-30Verified
Liefert wöchentlich Änderungenhttps://example.com/competitor/changelog2026-10-28Verified
In unabhängigen Roundups erwähnthttps://example.com/roundup2026-10-27Third-party
Käufer nennen langsames Onboardingunten zitierter X-Beitrag2026-10-14Signal
Enterprise ist ihr größtes SegmentNicht verfügbar—Not verified

Preise

Die Preisseite nennt einen gestaffelten und einen nutzungsbasierten Plan. Tarife werden hier nicht wiederholt; prüfe die Live-Seite und das Datum: https://example.com/competitor/pricing (2026-10-30).

Wo Käufer widersprechen

@example_dev, 2026-10-14: „Das Setup dauerte länger als die Demo suggerierte.“ Ein datierter Beitrag; eine Beschwerde, keine Häufigkeitsschätzung.

Empfehlung

Auf der Vergleichsseite mit der Zeit bis zum ersten Ergebnis führen. Das ist unsere Schlussfolgerung, keine Aussage des Wettbewerbers.

Quellen

  • https://example.com/competitor/home
  • https://example.com/competitor/pricing
  • https://example.com/competitor/changelog

Die konkreten Aufrufe

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

Konkrete API-Aufrufe zeigen
  1. Mit einer belegten Basis starten

    Chat gibt Antwort und genutzte Seiten zurück – eine Karte, wo der Wettbewerber diskutiert wird. Behandle die Antwort als Hinweis, nicht als Quelle: Behalte die Links, sie liefern die Drittanbieter-Zeilen der Evidenztabelle. Der Helper sendet den Key einmal und wirft bei Nicht-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);

    Beispielausgabe

    {
      "answer": "The competitor positions itself as …",
      "sources": [
        { "link": "https://example.com/competitor", "title": "…", "snippet": "…" }
      ]
    }
  2. Die Seiten laden, die der Wettbewerber kontrolliert

    Drittberichte zeigen, was Menschen denken; die eigenen Seiten zeigen, was der Wettbewerber behauptet. Extrahiere Homepage, Preisseite und Changelog mit Lesbarkeit als Markdown und stemple das Abrufdatum auf jede Seite – eine Preisseite ohne Datum ist eine Falle.

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

    Beispielausgabe

    {
      "url": "https://example.com/competitor/pricing",
      "checkedAt": "2026-10-30",
      "content": "# Pricing\n\nExtracted page text…"
    }
  3. Prüfen, was Käufer auf X sagen

    Suche auf X nach Einwänden und Workarounds zum Wettbewerber. Behalte Handle und Datum jedes Posts; ein datiertes Zitat belegt eine Beschwerde, nicht ihre Häufigkeit. Das Teardown markiert es als Signal und macht aus ein paar Posts keine Prozentzahl.

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

    Beispielausgabe

    { "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 }
      }
    ] } }
  4. Das Teardown mit Evidenztabelle bauen

    Das ist der redaktionelle Schritt: Verwandle geladene Seiten und X-Posts in Aussagen und gib jeder Quelle, Datum und Status. Die Statusspalte hält das Dokument ehrlich: Verified für Seiteninhalt, Vendor claim für Marketing, Third-party für externe Berichte, Signal für einen datierten Post, Inference für deine Lesart, Not verified bei fehlenden Belegen.

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

    Beispielausgabe

    | Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
  5. Für den nächsten Refresh im LiveDoc ablegen

    Lege pro Wettbewerber ein LiveDoc an, füge die geladenen Seiten als URL-Ressourcen und das Teardown als Dokument hinzu. Erneutes Hinzufügen von URLs wird dedupliziert, sodass du im nächsten Quartal nur Änderungen lädst und das alte Teardown im selben Archiv bleibt.

    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 LiveDoc

    Beispielausgabe

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Enthalten

  • Belegte Basis aus der Chat API und die Seiten dahinter
  • Homepage, Preise und Changelog des Wettbewerbers als Markdown
  • Datierte Käuferkommentare aus X, als Signal statt Beweis markiert
  • Evidenztabelle, die verifizierte Fakten, Anbieteraussagen und Schlussfolgerungen trennt
  • LiveDoc mit den Quellen, damit der nächste Refresh nicht bei null beginnt

Was es nicht macht

  • Nur öffentliche Quellen; keine Win/Loss-Interviews, CRM-Notizen oder privaten Dashboards
  • Preise werden verlinkt und datiert, nie ohne Prüfdatum in eine Tabelle eingefroren
  • X-Abdeckung ist unvollständig und keine repräsentative Käuferstichprobe
  • Es wählt dein Positioning nicht; Empfehlungen sind als Schlussfolgerung markiert
  • Es veröffentlicht das Teardown nicht und schreibt nicht in Battlecard-Tools

Fragen

Woher kommen die Belege?

Die Chat API liefert eine belegte Basis und die genutzten Seiten, Web Fetch macht die Seiten des Wettbewerbers zu Markdown, X Search ergänzt datierte Käufer-Posts. Jede Zeile behält Quelle und Datum, Schlussfolgerungen haben einen eigenen Status.

Kann ich mehrere Wettbewerber abdecken?

Ja. Führe denselben Prompt pro Wettbewerber aus und halte pro Firma ein LiveDoc. Eine Vergleichsseite verbindet nur Zeilen mit Status „verifiziert“, statt Belege aus zwei Läufen zu mischen.

Darf ich deren Preise zitieren?

Der Workflow hält fest, was auf der Preisseite steht, mit Link und Prüfdatum. Er friert Tarife nicht in Prosa ein, weil Anbieterpreise sich ändern und eine veraltete Zahl schlechter ist als keine.

Was ist mit unseren Win/Loss-Notizen?

Er liest nur öffentliche Quellen. Füge interne Notizen als separates Dokument im LiveDoc hinzu und markiere sie als intern; in kundenorientierten Materialien werden sie nie zitiert.

Wie oft aktualisieren?

Nach Auslöser, nicht nach Kalender: Preisänderung, Launch oder Beginn eines Verkaufszyklus. Führe den Workflow im selben LiveDoc erneut aus, damit das letzte Quartal neben dem neuen steht.

Was kostet ein Teardown?

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.

Nach Auslöser statt Kalender aktualisieren

Führe denselben Workflow bei Preisänderung, großem Launch oder vor einem Verkaufszyklus erneut aus. Halte jedes Teardown als datiertes Dokument im selben LiveDoc, damit das Vorquartal neben dem neuen steht.

Teardown in Battlecards verwandeln

Schreibe aus derselben Evidenztabelle je eine Seite pro Rolle – wirtschaftlicher Käufer, Champion, technischer Prüfer – nur mit `Verified`-Zeilen und angehängten Links. Lass `Inference` aus kundenorientierten Materialien heraus.

Zwei Wettbewerber vergleichen

Führe den Workflow pro Wettbewerber mit separatem LiveDoc aus und baue eine Vergleichsseite nur aus Zeilen, die in beiden Läufen `Verified` sind. Führe zwei Läufe nie ohne Statusspalte in einer Evidenztabelle zusammen.

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