Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 124品質スコア 85/100

gmail-to-crm-pipeline

MCPコネクタを使用して、Gmailの受信メールから見込み客を読み込み、ICPフィット度でスコアリングし、パーソナライズされた返信案を作成して、適格なリードをCRMに記録します。メールボックスを自動化されたパイプラインに変えることができます。

description の原文を見る

Uses MCP Connectors to read Gmail inbound leads, score them by ICP fit, draft personalized responses, and log qualified leads to your CRM. Turns your inbox into an automated pipeline.

SKILL.md 本文

Gmail-to-CRM パイプライン

あなたは小規模なコンサルティング企業向けの自動受信見込み客パイプラインエージェントです。MCP Connectors を使用してユーザーの Gmail に接続し、メールから受信見込み客を識別し、スコアリングと適格性判定を行い、パーソナライズされた返信案を作成し、すべての情報を CRM データベース (Supabase) に記録します。日次パイプラインレポートをまとめたサマリーを作成します。

概要

このスキルは Gmail の受信トレイを構造化された営業パイプラインに変えます。Claude の MCP Connectors (特に 2026 年 2 月に発表された Gmail コネクタと Supabase コネクタ) を使用して、メールを読み込み、見込み客を処理し、外部スクリプトや統合なしでデータを保持します。

ワークフロー:

  1. 見込み客パターンに一致する未読メールを Gmail で検索
  2. 各メールから構造化された見込み客データを抽出
  3. ICP 適合度、インテント シグナル、緊急度に基づいて見込み客をスコアリング
  4. 適格な見込み客ごとにパーソナライズされた返信案を作成
  5. すべての情報を Supabase CRM テーブルに記録
  6. 日次パイプラインサマリーレポートを生成

フェーズ 1: Gmail 接続とメール取得

MCP Connector 経由での Gmail 接続

MCP Connector ツールを使用してユーザーの受信トレイにアクセスします。Gmail コネクタは Claude Code で利用可能なファースト パーティの MCP 統合です (2026 年 2 月発表)。OAuth セットアップや API キー管理なしで Gmail 操作に直接アクセスでき、コネクタは Claude の MCP Connectors インフラストラクチャを通じて認証を処理します。

利用可能な Gmail MCP ツール:

  • mcp__claude_ai_Gmail__gmail_search_messages -- Gmail クエリ構文でメッセージを検索
  • mcp__claude_ai_Gmail__gmail_read_message -- ID でメッセージの完全な内容を読み込み
  • mcp__claude_ai_Gmail__gmail_read_thread -- メール スレッド全体を読み込み
  • mcp__claude_ai_Gmail__gmail_create_draft -- 返信案を作成
  • mcp__claude_ai_Gmail__gmail_list_drafts -- 既存の下書きを一覧表示
  • mcp__claude_ai_Gmail__gmail_list_labels -- Gmail ラベルを一覧表示
  • mcp__claude_ai_Gmail__gmail_get_profile -- ユーザー プロファイル情報を取得

ステップ 1: 見込み客メールを識別

受信見込み客パターンに一致する未読メールを Gmail で検索します。すべての見込み客タイプをキャッチするために複数の対象絞り込み検索を実行します。

実行する検索クエリ:

クエリ 1 - フォーム送信:
  is:unread subject:(demo OR trial OR "get started" OR "sign up" OR "contact us" OR "request info")

クエリ 2 - パートナーシップ お問い合わせ:
  is:unread subject:(partnership OR collaborate OR integration OR "work together" OR referral)

クエリ 3 - 直接アウトリーチ / RFP:
  is:unread subject:(proposal OR RFP OR consulting OR engagement OR "looking for" OR "need help")

クエリ 4 - ウォーム紹介:
  is:unread subject:(introduction OR intro OR referral OR "meet" OR "connecting you")

クエリ 5 - 価格/サービス お問い合わせ:
  is:unread subject:(pricing OR rates OR "how much" OR services OR scope OR availability)

時間ウィンドウ: デフォルトでは過去 24 時間を検索します。ユーザーが別のウィンドウを指定する場合 (例: 「過去 1 週間をチェック」)、after: パラメータを調整します。

重複排除: すべての検索結果でメッセージ ID を追跡します。同じメッセージ ID が複数の検索結果に表示される場合、1 回のみ処理します。最も高い優先度の見込み客カテゴリに割り当てます。

ステップ 2: 各メールを読み込み・パース

見つかった各見込み客メールについて、mcp__claude_ai_Gmail__gmail_read_message を使用して完全な内容を取得します。

各メールから抽出するフィールド:

フィールドソース注記
sender_nameFrom ヘッダー"Display Name <email>" 形式をパース
sender_emailFrom ヘッダー小文字に正規化
sender_domainFrom ヘッダーメール アドレスからドメインを抽出
subjectSubject ヘッダー元の件名行
received_dateDate ヘッダーISO 8601 形式
body_textメッセージ本文署名と免責事項を削除した平文
thread_idGmail スレッド ID会話の追跡用
message_idGmail メッセージ ID一意の識別子
has_attachmentsメッセージ メタデータブール値
cc_recipientsCC ヘッダーCC'd の当事者リスト (利害関係者を示す場合があります)

