mcpField
D
data-enrichment-integration

data-enrichment-integration

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

data-enrichment-integration について

営業システムの設計者向けに、企業属性、連絡先、技術スタック、購買意向データを会話に活用する方法を案内するスキルです。データ補完の時期、プロバイダー評価、品質、パーソナライズ、コスト管理を扱います。

主な機能

  1. 01データ補完の時期とワークフローの設計
  2. 02企業・連絡先・技術・意向データを網羅
  3. 03プロバイダーとAPIの評価
  4. 04補完データを適格性判断と振り分けに活用
  5. 05データの検証と鮮度の管理
  6. 06キャッシュと段階化によるコスト管理

活用シーン

  1. 01フォーム送信後のインバウンドリード補完
  2. 02アウトバウンド用見込み客リストの準備
  3. 03会話中の企業情報の追加
  4. 04補完データによるリードの優先順位付けと振り分け

インストール

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

$npx skills add https://github.com/louisblythe/sales-skills --skill data-enrichment-integration

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

詳細

営業ボット向けデータエンリッチメント連携

自動営業システムへのデータエンリッチメントの統合に精通しています。企業属性、技術属性、連絡先データを取り込み、会話とパーソナライゼーションを強化するボットの設計を支援します。

初期評価

ガイダンスを提供する前に、次の点を把握します。

  1. 背景

    • 現在、見込み客についてどのようなデータを持っていますか?
    • 会話を改善するには、どのようなデータが必要ですか?
    • どのエンリッチメントプロバイダーを利用していますか、または検討していますか?
  2. 現状

    • 現在、エンリッチメントはどのように行われていますか?
    • どのようなデータの不足がありますか?
    • 現在のデータの品質はどの程度ですか?
  3. 目標

    • エンリッチメントを改善すると何が可能になりますか?
    • どのような意思決定がエンリッチメントされたデータに依存しますか?

基本原則

1. 適切なタイミングでエンリッチメントする
  • 早すぎると、適格性のない見込み客に費用を浪費します
  • 遅すぎると、パーソナライズの機会を逃します
  • コストと価値のバランスを取ります
2. データを賢く使う
  • データを持っていること ≠ データを共有すること
  • 不気味に感じさせずにパーソナライズします
  • 量より質を重視します
3. データを最新に保つ
  • データはすぐに古くなります
  • 定期的に再エンリッチメントします
  • 利用前に検証します
4. 適切にフォールバックする
  • エンリッチメントに失敗する場合があります
  • データがない場合の会話パスを用意します
  • 会話の流れを止めないようにします

エンリッチメントデータの種類

企業属性データ

企業情報:

  • 企業名(正式名称)
  • 業界/分野
  • 従業員数
  • 売上高の範囲
  • 所在地
  • 設立日
  • 企業形態(上場、非公開、スタートアップ)

用途:

  • 適格性評価
  • 振り分け
  • パーソナライゼーション
  • セグメンテーション
連絡先データ

人物情報:

  • 氏名
  • 役職
  • 部門
  • 職位レベル
  • メールアドレス(確認済み)
  • 電話番号(直通)
  • LinkedIn プロフィール
  • 職歴

用途:

  • パーソナライゼーション
  • 複数の担当者との関係構築
  • 権限の評価
  • アウトリーチ対象の選定
技術属性データ

テクノロジースタック:

  • 使用ソフトウェア
  • プラットフォーム
  • 連携機能
  • 技術カテゴリ

用途:

  • 競合に関する知見
  • 連携機能の提案
  • 技術的適合性
  • ユースケースの対象選定
インテントデータ

購買シグナル:

  • トピックの調査
  • 競合他社への訪問
  • コンテンツのダウンロード
  • レビューサイトでのアクティビティ

用途:

  • アウトリーチのタイミング調整
  • 優先順位付け
  • メッセージの関連性向上
  • トリガーベースのエンゲージメント

エンリッチメントプロバイダー

主なプロバイダー
プロバイダー強み最適な用途
Clearbit企業属性データ、リアルタイムB2B SaaS
ZoomInfo詳細な連絡先データアウトバウンドの見込み客開拓
Apollo連絡先+エンリッチメント大量のアウトリーチ
Lusha直通電話番号電話でのアウトリーチ
6senseインテントデータABM
Bomboraインテントシグナル大企業
BuiltWith技術属性データテクノロジーを基準にしたターゲティング
API に関する考慮事項

プロバイダーを次の項目で評価します:

  • データの正確性
  • カバレッジ(ルックアップの成功率)
  • データの鮮度
  • API の信頼性
  • 料金モデル
  • レート制限

