Felo API PlatformFelo API Platform

Riset

Ubah pertanyaan pasar menjadi brief go-to-market

Ajukan pertanyaan pasar yang tepat, baca halaman kategori dan harga di balik jawaban, kumpulkan cara pembeli menggambarkan masalah di X, dan simpan brief GTM dengan klaim bersumber serta pertanyaan terbuka.

Waktu30 menitTingkatMenengahDiperbarui2026-10-30
Untuk siapaPendiri & operatorProduct marketingPemimpin penjualan

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 ringkasan riset go-to-market untuk [produk] yang masuk ke [segmen atau ICP] di [wilayah], dalam [bahasa].

Motion: [self-serve / sales-led / partner]. Keputusan yang didukung: [peluncuran / harga / reposisi]. Rentang waktu: [90 hari terakhir / 12 bulan terakhir].

Hasilkan ringkasan Markdown berisi:
1. Definisi segmen: siapa mereka, apa yang dipakai hari ini, dan apa kata sumber tentang ukuran — kutip sumber atau tulis “Tidak tersedia”.
2. Bahasa pembeli: cara mereka menjelaskan masalah, dengan tautan dan tanggal.
3. Alternatif: dari apa mereka beralih, termasuk spreadsheet dan tidak melakukan apa pun.
4. Keberatan dan bukti yang diminta pembeli.
5. Pertanyaan terbuka yang tidak bisa dijawab sumber publik.
6. Daftar sumber lengkap.

Aturan:
- Setiap klaim pasar membutuhkan tautan dan tanggal. Jangan menaksir ukuran pasar, pertumbuhan, atau anggaran berdasarkan perasaan.
- Pisahkan sumber independen, halaman vendor, dan inferensimu.
- Gunakan X untuk bahasa dan keberatan, bukan sebagai bukti ukuran pasar.
- 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 ./gtm-brief.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 ringkasan GTM (kutipan)

Ringkasan GTM — [segmen] di [wilayah]

Definisi segmen

Tim operasi kecil yang mengatur jadwal di spreadsheet. Ukuran: tidak tersedia di sumber publik yang ditinjau — jangan taruh angka tanpa sumber.

Bahasa pembeli

  • “kami masih melakukan ini di spreadsheet” — unggahan X, 2026-10-18
  • “pengaturannya bagian yang sulit” — unggahan X, 2026-10-02

Dilabeli sebagai bahasa, bukan bukti prevalensi.

Alternatif yang disebut

Spreadsheet, suite yang ada, dan tidak melakukan apa pun. Sumber: https://example.com/thread (2026-10-18).

Keberatan dan bukti yang diminta

Tinjauan keamanan dan jalur migrasi. Pembeli meminta referensi bernama; kami belum punya yang publik, jadi ini tetap pertanyaan terbuka.

Pertanyaan terbuka

  • Berapa bagian segmen yang sudah punya anggaran khusus?
  • Apakah keberatan berubah menurut ukuran perusahaan?

Sumber

  • https://example.com/category-page
  • https://example.com/pricing-page
  • https://example.com/thread

Panggilan persisnya

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

