リサーチ
営業チームがそのまま使える競合分析を作る
競合自身のページ、周辺の報道、X での買い手の声を集め、主張ごとに出典・日付・ステータスを持つ分析にまとめます。
プロンプトをコピー
角括弧の項目を置き換えて、Claude Code、Codex、ターミナルにアクセスできる AI に貼り付けてください。Felo スキルをインストールし、クレジットを使う前に確認し、ワークフローを実行します。
[自社製品] のための [競合名] の競合分析を作成してください。 対象: [セグメント]、[地域]、[言語]。期間: [過去90日 / 過去12か月]。この分析が支える意思決定: [価格変更 / ローンチ時のポジショニング / 反論対応]。 開始する情報源: [競合ドメイン]、[価格ページの URL]、[変更履歴の URL]。 Markdown の分析に以下を含めてください。 1. 競合が自社をどう位置づけているか(本人たちの言葉で)。 2. 根拠表: 主張、出典タイトル、URL、日付、ステータス(Verified / Vendor claim / Third-party / Signal / Inference / Not verified)。 3. 価格: ページに書かれている内容、リンク、確認日。ページと日付なしに料金を本文へ転記しないでください。 4. 購入者が反発する点(X のアカウントと日付を添え、シグナルとして表示)。 5. 次に取るべき行動(推奨として表示)。 6. 出典の完全な一覧。 ルール: - 競合のポジショニングは引用し、より強い主張に言い換えないでください。 - ベンダーの主張、第三者による報道、あなた自身の推論を分け、すべての行にラベルを付けてください。 - 価格、数値、顧客名、ベンチマークを捏造しないでください。データがない場合は「該当データなし」と書いてください。 - 期間と地域を明示的な値に解決してください。 - クレジットを消費する前に、実行予定の API 呼び出しを示して私の承認を待ってください。 - 公開、送信、予約、CRM への書き込みはしないでください。 - 結果を ./competitor-teardown.md に書き、チャットで要約してください。
コピー内容にはインストール手順と安全ルールも含まれます。
完成するもの
実行時の出力例です。リアルタイム生成ではありません。
競合分析 — [競合]、2026-10-30 確認
彼らの自己位置づけ
トップページの見出し:「成長するサポートチームのためのプラットフォーム」。カテゴリページ:「サポートチームに必要なすべて」。どちらもベンダーの主張で、書かれたまま引用。
根拠表
| 主張 | 出典 | 日付 | ステータス |
|---|---|---|---|
| 単機能ではなくプラットフォームとして位置づけ | https://example.com/competitor/home | 2026-10-30 | Verified |
| 毎週変更を出荷 | https://example.com/competitor/changelog | 2026-10-28 | Verified |
| 独立系まとめで取り上げられた | https://example.com/roundup | 2026-10-27 | Third-party |
| オンボーディングの遅さに言及する買い手がいる | 下に引用した X 投稿 | 2026-10-14 | Signal |
| エンタープライズが最大セグメント | 該当データなし | — | Not verified |
価格
価格ページには段階制プランと従量制プランがある。ここでは料金を繰り返さない。最新ページと日付を確認: https://example.com/competitor/pricing (2026-10-30)。
買い手が反発する点
@example_dev、2026-10-14:「セットアップはデモの説明より時間がかかった」。日付付きの1投稿であり、頻度の推定ではない。
推奨
比較ページでは「最初の結果までの時間」を前面に出す。これは私たちの推論で、競合の主張ではない。
出典
- https://example.com/competitor/home
- https://example.com/competitor/pricing
- https://example.com/competitor/changelog
実際の呼び出し
開発者向け:同じワークフローを実行順に並べたコピー可能なコード。
実際の API 呼び出しを表示
出典付きの基準から始める
Chat は回答と使用ページを返すので、競合がどこで語られているかの地図が得られます。回答は手がかり、出典はリンクです。リンクを残し、証拠表の第三者行に使います。下の helper はキーを一度送り、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);出力例
{ "answer": "The competitor positions itself as …", "sources": [ { "link": "https://example.com/competitor", "title": "…", "snippet": "…" } ] }競合が管理するページを取得する
第三者の報道は世間の見方を、競合自身のページは彼らの主張を伝えます。readability を有効にしてホームページ、料金ページ、changelog を Markdown で抽出し、取得日を記録します。日付のない料金ページは罠です。
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 }; }), );出力例
{ "url": "https://example.com/competitor/pricing", "checkedAt": "2026-10-30", "content": "# Pricing\n\nExtracted page text…" }X で買い手の声を確認する
競合に対する不満や回避策を X で検索します。各投稿のハンドルと日付を残します。日付付きの引用1件は「不満があった」証拠であり、「どれくらい一般的か」の証拠ではありません。分析ではシグナルとラベルし、数件の投稿を割合にしません。
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);出力例
{ "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 } } ] } }証拠表で分析を組み立てる
編集ステップです。取得ページと X 投稿を主張に変え、各主張に出典、日付、ステータスを付けます。ステータス列が文書を誠実に保ちます。ページに書かれたことは
Verified、ベンダーのマーケティングはVendor claim、外部報道はThird-party、日付付き投稿はSignal、あなたの解釈はInference、証拠なしはNot verifiedです。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);出力例
| Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
次回更新用に LiveDoc へ保存する
競合ごとに LiveDoc を1つ作り、取得ページを URL リソースとして追加し、分析自体をドキュメントリソースとして追加します。URL の再追加は重複排除されるので、次の四半期は変わった部分だけを取得し、前回の分析も同じアーカイブに残ります。
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出力例
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
含まれるもの
- Chat API の出典付き基準とその根拠ページ
- 競合のホームページ、料金、changelog の Markdown 抽出
- 証拠ではなくシグナルとしてラベルした日付付き X 買い手コメント
- 検証済み事実、ベンダー主張、推論を分ける証拠表
- 次回更新をゼロから始めなくて済む LiveDoc
やらないこと
- 公開ソースのみ。勝敗インタビュー、CRM メモ、社内ダッシュボードは扱わない
- 料金はリンクと日付のみ。確認日のない表にレートを固定しない
- X のカバレッジは不完全で、買い手の代表サンプルではない
- ポジショニングは決めない。提言は推論として明示する
- 分析を公開したり battlecard ツールに書き込んだりしない
よくある質問
証拠はどこから来ますか?
Chat API は出典付きの基準と使用ページを返し、Web Fetch が競合自身のページを Markdown にし、X Search が日付付きの買い手投稿を加えます。各行は出典と日付を保持し、推論には独自のステータスが付きます。
複数の競合を扱えますか?
はい。競合ごとに同じプロンプトを1回実行し、会社ごとに LiveDoc を1つ保持します。比較ページは「検証済み」の行だけを結合し、2回の実行の証拠を混ぜません。
競合の料金を引用できますか?
ワークフローは料金ページに書かれている内容を、リンクと確認日付きで記録します。レートを文章に固定しません。ベンダーの料金は変わるため、古い数字は数字がないより悪いからです。
自社の勝敗メモは使えますか?
公開ソースだけを読みます。社内メモは LiveDoc に別のドキュメントリソースとして追加し、社内とラベルしてください。顧客向け資料には引用されません。
どの頻度で更新すべきですか?
カレンダーではなくトリガーで更新します。料金変更、大きなリリース、営業サイクルの開始時です。同じ LiveDoc に対して再実行し、前四半期の分析を新しい分析の隣に残します。
分析1本の費用は?
各 chat、抽出、X 検索は従量制クレジットを使います。現在の料金は料金ページにあります。プロンプトは使う前に承認を求めます。
関連ワークフロー
1つの問いを、出典付きリサーチブリーフに変える
Web に問いを投げ、回答の根拠ページを Markdown で取得し、X の実務者の声を加え、最後に証拠をあとから検索できる LiveDoc に残します。
ワークフローを開くリサーチ市場の問いを go-to-market ブリーフに変える
市場に正確な問いを投げ、回答の背景にあるカテゴリと料金ページを読み、X で買い手が課題をどう語るかを集め、出典付きの主張と未解決の問いを持つ GTM ブリーフに保存します。
ワークフローを開くコンテンツチームが本当に読む日次AIニュースダイジェストを作る
出典付きのニュースまとめを取り、X の実務者の議論を加え、動画の文字起こしを1本取得し、Markdown で号を構成して LiveDoc に保存します。
ワークフローを開く自分の形に変える
同じレシピを、実際の進め方に合わせて調整します。
カレンダーではなくトリガーで更新する
競合が料金を変えたとき、大きなリリースをしたとき、大きな営業サイクルの前に同じワークフローを再実行します。各分析を同じ LiveDoc の日付付きドキュメントリソースとして残し、前四半期と並べます。
分析を battlecard にする
同じ証拠表から、経済的買い手、チャンピオン、技術レビュアーの3者向けに1ページずつ書き、`Verified` 行だけを使い、リンクを付けます。顧客向け資料に `Inference` を入れないでください。
2社を並べて比較する
競合ごとに別の LiveDoc で1回ずつ実行し、両方の実行で `Verified` になった行だけを結合した比較ページを作ります。ステータス列なしで2回の実行を1つの証拠表に混ぜないでください。
さらに進む
このレシピの背景にあるリファレンスと、次に見るべきページ。