Felo API PlatformFelo API Platform

Riset

Buat analisis pesaing yang bisa dipakai tim penjualan

Kumpulkan halaman pesaing, liputan di sekitarnya, dan apa yang pembeli katakan di X, lalu susun analisis dengan sumber, tanggal, dan status di setiap klaim.

Waktu30 menitTingkatMenengahDiperbarui2026-10-30
Untuk siapaProduct marketingCompetitive intelligenceSales enablement

Salin prompt

Ganti kolom dalam kurung siku lalu tempel ke Claude Code, Codex, atau AI dengan akses terminal. Ia memasang skill Felo, bertanya sebelum memakai kredit, dan menjalankan alur kerja.

Susun teardown kompetitif [nama pesaing] untuk [produk kami].

Cakupan: [segmen], [wilayah], [bahasa]. Rentang waktu: [90 hari terakhir / 12 bulan terakhir]. Keputusan yang didukung: [perubahan harga / positioning peluncuran / penanganan keberatan].
Sumber awal: [domain pesaing], [URL halaman harga], [URL changelog].

Hasilkan teardown Markdown berisi:
1. Cara mereka memosisikan diri, dengan kata-kata mereka sendiri.
2. Tabel bukti: klaim, judul sumber, URL, tanggal, status (Verified / Vendor claim / Third-party / Signal / Inference / Not verified).
3. Harga: apa yang tertulis di halaman, dengan tautan dan tanggal pemeriksaan. Jangan pernah menyalin tarif ke teks tanpa halaman dan tanggal.
4. Titik keberatan pembeli, dengan akun X dan tanggal, ditandai sebagai sinyal.
5. Yang harus kami lakukan berikutnya, ditandai sebagai rekomendasi.
6. Daftar sumber lengkap.

Aturan:
- Kutip positioning mereka; jangan mengubahnya menjadi klaim yang lebih kuat.
- Pisahkan klaim vendor, liputan pihak ketiga, dan inferensimu. Beri label setiap baris.
- Jangan mengarang harga, metrik, nama pelanggan, atau benchmark. Data yang hilang ditulis “Tidak tersedia”.
- Ubah rentang waktu dan wilayah menjadi nilai eksplisit.
- Sebelum memakai kredit, tampilkan panggilan API yang direncanakan dan tunggu persetujuan saya.
- Jangan menerbitkan, mengirim, menjadwalkan, atau menulis ke CRM.
- Tulis hasilnya ke ./competitor-teardown.md dan ringkas di chat.

Salinan juga menyertakan langkah pemasangan dan aturan keamanan.

Yang Anda dapatkan

Contoh keluaran dari satu eksekusi. Bukan pembuatan langsung.

Contoh teardown (kutipan)

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

Cara mereka memosisikan diri

Judul beranda: “Platform untuk tim dukungan yang tumbuh.” Halaman kategori: “Semua yang dibutuhkan tim dukungan Anda.” Keduanya klaim vendor, dikutip apa adanya.

Tabel bukti

KlaimSumberTanggalStatus
Memosisikan diri sebagai platform, bukan alat tunggalhttps://example.com/competitor/home2026-10-30Verified
Merilis perubahan setiap mingguhttps://example.com/competitor/changelog2026-10-28Verified
Disebut di roundup independenhttps://example.com/roundup2026-10-27Third-party
Pembeli menyebut onboarding lambatunggahan X dikutip di bawah2026-10-14Signal
Enterprise adalah segmen terbesarTidak tersedia—Not verified

Harga

Halaman harga mencantumkan paket bertingkat dan paket berbasis penggunaan. Tarif tidak diulang di sini; periksa halaman langsung dan tanggal: https://example.com/competitor/pricing (2026-10-30).

Titik pembeli menolak

@example_dev, 2026-10-14: “pemasangan memakan waktu lebih lama dari yang disarankan demo.” Satu unggahan bertanggal; ini keluhan, bukan perkiraan frekuensi.

Rekomendasi

Kedepankan waktu ke hasil pertama di halaman perbandingan. Ini inferensi kami, bukan klaim pesaing.

Sumber

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

Panggilan persisnya

Untuk developer: alur kerja yang sama sebagai kode, sesuai urutan eksekusi.

