mcpField
P
phone-verification-waterfall

phone-verification-waterfall

github.com/scientiacapitalマーケティング・グロース2847 回インストール3 週間前に更新
リポジトリ

phone-verification-waterfall について

phone-verification-waterfallは、営業開発チーム向けの電話番号確認ワークフローです。ApolloとClayでHubSpotの連絡先を補完して番号を同期し、役職、業種、意向シグナルに基づいて架電候補を並べ替えます。

主な機能

  1. 01HubSpotのリード抽出と除外ルール
  2. 02Apollo検索後にClayで補完
  3. 03確認済み番号をHubSpotへ反映
  4. 04役職、業種、意向による優先順位付け
  5. 05チャット用とCSVの架電リスト作成
  6. 06定期実行と緊急リード対応

活用シーン

  1. 01営業チーム向け架電候補の準備
  2. 02Apolloで見つからない連絡先の補完
  3. 03意向の高い見込み客の優先対応
  4. 04架電ツール向けリストのエクスポート

MCP 対応

このskillはHubSpot、Apollo、Clayのツールを使ったリード検索、電話番号検索、情報補完、HubSpot更新を説明しています。MCPインターフェースについての記載はありません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scientiacapital/skills --skill phone-verification-waterfall

インストール後、Claude Code で/phone-verification-waterfallを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

config.json
EXAMPLE_OUTPUTS.md
golden-rules-filter.md
IMPLEMENTATION.md
INTEGRATION_MAP.md
README.md
reference/
callable-queue-format.md
waterfall-example.md

詳細

電話番号を検証済みの、架電可能な見込み客のリストを継続的に更新します。HubSpotでの見込み客の特定 → Apolloでの電話番号検証 → Clayによる補完(Apolloで見つからなかった場合)→ HubSpotへの同期までの一連の処理を自動化します。Timがいつでも50件以上の検証済み架電候補を用意できるようにし、「電話をかける相手がいない」ことで時間を無駄にすることなく、1日の架電数を最大化します。

構成:見込み客のライフサイクル → 電話番号の検証 → ICPとインテントシグナルに基づくキューの優先順位付け。

<quick_start> 単独実行(手動トリガー): 「電話番号を検証」または「電話番号のウォーターフォール」または「架電可能な見込み客」または「誰に電話できますか」→ 電話番号がないHubSpotの見込み客をすべて取得 → ApolloとClayで情報を補完 → HubSpotに書き戻し → 並べ替え可能な架電キューを出力

スケジュール実行: 毎週月曜日と水曜日の午前6:15(prospect-enrichの午前6:00とprospect-refreshの午前6:30の間)— 週2回、電話番号のリストを最新の状態に保ち、新たに更新された見込み客の電話番号を日々の架電前に検証できるようにします

トリガーフレーズ:

  • 「電話番号を検証」
  • 「電話番号のウォーターフォール」
  • 「架電可能な見込み客」
  • 「誰に電話できますか」
  • 「架電リスト」
  • 「いつでも電話する相手がいる状態にする」
  • 「電話番号を確認」
  • 「電話番号を補完」 </quick_start>

<success_criteria>

  • HubSpotからの見込み客取得で、すべてのICP業種にわたり、電話番号のない連絡先が100件以上返される
  • Apolloで連絡先の40~50%の電話番号を検索できる(ベースライン)
  • Clayのウォーターフォールで、Apolloで見つからなかった残りの連絡先の60~70%を補完する
  • 電話番号がない連絡先の70%以上について、HubSpotの電話番号フィールドが更新される
  • 最終的な架電キューに、ICPスコアとインテントに基づいて並べ替えられた連絡先が50件以上含まれる
  • 顧客に該当する連絡先はゼロ(lifecycle_stage = 'customer')— Golden Rulesにより除外されます
  • Account Executive(Lex、Phil、Ron、Anthony)が所有する連絡先はゼロ — AEの見込み客を奪いません
  • チャネルパートナーまたは既存のデバイス所有者は含まれません
  • 実行時間は8分未満(HubSpot → Apollo → Clay → 同期) </success_criteria>

