リサーチ
市場の問いを go-to-market ブリーフに変える
市場に正確な問いを投げ、回答の背景にあるカテゴリと料金ページを読み、X で買い手が課題をどう語るかを集め、出典付きの主張と未解決の問いを持つ GTM ブリーフに保存します。
プロンプトをコピー
角括弧の項目を置き換えて、Claude Code、Codex、ターミナルにアクセスできる AI に貼り付けてください。Felo スキルをインストールし、クレジットを使う前に確認し、ワークフローを実行します。
[製品] が [地域] の [セグメントまたは ICP] に参入するための go-to-market リサーチブリーフを [言語] で作成してください。 モーション: [セルフサーブ / 営業主導 / パートナー経由]。この分析が支える意思決定: [ローンチ / 価格 / リポジショニング]。期間: [過去90日 / 過去12か月]。 Markdown のブリーフに以下を含めてください。 1. セグメントの定義: 誰か、現在何を使っているか、市场规模について出典が何と言っているか。出典を引用するか「該当データなし」と書いてください。 2. 購入者の言葉: 問題をどう表現しているか。リンクと日付を添えてください。 3. 代替手段: 何から乗り換えるか。表計算ソフトや「何もしない」も含めてください。 4. 反論と、購入者が求める証拠。 5. 公開情報では答えられない未解決の問い。 6. 出典の完全な一覧。 ルール: - 市場に関する主張には必ずリンクと日付を付けてください。市場規模、成長率、予算を雰囲気で見積もらないでください。 - 独立した情報源、ベンダーのページ、あなた自身の推論を分けてください。 - X は言葉と反論のために使い、市場規模の証拠にはしないでください。 - 期間と地域を明示的な値に解決してください。 - クレジットを消費する前に、実行予定の API 呼び出しを示して私の承認を待ってください。 - 公開、送信、予約、CRM への書き込みはしないでください。 - 結果を ./gtm-brief.md に書き、チャットで要約してください。
コピー内容にはインストール手順と安全ルールも含まれます。
完成するもの
実行時の出力例です。リアルタイム生成ではありません。
GTM ブリーフ — [地域] の [セグメント]
セグメント定義
スプレッドシートでスケジュール管理をする小規模運用チーム。規模: 確認した公開ソースからは該当データなし — 数字のないブリーフに数字を入れないこと。
買い手の言葉
- 「まだスプレッドシートでやっている」 — X 投稿、2026-10-18
- 「セットアップが一番大変」 — X 投稿、2026-10-02
言葉としてラベル付けし、普及率の証拠にはしない。
買い手が挙げる代替案
スプレッドシート、既存スイート、何もしない。出典: https://example.com/thread (2026-10-18)。
反論と必要な証明
セキュリティレビューと移行パス。買い手は名前の出る参照先を求めるが、公開されているものはまだないため、未解決の問いのまま。
未解決の問い
- このセグメントのどれだけが専用の予算枠を持っているか?
- 反論は会社規模で変わるか?
出典
- https://example.com/category-page
- https://example.com/pricing-page
- https://example.com/thread
実際の呼び出し
開発者向け:同じワークフローを実行順に並べたコピー可能なコード。
実際の API 呼び出しを表示
市場の問いを枠付ける
Chat は回答と使用ページを返すので、答えられる範囲まで狭い問いから始めます。誰が買うのか、今日は何を使っているのか、どんな反論が出るのか。リソースは手がかりリンクとして残します。回答は手がかり、リンクが証拠で、最後の出典リストになります。
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);出力例
{ "answer": "Buyers in this segment usually start from spreadsheets and …", "sources": [ { "link": "https://example.com/category-page", "title": "…", "snippet": "…" } ] }カテゴリページ自体を読む
市場を枠付けるページを取得します。カテゴリ概要、比較ページ、料金ページです。readability を有効にして Markdown にし、取得日を付けます。市場理解の質は背後のページで決まります。
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 }; }), );出力例
{ "url": "https://example.com/category", "checkedAt": "2026-10-30", "content": "# Category overview\n\nExtracted page text…" }買い手が課題をどう語るか集める
X では製品名ではなく、買い手が課題にぶつかったときの言葉を検索します。ハンドルと日付を残します。ブリーフは言葉と反論のために使い、市場規模や反論の頻度の指標にはしません。
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);出力例
{ "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 } } ] } }判断を中心にブリーフを書く
セグメント定義、買い手の言葉、代替案、反論、未解決の問いを1つの Markdown にまとめます。各主張は出典と日付を保持し、市場規模は出典があるときだけ書き、公開ソースで答えられないことは推論せず未解決の問いに置きます。
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);出力例
# GTM brief — operations teams at 50-200 person companies in DACH
次の市場のために証拠を残す
セグメントと地域ごとに LiveDoc を1つ作り、取得ページを URL リソース、ブリーフ自体をドキュメントリソースとして追加します。次の市場は同じ出典から始まり、カテゴリページを再取得せず、URL の再追加は重複排除されます。
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出力例
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
含まれるもの
- Chat API の出典付き市場理解とその根拠ページ
- カテゴリ、比較、料金ページの Markdown 抽出
- ハンドルと日付付きの X 買い手の言葉と反論
- ローンチ判断を中心に構成したブリーフ
- 次の地域やローンチで証拠を再利用できる LiveDoc
やらないこと
- 公開ソースのみ。有料市場レポート、パネル、顧客インタビューは扱わない
- 市場規模や成長率は推定しない。データがなければ「利用不可」と書く
- X 投稿は言葉とシグナルであり、買い手の代表サンプルではない
- セグメントや価格を代わりに選ばない
- ブリーフを公開したり CRM に書き込んだりしない
よくある質問
有料の市場調査レポートは必要ですか?
不要です。公開ソースを読み、空白を明示します。すでにレポートを持っている場合は、ドキュメントリソースとして LiveDoc に追加し、他の出典と同様に引用します。
別の言語の市場も調べられますか?
はい。地域と言語のプレースホルダーを設定します。引用は原文のまま残し、隣に翻訳を付けて現地レビュアーが表現を確認できるようにします。
市場規模は出ますか?
出典が明示している場合だけ、リンクと日付付きで示します。それ以外は数字を作らず、1件の投稿から外挿せず、「利用不可」と書きます。
顧客と会話できますか?
いいえ。公開ソースを読むだけです。インタビューメモはドキュメントリソースとして追加し、社内とラベルしてください。非公開メモを公開証拠として提示しません。
リサーチブリーフとの違いは?
リサーチブリーフは1つの問いに答えます。このワークフローは証拠を go-to-market 判断(セグメント、買い手の言葉、代替案、反論、買い手が求める証明)に沿って構成し、ローンチ計画に渡せる形にします。
ブリーフの費用は?
各 chat、抽出、X 検索は従量制クレジットを使います。現在の料金は料金ページにあります。プロンプトは使う前に承認を求めます。
関連ワークフロー
1つの問いを、出典付きリサーチブリーフに変える
Web に問いを投げ、回答の根拠ページを Markdown で取得し、X の実務者の声を加え、最後に証拠をあとから検索できる LiveDoc に残します。
ワークフローを開くリサーチ営業チームがそのまま使える競合分析を作る
競合自身のページ、周辺の報道、X での買い手の声を集め、主張ごとに出典・日付・ステータスを持つ分析にまとめます。
ワークフローを開くオフィスリサーチページをスライド資料に変える
ページを抽出し、LiveDoc の文脈として保存し、PPT Task API に deck を作らせ、完成したリンクが出るまでポーリングします。
ワークフローを開く自分の形に変える
同じレシピを、実際の進め方に合わせて調整します。
地域ごとに実行する
章の構成は同じまま、地域と言語のプレースホルダーだけを変えます。地域ごとに1つの LiveDoc と同じ問いを使い、ブリーフを比較可能にします。
自分のインタビューメモを追加する
顧客通話のメモをドキュメントリソースとして貼り、社内とラベルします。ブリーフは公開証拠の隣で参照できますが、非公開メモを公開出典として提示しません。
ローンチ deck に渡す
反論と証明のセクションを deck ワークフローに渡し、出典リストを付けたままにします。ブリーフは証拠レイヤーで、deck はその表現であり、第二の真実ではありません。
さらに進む
このレシピの背景にあるリファレンスと、次に見るべきページ。