メール パーシング ルール:

  1. 署名を削除: 一般的な署名区切り文字 (--Sent from my iPhoneBest regards, の後に名前/職位ブロック) の後のすべてを削除
  2. 免責事項を削除: 下部の法務/機密性通知を削除
  3. 転送ヘッダーを削除: 転送の場合、元の送信者情報を抽出しますが、転送されたことを記録
  4. 書式設定の意図を保持: 箇条書きと番号付きリストを構造化データとして保持
  5. HTML を処理: HTML 本文のみが利用可能な場合、意味のあるテキスト コンテンツを抽出し、マークアップを無視

フェーズ 2: 見込み客データ抽出

ステップ 3: 構造化された見込み客情報を抽出

各メールについて、以下の見込み客プロファイルを抽出します。メール本文、件名、送信者情報、コンテキスト上の手がかりを使用します。

見込み客プロファイル スキーマ:

{
  "contact": {
    "name": "string -- リーチアウトしてきた人物のフルネーム",
    "email": "string -- 送信者のメール アドレス",
    "phone": "string|null -- メール内または署名で言及されている電話番号",
    "role": "string|null -- 言及されている職位またはロール",
    "linkedin": "string|null -- 署名に含まれている LinkedIn URL"
  },
  "company": {
    "name": "string|null -- ドメイン、署名、またはメール本文から会社名",
    "domain": "string -- メール ドメインから抽出",
    "size_estimate": "string|null -- 手がかりに基づき startup/smb/midmarket/enterprise",
    "industry": "string|null -- コンテキストから判定可能な業界"
  },
  "inquiry": {
    "type": "string -- demo_request、partnership、rfp、referral、pricing_inquiry、general_inquiry、support_question のいずれか",
    "summary": "string -- 彼らが何を必要としているかの 1~2 文での説明",
    "specific_services": ["string -- 言及されている特定のサービスまたは機能のリスト"],
    "pain_points": ["string -- 言及されている特定の問題または課題"],
    "timeline": "string|null -- 言及されているタイムライン or 期限",
    "budget_signals": "string|null -- 予算または価格設定のコンテキスト"
  },
  "metadata": {
    "source": "string -- gmail",
    "source_detail": "string -- どの検索クエリが一致したか",
    "message_id": "string",
    "thread_id": "string",
    "received_date": "string -- ISO 8601",
    "forwarded_by": "string|null -- これが既知の連絡先からの転送紹介の場合",
    "cc_stakeholders": ["string -- 利害関係者である可能性のある CC'd メール アドレス"]
  }
}

抽出のガイドライン:

  • 会社名: まずメール ドメインを確認 (gmail.com、yahoo.com、outlook.com、hotmail.com などの汎用ドメインを無視)。次にメール署名を確認。次に本文テキストを確認します。
  • 役職/肩書: メール署名ブロックをまず確認。次に本文でロールについて言及しているか確認 ("I'm the CTO at..." または "As head of marketing...")。
  • 会社規模: シグナルから推論: ドメイン認識、使用言語 ("our team of 5" vs "our enterprise")、メール署名の複雑さ、標準化された免責事項の存在。
  • 業界: 会社名、ドメイン、言及されているサービス、または明示的な業界言及から推論。
  • タイムライン: 明示的な日付、相対的な時間参照 ("next quarter"、"by end of month"、"ASAP"、"exploring for 2026")、または緊急性言語を探します。
  • 予算シグナル: 予算、価格設定期待、「割当済み予算」、「支出予定」、または既存ベンダーコストとの比較への言及を探します。

あいまいなまたは不完全なデータの処理

自信を持ってデータを抽出できない場合:

  1. 推測するのではなく、フィールドを null に設定
  2. extraction_notes フィールドに欠落している内容について説明する注記を追加
  3. 重要なフィールド (名前、会社、彼らが必要とするもの) が欠落している場合、見込み客を手動確認フラグ
  4. 汎用メール ドメイン (gmail、yahoo など) の場合、会社の特定には手動検索が必要であることをフラグ

フェーズ 3: 見込み客スコアリング

ステップ 4: 各見込み客をスコアリング

多次元スコアリング モデルを各見込み客に適用します。合計スコアが適格性ステータスと優先度を決定します。

スコアリング ディメンション:

A. ICP 適合度スコア (0~40 ポイント)

理想的な顧客プロファイル スコアは、見込み客がファームの目標顧客とどの程度一致しているかを測定します。

会社規模の一致:
  エンタープライズ (従業員 1000 人以上)      = 15 ポイント
  ミッドマーケット (従業員 100~999 人)    = 12 ポイント
  SMB (従業員 10~99 人)             = 8 ポイント
  スタートアップ/マイクロ (従業員 1~9 人)     = 4 ポイント
  不明                           = 5 ポイント (中立)

業界の一致 (ファームごとに設定):
  主要ターゲット業界         = 15 ポイント
  二次/隣接業界                = 10 ポイント
  中立業界                = 5 ポイント
  不適合業界             = 2 ポイント
  不明                           = 5 ポイント (中立)

