Felo API PlatformFelo API Platform

Penyelidikan

Bina analisis pesaing yang boleh digunakan pasukan jualan

Kumpulkan halaman pesaing, liputan di sekelilingnya dan apa yang pembeli katakan di X, lalu susun analisis dengan sumber, tarikh dan status pada setiap dakwaan.

Masa30 minitTahapPertengahanDikemas kini2026-10-30
Untuk siapaPemasaran produkCompetitive intelligenceSales enablement

Salin prompt

Ganti medan dalam kurungan siku lalu tampal ke Claude Code, Codex atau AI dengan akses terminal. Ia memasang skill Felo, bertanya sebelum kredit digunakan dan menjalankan aliran kerja.

Sediakan teardown pesaing [nama pesaing] untuk [produk kami].

Skop: [segmen], [wilayah], [bahasa]. Tempoh: [90 hari lepas / 12 bulan lepas]. Keputusan yang disokong: [perubahan harga / kedudukan pelancaran / pengendalian bantahan].
Sumber permulaan: [domain pesaing], [URL halaman harga], [URL changelog].

Hasilkan teardown Markdown dengan:
1. Cara mereka meletakkan kedudukan, dengan kata-kata mereka sendiri.
2. Jadual bukti: dakwaan, tajuk sumber, URL, tarikh, status (Verified / Vendor claim / Third-party / Signal / Inference / Not verified).
3. Harga: apa yang halaman katakan, dengan pautan dan tarikh semakan. Jangan sekali-kali salin kadar ke dalam teks tanpa halaman dan tarikh.
4. Titik pembeli membantah, dengan akaun X dan tarikh, dilabel isyarat.
5. Apa yang patut kami buat seterusnya, dilabel cadangan.
6. Senarai sumber penuh.

Peraturan:
- Petik kedudukan mereka; jangan rumuskan semula menjadi dakwaan lebih kuat.
- Pisahkan dakwaan vendor, liputan pihak ketiga dan inferens anda. Label setiap baris.
- Jangan reka harga, metrik, nama pelanggan atau penanda aras. Data tiada ditulis “Tiada data”.
- Tukar tempoh dan wilayah kepada nilai jelas.
- Sebelum menggunakan kredit, tunjukkan panggilan API yang dirancang dan tunggu kelulusan saya.
- Jangan terbitkan, hantar, jadualkan atau tulis ke CRM.
- Tulis hasil ke ./competitor-teardown.md dan ringkaskan dalam chat.

Salinan turut menyertakan langkah pemasangan dan peraturan keselamatan.

Apa yang anda dapat

Contoh output daripada satu larian. Bukan penjanaan langsung.

Contoh teardown (petikan)

Teardown pesaing — [pesaing], disemak 2026-10-30

Cara mereka meletakkan kedudukan

Tajuk laman utama: “Platform untuk pasukan sokongan yang berkembang.” Halaman kategori: “Semua yang pasukan sokongan anda perlukan.” Kedua-duanya dakwaan vendor, dipetik seperti ditulis.

Jadual bukti

DakwaanSumberTarikhStatus
Meletakkan diri sebagai platform, bukan alat tunggalhttps://example.com/competitor/home2026-10-30Verified
Mengeluarkan perubahan setiap mingguhttps://example.com/competitor/changelog2026-10-28Verified
Disebut dalam himpunan bebashttps://example.com/roundup2026-10-27Third-party
Pembeli menyebut onboarding lambatsiaran X dipetik di bawah2026-10-14Signal
Enterprise ialah segmen terbesarTiada data—Not verified

Harga

Halaman harga menyenaraikan pelan berperingkat dan pelan berasaskan penggunaan. Kadar tidak diulang di sini; semak halaman langsung dan tarikh: https://example.com/competitor/pricing (2026-10-30).

Tempat pembeli membantah

@example_dev, 2026-10-14: “pemasangan mengambil masa lebih lama daripada yang dicadangkan demo.” Satu siaran bertarikh; ini aduan, bukan anggaran kekerapan.

Cadangan

Utamakan masa ke hasil pertama pada halaman perbandingan. Ini inferens kami, bukan dakwaan pesaing.

Sumber

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

Panggilan sebenar

Untuk pembangun: aliran kerja sama sebagai kod, mengikut urutan pelaksanaan.

