Riset
Riset ceruk produk sebelum memesan stok
Kumpulkan konteks kategori, tangkap halaman pesaing pada tanggal yang dinyatakan, baca keluhan pembeli di X, dan simpan bukti serta memo dalam LiveDoc untuk ditinjau sebelum memesan.
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.
Riset ceruk produk ini sebelum kami menyetok atau meluncurkan: [produk atau kategori]. Pasar: [negara atau wilayah]. Kanal: [marketplace / DTC / ritel]. Rentang unggahan pembeli: [30] hari terakhir. Produk pembanding atau URL pesaing: [URL]. Batasan anggaran dan margin: [batasan]. Audiens: [tim]. Hasilkan memo Markdown berisi: 1. Putusan satu paragraf: apakah layak diriset lebih jauh, dan apa yang akan mengubah pendapatmu. 2. Sinyal permintaan: apa kata sumber tentang minat, musim, dan substitusi. 3. Produk pesaing: klaim masing-masing, harga yang tercatat di halamannya, dan titik kurangnya menurut pembeli. 4. Positioning harga: titik harga yang benar-benar ditemukan di halaman, masing-masing dengan tanggal pencatatan. 5. Keluhan dan kebutuhan yang belum terpenuhi, dengan kutipan, akun, dan tanggal. 6. Risiko dan pertanyaan terbuka yang harus diselesaikan sebelum membeli stok. 7. Sumber: setiap halaman dan unggahan yang dipakai, dengan URL dan tanggal. Aturan: - Gunakan hanya yang dikembalikan API. Jangan mengarang ukuran pasar, estimasi penjualan, jumlah ulasan, atau harga pesaing. - Laporkan harga persis seperti tercatat, dengan URL halaman dan tanggal pencatatan. Jangan pernah merata-ratakan atau menormalisasi. - Perlakukan unggahan X sebagai anekdot, bukan data pasar, dan sebutkan bila sampelnya tipis. - Pisahkan klaim vendor dari laporan pembeli. - Sebelum memakai kredit, tampilkan ekstraksi dan pencarian yang direncanakan dan tunggu persetujuan saya. - Jangan menghubungi pemasok, memesan, atau mengirim pesan ke siapa pun di X. - Tulis hasilnya ke ./product-research.md dan ringkas di chat.
Salinan juga menyertakan langkah pemasangan dan aturan keamanan.
Yang Anda dapatkan
Contoh keluaran dari satu eksekusi. Bukan pembuatan langsung.
Riset produk — kategori contoh
Putusan
Layak dilihat lebih dekat, tetapi bukti publik belum cukup untuk keputusan stok. Pertanyaan terbuka di bawah adalah langkah berikutnya.
Konteks kategori
Pembeli membandingkan ruang meja dan kemudahan bersih, bukan tekanan. Tidak ada sumber publik yang mendukung perkiraan ukuran pasar.
Halaman pesaing
- Example A — halaman produk (diambil 2026-10-30)
- Example B — halaman produk (diambil 2026-10-30)
Yang dilaporkan pembeli
- @example_buyer: “Penggantian ketiga dalam setahun; segelnya rusak.” — 2026-10-19
- @example_home: “Membersihkan butuh beberapa menit, tidak ada yang menyebutnya.” — 2026-10-24
Posisi harga
Harga diambil pada 2026-10-30 dari halaman tertaut. Ada dua tingkat; setiap halaman dikutip langsung, tidak dirata-rata.
Risiko dan pertanyaan terbuka
- Daya tahan segel adalah keluhan paling berulang.
- Tidak ada sumber yang mencakup tingkat pengembalian.
- Periksa waktu pemasok dan biaya sampai tujuan sebelum memesan.
Sumber
- https://example.com/product-a — 2026-10-30
- https://x.com/example_buyer/status/... — 2026-10-19
Panggilan persisnya
Untuk developer: alur kerja yang sama sebagai kode, sesuai urutan eksekusi.
Tampilkan panggilan API asli
Minta gambaran kategori ke Chat
Mulai dari jawaban bersumber, bukan halaman kosong: Chat mencari web publik, memeringkat halaman, dan mengembalikan resource yang dipakai. Tanyakan konteks permintaan, substitusi, dan keluhan umum dalam satu kueri, lalu simpan resource teratas sebagai daftar bukti.
product-research.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 niche = "portable espresso maker"; // replace with the category you are judging const context = await felo<ChatData>("/v2/chat", { query: `Demand, price bands, and buyer complaints for ${niche} in the US`, }); const sources = context.data.resources.slice(0, 5);Contoh keluaran
{ "answer": "Buyers compare on counter space and cleanup …", "sources": [ { "link": "https://example.com/category-guide", "title": "…", "snippet": "…" } ] }Tangkap halaman pesaing
Ekstrak dua atau tiga halaman produk pesaing sebagai Markdown dengan mode baca. Tujuannya klaim dan harga di halaman hari ini, bukan spesifikasi yang ditulis ulang. Simpan URL bersama konten dan catat tanggal tangkap: harga tanpa tanggal adalah rumor.
product-research.ts const PRODUCT_PAGES = [ { url: "https://example.com/product-a", title: "Example A — product page" }, { url: "https://example.com/product-b", title: "Example B — product page" }, ]; type ExtractData = { data: { content: string } }; const listings = await Promise.all( PRODUCT_PAGES.map((page) => felo<ExtractData>("/v2/web/extract", { url: page.url, output_format: "markdown", with_readability: true, }).then((extracted) => ({ ...page, content: extracted.data.content })), ), );Contoh keluaran
[ { "url": "https://example.com/product-a", "title": "Example A — product page", "content": "# Example A\n\nSpecs and price as displayed…" } ]Baca apa yang dilaporkan pembeli di X
Halaman pemasok mencantumkan fitur; pembeli menggambarkan kegagalan. Cari ceruk bersama kata gesekan — pengiriman, kualitas, pengembalian — dalam 30 hari dan simpan akun, tanggal, tautan. Ini anekdot, bukan data permintaan, dan memo harus mengatakannya.
product-research.ts type XData = { data: { tweets: { content: string; author: { username: string }; created_at: string; metrics: { retweet_count: number; favorite_count: number; reply_count: number }; url: string; }[]; }; }; const since = Math.floor((Date.now() - 30 * 24 * 60 * 60 * 1000) / 1000); const search = await felo<XData>("/v2/x/tweet/search", { query: `"${niche}" (shipping OR quality OR refund)`, limit: 50, since_time: since, }); const complaints = search.data.tweets;Contoh keluaran
{ "data": { "tweets": [ { "content": "Third replacement in a year; the seal fails.", "author": { "username": "example_buyer" }, "created_at": "2026-10-19T15:02:00Z", "metrics": { "retweet_count": 1, "favorite_count": 12, "reply_count": 3 }, "url": "https://x.com/example_buyer/status/..." } ] } }Tulis memo
Langkah ini kode sederhana: gabungkan jawaban kategori, tanggal tangkap, kutipan pembeli, dan daftar sumber menjadi satu Markdown. Jujur soal pertanyaan terbuka — memo berguna karena memisahkan yang dibuktikan halaman dari yang perlu dikonfirmasi ke pemasok.
product-research.ts const capturedOn = new Date().toISOString().slice(0, 10); const memo = [ `# Product research — ${niche}`, "", "## Category context", context.data.answer, "", "## Competitor pages", ...listings.map( (page) => `- [${page.title}](${page.url}) — captured ${capturedOn}`, ), "", "## What buyers report", ...complaints.slice(0, 10).map( (post) => `- @${post.author.username} (${post.created_at.slice(0, 10)}): ${post.content}`, ), "", "## Sources", ...sources.map((source) => `- [${source.title}](${source.link})`), ].join("\n"); console.log(memo);Arsipkan bukti di LiveDoc
Jalankan sekali per ceruk: buat LiveDoc dan simpan
short_iddi konfigurasi. Tambahkan halaman pesaing dan sumber Chat sebagai resource URL agar arsip mendeduplikasi, lalu memo sebagai dokumen. Sebelum membeli, telusuri tangkapan dan lihat harga mana yang bergerak.product-research.ts type LiveDocData = { data: { short_id: string } }; const research = await felo<LiveDocData>("/v2/livedocs", { name: `Product research: ${niche}`, description: "Competitor pages, buyer posts, and the memo", }); await felo(`/v2/livedocs/${research.data.short_id}/resources/urls`, { urls: [ ...listings.map((page) => ({ url: page.url, title: page.title })), ...sources.map((source) => ({ url: source.link, title: source.title })), ].slice(0, 10), }); await felo(`/v2/livedocs/${research.data.short_id}/resources/doc`, { title: `Product memo — ${capturedOn}`, content: memo, });Contoh keluaran
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Termasuk
- Gambaran kategori bersumber dari Chat dan halaman di baliknya
- Halaman pesaing dalam Markdown dengan tanggal tangkap
- Keluhan pembeli di X dengan akun, tanggal, dan tautan
- Memo Markdown dari input tersebut
- Satu LiveDoc berisi bukti dan memo
Yang tidak dilakukan
- Hanya sumber publik; laporan berbayar, penawaran pemasok, dan penjualan internal di luar cakupan
- Tidak memperkirakan ukuran pasar, volume, atau margin
- Harga dicatat seperti saat ditangkap, tidak dinormalisasi atau dirata-ratakan
- Post X adalah anekdot, bukan data permintaan
- Tidak menghubungi pemasok, tidak memesan, dan tidak mengubah listing
Pertanyaan
Dari mana konteks pasarnya?
Chat API mengembalikan jawaban bersumber dan halaman publik yang dipakai. Halaman pesaing berasal dari URL Anda dan diekstrak Web Fetch; post pembeli dari X Search. Tidak ada data penjualan privat.
Apakah ia bilang produk akan laku?
Tidak. Ia menata bukti publik — konteks, harga yang ditangkap, dan keluhan — lalu menulis yang belum diketahui. Validasi permintaan butuh data Anda: iklan, pre-order, atau diskusi pemasok.
Jika marketplace memblokir ekstraksi?
Web Fetch mengambil halaman publik satu URL sekaligus dan sebagian situs memblokir. Gunakan halaman produk atau pemasok yang bisa diakses dan biarkan memo menandai tangkapan yang hilang alih-alih menebak harga.
Bagaimana menghindari harga pesaing kedaluwarsa?
Setiap harga di memo terikat ke URL dan tanggal tangkap. Jalankan ulang ekstraksi dekat keputusan pembelian; arsip menyimpan tangkapan lama untuk melihat pergerakan harga.
Apakah ia menghubungi pemasok atau penjual?
Tidak. Alur hanya membaca: ekstrak halaman, cari post publik, tulis memo lokal. Tidak mengirim pesan, tidak memesan, dan tidak mengubah listing.
Berapa biaya satu riset?
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
Ubah satu pertanyaan menjadi brief riset bersumber
Tanya web, simpan halaman di balik jawaban sebagai Markdown, tambahkan apa yang dikatakan praktisi di X, dan simpan bukti dalam LiveDoc yang bisa ditelusuri lagi.
Buka alur kerjaKontenUbah percakapan sosial menjadi brief mendengarkan mingguan
Cari post X minggu ini tentang merek dan pesaing, tambahkan konteks web bersumber, baca halaman di baliknya, dan arsipkan setiap edisi agar minggu berikutnya mulai dari yang sudah diketahui.
Buka alur kerjaKantorUbah halaman riset menjadi presentasi
Ekstrak halaman, simpan sebagai konteks LiveDoc, biarkan PPT Task API membangun deck, dan tanyakan sampai tautan selesai.
Buka alur kerjaSesuaikan
Resep yang sama, disesuaikan dengan cara Anda benar-benar mengirim.
Tambahkan transkrip review video
Jika kategori punya video review, ambil transkrip dengan YouTube Subtitling dan tambahkan dua atau tiga kutipan bertimestamp ke bagian pembeli. Review video tetap pengalaman satu orang: pertahankan label anekdot.
Bandingkan dua kandidat
Jalankan langkah yang sama per kandidat dan letakkan memo berdampingan: fitur yang diklaim, harga yang ditangkap, keluhan berulang, dan pertanyaan terbuka. Perbandingan tetap kualitatif sampai ada data penjualan atau retur.
Perbarui sebelum membeli
Jalankan ulang ekstraksi sehari sebelum pesanan. Simpan LiveDoc yang sama dan tambahkan memo baru agar arsip menunjukkan perubahan antara riset dan pembelian.
Lanjut
Halaman referensi di balik resep ini dan langkah berikutnya.