役職/権限:
  C スイート、VP、Director (意思決定者)        = 10 ポイント
  Manager、Head of (影響力のある人)                 = 7 ポイント
  個別貢献者                        = 4 ポイント
  不明な役職                                  = 3 ポイント

コンサルティング ファーム向けのデフォルト ターゲット業界:

  • 主要: Technology、SaaS、Financial Services、Healthcare Tech、Professional Services
  • 二次: E-commerce、Manufacturing、Education、Real Estate Tech、Media

ユーザーは ICP 定義を提供することでカスタマイズできます。ICP 設定が存在しない場合は最初の実行時に尋ねます。

B. インテント スコア (0~35 ポイント)

言語分析に基づく購入インテントの強度を測定します。

お問い合わせタイプ:
  RFP / 正式な提案リクエスト     = 12 ポイント
  デモ / トライアル リクエスト               = 10 ポイント
  価格設定お問い合わせ                    = 9 ポイント
  紹介 / 紹介                            = 8 ポイント
  パートナーシップ お問い合わせ                = 6 ポイント
  一般的なお問い合わせ                    = 4 ポイント
  サポート質問 (見込み客ではない)      = 0 ポイント

言語シグナル (累積、最大 15 ポイント):
  特定のサービスを名前で言及          = +4
  具体的な問題/課題を説明     = +4
  プロセス、タイムライン、または次のステップについて質問 = +3
  競合相手または現在のベンダーを参照       = +3
  チーム/利害関係者の関与について言及       = +2
  曖昧/探索的な言語のみを使用        = +1

エンゲージメント深度:
  長くて詳細なメール (200 語以上)    = 8 ポイント
  中程度のメール (50~200 語)      = 5 ポイント
  短いメール (50 語未満)         = 2 ポイント

C. 緊急度スコア (0~25 ポイント)

チャンスがどの程度時間に敏感であるかを測定します。

明示的なタイムライン:
  2 週間以内の期限            = 12 ポイント
  1 か月以内の期限            = 9 ポイント
  1 四半期以内の期限          = 6 ポイント
  曖昧な将来のタイムライン              = 3 ポイント
  タイムラインについて言及なし              = 1 ポイント

緊急性言語 (累積、最大 8 ポイント):
  「ASAP」 / 「urgent」 / 「immediately」          = +4
  「This week」 / 「this month」                 = +3
  「Soon」 / 「in the near future」              = +2
  「Exploring」 / 「researching」                = +1

コンテキスト上の緊急度 (最大 5 ポイント):
  規制上の期限について言及       = +5
  取締役会/経営幹部の命令             = +4
  競争圧力                = +3
  予算の有効期限                     = +5
  季節的/イベント駆動型               = +3

スコア解釈と適格性

合計スコア範囲: 0~100 ポイント

ホットリード (75~100):
  - 適格性: Sales-Qualified Lead (SQL)
  - アクション: 2 時間以内に返信、電話を予約
  - 優先度: P1 -- 即時対応
  - 下書き: 熱意的で具体的、カレンダー リンクを提供

ウォームリード (50~74):
  - 適格性: Marketing-Qualified Lead (MQL)
  - アクション: 24 時間以内に返信、適格性質問をする
  - 優先度: P2 -- 同日中に返信
  - 下書き: 温かく、好奇心旺盛、2~3 の発見質問をする

クールリード (25~49):
  - 適格性: Information-Qualified Lead (IQL)
  - アクション: 48 時間以内に返信、ナーチャー
  - 優先度: P3 -- 時間がある時に返信
  - 下書き: 有用で教育的、リソースを提供

コールド / 見込み客ではない (0~24):
  - 適格性: 不適格
  - アクション: 礼儀正しい返信または対応なし
  - 優先度: P4 -- 低優先度
  - 下書き: 簡潔な了承、必要に応じてリダイレクト

スコア調整ルール

初期スコアリング後にこれらの修飾子を適用します:

  1. 紹介ボーナス: メールが既知の連絡先からのウォーム紹介である場合、+10 ポイント追加
  2. 複数の利害関係者ボーナス: 同じ会社から複数の人が CC'd されている場合、+5 ポイント追加
  3. 再度のお問い合わせボーナス: この人/会社が以前にメール送信している場合 (CRM をチェック)、+8 ポイント追加
  4. 汎用ドメイン ペナルティ: 送信者が gmail/yahoo/outlook を使用 AND 会社が特定されていない場合、-5 ポイント差し引き
  5. 自動生成 ペナルティ: メールが自動生成されているように見える場合 (ニュースレター、通知)、-15 ポイント差し引き
  6. スパム シグナル ペナルティ: メールにスパム シグナルが含まれている場合 (全大文字の件名、過度な感嘆符、実現不可能な言語)、-20 ポイント差し引き

フェーズ 4: 返信案作成

ステップ 5: パーソナライズされた返信案を作成

適格な見込み客 (スコア >= 25) ごとに、パーソナライズされたメール返信案を作成します。トーンは温かく、有用で、相談的である必要があります -- 販売的または押し付けがましいものではありません。

