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.
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.
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
| Dakwaan | Sumber | Tarikh | Status |
|---|---|---|---|
| Meletakkan diri sebagai platform, bukan alat tunggal | https://example.com/competitor/home | 2026-10-30 | Verified |
| Mengeluarkan perubahan setiap minggu | https://example.com/competitor/changelog | 2026-10-28 | Verified |
| Disebut dalam himpunan bebas | https://example.com/roundup | 2026-10-27 | Third-party |
| Pembeli menyebut onboarding lambat | siaran X dipetik di bawah | 2026-10-14 | Signal |
| Enterprise ialah segmen terbesar | Tiada 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
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": "…" } ] }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…" }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 } } ] } }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:
Verifieduntuk apa halaman kata,Vendor claimuntuk pemasaran,Third-partyuntuk liputan luar,Signaluntuk post bertarikh,Inferenceuntuk bacaan anda danNot verifiedtanpa 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 |
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 LiveDocContoh 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
Tukar satu soalan kepada brief penyelidikan bersumber
Tanya web, simpan halaman di sebalik jawapan sebagai Markdown, tambah apa yang pengamal katakan di X dan simpan bukti dalam LiveDoc yang boleh dicari semula.
Buka aliran kerjaPenyelidikanTukar soalan pasaran kepada brief go-to-market
Tanya pasaran dengan soalan tepat, baca halaman kategori dan harga di sebalik jawapan, kumpulkan cara pembeli menggambarkan masalah di X dan simpan brief GTM dengan dakwaan bersumber serta soalan terbuka.
Buka aliran kerjaKandunganTerbitkan ringkasan berita AI harian yang benar-benar dibaca pasukan
Dapatkan ringkasan bersumber, tambah perbualan pengamal di X, ambil transkrip video, susun edisi Markdown dan arkibkan dalam LiveDoc.
Buka aliran kerjaSesuaikan
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.
Teruskan
Halaman rujukan di sebalik resipi ini dan langkah seterusnya.