パイプラインの各ステージ

STAGE 1: PULL LEADS          STAGE 2: APOLLO PHONE      STAGE 3: CLAY WATERFALL    STAGE 4: HUBSPOT SYNC    STAGE 5: CALLABLE QUEUE
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
HubSpot Query       →     Apollo People Match    →    Clay Enrichment       →   Update Phone Field   →    Prioritized CLI
phone = null/empty  →     (Name + Email + Org)   →    (Multiple Providers)  →   (API bulk update)    →    ICP Score Sort
lifecycle_stage     →     Return: Verified #     →    Return: Verified #    →   Mark: enriched_at    →    Intent Signals
!= 'customer'       →     Success Rate: 40-50%   →    Success Rate: 30-40%  →   (Contact & Company) →    Output: CSV + Chat
No Excluded Owner   →     (No cost)              →    (Find + Enrich)        →   Log completion       →    Time-to-dial: <5s
Golden Rules Pass   →                            →                          →                        →

ステージ1:電話番号が必要な見込み客を取得

HubSpotクエリ:

Criteria (ALL must match):
- phone IS NULL OR phone = '' (empty string)
- lifecyclestage != 'customer'
- AE-owned (82625923, 423155215, 190030668): EXCLUDE if <90d activity. KEEP as STALE AE LEAD if >90d inactive (Tim reviews ATL/BTL + value). Ron=all, Lex/Phil=NA only.

Golden Rules Hard Gate (SKIP if ANY match):
- first_conversion contains ['Pearl', 'setup', 'Connect', 'signup']
  (Existing product engagers — not cold prospects)
- company.device_count >= 1
  (Already owns equipment — likely existing relationship)
- is_channel = true
  (Channel partners excluded)
- engagement_overview contains ['Pearl', 'trial', 'demo', 'customer']
  (Existing touchpoints)
ATL/BTL分類ゲート(Golden Rules適用後に適用)

承認済みのATL/BTL定義(CLAUDE.md § ATL/BTL Classification v1.0を参照)を使い、役職に基づいて各連絡先を分類します。

ATLの役職キーワード(予算決定権あり — 架電優先度:高): Chief(CIO、CTO、CFO、COO) • VP(AVP、SVP、EVP) • President • Provost • Vice Provost • Superintendent • Director(IT、Technology、Facilities、Academic Technology、Procurement、Materials Mgmt、Medical Education、Court Administration) • Dean • Court Administrator • Clerk of Court • City Manager • County Manager • Senior Pastor • Executive Pastor

BTLの役職キーワード(予算決定権なし — 架電優先度:低): Technician • Specialist • Coordinator • Support • Administrator(Systems/Network/Database) • Engineer(AV/Network/Systems) • Operator • Instructor/Professor/Faculty • Designer • Assistant • Clerk(Court Admin以外) • Volunteer • Intern • Student • Resident • Help Desk

ATLには絶対に分類しない — ほかのシグナルにかかわらず自動的にBTLに分類: Warehouse Manager • Network Manager • Systems Administrator • AV Technician • Graphic Design Instructor • Program Administrator • Web Designer • Classroom Support • Lab Coordinator • Maintenance • Building Engineer • Multimedia Services Manager • Video Production Specialist • Streaming Crew

グレーゾーン — 手動レビュー対象としてフラグ付け: Manager(AV/Facilities/IT)— Director以上に直属し、かつ25,000ドルを超える予算の委任を受けている場合のみATL Department Chair • Program Director • Director of Educational Technology

各連絡先にタグを付けます:atl_btl_tier = 'ATL' | 'BTL' | 'GRAY'