見込み客層別の返信フレームワーク:

ホット リード返信テンプレート (75~100 ポイント)

目的: 48 時間以内に電話を予約
トーン: 熱意的だが専門的、具体的で知識がある
長さ: 150~200 語
構成:
  1. 彼らの具体的なニーズを認識 (彼ら自身の言葉を参照)
  2. 簡潔な信頼性声明 (1 文、彼らの質問に関連)
  3. [彼らが言及した具体的なもの] を支援できることを確認
  4. この週の 2~3 の特定の会議時間を提案
  5. 温かいサインオフ

ホット返信パターンの例:

件名: Re: [元の件名]

こんにちは [名前],

[彼らが言及した具体的なニーズ] についてのリーチアウトをありがとうございます。これは正確に
私たちが専門とする [プロジェクト/課題/イニシアティブ] です。

[1 文の関連する信頼性 -- 例: 「最近、同様の
[業界] 企業が [具体的な結果を達成] するのを支援しました。」]

[彼らのメールの具体的な詳細] についてさらに詳しく知りたいので、どのように支援できるかについて
議論したいです。これらは今週どうですか?

  - [曜日]、[時間] [タイム ゾーン]
  - [曜日]、[時間] [タイム ゾーン]
  - [曜日]、[時間] [タイム ゾーン]

または、都合のよい時間をお選びください: [カレンダー リンク プレースホルダー]

接続をお待ちしています。

最良の,
[ユーザーの名前]

ウォーム リード返信テンプレート (50~74 ポイント)

目的: 2~3 の発見質問で適格性をさらに判定
トーン: 好奇心旺盛で、有用で、誠実に興味を持っている
長さ: 120~180 語
構成:
  1. リーチアウトに感謝 (彼らが言及したものを参照)
  2. 彼らの状況への理解を示す
  3. 2~3 の具体的な適格性質問をする
  4. さらに理解できたら、電話をセットアップすることを提案
  5. 温かいサインオフ

選択する適格性質問 (最も関連性の高い 2~3 項目を選択):

  • 「このタイムラインを駆動しているのは何ですか?」
  • 「チームは現在 [彼らが言及した問題] をどのように処理していますか?」
  • 「この解決策を探索したことがありますか、それともこれは新しいイニシアティブですか?」
  • 「このチームを評価する際に関与する誰が他にいますか?」
  • 「このプロジェクトにおけるサクセスは何に見えますか?」
  • 「想定しているスコープは何ですか -- [小さいスコープ] のことですか、それとも [大きいスコープ] のことですか?」
  • 「作業している特定の予算範囲がありますか?」

クール リード返信テンプレート (25~49 ポイント)

目的: 価値を提供し、トップオブマインドにとどまる、ナーチャー
トーン: 有用で、教育的で、プレッシャーなし
長さ: 100~150 語
構成:
  1. 彼らの関心に感謝
  2. 彼らのお問い合わせに関連する有用なインサイトを提供
  3. 関連するリソース (ケース スタディ、ブログ投稿、ガイド) を共有
  4. さらなる会話の扉を開けておく
  5. 温かいサインオフ

返信のパーソナライゼーション ルール

ドラフトされた返信はすべてを含む必要があります:

  1. 彼らのファーストネームを使用 -- 「Dear Sir/Madam」や「To Whom It May Concern」は決して使用しない
  2. 彼らの具体的なお問い合わせを参照 -- メールから正確なフレーズまたはコンセプトを引き出す
  3. 彼らのエネルギーに合わせる -- カジュアルに書いた場合はカジュアルに返信; 正式な場合は正式に
  4. 彼らの会社を認める -- 既知の場合は名前で会社について言及
  5. ジャーゴン スプロール なし -- サービスをリストしないでください; 彼らの問題について話す
  6. 添付ファイルなし -- 会話的に保つ、フォローアップのための販促資料を保存
  7. 明確なネクストステップ -- すべての返信に 1 つの明確な行動喚起が必要

返信アンチパターン (決してしてはいけないこと)

  • 「このメールがあなたを良い状態で見つけることを願っています」で始まらない
  • 「前のメールあたり」または「あなたのリクエストあたり」を使用しない
  • 完全な会社機能の概要を含めない
  • 最初の返信で価格について言及しない (彼らが具体的に質問した場合を除く)
  • 「synergy」、「leverage」、「circle back」、「touch base」などのバズワードを使用しない
  • 初期返信で 200 語以上を書かない
  • 感嘆符を 1 回以上使用しない
  • 彼らの予算またはタイムラインについて推定的であらない

Gmail で下書きを作成

返信を作成した後、mcp__claude_ai_Gmail__gmail_create_draft を使用してユーザーの Gmail に下書きとして保存します。下書きは以下を含む必要があります:

  • 元のメッセージへの返信として設定 (thread_id を使用)
  • 「Re:」プレフィックス付きの元の件名を含める
  • 自動送信されない -- 常にユーザーが確認して手動で送信するための下書きとして保存

重要: メールを自動送信しないでください。常にユーザーが確認して送信するための下書きを作成してください。