Tunjukkan panggilan API sebenar
  1. Mula dengan asas bersumber

    Chat memulangkan jawapan dan halaman yang digunakan, peta tempat pesaing dibincangkan. Anggap jawapan sebagai petunjuk, bukan sumber: simpan pautan, ia memberi baris pihak ketiga. Pembantu menghantar kunci sekali dan membuang ralat di luar 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);

    Contoh output

    {
      "answer": "The competitor positions itself as …",
      "sources": [
        { "link": "https://example.com/competitor", "title": "…", "snippet": "…" }
      ]
    }
  2. Muat turun halaman yang mereka kawal

    Liputan pihak ketiga menunjukkan apa orang fikirkan; halaman mereka menunjukkan apa yang didakwa. Ekstrak homepage, harga dan changelog sebagai Markdown dengan mod bacaan dan catat tarikh muat turun: halaman harga tanpa tarikh ialah perangkap.

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

    Contoh output

    {
      "url": "https://example.com/competitor/pricing",
      "checkedAt": "2026-10-30",
      "content": "# Pricing\n\nExtracted page text…"
    }
  3. Lihat apa kata pembeli di X

    Cari di X bantahan dan cara mengelak tentang pesaing. Simpan akaun dan tarikh setiap post; petikan bertarikh membuktikan aduan, bukan kekerapannya. Analisis menandanya isyarat dan tidak menukar beberapa post kepada peratus.

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

    Contoh output

    { "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. Susun analisis dengan jadual bukti

    Ini langkah editorial: tukar halaman dan post kepada dakwaan dan beri sumber, tarikh serta status. Lajur status menjaga dokumen jujur: Verified untuk apa halaman kata, Vendor claim untuk pemasaran, Third-party untuk liputan luar, Signal untuk post bertarikh, Inference untuk bacaan anda dan Not verified tanpa bukti.

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

    Contoh output

    | Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
  5. Arkib dalam LiveDoc untuk kemas kini

    Cipta satu LiveDoc setiap pesaing, tambah halaman yang dimuat turun sebagai sumber URL dan analisis sebagai dokumen. Menambah URL semula dinyahduplikasi, jadi suku depan hanya muat turun perubahan dan analisis lama kekal dalam arkib sama.

    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

    Contoh output

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Termasuk

  • Asas bersumber dari Chat API dan halaman di sebaliknya
  • Homepage, harga dan changelog pesaing sebagai Markdown
  • Komen pembeli bertarikh dari X, ditanda isyarat bukan bukti
  • Jadual bukti yang memisahkan fakta disahkan, dakwaan vendor dan inferens
  • LiveDoc yang menyimpan sumber supaya tidak mula dari sifar

Apa yang tidak dilakukan

  • Sumber awam sahaja; tiada temu bual menang/kalah, nota CRM atau papan pemuka peribadi
  • Harga dipaut dan bertarikh, tidak pernah dibekukan dalam jadual tanpa tarikh semak
  • Liputan X tidak lengkap dan bukan sampel pembeli wakil
  • Tidak memilih positioning anda; cadangan ditanda inferens
  • Tidak menerbitkan analisis atau menulis ke alat battlecard

Soalan

Dari mana buktinya?

Chat API memulangkan asas bersumber dan halaman yang digunakan, Web Fetch menukar halaman pesaing kepada Markdown dan X Search menambah post bertarikh. Setiap baris menyimpan sumber dan tarikh, inferens ada status sendiri.

Boleh liputi beberapa pesaing?

Boleh. Jalankan prompt sama setiap pesaing dan simpan satu LiveDoc setiap syarikat. Halaman perbandingan hanya menggabungkan baris “disahkan”, tanpa mencampur bukti dua larian.

Boleh petik harga mereka?

Aliran merekod apa yang halaman harga katakan, dengan pautan dan tarikh semak. Ia tidak membekukan kadar dalam teks kerana harga berubah dan angka lama lebih buruk daripada tiada.

Bagaimana nota menang/kalah kami?

Ia hanya membaca sumber awam. Tambah nota dalaman sebagai dokumen berasingan dalam LiveDoc dan tanda dalaman; ia tidak pernah dipetik dalam bahan pelanggan.

Berapa kerap dikemas kini?

Mengikut pencetus, bukan kalendar: tukar harga, pelancaran atau permulaan kitaran jualan. Jalankan semula dalam LiveDoc sama supaya suku lalu di sebelah yang baru.

Berapa kos satu analisis?

Setiap panggilan chat, pengekstrakan dan carian X menggunakan kredit mengikut penggunaan; kadar semasa di halaman harga. Prompt meminta kelulusan sebelum berbelanja.

Aliran kerja berkaitan

Sesuaikan

Resipi sama, disesuaikan dengan cara anda benar-benar menyampaikan.

Kemas kini mengikut pencetus

Jalankan semula apabila pesaing tukar harga, buat pelancaran besar atau sebelum kitaran jualan. Simpan setiap analisis sebagai dokumen bertarikh dalam LiveDoc sama.

Tukar analisis kepada battlecard

Dari jadual sama, tulis satu halaman setiap persona — pembeli ekonomi, champion, penyemak teknikal — hanya guna baris `Verified` dengan pautan. Jangan masukkan `Inference` ke bahan pelanggan.

Bandingkan dua pesaing

Jalankan aliran setiap pesaing dengan LiveDoc berasingan dan bina halaman perbandingan hanya dari baris `Verified` dalam kedua-dua larian. Jangan sekali-kali gabung dua larian tanpa lajur status.

Halaman rujukan di sebalik resipi ini dan langkah seterusnya.