Felo API PlatformFelo API Platform

Výzkum

Vytvořte analýzu konkurence, kterou obchodní tým opravdu použije

Shromážděte stránky konkurenta, pokrytí kolem něj a to, co kupující říkají na X, a sestavte analýzu, kde každé tvrzení má zdroj, datum a stav.

Čas30 minutÚroveňStředníAktualizováno2026-10-30
Pro kohoProduct marketingCompetitive intelligenceSales enablement

Zkopírovat prompt

Nahraďte pole v hranatých závorkách a vložte do Claude Code, Codex nebo AI s přístupem k terminálu. Nainstaluje skill Felo, zeptá se před utracením kreditů a spustí workflow.

Připrav konkurenční teardown [název konkurenta] pro [náš produkt].

Rozsah: [segment], [region], [jazyk]. Období: [posledních 90 dní / posledních 12 měsíců]. Rozhodnutí, které podporuje: [změna ceny / positioning při launchi / práce s námitkami].
Počáteční zdroje: [doména konkurenta], [URL stránky s cenami], [URL changelogu].

Vytvoř Markdown teardown s:
1. Jak se pozicují, jejich vlastními slovy.
2. Tabulkou důkazů: tvrzení, název zdroje, URL, datum, stav (Verified / Vendor claim / Third-party / Signal / Inference / Not verified).
3. Cenami: co stránka uvádí, s odkazem a datem kontroly. Nikdy nepřenášej sazbu do textu bez stránky a data.
4. Místy, kde kupující protestují, s účty X a daty, označené jako signál.
5. Co bychom měli udělat dál, označené jako doporučení.
6. Úplným seznamem zdrojů.

Pravidla:
- Cituj jejich positioning; nepřepisuj ho do silnějšího tvrzení.
- Odděluj tvrzení dodavatele, pokrytí třetích stran a vlastní závěry. Označ každý řádek.
- Nikdy si nevymýšlej cenu, metriku, jméno zákazníka ani benchmark. Chybějící data jsou „Data nejsou k dispozici“.
- Přveď období a region na konkrétní hodnoty.
- Než utratíš kredity, ukaž plánovaná volání API a počkej na mé schválení.
- Nic nezveřejňuj, neposílej, neplánuj a nezapisuj do CRM.
- Výsledek zapiš do ./competitor-teardown.md a shrň ho v chatu.

Kopie obsahuje i instalační kroky a bezpečnostní pravidla.

Co dostanete

Ukázkový výstup jednoho běhu. Ne živé generování.

Ukázkový teardown (výňatek)

Teardown konkurence — [konkurent], zkontrolováno 2026-10-30

Jak se pozicují

Titulek homepage: „Platforma pro rostoucí podpůrné týmy.” Stránka kategorie: „Vše, co váš podpůrný tým potřebuje.” Obojí jsou tvrzení dodavatele, citovaná doslova.

Tabulka důkazů

TvrzeníZdrojDatumStav
Pozicuje se jako platforma, ne bodový nástrojhttps://example.com/competitor/home2026-10-30Verified
Vydává změny každý týdenhttps://example.com/competitor/changelog2026-10-28Verified
Zmíněn v nezávislých přehledechhttps://example.com/roundup2026-10-27Third-party
Kupující zmiňují pomalý onboardingníže citovaný post na X2026-10-14Signal
Enterprise je jejich největší segmentData nejsou k dispozici—Not verified

Ceny

Ceník uvádí stupňovaný plán a plán podle spotřeby. Sazby zde neopakujeme; zkontrolujte živou stránku a datum: https://example.com/competitor/pricing (2026-10-30).

Kde kupující nesouhlasí

@example_dev, 2026-10-14: „instalace trvala déle, než naznačovalo demo.” Jeden datovaný post; je to stížnost, ne odhad četnosti.

Doporučení

Na srovnávací stránce uvést čas do prvního výsledku. To je náš závěr, ne tvrzení konkurenta.

Zdroje

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

Přesná volání

Pro vývojáře: stejný workflow jako kód, v pořadí provádění.