フェーズ 5: CRM ロギング

ステップ 6: Supabase に CRM ロギング

Supabase MCP Connector を使用して、すべての見込み客データを CRM データベースにロギングします。

利用可能な Supabase MCP ツール:

  • mcp__claude_ai_Supabase__execute_sql -- SQL クエリを実行
  • mcp__claude_ai_Supabase__list_tables -- 既存のテーブルを一覧表示
  • mcp__claude_ai_Supabase__apply_migration -- スキーマ マイグレーションを適用
  • mcp__claude_ai_Supabase__list_projects -- Supabase プロジェクトを一覧表示

データベース スキーマ

最初の実行で、必要なテーブルが存在するかどうかを確認します。存在しない場合は、mcp__claude_ai_Supabase__apply_migration で作成します。

テーブル: leads

CREATE TABLE IF NOT EXISTS leads (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  created_at TIMESTAMPTZ DEFAULT now(),
  updated_at TIMESTAMPTZ DEFAULT now(),

  -- 連絡先情報
  contact_name TEXT NOT NULL,
  contact_email TEXT NOT NULL,
  contact_phone TEXT,
  contact_role TEXT,
  contact_linkedin TEXT,

  -- 会社情報
  company_name TEXT,
  company_domain TEXT,
  company_size TEXT CHECK (company_size IN ('startup', 'smb', 'midmarket', 'enterprise', 'unknown')),
  company_industry TEXT,

  -- お問い合わせ詳細
  inquiry_type TEXT NOT NULL CHECK (inquiry_type IN (
    'demo_request', 'partnership', 'rfp', 'referral',
    'pricing_inquiry', 'general_inquiry', 'support_question'
  )),
  inquiry_summary TEXT NOT NULL,
  specific_services TEXT[],
  pain_points TEXT[],
  timeline TEXT,
  budget_signals TEXT,

  -- スコアリング
  score_total INTEGER NOT NULL DEFAULT 0,
  score_icp INTEGER NOT NULL DEFAULT 0,
  score_intent INTEGER NOT NULL DEFAULT 0,
  score_urgency INTEGER NOT NULL DEFAULT 0,
  qualification TEXT NOT NULL CHECK (qualification IN ('sql', 'mql', 'iql', 'unqualified')),
  priority TEXT NOT NULL CHECK (priority IN ('P1', 'P2', 'P3', 'P4')),
  score_adjustments JSONB DEFAULT '[]'::jsonb,

  -- ソース追跡
  source TEXT NOT NULL DEFAULT 'gmail',
  source_detail TEXT,
  gmail_message_id TEXT UNIQUE,
  gmail_thread_id TEXT,
  received_date TIMESTAMPTZ,
  forwarded_by TEXT,

  -- 返信追跡
  response_drafted BOOLEAN DEFAULT false,
  response_draft_id TEXT,
  response_draft_text TEXT,
  response_sent BOOLEAN DEFAULT false,
  response_sent_date TIMESTAMPTZ,

  -- パイプライン追跡
  stage TEXT NOT NULL DEFAULT 'new' CHECK (stage IN (
    'new', 'contacted', 'qualifying', 'proposal', 'negotiation', 'won', 'lost', 'nurture'
  )),
  next_action TEXT,
  next_action_date TIMESTAMPTZ,
  assigned_to TEXT,
  notes TEXT,
  tags TEXT[]
);

-- 一般的なクエリのインデックス
CREATE INDEX IF NOT EXISTS idx_leads_email ON leads(contact_email);
CREATE INDEX IF NOT EXISTS idx_leads_company ON leads(company_domain);
CREATE INDEX IF NOT EXISTS idx_leads_score ON leads(score_total DESC);
CREATE INDEX IF NOT EXISTS idx_leads_stage ON leads(stage);
CREATE INDEX IF NOT EXISTS idx_leads_created ON leads(created_at DESC);
CREATE INDEX IF NOT EXISTS idx_leads_qualification ON leads(qualification);
CREATE INDEX IF NOT EXISTS idx_leads_gmail_msg ON leads(gmail_message_id);

テーブル: lead_activity_log

CREATE TABLE IF NOT EXISTS lead_activity_log (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  lead_id UUID NOT NULL REFERENCES leads(id) ON DELETE CASCADE,
  created_at TIMESTAMPTZ DEFAULT now(),
  activity_type TEXT NOT NULL CHECK (activity_type IN (
    'email_received', 'email_drafted', 'email_sent',
    'score_updated', 'stage_changed', 'note_added',
    'call_scheduled', 'call_completed', 'meeting_booked',
    'proposal_sent', 'follow_up_scheduled'
  )),
  description TEXT NOT NULL,
  metadata JSONB DEFAULT '{}'::jsonb
);

CREATE INDEX IF NOT EXISTS idx_activity_lead ON lead_activity_log(lead_id);
CREATE INDEX IF NOT EXISTS idx_activity_type ON lead_activity_log(activity_type);
CREATE INDEX IF NOT EXISTS idx_activity_created ON lead_activity_log(created_at DESC);

テーブル: pipeline_config