Tampilkan panggilan API asli
  1. Mulai dari dasar bersumber

    Chat mengembalikan jawaban dan halaman yang dipakai, peta tempat pesaing dibicarakan. Perlakukan jawaban sebagai petunjuk, bukan sumber: simpan tautan, yang memberi baris pihak ketiga. Helper mengirim kunci sekali dan melempar error 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 keluaran

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

    Liputan pihak ketiga menunjukkan apa yang orang pikirkan; halaman mereka menunjukkan apa yang diklaim. Ekstrak homepage, harga, dan changelog sebagai Markdown dengan mode baca dan catat tanggal unduh: halaman harga tanpa tanggal adalah jebakan.

    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 keluaran

    {
      "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 keberatan dan cara mengakali pesaing. Simpan akun dan tanggal tiap post; satu kutipan bertanggal membuktikan keluhan, bukan frekuensinya. Analisis menandainya sinyal dan tidak mengubah beberapa post menjadi persentase.

    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 keluaran

    { "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 tabel bukti

    Ini langkah editorial: ubah halaman dan post menjadi klaim dan beri sumber, tanggal, serta status. Kolom status menjaga dokumen jujur: Verified untuk apa yang halaman katakan, Vendor claim untuk marketing, Third-party untuk liputan luar, Signal untuk post bertanggal, Inference untuk bacaan Anda, dan Not verified saat bukti tidak ada.

    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 keluaran

    | Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
  5. Arsipkan di LiveDoc untuk pembaruan berikutnya

    Buat satu LiveDoc per pesaing, tambahkan halaman yang diunduh sebagai resource URL dan analisis sebagai dokumen. Menambah URL lagi dideduplikasi, jadi kuartal depan hanya mengunduh perubahan dan analisis lama tetap di arsip yang 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 keluaran

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Termasuk

  • Dasar bersumber dari Chat API dan halaman di baliknya
  • Homepage, harga, dan changelog pesaing dalam Markdown
  • Komentar pembeli bertanggal dari X, ditandai sinyal bukan bukti
  • Tabel bukti yang memisahkan fakta terverifikasi, klaim vendor, dan inferensi
  • LiveDoc yang menyimpan sumber agar tidak mulai dari nol

Yang tidak dilakukan

  • Hanya sumber publik; tanpa wawancara menang/kalah, catatan CRM, atau dashboard privat
  • Harga ditautkan dan diberi tanggal, tidak pernah dibekukan di tabel tanpa tanggal cek
  • Cakupan X tidak lengkap dan bukan sampel pembeli representatif
  • Tidak memilih positioning Anda; rekomendasi ditandai inferensi
  • Tidak menerbitkan analisis atau menulis ke alat battlecard

Pertanyaan

Dari mana buktinya?

Chat API mengembalikan dasar bersumber dan halaman yang dipakai, Web Fetch mengubah halaman pesaing menjadi Markdown, dan X Search menambah post bertanggal. Setiap baris menyimpan sumber dan tanggal, inferensi punya status sendiri.

Bisa mencakup beberapa pesaing?

Bisa. Jalankan prompt yang sama per pesaing dan simpan satu LiveDoc per perusahaan. Halaman perbandingan hanya menggabungkan baris “terverifikasi”, tanpa mencampur bukti dua eksekusi.

Boleh mengutip harga mereka?

Alur mencatat apa yang dikatakan halaman harga, dengan tautan dan tanggal cek. Tidak membekukan tarif dalam teks karena harga berubah dan angka lama lebih buruk daripada tidak ada angka.

Bagaimana dengan catatan menang/kalah kami?

Ia hanya membaca sumber publik. Tambahkan catatan internal sebagai dokumen terpisah di LiveDoc dan tandai internal; catatan itu tidak pernah dikutip di materi pelanggan.

Seberapa sering memperbarui?

Berdasarkan pemicu, bukan kalender: perubahan harga, peluncuran, atau awal siklus penjualan. Jalankan ulang di LiveDoc yang sama agar kuartal lalu ada di samping yang baru.

Berapa biaya satu analisis?

Setiap panggilan chat, ekstraksi, dan pencarian X memakai kredit sesuai pemakaian; tarif saat ini di halaman harga. Prompt meminta persetujuan sebelum mengeluarkan biaya.

Alur kerja terkait

Sesuaikan

Resep yang sama, disesuaikan dengan cara Anda benar-benar mengirim.

Perbarui berdasarkan pemicu, bukan kalender

Jalankan ulang saat pesaing mengubah harga, meluncurkan hal besar, atau sebelum siklus penjualan. Simpan tiap analisis sebagai dokumen bertanggal di LiveDoc yang sama.

Ubah analisis menjadi battlecard

Dari tabel yang sama, tulis satu halaman per persona — pembeli ekonomi, champion, peninjau teknis — hanya memakai baris `Verified` dengan tautan. Jangan masukkan `Inference` ke materi pelanggan.

Bandingkan dua pesaing

Jalankan alur per pesaing dengan LiveDoc terpisah dan buat halaman perbandingan hanya dari baris `Verified` di kedua eksekusi. Jangan pernah menggabungkan dua eksekusi tanpa kolom status.

Halaman referensi di balik resep ini dan langkah berikutnya.