sequence-load について
prospect-refresh の新規見込み客を選別し、Apollo のアウトバウンドシーケンスに登録する営業運用スキルです。BDR ワークフロー向けに重複、電話番号、除外条件、抑制期間を確認し、Apollo 登録と HubSpot 同期の結果を報告します。
主な機能
- 01見込み客データの読み込みと検証
- 02HubSpot と Apollo の重複確認
- 03除外条件と電話番号の確認
- 04業種別のシーケンス選択
- 05一括登録と登録状況の確認
- 06HubSpot 連絡先の作成と報告
活用シーン
- 01prospect-refresh の新規リード処理
- 02シーケンスへの重複登録の防止
- 03新しい Apollo 連絡先の HubSpot 同期
MCP 対応
HubSpot と Apollo の MCP ツールを使い、連絡先の検索・管理、シーケンス検索、一括登録を行います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scientiacapital/ skills --skill sequence-loadインストール後、Claude Code で/sequence-loadを入力して読み込まれたか確認します。
同梱ファイルconfig.json
詳細
シーケンス読み込みスキル
prospect-refresh から新規見込み客を Apollo のアウトリーチシーケンスに自動的に読み込みます。ゴールデンルールを検証し、電話番号が存在することを確認し、重複登録をチェックし、シーケンスへの一括追加を実行します。見込み客ごとのシーケンス割り当てと、HubSpot 同期用のコンタクト ID を含む登録レポートを出力します。<quick_start> トリガー: 月曜日 7:15 AM ET(6:30 AM の prospect-refresh の後に実行) 手動トリガー: 「見込み客をシーケンスに読み込む」または「新規リードを登録する」 依存関係: Apollo クレジット、prospect-refresh の出力、HubSpot ポータル 21530819 が必要 出力: 見込み客ごとの登録確認、シーケンス割り当て、HubSpot 作成用のコンタクト ID </quick_start>
<success_criteria>
- prospect-refresh の出力を読み取る(Gmail 下書き + HTML レポートからの新規見込み客 30 件)
- HubSpot にクエリして、見込み客がすでにいずれかのシーケンスに登録されていないことを確認する
- 電話番号が存在することを検証する(prospect-enrich または Apollo から)
- ゴールデンルールを適用する(顧客、チャネル、デバイス所有者をスキップ、NEVER ATL)
- ICP 業種別にターゲットの Apollo シーケンスを検索する
- メールアカウント ID([email protected] またはプライマリ)を取得する
- 見込み客をシーケンスに一括追加する(1 リクエストあたり最大 100 件)
- 登録を確認する(Apollo の contact.sequence_id をチェック)
- 存在しない場合は HubSpot コンタクトを作成する(HubSpot 同期用のコンタクト ID を取得)
- レポート: 登録総数、シーケンス別の内訳、失敗があればその内容 </success_criteria>
ステージ 1: Prospect Refresh の出力を読み取る
入力ソース: prospect-refresh の HTML レポート + Gmail 下書き
HTML レポートから抽出:
- 見込み客の名前、メール、役職、会社、業種、ATL/BTL 階層
- Apollo の person_id、organization_id、電話番号
- 会社の売上、従業員数、資金調達
検証:
- メール形式が有効である
- 電話番号が存在する(エンリッチメントから)
- 業種が次のいずれかである: Higher Ed、Courts、Gov、Corporate AV、Healthcare、HoW、K-12
出力: 30 件(フィルタリングが適用された場合はそれ以下)の見込み客の構造化リスト
ステージ 2: HubSpot + Apollo に対する重複排除
ステップ A: HubSpot で既存のコンタクトを確認する
MCP ツール: search_crm_objects(HubSpot)
objectType: "contacts"
filterGroups: [{
filters: [
{ propertyName: "email", operator: "EQ", value: prospect.email }
]
}]
properties: ["email", "phone", "hs_lead_status"]
判定ロジック:
- コンタクトが存在する + 「Sequenced」または「Active Sequence」ステータスでない → コンタクトを再利用する(コンタクト ID を取得)
- コンタクトが存在する + シーケンス内にいる → スキップする(再登録を避ける)
- コンタクトが存在しない → ステージ 3 へ進む(新規作成)
ステップ B: Apollo で重複登録を確認する
MCP ツール: apollo_contacts_search
q_keywords: prospect.email
per_page: 10
判定ロジック:
- Apollo コンタクトが存在する + すでにシーケンス内にいる → スキップする
- Apollo コンタクトが存在する + シーケンスがない → 進む(再登録)
- Apollo コンタクトが存在しない → ステージ 3 へ進む(新規作成)
重複排除の出力: 一意の見込み客のリスト(通常、重複排除後の入力の 60〜70%)
ステージ 3: ゴールデンルール + 電話番号の存在を検証する
ゴールデンルール(ハード除外):
次の場合にスキップ:
- メールドメインが既知の顧客ドメインと一致する(crm_customers とクロスチェック)
- HubSpot でコンタクトに「Channel Partner」タグが付いている
- HubSpot でコンタクトに「Device Owner」タグが付いている
- 会社が「Product Page Engagers」タグに含まれている
- 役職が NEVER ATL リストに含まれている: Warehouse Manager、Network Manager、Systems Admin、AV Technician、Graphic Design Instructor、Program Administrator、Web Designer、Classroom Support、Lab Coordinator、Maintenance、Building Engineer、Multimedia Services Manager、Video Production Specialist、Streaming Crew
電話番号の検証:
- 電話番号が null でないこと(Apollo エンリッチメントまたは prospect-enrich から)
- 形式: +1-XXX-XXX-XXXX(米国)または +1-XXX-XXX-XXXX(カナダ)
- 電話番号が欠落している場合 → 「Phone Missing」としてログに記録するが、登録はしない(Apollo コンプライアンスのために電話番号が必要)
出力: 検証済みの見込み客リスト(通常、電話番号検証後の 80〜90%)
ステージ S — 抑制ゲート
シーケンス登録の前に、抑制されたコンタクトを除外します:
bdr_suppression_untilが設定されており、かつbdr_suppression_until> TODAY の場合は 除外bdr_suppression_untilが設定されていない場合(一度も抑制されていない)は 含めるbdr_suppression_until< TODAY の場合(クーリング期間が経過)は 含める
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)
ステージ 4:見込み客をターゲットシーケンスにマッピングする
MCP ツール: apollo_emailer_campaigns_search
業種 + テンプレートでシーケンスを検索します:
| 業種 | シーケンス名パターン | ターゲットシーケンス ID |
|---|---|---|
| 高等教育 | BDR_HigherEd_OutboundX | [名前で検索] |
| 裁判所 | BDR_Courts_OutboundX | [名前で検索] |
| 政府 | BDR_Government_OutboundX | [名前で検索] |
| 法人向け AV | BDR_CorporateAV_OutboundX | [名前で検索] |
| ヘルスケア | BDR_Healthcare_OutboundX | [名前で検索] |
| 礼拝施設 | BDR_HoW_OutboundX | [名前で検索] |
| K-12 | BDR_K12_OutboundX | [名前で検索] |
クエリロジック:
per_page: 100
# Search returns: id, name, status, num_contacts, num_enrolled
シーケンス選択ルール:
- prospect.vertical を sequence_name_pattern にマッピングします
- 現在の登録数が最も少ないシーケンスを選択します(負荷分散)
- フォールバック:業種固有のシーケンスが見つからない場合は、デフォルトの「BDR_Outbound_General」を使用します
出力: 見込み客 + sequence_id のマッピング
ステージ 5:Apollo コンタクトを作成する(新規の場合)
MCP ツール: apollo_contacts_search
新規の見込み客(ステージ 2 で見つからなかった場合)に対して:
per_page: 10
q_keywords: prospect.email
見つからない場合は、次の方法でコンタクトを作成します:
MCP ツール: apollo_contacts_create
email: prospect.email
first_name: prospect.first_name
last_name: prospect.last_name
title: prospect.title
organization_name: prospect.company
phone: prospect.phone (if available)
label_names: [prospect.vertical, "BDR_Prospect", "2026_Q1"]
出力: 新しい Apollo コンタクト ID(apollo_contact_id)
ステージ 6:メールアカウント ID を取得する
MCP ツール: apollo_email_accounts_index
リンクされたすべてのメールアカウントをクエリします:
# Returns: [{ id, email, status, daily_send_limit, ... }]
選択ロジック:
- 「epiphan」または「tkipper」を含むメールを探します
- 複数ある場合はプライマリメールアカウントを使用します
- 見つからない場合 → エラー(メールアカウントなしでは続行できません)
出力: email_account_id(例:「6633baaece5fbd01c791d7ca」)
ステージ 7:シーケンスに一括追加する
MCP ツール: apollo_emailer_campaigns_add_contact_ids
各シーケンスに対して(sequence_id で見込み客をグループ化):
id: sequence_id (from Stage 4 mapping)
emailer_campaign_id: sequence_id (same as id)
send_email_from_email_account_id: email_account_id (from Stage 6)
contact_ids: [contact_id_1, contact_id_2, ..., contact_id_N] (max 100 per batch)
sequence_active_in_other_campaigns: true (allow multi-sequence enrollment)
sequence_unverified_email: false (require verified emails)
status: "active" (start sequence immediately)
一括処理ロジック:
- ターゲットシーケンスで見込み客をグループ化します
- API 呼び出しごとに最大 100 件のコンタクトを送信します
- レート制限がかかった場合は再試行します
想定成功率: 95% 以上(失敗のほとんどはメール検証が原因です)
ステージ 8:登録を確認する
MCP ツール: apollo_contacts_search
登録された各コンタクトについて、登録を検証します:
q_keywords: contact.email
per_page: 1
レスポンスを確認します:
- contact.sequences(ステージ 7 の sequence_id が含まれているはずです)
- contact.last_sequence_enrollment_date(「today」であるはずです)
- contact.status(「active」であるはずです)
登録をログに記録します:
✓ [email protected] → BDR_HigherEd_Outbound (sequence_id: abc123)
✗ [email protected] → Phone validation failed
✗ [email protected] → Already enrolled in BDR_Corporate_AV
ステージ 9:HubSpot コンタクトを作成する(同期)
新しく作成された Apollo コンタクトに対して、HubSpot の対応するコンタクトを作成します:
MCP ツール: manage_crm_objects(HubSpot createRequest)
objectType: "contacts"
properties: {
firstname: prospect.first_name,
lastname: prospect.last_name,
email: prospect.email,
phone: prospect.phone,
jobtitle: prospect.title,
company: prospect.company_name,
lifecyclestage: "subscriber",
hs_lead_status: "open",
custom_apollo_contact_id: apollo_contact_id,
custom_apollo_sequence: sequence_name,
custom_atl_btl_tier: prospect.atl_btl_tier,
custom_prospect_vertical: prospect.vertical,
custom_prospect_icp_score: prospect.icp_score
}
associations: [
{
targetObjectId: company_id, # Find or create company in HubSpot
targetObjectType: "companies"
}
]
会社の関連付けロジック:
- ドメインで HubSpot の会社を検索します
- 見つかった場合:既存レコードの company_id を使用します
- 見つからない場合:manage_crm_objects で会社を作成します
出力: 作成されたコンタクト ID(Gmail の下書きをリンクするため)
ステージ 10: 登録レポートの出力
形式: Markdown テーブル + サマリー統計
登録テーブル:
| 見込み客 | メール | 電話 | 業種 | シーケンス | Apollo ID | HubSpot ID | ステータス |
|---|---|---|---|---|---|---|---|
| Jane Smith | [email protected] | +1-555-0123 | 高等教育 | BDR_HigherEd_1 | apollo-123 | hs-456 | ✓ 登録済み |
| Bob Jones | [email protected] | null | 裁判所 | - | - | - | ✗ 電話番号なし |
| Carol White | [email protected] | +1-555-0124 | 法人 AV | BDR_CorporateAV_1 | apollo-789 | hs-012 | ✓ 登録済み |
サマリー統計:
- 処理された見込み客の合計: X
- 正常に登録された件数: Y (X の Y%)
- 電話番号検証の失敗: Z
- 重複/登録済み: W
- HubSpot 同期済み: Y (新規コンタクト)
- シーケンス別の内訳:
- BDR_HigherEd_1: 5 件登録
- BDR_Courts_1: 4 件登録
- BDR_CorporateAV_1: 5 件登録
- など
次のステップ: 見込み客は Apollo シーケンスに登録されました。Gmail の下書き (prospect-refresh から) は手動レビュー + 下書きからの送信ワークフローに備えて準備完了です。
成果サイドカーの出力
最終ステップとして、~/.claude/skill-analytics/last-outcome-sequence-load.json に書き込みます:
{"ts":"[UTC ISO8601]","skill":"sequence-load","version":"1.0.0","variant":"default",
"status":"[success|partial|error]","runtime_ms":[estimated ms from start],
"metrics":{"contacts_loaded":[n],"sequences_updated":[n],"duplicates_skipped":[n],"phone_validation_failures":[n]},
"error":null,"session_id":"[YYYY-MM-DD]"}
一部のステージが失敗しても結果が生成された場合は、ステータスに「partial」を使用してください。出力がまったく生成されなかった場合にのみ、「error」を使用してください。
スキルメタデータ
バージョン: 1.0 最終更新: 2026-03-19 作成者: Tim Kipper ステータス: 本番 統合: Apollo + HubSpot (ポータル 21530819) ティア: P1 (コア BDR 自動化) トリガー: スケジュール (月曜日 7:15 AM) + 手動 (「Load sequences」) 依存関係: prospect-refresh (6:30 AM) → sequence-load (7:15 AM) → morning-brief (7:30 AM)