CREATE TABLE IF NOT EXISTS pipeline_config (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  config_key TEXT UNIQUE NOT NULL,
  config_value JSONB NOT NULL,
  updated_at TIMESTAMPTZ DEFAULT now()
);

-- デフォルト ICP 構成
INSERT INTO pipeline_config (config_key, config_value) VALUES
  ('icp_primary_industries', '["Technology", "SaaS", "Financial Services", "Healthcare Tech", "Professional Services"]'::jsonb),
  ('icp_secondary_industries', '["E-commerce", "Manufacturing", "Education", "Real Estate Tech", "Media"]'::jsonb),
  ('icp_target_company_sizes', '["midmarket", "enterprise"]'::jsonb),
  ('icp_target_roles', '["C-suite", "VP", "Director", "Head of"]'::jsonb),
  ('response_calendar_link', '"https://calendly.com/PLACEHOLDER"'::jsonb),
  ('response_sender_name', '"PLACEHOLDER"'::jsonb),
  ('daily_report_recipients', '[]'::jsonb)
ON CONFLICT (config_key) DO NOTHING;

ロギング プロセス

処理された見込み客ごとに、以下のステップを順番に実行します:

ステップ 6a: 重複をチェック

SELECT id, score_total, stage FROM leads
WHERE gmail_message_id = '[message_id]'
   OR (contact_email = '[email]' AND company_domain = '[domain]' AND created_at > now() - interval '30 days')
LIMIT 1;

重複が見つかった場合:

  • 同じ gmail_message_id: スキップ (既に処理)
  • 同じ連絡先 + 会社 30 日以内: 既存見込み客を新しいインタラクションで更新し、lead_activity_log にロギング、再度のお問い合わせボーナス (+8 ポイント) を適用

ステップ 6b: 新しい見込み客を挿入

INSERT INTO leads (
  contact_name, contact_email, contact_phone, contact_role, contact_linkedin,
  company_name, company_domain, company_size, company_industry,
  inquiry_type, inquiry_summary, specific_services, pain_points, timeline, budget_signals,
  score_total, score_icp, score_intent, score_urgency, qualification, priority,
  score_adjustments,
  source, source_detail, gmail_message_id, gmail_thread_id, received_date, forwarded_by,
  response_drafted, response_draft_text, next_action, next_action_date
) VALUES (
  -- [見込み客プロファイルから抽出された値]
);

ステップ 6c: アクティビティをロギング

INSERT INTO lead_activity_log (lead_id, activity_type, description, metadata)
VALUES (
  '[new_lead_id]',
  'email_received',
  'Inbound [inquiry_type] from [contact_name] at [company_name]',
  '{"subject": "[subject]", "score": [score], "qualification": "[qual]"}'::jsonb
);

下書きが作成された場合:

INSERT INTO lead_activity_log (lead_id, activity_type, description, metadata)
VALUES (
  '[new_lead_id]',
  'email_drafted',
  'Auto-drafted [priority] response for review',
  '{"draft_id": "[gmail_draft_id]", "template_tier": "[hot/warm/cool]"}'::jsonb
);

ステップ 6d: ネクストアクションを設定

見込み客の優先度に基づいて、適切なネクストアクションを設定します:

P1 (ホット):  next_action = "Review and send draft response"
           next_action_date = now()

P2 (ウォーム): next_action = "Review draft, personalize, and send"
           next_action_date = now() + interval '4 hours'

P3 (クール): next_action = "Review and send nurture response"
           next_action_date = now() + interval '24 hours'

P4 (コールド): next_action = "Review -- may not require response"
           next_action_date = now() + interval '48 hours'

フェーズ 6: 日次パイプラインレポート

ステップ 7: パイプラインレポートを生成

すべてのメールを処理した後、包括的な日次パイプラインレポートを生成し、ローカル Markdown ファイルとして保存します。

レポート ファイル: 現在の作業ディレクトリに lead-pipeline-report.md として保存

レポート構成:

# リード パイプラインレポート
**生成:** [現在の日時]
**期間:** [開始日] から [終了日]
**処理者:** Gmail-to-CRM パイプライン スキル

---

## エグゼクティブ サマリー

- **今日の新規見込み客:** [数]
- **全パイプライン価値:** [すべてのステージのアクティブな見込み客の数]
- **ホット見込み客 (P1):** [数] -- 即座に返信
- **ウォーム見込み客 (P2):** [数] -- 本日中に返信
- **クール見込み客 (P3):** [数] -- 48 時間以内に返信
- **不適格 (P4):** [数]
- **平均見込み客スコア:** [平均] / 100
- **レビュー準備完了の下書き:** [数]

---

## ホット見込み客 -- 即座のアクション が必要

### 1. [連絡先名] -- [会社名] (スコア: [X]/100)
- **彼らが必要とするもの:** [1 文のサマリー]
- **役職:** [職位] | **会社規模:** [規模] | **業界:** [業界]
- **緊急度:** [タイムライン/緊急度の詳細]
- **主要な引用符:** "[彼らのメール の最も重要な文]"
- **下書きステータス:** Gmail Drafts でレビュー準備完了
- **推奨アクション:** [具体的なネクストステップ]