エンリッチメントのタイミング

インバウンドリードのエンリッチメント
Trigger: Form submission or chat initiation
Timing: Immediate

Flow:
1. Lead submits email
2. Enrich on email (async)
3. Use data in conversation
4. Store for future use

エンリッチメントする情報:

  • 企業情報
  • 連絡先情報
  • 役割と職位レベル
アウトバウンド前のエンリッチメント
Trigger: Building prospect list
Timing: Before outreach

Flow:
1. Import contact list
2. Batch enrich
3. Score and segment
4. Personalize outreach

エンリッチメントする情報:

  • 企業属性の全プロフィール
  • 確認済みの連絡先情報
  • 技術的適合性
  • インテントシグナル
会話中のエンリッチメント
Trigger: Learn new information in conversation
Timing: During conversation

Flow:
1. User mentions company name
2. Real-time lookup
3. Adjust conversation with context
4. Store enriched data

エンリッチメントする情報:

  • 言及された企業の詳細
  • 共有された情報の確認
  • 追加の連絡先の検索

実装

基本的なエンリッチメントフロー
function enrichLead(email) {
  // Check cache first
  cached = getFromCache(email)
  if (cached && !isStale(cached)) {
    return cached
  }

  // Call enrichment API
  try {
    enriched = enrichmentProvider.lookup(email)

    // Validate and clean
    validated = validateEnrichment(enriched)

    // Store in cache and CRM
    storeEnrichment(email, validated)

    return validated
  } catch (error) {
    logError(error)
    return null  // Graceful fallback
  }
}
リアルタイムエンリッチメント
function enrichDuringConversation(message, context) {
  // Extract signals from message
  company_mentioned = extractCompany(message.content)
  email_provided = extractEmail(message.content)

  // Enrich asynchronously
  if (company_mentioned && !context.company_data) {
    enrichCompanyAsync(company_mentioned, context)
  }

  if (email_provided && !context.contact_enriched) {
    enrichContactAsync(email_provided, context)
  }

  // Continue conversation (don't block)
  return generateResponse(message, context)
}

async function enrichCompanyAsync(company, context) {
  data = await enrichmentProvider.lookupCompany(company)
  context.company_data = data
  // Enriched data available for next turn
}
バッチエンリッチメント
function batchEnrich(leads, options) {
  results = []

  for (batch in chunk(leads, options.batch_size)) {
    // Respect rate limits
    await rateLimiter.waitForSlot()

    // Parallel enrichment within batch
    batch_results = await Promise.all(
      batch.map(lead => enrichLead(lead.email))
    )

    results.push(...batch_results)

    // Progress tracking
    reportProgress(results.length, leads.length)
  }

  return results
}

エンリッチメントされたデータの活用

適格性評価での活用
function qualifyWithEnrichment(lead) {
  score = 0

  // Employee count scoring
  if (lead.enriched.employee_count >= 500) score += 3
  else if (lead.enriched.employee_count >= 50) score += 2
  else if (lead.enriched.employee_count >= 10) score += 1

  // Industry fit
  if (IDEAL_INDUSTRIES.includes(lead.enriched.industry)) score += 2

  // Title/seniority
  if (lead.enriched.seniority == "c_suite") score += 3
  else if (lead.enriched.seniority == "director") score += 2
  else if (lead.enriched.seniority == "manager") score += 1

  // Technology fit
  if (usesCompetitor(lead.enriched.technologies)) score += 2
  if (usesComplementaryTech(lead.enriched.technologies)) score += 1

  return score
}
パーソナライゼーションでの活用

データを自然に活用します: 「オースティンを拠点にされているのですね。あちらは素晴らしいテックシーンがありますね!」 「従業員数が[従業員数]人のチームなら、[プロセス]の拡大が課題になっているのではないでしょうか。」

使いすぎないようにします: 悪い例:「[企業名]に3年間在籍されていて、それ以前は[以前の企業名]で働き、[大学名]で学ばれたのですね……」 良い例:「[役割/部門]に注力されていると拝見しました。[関連するポイント]」

振り分けでの活用
function routeLead(lead) {
  // Enterprise routing
  if (lead.enriched.employee_count > 1000) {
    return assignToEnterpriseTeam(lead)
  }

  // Geographic routing
  if (lead.enriched.country != "US") {
    return assignToInternationalTeam(lead)
  }

  // Industry routing
  if (lead.enriched.industry in SPECIALIZED_INDUSTRIES) {
    return assignToIndustrySpecialist(lead)
  }

  // Standard routing
  return standardRoundRobin(lead)
}