Tampilkan panggilan API asli
  1. Bingkai pertanyaan pasar

    Chat mengembalikan jawaban dan halaman yang dipakai, jadi mulai dari pertanyaan yang cukup sempit: siapa yang membeli, apa yang mereka pakai sekarang, keberatan apa yang muncul. Simpan resource sebagai tautan petunjuk; jawaban adalah petunjuk, tautan adalah bukti dan menutup daftar sumber.

    gtm.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 product = "scheduling tool"; // replace with your product
    const segment = "operations teams at 50-200 person companies";
    const region = "DACH";
    
    const market = await felo<ChatData>("/v2/chat", {
      query: `Who buys ${product} for ${segment} in ${region}, what do they use today, and what objections come up?`,
    });
    
    const seedSources = market.data.resources.slice(0, 5);

    Contoh keluaran

    {
      "answer": "Buyers in this segment usually start from spreadsheets and …",
      "sources": [
        { "link": "https://example.com/category-page", "title": "…", "snippet": "…" }
      ]
    }
  2. Baca halaman kategori sendiri

    Unduh halaman yang membingkai pasar: ikhtisar kategori, perbandingan, dan harga. Ekstrak sebagai Markdown dengan mode baca dan catat tanggal unduh, karena kualitas bacaan pasar bergantung pada halaman di baliknya.

    gtm.ts
    type ExtractData = { data: { content: string } };
    
    const marketPages = [
      { url: "https://example.com/category", title: "Category overview" },
      { url: "https://example.com/comparison", title: "Comparison page" },
      { url: "https://example.com/pricing", title: "Pricing page" },
    ];
    
    const pages = await Promise.all(
      marketPages.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/category",
      "checkedAt": "2026-10-30",
      "content": "# Category overview\n\nExtracted page text…"
    }
  3. Kumpulkan cara pembeli menggambarkan masalah

    Cari di X kata-kata yang dipakai pembeli saat menemui masalah, bukan nama produk. Simpan akun dan tanggal; brief memakai post untuk bahasa dan keberatan, bukan sebagai ukuran ukuran pasar atau frekuensi.

    gtm.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 language = await felo<XData>("/v2/x/tweet/search", {
      query: `(spreadsheet OR "scheduling tool") (alternative OR "looking for")`,
      limit: 25,
      since_time: since,
    });
    
    const quotes = language.data.tweets.slice(0, 5);

    Contoh keluaran

    { "data": { "tweets": [
      {
        "content": "we are still doing this in a spreadsheet",
        "author": { "username": "example_ops" },
        "created_at": "2026-10-18T11:05:00Z",
        "metrics": { "retweet_count": 1, "favorite_count": 18 }
      }
    ] } }
  4. Tulis brief di sekitar keputusan

    Gabungkan definisi segmen, bahasa pembeli, alternatif, keberatan, dan pertanyaan terbuka dalam satu Markdown. Setiap klaim menyimpan sumber dan tanggal, ukuran pasar hanya muncul dengan sumber, dan yang tidak dijawab sumber publik masuk pertanyaan terbuka alih-alih inferensi.

    gtm.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const sourceLine = (title: string, url: string, date: string) =>
      `- ${title}: ${url} (checked ${date})`;
    
    const brief = [
      `# GTM brief — ${segment} in ${region}`,
      "",
      "## Segment definition",
      "See the category page for how the segment is described. Market size: Not available from public sources reviewed.",
      "",
      "## Buyer language",
      ...quotes.map((post) => `- @${post.author.username}, ${post.created_at.slice(0, 10)}: ${post.content}`),
      "",
      "## Alternatives buyers mention",
      "Spreadsheets, an incumbent suite, and doing nothing. Treated as language until a source ranks them.",
      "",
      "## Objections and proof required",
      "Migration path and a named reference. Marked open: whether the objection changes by company size.",
      "",
      "## Open questions",
      "- How much of the segment already has a dedicated budget line?",
      "- Which objection blocks a pilot most often?",
      "",
      "## Sources",
      ...pages.map((page) => sourceLine(page.title, page.url, page.checkedAt)),
      ...seedSources.map((source) => `- ${source.title}: ${source.link}`),
    ].join("\n");
    
    console.log(brief);

    Contoh keluaran

    # GTM brief — operations teams at 50-200 person companies in DACH
  5. Simpan bukti untuk pasar berikutnya

    Buat satu LiveDoc per segmen dan wilayah, tambahkan halaman yang diunduh sebagai resource URL dan brief sebagai dokumen. Pasar berikutnya mulai dari sumber yang sama tanpa mengunduh ulang kategori, dan menambah URL lagi dideduplikasi.

    gtm.ts
    type LiveDocData = { data: { short_id: string } };
    
    const briefDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `GTM: ${segment} — ${region}`,
      description: `Market evidence checked ${today}`,
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/urls`, {
      urls: pages.map((page) => ({ url: page.url, title: page.title })),
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/doc`, {
      title: `GTM brief ${today}`,
      content: brief,
    });
    
    console.log(briefDoc.data.short_id); // reuse for the next region

    Contoh keluaran

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Termasuk

  • Bacaan pasar bersumber dari Chat API dan halaman di baliknya
  • Halaman kategori, perbandingan, dan harga dalam Markdown
  • Bahasa dan keberatan pembeli dari X dengan akun dan tanggal
  • Brief yang berpusat pada keputusan peluncuran, bukan topik
  • LiveDoc untuk memakai ulang bukti di wilayah atau peluncuran berikutnya

Yang tidak dilakukan

  • Hanya sumber publik; tanpa laporan berbayar, panel, atau wawancara pelanggan
  • Tidak pernah memperkirakan ukuran atau pertumbuhan pasar — tanpa data menulis “Tidak tersedia”
  • Post X adalah bahasa dan sinyal, bukan sampel pembeli representatif
  • Tidak memilih segmen atau harga untuk Anda
  • Tidak menerbitkan brief atau menulis ke CRM

Pertanyaan

Perlu laporan pasar berbayar?

Tidak. Alur membaca sumber publik dan menandai celah. Jika sudah punya laporan, tambahkan sebagai dokumen di LiveDoc dan kutip seperti sumber lain.

Bisa riset pasar dalam bahasa lain?

Bisa. Atur wilayah dan bahasa. Kutipan tetap dalam bahasa asli dengan terjemahan di sampingnya, agar peninjau lokal bisa memeriksa penyusunan kalimat.

Apakah saya mendapat ukuran pasar?

Hanya saat sumber menyebutkannya, dengan tautan dan tanggal. Jika tidak, brief menulis “Tidak tersedia” alih-alih membuat angka atau mengekstrapolasi dari satu post.

Bisakah ia bicara dengan pelanggan?

Tidak. Ia membaca sumber publik. Tambahkan catatan wawancara sebagai dokumen dan tandai internal; brief tidak pernah menyajikan catatan privat sebagai bukti publik.

Apa bedanya dengan brief riset?

Brief riset menjawab satu pertanyaan. Alur ini menyusun bukti di sekitar keputusan go-to-market — segmen, bahasa pembeli, alternatif, keberatan, dan bukti yang diminta — untuk masuk ke rencana peluncuran.

Berapa biaya satu brief?

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.

Jalankan per wilayah

Pertahankan struktur bagian dan ubah hanya wilayah serta bahasa. Satu LiveDoc per wilayah dan pertanyaan yang sama agar brief bisa dibandingkan.

Tambahkan catatan wawancara

Tempel catatan panggilan pelanggan sebagai dokumen dan tandai internal. Brief bisa mengutipnya di samping bukti publik, tetapi tidak pernah menyajikan catatan privat sebagai sumber publik.

Masukkan ke deck peluncuran

Berikan bagian keberatan dan bukti ke alur deck dengan menjaga daftar sumber. Brief tetap lapisan bukti; deck adalah presentasi, bukan sumber kebenaran kedua.

Halaman referensi di balik resep ini dan langkah berikutnya.