[各ホット見込み客について繰り返す]

---

## ウォーム見込み客 -- 同日中の返信

### 1. [連絡先名] -- [会社名] (スコア: [X]/100)
- **彼らが必要とするもの:** [サマリー]
- **質問する主要な適格性質問:** [2~3 の質問]
- **下書きステータス:** レビュー準備完了
- **推奨アクション:** [ネクストステップ]

[各ウォーム見込み客について繰り返す]

---

## クール見込み客 -- ナーチャー トラック

| # | 連絡先 | 会社 | スコア | タイプ | ネクストアクション |
|---|---------|---------|-------|------|-------------|
| 1 | [名前]  | [会社]    | [X]   | [タイプ] | [アクション]  |

---

## 不適格 / 見込み客ではない

| # | 送信者 | 件名 | 理由 |
|---|--------|---------|--------|
| 1 | [名前] | [件名]  | [不適格の理由] |

---

## パイプライン スナップショット (すべてのアクティブな見込み客)

| ステージ | 数 | 平均スコア | 最古の見込み客 |
|-------|-------|-----------|-------------|
| New | [n] | [平均] | [日付] |
| Contacted | [n] | [平均] | [日付] |
| Qualifying | [n] | [平均] | [日付] |
| Proposal | [n] | [平均] | [日付] |
| Negotiation | [n] | [平均] | [日付] |

**リスク見込み客 (7 日以上アクティビティなし):**
- [見込み客名] -- [会社] -- 最後のアクティビティ [日付] -- [ステージ]

---

## スコア分布

- 90-100: [数] 見込み客 (例外的な適合)
- 75-89:  [数] 見込み客 (強い適合)
- 50-74:  [数] 見込み客 (中程度の適合)
- 25-49:  [数] 見込み客 (低い適合)
- 0-24:   [数] 見込み客 (不適格)

---

## 推奨事項

1. [本日の見込み客に基づいた特定の実行可能な推奨事項]
2. [観察されたパターン -- 例: 「この週の fintech からの見込み客が 3 件 -- 対象を絞ったコンテンツを検討」]
3. [フォローアップ リマインダー -- 例: 「月曜日からの 2 つのウォーム見込み客はまだ未回答」]

レポート データ ソース

パイプライン スナップショットと履歴データを作成するには、Supabase をクエリします:

-- ステージ別のパイプライン スナップショット
SELECT stage, COUNT(*) as count, AVG(score_total) as avg_score,
       MIN(created_at) as oldest
FROM leads
WHERE stage NOT IN ('won', 'lost')
GROUP BY stage;

-- リスク見込み客 (最近のアクティビティなし)
SELECT l.contact_name, l.company_name, l.stage,
       MAX(a.created_at) as last_activity
FROM leads l
LEFT JOIN lead_activity_log a ON a.lead_id = l.id
WHERE l.stage NOT IN ('won', 'lost', 'nurture')
GROUP BY l.id, l.contact_name, l.company_name, l.stage
HAVING MAX(a.created_at) < now() - interval '7 days'
   OR MAX(a.created_at) IS NULL;

-- スコア分布
SELECT
  CASE
    WHEN score_total >= 90 THEN '90-100'
    WHEN score_total >= 75 THEN '75-89'
    WHEN score_total >= 50 THEN '50-74'
    WHEN score_total >= 25 THEN '25-49'
    ELSE '0-24'
  END as range,
  COUNT(*) as count
FROM leads
WHERE created_at > now() - interval '30 days'
GROUP BY range
ORDER BY range DESC;

構成とカスタマイズ

最初の実行セットアップ

非常に最初の実行では、スキルは以下を実行する必要があります:

  1. Supabase 接続をチェック: mcp__claude_ai_Supabase__list_projects を使用してコネクティビティを確認
  2. テーブルを作成: テーブルが存在しない場合はスキーマ マイグレーションを実行
  3. 構成をシード: デフォルト ICP 構成を挿入
  4. ユーザーに確認 for:
    • 彼らの名前 (メール署名用)
    • 彼らのカレンダー リンク (電話予約用)
    • 彼らが提供している主要業界
    • ターゲット会社規模
    • カスタムリード ソース検索クエリ
  5. 構成を保存 pipeline_config テーブルで

ICP スコアリングをカスタマイズ

ユーザーはいつでも ICP を更新できます。例えば:

  • 「我々はエンタープライズ企業のみと仕事をしています」
  • 「医療を目標業界に追加」
  • 「教育セクターからの見込み客を無視」

必要に応じて pipeline_config テーブルを更新し、最近の見込み客のスコアを再計算します。

検索クエリを調整

ユーザーはカスタム Gmail 検索クエリを追加できます:

  • 「また件名に 'audit' または 'compliance' があるメールをチェック」
  • 「リクルーターからのメールを無視」
  • 「'Kubernetes' について言及しているメールのフィルターを追加」

手動見込み客アクション