出力: 以下を含む、並べ替え前の連絡先リスト(100件以上):

  • contact_id(HubSpot)
  • first_name、last_name
  • email(主要な業務用メールアドレス)
  • company_name
  • hs_job_title
  • hubspot_owner_id、hubspot_owner_name
  • company.industry、company.num_employees、company.hs_lead_status
  • first_conversion(Golden Rulesの確認用)

ツール: フィルターを適用した hubspot_search_contacts

</Stage 1>

### ステージ S — 抑制ゲート

電話番号エンリッチメントの費用を投じる前に、抑制対象の連絡先を除外します:

  • 除外:bdr_suppression_until が設定されており、かつ bdr_suppression_until > 今日の場合
  • 含める:bdr_suppression_until が設定されていない場合(一度も抑制されていない)
  • 含める:bdr_suppression_until < 今日の場合(クーリング期間が終了)

HubSpot フィルター:propertyName: "bdr_suppression_until", operator: "NOT_HAS_PROPERTY" または operator: "LT", value: TODAY_ISO 参照:lead-suppression-spec(bdr_suppressed、bdr_suppression_reason、bdr_suppression_until)


ステージ 2:Apollo 電話番号検索

ステージ 1 の各連絡先について、並列バッチで実行します:

Input:  contact_id, first_name, last_name, email, company_name
        ↓
apollo_people_match(
  first_name: "{first_name}",
  last_name: "{last_name}",
  email: "{email}",
  organization_name: "{company_name}",
  domain: "{company_domain}",
  reveal_personal_emails: false
)
        ↓
Output: phone (mobile_phone or corporate_phone, verified)
        ↓
Match rate: 40-50% success (Apollo baseline)
        ↓
NO COST — Apollo is included free

ロジック:

  • Apollo は mobile_phone または corporate_phone を返します(どちらも発信に使用可能)
  • 電話番号が返された場合:連絡先に apollo_phone_source = true のタグを付けます
  • 電話番号がない場合:ステージ 3(Clay ウォーターフォール)に進みます
  • 最終マージのためにすべての結果を保持します

ツール: apollo_people_match(バッチ並列)

</Stage 2>

ステージ 3:Clay ウォーターフォールエンリッチメント

Apollo が電話番号を返さなかった連絡先については、Clay を使用します:

オプション A:企業レベルのエンリッチメント(速度重視で推奨)

find-and-enrich-contacts-at-company(
  companyIdentifier: "{company_domain}",
  contactFilters: {
    job_title_keywords: extracted from hs_job_title,
    locations: optional if available
  },
  dataPoints: {
    contactDataPoints: [
      { type: "Email" },
      { type: "Summarize Work History" }
    ]
  }
)

次に、見つかった連絡先について add-contact-data-points を実行して電話番号をエンリッチメントします:

add-contact-data-points(
  taskId: "{from find-and-enrich response}",
  dataPoints: [
    { type: "Custom", customDataPoint: "phone number from multiple providers" }
  ],
  entityIds: [extracted contact IDs]
)

オプション B:連絡先の直接エンリッチメント(企業単位のアプローチで件数が少ない場合)

find-and-enrich-list-of-contacts(
  contactIdentifiers: [
    {
      contactName: "{first_name} {last_name}",
      companyIdentifier: "{company_domain}"
    }
  ],
  dataPoints: {
    contactDataPoints: [
      { type: "Custom", customDataPoint: "verified phone number" }
    ]
  }
)

想定される成果:

  • Apollo で見つからなかった連絡先の 30〜40% が Clay 経由で電話番号を取得します
  • 合計成功率:40〜50%(Apollo)+残りの 30〜40%(Clay)≈ 合計 65〜70%

コスト: Clay クレジットを消費します(月次割り当てに対して消費を監視してください)

ツール: find-and-enrich-contacts-at-company または find-and-enrich-list-of-contacts

</Stage 3>

ステージ 4:HubSpot 同期

検証済みの電話番号を持つすべての連絡先(Apollo + Clay の合計)について:

Batch update HubSpot contacts:
For each contact:
  UPDATE contact {contact_id}
  SET:
    phone = "{verified_phone}"
    phone_source = "apollo" OR "clay" (track origin)
    phone_verified_at = NOW()
    phone_waterfall_pass = true

Log event to company:
  ADD ACTIVITY: "Phone verified via Apollo/Clay waterfall"
  (Creates audit trail for Sales)

同期戦略:

  • HubSpot API をバッチで使用します(1 バッチあたり 500 連絡先)
  • phone_source(apollo、clay、manual)でタグを付けます
  • phone_verified_at タイムスタンプでタグを付けます
  • リンクされている場合は、deal/company オブジェクトに完了を記録します

ツール: HubSpot REST API(contacts バッチ更新)を hubspot_update_contact(連絡先単位、バッチ用 MCP ツールはありません)経由、または直接 HTTP で使用

</Stage 4>

ステージ 5:発信可能キューと優先順位付け

最終出力を次の順序で並べ替えて構築します:

  1. ATL/BTL ティア(第一): ATL 連絡先を先頭、次に GRAY、次に BTL

  2. ICP バーティカルスコア(第二):

    Higher Ed ..................... 90
    Courts/Legal ................... 85
    Government ..................... 80
    Corporate AV ................... 80
    Healthcare ..................... 75
    Houses of Worship .............. 70
    K-12 Schools ................... 65
    
  3. インテントシグナル(第三):

    • AV/IT 職種を積極的に採用中:+15 ポイント
    • 最近の施設拡張のニュース:+10 ポイント
    • テックスタックに旧式の AV が含まれる(Extron、Matrox の置き換えシグナル):+12 ポイント
    • RFP または調達イベントの公開:+10 ポイント
    • ウェブサイトでスタジオ/コントロールルーム/放送に言及:+8 ポイント
    • 最近の資金調達/買収:+5 ポイント
  4. エンゲージメントの最新性(第四):

    • 過去 30 日以内に接触:キューの先頭
    • 31〜60 日前に接触:中央
    • 最近の接触なし:最後尾(ただし発信は可能)

最終的な発信可能キューの形式:

完全な ASCII キュー出力テンプレート(サマリーブロック、発信可能テーブル、ダイヤラー用クイックリンク、次のステップ)については reference/callable-queue-format.md を参照してください。

出力形式:

  • チャット: ICP スコア上位 10〜20 件を含むリッチな整形テーブル(テンプレートは reference/callable-queue-format.md)
  • CSV ダウンロード: dialpad/Aircall へのインポート用にすべてのデータを含む完全なキュー
  • バーティカル別: バーティカルハンティング用に業界別にグループ化したセカンダリビュー
  • 連携: Dialpad、Aircall、またはセールスエンゲージメントツールへのインポートキューへのリンク

ツール: ステージ 4 の出力から組み立て、並べ替え、整形して提示します

</Stage 5>

Reply-Scan Integration

返信スキャンからの自動キュー登録(午前10時、午後1時、午後3時):

返信スキャンで電話番号が未登録の新しいリードが見つかった場合:

  • これらのリードは、次回のスケジュール済み電話ウォーターフォール実行(月曜日または水曜日の午前6時15分)に自動的にキュー登録されます
  • 標準のエンリッチメントワークフローが適用されます(Apollo → Clay ウォーターフォール → HubSpot 同期)

緊急度の高いICPリードの処理:

  • ICPスコアが80以上で、優先度の高い見込み客と判断されたリードについては、単一コンタクトを対象にApollo検索を直ちに実行します
  • Apolloでの検索が成功した場合、コンタクトレコードに電話番号を追加し、当日の架電キューに登録します
  • Apolloでの検索に失敗した場合は、次回のスケジュール済みウォーターフォール実行まで保留します(標準ワークフロー)

ロジック:

IF reply_scan_found_lead AND lead.phone IS NULL
  IF lead.icp_score >= 80 AND lead.priority = 'high'
    → TRIGGER immediate apollo_people_match(lead)
    → IF success: append phone, mark urgent_dial = true
    → ELSE: queue for next waterfall run
  ELSE
    → Queue for next scheduled waterfall (Mon or Wed 6:15 AM)

これにより、緊急度の高い見込み客は当日中に架電可能な状態になり、通常のリードについてはバッチエンリッチメントの効率を維持できます。

スケジュール済み自動化

Cron: 毎週月曜日と水曜日の午前6時15分(UTC、またはTimの現地時間)

MONDAY MORNING SEQUENCE:
6:00 AM  → bdr-v3-prospect-enrich (refresh prospect company data)
6:15 AM  → phone-verification-waterfall-skill (verify phones on refreshed data)
6:30 AM  → bdr-v3-prospect-refresh (refresh deal velocity metrics)

WEDNESDAY MORNING SEQUENCE (mid-week refresh):
6:00 AM  → bdr-v3-prospect-enrich (refresh prospect company data)
6:15 AM  → bdr-v3-phone-waterfall-midweek (verify phones on mid-week refreshed data)
6:30 AM  → bdr-v3-prospect-refresh (refresh deal velocity metrics)

月曜日と水曜日の午前6時15分に実行する理由:

  • 月曜日: 日曜日の夜に行う見込み客調査でHubSpotに新しい見込み客が登録されます。午前6時のエンリッチメントで企業属性データを最新の状態にし、午前6時15分の電話番号検証で見込み客の情報が新しいうちに確認します。午前6時30分の進捗状況の更新により、最初の架電前にTimが全体像を把握できます
  • 水曜日: 週半ばのリード更新で、火曜日から水曜日の調査で新たに追加された見込み客を取り込みます。週を通して架電可能なリードを50件以上維持できます。タスク(bdr-v3-phone-waterfall-midweek)を分けることで、独立したスケジュール設定と監視が可能になります

運用上の注意:

  • 電話ウォーターフォールに8分を超える時間がかかった場合は、Slackアラートを送信します(APIの応答遅延または大量のバックログを示します)
  • 成功率をダッシュボードに記録します(検証済み全体で65%以上を目指します)
  • Apple/Apollo APIのレート制限に達した場合は、キューに登録し、指数バックオフで再試行します
  • エラー発生時はClayのエンリッチメントをスキップし、Apolloのみの結果を返します(電話番号がまったくないより、一部でもあるほうが望ましいため)
## 必須のMCPツール
Epiphan CRM(主要データソース)
  • hubspot_search_contacts — 電話番号がnullのリードを取得し、Golden Rulesのフィルターを適用します
  • hubspot_get_contact — 必要に応じてコンタクトの詳細を取得します
  • crm_search_customers — Epiphanの顧客データベースで企業を照合します(device_count、チャネルフラグ)
Apollo(電話番号検証の第2段階)
  • apollo_people_match — 氏名+メールアドレス+企業名で人物を検索し、検証済みの電話番号を返します
  • (費用なし — Apolloプランに含まれます)
Clay(電話ウォーターフォールの第3段階)
  • find-and-enrich-contacts-at-company — 企業名+役職フィルターで一括エンリッチメントを実行します
  • add-contact-data-points — エンリッチメント結果にカスタム電話番号データポイントを追加します
  • find-and-enrich-list-of-contacts — 氏名+企業名で指定したコンタクトをエンリッチメントします
  • get-task — 非同期エンリッチメント結果をポーリングします
  • (Clayクレジットを消費します — 使用額を監視してください)
HubSpot API(同期の第4段階)
  • hubspot_update_contact(コンタクトごとのループ。一括処理は直接REST APIを使用する場合のみ) — 検証済みの電話番号をHubSpotに書き戻します
  • または、必要に応じてHubSpotネイティブの一括インポートを使用します