データ品質の管理

検証ルール
function validateEnrichment(data) {
  validated = {}

  // Company name - clean and standardize
  if (data.company_name) {
    validated.company_name = cleanCompanyName(data.company_name)
  }

  // Employee count - range validation
  if (data.employee_count && data.employee_count > 0) {
    validated.employee_count = data.employee_count
  }

  // Email - format validation
  if (data.email && isValidEmail(data.email)) {
    validated.email = data.email.toLowerCase()
  }

  // Phone - format and validate
  if (data.phone && isValidPhone(data.phone)) {
    validated.phone = formatPhone(data.phone)
  }

  return validated
}
データ鮮度の管理
function isStale(enrichment_record) {
  days_old = daysSince(enrichment_record.enriched_at)

  // Different freshness rules by data type
  if (enrichment_record.type == "contact") {
    return days_old > 30  // Contact data stales faster
  }

  if (enrichment_record.type == "company") {
    return days_old > 90  // Company data more stable
  }

  if (enrichment_record.type == "intent") {
    return days_old > 7  // Intent data very time-sensitive
  }

  return days_old > 60  // Default
}
データがない場合の対応
function getCompanySize(lead) {
  if (lead.enriched.employee_count) {
    return lead.enriched.employee_count
  }

  // Fallback: ask in conversation
  return askInConversation("company_size")
}

function personalizeMessage(template, lead) {
  // Use enriched data where available
  company = lead.enriched.company_name || lead.stated_company || "your company"
  industry = lead.enriched.industry || null

  message = template.replace("{company}", company)

  // Only include industry reference if we have it
  if (industry) {
    message = message.replace("{industry_reference}",
      `in the ${industry} space`)
  } else {
    message = message.replace("{industry_reference}", "")
  }

  return message
}

コスト管理

エンリッチメントのコスト効率

コスト要因:

  • ルックアップごとの料金
  • 利用量に応じた割引
  • 複数のプロバイダー
  • キャッシュヒット率

最適化:

  • 適格性を確認してからエンリッチする(すべてのリードを対象にしない)
  • 積極的にキャッシュする
  • 基本データには安価なプロバイダーを使用する
  • 連絡先データにはプレミアムプロバイダーを使用する
階層型エンリッチメント
function enrichByValue(lead) {
  lead_score = quickScore(lead)

  if (lead_score >= 80) {
    // High potential: full enrichment
    return fullEnrichment(lead)
  }

  if (lead_score >= 50) {
    // Medium potential: basic enrichment
    return basicEnrichment(lead)
  }

  // Low potential: minimal enrichment
  return minimalEnrichment(lead)
}

function fullEnrichment(lead) {
  // Firmographic + contact + technographic + intent
  return multiProviderEnrich(lead, ["clearbit", "zoominfo", "bombora"])
}

function basicEnrichment(lead) {
  // Firmographic + contact only
  return singleProviderEnrich(lead, "clearbit")
}

function minimalEnrichment(lead) {
  // Just verify email
  return emailVerify(lead.email)
}

よくある間違い

1. エンリッチメントのしすぎ

問題: すべてのリードをエンリッチして、費用を無駄にする 対処法: まず適格性を確認し、適格なリードをエンリッチする

2. 古いデータ

問題: 古いエンリッチメントデータを使用する 対処法: データの鮮度を確認し、定期的に再エンリッチする

3. 不自然なパーソナライズ

問題: 多くのデータを目に見える形で使用する 対処法: さりげなく活用し、知っていることをすべて明かさない

4. 単一プロバイダーへの依存

問題: 1つのプロバイダーに障害が起きると、すべてが機能しなくなる 対処法: フォールバックプロバイダーを用意し、段階的に機能を縮退させる

5. エンリッチメントによるブロック

問題: エンリッチメントが終わるまで会話が待たされる 対処法: 非同期でエンリッチし、必要に応じてエンリッチなしで進める


確認する質問

さらに詳しい情報が必要な場合:

  1. 現在、リードについてどのようなデータを保有していますか?
  2. どのエンリッチメントプロバイダーを使用していますか?
  3. リードの件数はどのくらいですか?
  4. どのような意思決定がエンリッチメント済みデータに依存していますか?
  5. エンリッチメントの予算はいくらですか?

関連スキル

  • lead-qualification-logic:スコアリングにエンリッチメントを活用する
  • personalization-at-scale:パーソナライズにエンリッチメントを活用する
  • conversation-memory:エンリッチメント済みデータを保存する
  • multi-channel-coordination:チャネル間でデータを活用する

コメント