Zobrazit skutečná API volání
  1. Začněte základem se zdroji

    Chat vrací odpověď a použité stránky, mapu, kde se o konkurentovi mluví. Berte odpověď jako stopu, ne zdroj: uchovejte odkazy, dávají řádky třetích stran. Helper pošle klíč jednou a vyhodí chybu mimo 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);

    Ukázkový výstup

    {
      "answer": "The competitor positions itself as …",
      "sources": [
        { "link": "https://example.com/competitor", "title": "…", "snippet": "…" }
      ]
    }
  2. Stáhněte stránky, které kontrolují

    Pokrytí třetích stran ukazuje, co si lidé myslí; jejich stránky ukazují, co tvrdí. Extrahujte homepage, ceník a changelog jako Markdown s režimem čtení a zapište datum stažení: ceník bez data je past.

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

    Ukázkový výstup

    {
      "url": "https://example.com/competitor/pricing",
      "checkedAt": "2026-10-30",
      "content": "# Pricing\n\nExtracted page text…"
    }
  3. Podívejte se, co kupující říkají na X

    Hledejte na X námitky a obejití kolem konkurenta. Uložte účet a datum každého postu; datovaná citace dokazuje stížnost, ne její četnost. Analýza to označí jako signál a nikdy nepromění pár postů v procento.

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

    Ukázkový výstup

    { "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. Sestavte analýzu s tabulkou důkazů

    Toto je redakční krok: proměňte stránky a posty v tvrzení a každému dejte zdroj, datum a stav. Sloupec stavu drží dokument poctivý: Verified pro to, co říká stránka, Vendor claim pro marketing, Third-party pro vnější pokrytí, Signal pro datovaný post, Inference pro vaše čtení a Not verified bez důkazů.

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

    Ukázkový výstup

    | Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
  5. Archivujte v LiveDoc pro další aktualizaci

    Vytvořte jeden LiveDoc na konkurenta, přidejte stažené stránky jako URL zdroje a analýzu jako dokument. Opětovné přidání URL se deduplikuje, takže další čtvrtletí stahujete jen změny a předchozí analýza zůstává ve stejném archivu.

    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

    Ukázkový výstup

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Co obsahuje

  • Základ se zdroji z Chat API a stránky za ním
  • Homepage, ceny a changelog konkurenta jako Markdown
  • Datované komentáře kupujících z X, označené jako signál, ne důkaz
  • Tabulka důkazů oddělující ověřená fakta, tvrzení dodavatele a inferenci
  • LiveDoc držící zdroje, aby se nezačínalo od nuly

Co nedělá

  • Jen veřejné zdroje; bez win/loss rozhovorů, poznámek CRM a privátních dashboardů
  • Ceny se odkazují a datují, nikdy se nezmrazují v tabulce bez data ověření
  • Pokrytí X je neúplné a není reprezentativní vzorek kupujících
  • Nevybírá vaše positioning; doporučení jsou označena jako inference
  • Nepublikuje analýzu ani nezapisuje do battlecard nástrojů

Otázky

Odkud jsou důkazy?

Chat API vrací základ se zdroji a použité stránky, Web Fetch převádí stránky konkurenta do Markdownu a X Search přidává datované posty. Každý řádek má zdroj a datum, inference má vlastní stav.

Lze pokrýt více konkurentů?

Ano. Spusťte stejný prompt pro každého konkurenta a držte jeden LiveDoc na firmu. Srovnávací stránka spojuje jen řádky „ověřeno“, bez míchání důkazů ze dvou běhů.

Lze citovat jejich ceny?

Workflow zaznamená, co říká stránka ceníku, s odkazem a datem ověření. Nezmrazuje sazby v textu, protože ceny se mění a zastaralé číslo je horší než žádné.

A naše poznámky win/loss?

Čte jen veřejné zdroje. Přidejte interní poznámky jako samostatný dokument v LiveDoc a označte je jako interní; nikdy se necitují v materiálech pro zákazníky.

Jak často obnovovat?

Spouštěčem, ne kalendářem: změna ceny, launch nebo začátek prodejního cyklu. Spusťte znovu ve stejném LiveDoc, aby minulé čtvrtletí stálo vedle nového.

Kolik stojí jedna analýza?

Každé volání chatu, extrakce a hledání X spotřebuje kredity podle užití; aktuální sazby na stránce cen. Prompt žádá schválení před útratou.

Související workflowy

Přizpůsobte

Stejný recept, upravený podle toho, jak skutečně dodáváte.

Obnovujte spouštěčem, ne kalendářem

Spusťte znovu, když konkurent změní ceny, udělá velký launch nebo před prodejním cyklem. Držte každou analýzu jako datovaný dokument ve stejném LiveDoc.

Proměňte analýzu v battlecardy

Ze stejné tabulky napište stránku pro roli — ekonomický kupující, champion, technický recenzent — jen s řádky `Verified` a odkazy. `Inference` nechte mimo materiály pro zákazníky.

Porovnejte dva konkurenty

Spusťte workflow pro každého konkurenta se samostatnými LiveDocs a postavte srovnávací stránku jen z řádků `Verified` v obou bězích. Nikdy neslučujte dva běhy bez sloupce stavu.

Referenční stránky za tímto receptem a další kroky.