リサーチ
初回アプローチの前にターゲット企業を調べる
相手企業のサイト、最近の報道、公開されている発信を読み、直近の動き、優先事項の仮説、会話のきっかけ、正直な不明点をまとめたアカウントブリーフを書きます。
プロンプトをコピー
角括弧の項目を置き換えて、Claude Code、Codex、ターミナルにアクセスできる AI に貼り付けてください。Felo スキルをインストールし、クレジットを使う前に確認し、ワークフローを実行します。
[会社名またはドメイン] のためのアカウントブリーフを、[アプローチ / ディスカバリー商談 / 更新] の前に作成してください。 私たちの提供: [製品またはサービス]。注目する購入者: [役割]。最近の動きの期間: [過去90日 / 過去12か月]。 相手のサイト、公開報道、公開投稿を読んでください。Markdown のブリーフに以下を含めてください。 1. 彼らが何をしているか(1段落、出典付き)。 2. 最近の動き: ローンチ、資金調達、採用、経営陣、提携。日付とリンクを添えてください。 3. 今四半期の優先事項(推測であることを明示)。 4. 会話のきっかけ: 具体的な観察を3つ、それぞれ出典付きで。 5. 不明点: 公開情報では確認できなかったこと。 6. 出典の完全な一覧。 ルール: - 担当者名、メールアドレス、電話番号、従業員数、売上、調達額を捏造しないでください。 - 公開情報のみ: 非公開データ、ログイン必須ページ、スクレイピングしたディレクトリは使わないでください。 - CRM やその他のシステムに書き込まないでください。ブリーフは人が確認するファイルです。 - すべての推測を推測として明示し、事実にはリンクと日付を添えてください。 - 購入者の意図を事実として書かないでください。 - クレジットを消費する前に、実行予定の API 呼び出しを示して私の承認を待ってください。 - 送信、予約、公開、メッセージ送信はしないでください。 - 結果を ./account-brief.md に書き、チャットで要約してください。
コピー内容にはインストール手順と安全ルールも含まれます。
完成するもの
実行時の出力例です。リアルタイム生成ではありません。
アカウントブリーフ — [会社]、2026-10-30 確認
彼らがやっていること
中規模物流事業者向けの倉庫ピッキングロボットを製造。出典: https://example.com/about(2026-10-30 確認)。
最近の動き
- 2つ目の組み立て拠点を開設 — https://example.com/news/expansion (2026-10-24)
- 「導入運用」チームを採用中 — https://example.com/careers(2026-10-30 確認)
- パートナー連携についての自社アカウント投稿 — @example_company (2026-10-21)
優先事項の可能性(推論)
より多くの拠点でより速く導入すること。拡張の投稿と新しい導入職からの推論で、表明された計画でも公開情報で確認されたものでもない。
会話のきっかけ
- 2つ目の拠点は新しい。拠点ごとに違うとき導入プレイブックがどう変わるか聞く。出典: https://example.com/news/expansion
- 専任の導入運用職は、営業と設置の間の引き継ぎを示唆する。出典: https://example.com/careers
不明点
- 現在誰が導入運用を担っているか: 公開ソースからは該当データなし。
- 車両台数と契約金額: 該当データなし。
出典
- https://example.com/about
- https://example.com/news/expansion
- https://example.com/careers
実際の呼び出し
開発者向け:同じワークフローを実行順に並べたコピー可能なコード。
実際の API 呼び出しを表示
まず企業概要を取る
Chat で企業が何をしているか、最近どんな公開変化があったかを聞き、引用元を残します。
account.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 company = "Example Robotics"; const domain = "example.com"; const buyerRole = "Head of Operations"; const overview = await felo<ChatData>("/v2/chat", { query: `What does ${company} do, who buys from it, and what changed in the last 90 days?`, }); const seedSources = overview.data.resources.slice(0, 5);出力例
{ "answer": "The company builds …", "sources": [ { "link": "https://example.com/about", "title": "…", "snippet": "…" } ] }サイト、料金、採用を読む
Web Fetch で About、料金、採用ページを読み、製品、顧客、募集中の職種を把握します。
account.ts type ExtractData = { data: { content: string } }; const companyPages = [ { url: `https://${domain}/about`, title: "About" }, { url: `https://${domain}/pricing`, title: "Pricing" }, { url: `https://${domain}/careers`, title: "Careers" }, ]; const pages = await Promise.all( companyPages.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/careers", "checkedAt": "2026-10-30", "content": "# Careers\n\nOpen roles: deployment operations…" }直近90日の公開の動きを見る
X で企業名と製品名を検索し、直近90日の公開投稿、アカウント、日付を残します。
account.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 posts = await felo<XData>("/v2/x/tweet/search", { query: `"${company}" (hiring OR launch OR partnership OR expansion)`, limit: 20, since_time: since, }); const recent = posts.data.tweets.slice(0, 5);出力例
{ "data": { "tweets": [ { "content": "We just opened our second assembly site", "author": { "username": "example_company" }, "created_at": "2026-10-21T14:02:00Z", "metrics": { "retweet_count": 4, "favorite_count": 31 } } ] } }アカウントブリーフを書く
企業概要、最近の動き、優先事項の仮説、会話のきっかけ、不明点、出典を書きます。
account.ts const today = new Date().toISOString().slice(0, 10); const accountBrief = [ `# Account brief — ${company}`, `Checked ${today}. Buyer role: ${buyerRole}.`, "", "## What they do", overview.data.answer, "", "## Recent moves", ...recent.map( (post) => `- ${post.created_at.slice(0, 10)}: ${post.content} (from @${post.author.username})`, ), ...pages.map((page) => `- ${page.title} page captured ${page.checkedAt}: ${page.url}`), "", "## Likely priorities (inference)", "<!-- One or two sentences from the moves above. Mark them as inference, never a stated plan. Delete this comment when filled. -->", "", "## Conversation starters", ...recent.slice(0, 3).map( (post) => `- Ask about: ${post.content.slice(0, 100)} (dated ${post.created_at.slice(0, 10)})`, ), "", "## Unknowns", "- Who owns the workflow we sell into: Not available from public sources.", "- Contract values and team size: Not available.", "", "## Sources", ...pages.map((page) => `- ${page.title}: ${page.url}`), ...seedSources.map((source) => `- ${source.title}: ${source.link}`), ].join("\n"); console.log(accountBrief);出力例
# Account brief — Example Robotics
LiveDoc に保存する
ブリーフと出典を LiveDoc に保存し、次のフォローで再利用します。
account.ts type LiveDocData = { data: { short_id: string } }; const accountDoc = await felo<LiveDocData>("/v2/livedocs", { name: `Account: ${company}`, description: `Briefs and sources checked ${today}`, }); await felo(`/v2/livedocs/${accountDoc.data.short_id}/resources/urls`, { urls: [ ...pages.map((page) => ({ url: page.url, title: page.title })), ...seedSources.map((source) => ({ url: source.link, title: source.title })), ], }); await felo(`/v2/livedocs/${accountDoc.data.short_id}/resources/doc`, { title: `Account brief ${today}`, content: accountBrief, }); console.log(accountDoc.data.short_id); // the next call reuses this LiveDoc出力例
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
含まれるもの
- Chat の出典付き企業概要
- 会社サイト、料金、採用ページの Markdown 抽出
- 日付付きの X 公開投稿
- 構造化されたアカウントブリーフ
- 証拠を保存する LiveDoc
やらないこと
- 連絡先メール、電話番号、個人情報は提供しない
- 非公開データやログイン限定ページは読まない
- CRM への書き込みやメッセージ送信はしない
- 従業員数、売上、資金調達は出典が明示する場合のみ記録
- 優先事項と意図は推論として明示する
よくある質問
連絡先メールを出しますか?
いいえ。公開情報の調査だけを行い、メール、電話、個人情報は提供しません。
データはどこから来ますか?
Chat が出典付きの企業概要を返し、Web Fetch が会社サイト、料金、採用ページを読み、X Search が公開の動きを補います。各項目はリンクと日付を保持します。
テック企業以外も調べられますか?
はい。公開情報が少ない業界では、ブリーフは推測せず不明点として明示します。
CRM に書き込みますか?
いいえ。Markdown ブリーフを生成するだけで、CRM 連携は自分で実装してください。
優先事項は事実ですか?
いいえ。ブリーフは「優先事項の仮説」とラベルし、根拠を示します。最終判断は営業担当が行います。
1回の費用は?
Chat、抽出、X 検索は従量制クレジットです。現在の料金は料金ページにあり、プロンプトは使う前に確認を求めます。
関連ワークフロー
市場の問いを go-to-market ブリーフに変える
市場に正確な問いを投げ、回答の背景にあるカテゴリと料金ページを読み、X で買い手が課題をどう語るかを集め、出典付きの主張と未解決の問いを持つ GTM ブリーフに保存します。
ワークフローを開くリサーチ営業チームがそのまま使える競合分析を作る
競合自身のページ、周辺の報道、X での買い手の声を集め、主張ごとに出典・日付・ステータスを持つ分析にまとめます。
ワークフローを開くコンテンツ製品ブリーフをランディングページに変える
読者を調査し、ブリーフを LiveDoc に保存し、その文脈から Landing Page タスクを作成し、ホストされたページが完成するまでポーリングします。
ワークフローを開く自分の形に変える
同じレシピを、実際の進め方に合わせて調整します。
1つのセグメントだけ調べる
業界や地域を絞ると、ブリーフが具体的になります。
直近の発表会を加える
発表会ページを追加ソースにすると、会話のきっかけが旬になります。
競合分析と一緒に使う
アカウントブリーフの優先事項と競合分析のポジショニングを照らし、差別化の切り口を見つけます。
さらに進む
このレシピの背景にあるリファレンスと、次に見るべきページ。