参照先の関連スキルとタスク

  • prospect-research-to-cadence-skill — リード品質の判定基準、Golden Rulesフィルター、ICPスコアリング
  • sales-revenue-skill — ICPの業種定義、インテントシグナルの重み付け
  • hubspot-revops-skill — HubSpotの一括操作、コンタクトのフィルターパターン、オーナーIDのマッピング
  • CLAUDE.md § ATL/BTL Classification v1.0 — ATL/BTL/Grayの分類に使用する、承認済みの役職キーワードパターン(2026-03-17)

上流および下流のスケジュール済みタスク

  • bdr-v3-prospect-enrich — 月曜日午前6時の企業属性データ更新(電話ウォーターフォールより前に実行)
  • bdr-v3-phone-waterfall-midweek — 水曜日午前6時15分の週半ばの電話番号検証実行(新規)
  • bdr-v3-prospect-refresh — 月曜日午前6時30分の進捗状況の更新(電話ウォーターフォールの後に実行)

外部依存関係

  • HubSpot API: コンタクト検索+一括更新
  • Apollo API: 人物検索(追加費用なし)
  • Clay API: ウォーターフォールエンリッチメント(有効なサブスクリプションと利用可能なクレジットが必要)
  • Dialpad/Aircall API: 架電キューを直接同期するための任意の連携
## 推定月額費用 - **Apollo:** $0(含まれています) - **Clay:** $150-300(確認する連絡先の数によって変動します。ウォーターフォールの段階を監視してください) - **HubSpot:** すでに利用中です - **変動費の合計:** 約$200-300/月(Clay のクレジット)

<scheduled_automation>

タスク ID:

  • bdr-v3-phone-waterfall(月曜日の午前6:15に実行)
  • bdr-v3-phone-waterfall-midweek(水曜日の午前6:15に実行)

トリガー: 毎週月曜日と水曜日の午前6:15に定期実行(ユーザーの現地タイムゾーン)

完了時の Slack 通知:

✅ Phone Waterfall Complete (Mon 6:15 AM)
   Pulled:       {N} leads
   Verified:     {X+Y} phones ({%})
   HubSpot Sync: ✓
   Queue:        Ready to dial
   Leads/hour:   {rate}

エラー発生時:

⚠️ Phone Waterfall Partial (Mon 6:15 AM)
   Apollo completed ({X%})
   Clay failing — check credits
   Manual action: Continue with Apollo-only queue

</scheduled_automation>


参考:ゴールデンルールフィルター

以下は厳格な条件です。いずれかに該当した場合、その連絡先は処理対象から完全に除外します:

条件値アクション
lifecyclestage'customer'SKIP
first_conversion'Pearl'、'setup'、'Connect' のいずれかを含むSKIP
会社の device_count>= 1SKIP
会社の is_channeltrueSKIP
hubspot_owner_id82625923、423155215、19003066890日間アクティビティがない場合の例外:90日を超えてアクティビティがない場合は保持(Tim が ATL/BTL と値を確認)。90日未満の場合は SKIP。Ron は全件、Lex/Phil は NA のみ。

</Golden Rules>


例:電話番号ウォーターフォールの動作

一連の実行例(247件のリードを取得 → 159件の発信可能確認済み、成功率64.4%、7分30秒)については、reference/waterfall-example.md を参照してください。

結果サイドカーの出力

~/.claude/skill-analytics/last-outcome-phone-verification-waterfall.json に書き込みます:{"ts":"[UTC ISO8601]","skill":"phone-verification-waterfall","version":"1.0.0","variant":"default","status":"[success|partial|error]","runtime_ms":[ms],"metrics":{"contacts_processed":[n],"apollo_verified":[n],"clay_verified":[n],"total_callable":[n],"verification_rate_pct":[n]},"error":null,"session_id":"[YYYY-MM-DD]"}

コメント