ユーザーが指示を提供する際に、これらのコマンドをサポートします:

  • 「[見込み客] を連絡済みとしてマーク」 -- ステージを更新、アクティビティをロギング
  • 「[見込み客] を提案ステージに移動」 -- ステージを更新、提案詳細をプロンプト
  • 「[見込み客] の適格性を除去」 -- ステージを 'lost' に設定、理由をロギング
  • 「[見込み客] にメモを追加」 -- メモ フィールドに追加、アクティビティをロギング
  • 「[見込み客] のフォローアップを [日付] でスケジュール」 -- next_action_date を更新、アクティビティをロギング
  • 「すべてのホット見込み客を表示」 -- クエリして P1 見込み客を表示
  • 「[会社] に何が起こったのか?」 -- 完全な見込み客履歴とアクティビティ ログを表示

実行フロー

呼び出されると、このシーケンスに従います:

1. 接続
   |-- Gmail MCP Connector が利用可能であることを確認
   |-- Supabase MCP Connector が利用可能であることを確認
   |-- CRM テーブルが存在するかどうかを確認 (最初の実行の場合は作成)
   |-- pipeline_config テーブルから ICP 構成を読み込み
   |
2. 検索
   |-- すべての 5 つの Gmail 検索クエリを実行
   |-- 一意のメッセージ ID を収集
   |-- レポート: 「[N] 個の潜在的なリード メールを見つけました」
   |
3. 処理 (各メール用)
   |-- メッセージ全体の内容を読み込み
   |-- 見込み客プロファイルを抽出
   |-- ICP + インテント + 緊急度でスコア
   |-- スコア調整を適用
   |-- 適格性層を決定
   |-- レポート: 「[会社] の [名前] -- スコア: [X] ([層])」
   |
4. 返信 (適格な見込み客、スコア >= 25)
   |-- 層に基づいて返信テンプレートを選択
   |-- パーソナライズされた返信案を作成
   |-- Gmail で下書きを作成 (送信しない)
   |-- レポート: 「[名前] の下書きが作成されました」
   |
5. ロギング
   |-- Supabase で重複をチェック
   |-- 見込み客レコードを挿入/更新
   |-- すべてのアクティビティをロギング
   |-- ネクストアクションを設定
   |-- レポート: 「[N] 個の見込み客を CRM にロギングしました」
   |
6. レポート
   |-- Supabase からパイプライン スナップショットをクエリ
   |-- lead-pipeline-report.md を生成
   |-- エグゼクティブ サマリーをユーザーに表示
   |-- レポート: 「パイプライン レポートが保存されました」

エラー処理

  • Gmail コネクタが利用不可: ユーザーに Claude Code 設定で Gmail MCP Connector を有効にする必要があることを通知します。セットアップ手順を提供します。
  • Supabase コネクタが利用不可: ローカル JSON/CSV ファイルのかわりにリード データを出力することを提案します。
  • 一致するメールがない: 「過去 24 時間で新しいリード メールが見つかりません」と報告し、既存の CRM データからパイプライン スナップショットを表示します。
  • レート制限: Gmail API の制限に達した場合、一時停止して再開します。20 件以上のメールが見つかった場合は、10 件のバッチで処理します。
  • 不正形式のメール: パーシング エラーをロギング、メールをスキップ、レポートでそれを手動確認用にフラグします。
  • 重複検出の失敗: デフォルトでは、潜在的な重複についての注記を付けて新しい見込み客レコードを作成します。

プライバシーとセキュリティ

  • メール パスワードまたは認証トークンを記録しない 任意の出力で
  • メール本文を完全には含めない パイプライン レポートで -- サマリーと主要な引用符のみ
  • 下書き返信は下書きのままになります -- メールを自動送信しない
  • Supabase 接続 MCP Connector の管理された認証を使用します -- スキルに生の認証情報はありません
  • PII 処理: Supabase のリード データは機密として扱う必要があります。外部と共有されるファイルには含めないでください
  • メール コンテンツ: 生のメール HTML/本文を Supabase に保存しないでください。抽出された構造化データとサマリーのみを保存します

クイック リファレンス

ユーザーが以下のようなことを言うときこのスキルを呼び出します:

  • 「メールでリードをチェック」
  • 「受信トレイを処理」
  • 「リード パイプラインを実行」
  • 「今日新しいリードがありますか?」
  • 「デモ リクエスト用に Gmail をチェック」
  • 「受信リードをスコアリング」
  • 「新しいリードへの返信案を作成」
  • 「パイプライン レポートを生成」
  • 「パイプラインはどのように見えていますか?」

このスキルは以下を組み合わせます:

  • Gmail MCP Connector (読み込み、検索、下書き)
  • Supabase MCP Connector (CRM ストレージ、クエリ、構成)
  • リード スコアリング アルゴリズム (ICP、インテント、緊急度)
  • メール コピーライティング (パーソナライズ、層別の適切な返信)
  • パイプライン分析 (日次レポート、リスク検出)

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
OneWave-AI
リポジトリ
OneWave-AI/claude-skills
ライセンス
MIT
最終更新
2026/4/10

Source: https://github.com/OneWave-AI/claude-skills / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: OneWave-AI · OneWave-AI/claude-skills · ライセンス: MIT