mcpField

sales-outscraper

github.com/sales-skillsデータ・データベース43 回インストール
リポジトリ

sales-outscraper について

Outscraper のデータ抽出・エンリッチメント機能を使う営業、開発、調査担当者向けのスキルです。企業やレビューの抽出、コンタクト情報の補完、メール検証、API・SDK・Webhook の利用を扱います。

主な機能

  1. 01Google Maps の企業データ抽出
  2. 02レビューとウェブサイトの連絡先収集
  3. 03コンタクトと企業情報の補完
  4. 04メールの到達可能性検証
  5. 05API・SDK・Webhook の利用案内

活用シーン

  1. 01地域別の企業リスト作成
  2. 02企業レビューの収集と分析
  3. 03見込み客の連絡先情報の補完
  4. 04非同期抽出結果のワークフロー連携

インストール

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

$npx skills add https://github.com/sales-skills/sales --skill sales-outscraper

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

同梱ファイル

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

references/
learnings.md
outscraper-api-reference.md
platform-guide.md

詳細

Outscraper プラットフォームのヘルプ

Google Maps のスクレイピングやレビューの抽出から、メール/連絡先のスクレイピング、リードのエンリッチメント、企業インサイト、メール検証、Amazon のスクレイピング、レビューサイトのスクレイピング、ジオコーディング、API 連携まで、Outscraper プラットフォームに関するユーザーの質問に対応します。Outscraper は、Google Maps、レビュー、50 以上のインターネットソースからデータをスクレイピングする、データ抽出・エンリッチメントプラットフォームです。2018 年に Vlad May と Vlad Romanov によって設立され、テキサス州ビーカーブに拠点を置いています。18 万以上の企業に利用されています。

ステップ 1 — 背景情報を収集する

references/learnings.md が存在する場合は、蓄積された知識を確認するため、最初に読み込みます。

ユーザーに次の質問をします。

  1. Outscraper のどの分野についてサポートが必要ですか?

    • A) Google Maps のスクレイピング — 事業者データ(名称、住所、電話番号、評価、営業時間、ウェブサイト、カテゴリ)を検索・抽出する
    • B) Business Catalog — 場所、カテゴリ、評価を指定して事業者データベースをすぐに検索する(事前構築済みデータベース。スクレイピングではありません)
    • C) レビューの抽出 — Google Maps のレビュー、Yelp、Tripadvisor、G2、Trustpilot、Glassdoor、Capterra、App Store、Google Play
    • D) メール/連絡先のスクレイピング — ウェブサイトやドメインからメールアドレスと連絡先情報を抽出する
    • E) リードのエンリッチメント — 企業のメールアドレス、電話番号、ソーシャルプロフィールを見つける(Contacts & Leads)
    • F) 企業インサイト — 企業統計データ、技術スタック、ソーシャルプロフィール
    • G) メール検証 — メールが配信可能かを確認する(有効/無効/リスクあり)
    • H) Amazon のスクレイピング — 商品データとカスタマーレビュー
    • I) 検索結果のスクレイピング — Google Search(オーガニック検索結果、広告、スニペット、PAA)、Google News
    • J) ジオコーディング — 住所の検証、座標の検索、逆ジオコーディング
    • K) 連携/API — REST API、ウェブフック、SDK、Zapier、n8n、Pipedream
    • L) アカウント/請求 — 料金プラン、使用状況、無料プラン
    • M) その他 — 内容を説明してください
  2. あなたの役割は何ですか?

    • A) 営業/事業開発
    • B) マーケティング/グロース
    • C) 開発者/エンジニア
    • D) データアナリスト/研究者
    • E) 代理店/フリーランサー
    • F) その他
  3. 何を達成しようとしていますか?(具体的な目標や質問を説明してください)

ユーザーの依頼にすでに背景情報の大半が含まれている場合は、該当するステップに直接進んでください。 合理的な前提を明示したうえで、可能な範囲で最善の回答を先に提示します。その後、最後に最も重要な確認事項だけを1~2点質問してください。背景情報をすべて集めるまで回答を保留しないでください。

注:ユーザーに専門分野向けのスキルが必要な場合は、そちらのほうが適している理由を簡潔に説明して案内してください。

ステップ 2 — 適切なスキルに案内するか、直接回答する

依頼が専門分野向けのスキルに該当する場合は、次のように案内します。

  • 見込み客リストの一般的な戦略/ターゲットリストの作成 -> /sales-prospect-list
  • 複数プラットフォームを横断したデータエンリッチメント戦略 -> /sales-enrich
  • メールの配信可能性/検証戦略(Outscraper 固有ではない内容) -> /sales-deliverability
  • ミドルウェアを使った Outscraper と CRM やその他のツールの接続 -> /sales-integration
  • Apollo.io 固有の質問 -> /sales-apollo
  • Hunter 固有の質問 -> /sales-hunter
  • Prospeo 固有の質問 -> /sales-prospeo
  • Seamless.AI 固有の質問 -> /sales-seamless
  • Tomba 固有の質問 -> /sales-tomba

それ以外の場合は、以下のリファレンスに基づいてプラットフォームに関する質問に直接回答します。

ステップ 3 — Outscraper プラットフォームのリファレンス

詳細なモジュールの説明、料金、連携、データモデルについては、references/platform-guide.md を読んでください。

プラットフォームガイドの詳細を確認する必要はなくなりました。ユーザーの具体的な状況に集中してください。

ステップ 4 — 実行可能なガイダンス

ユーザーの具体的な質問に基づいて対応します。

  1. ターゲット市場のGoogle Mapsビジネス情報をスクレイピングする:

    1. 検索クエリを定義します。「カテゴリ、場所」の形式を使用してください(例:「dentists, Austin, TX」または「plumbers, 90210」)
    2. 広い地域を対象とする場合は、近隣地域または郵便番号ごとに分割して、クエリあたりの上限である500件を超えないようにし、より網羅的に情報を取得します
    3. クエリの配列を指定して GET /google-maps-search を呼び出します(1リクエストあたり最大25クエリ)
    4. limit パラメーターでクエリあたりの結果数を指定します(デフォルトは20、最大500)
    5. 結果には、名称、住所、電話番号、ウェブサイト、評価、レビュー件数、営業時間、カテゴリ、place_id が含まれます
    6. 結果に含まれる place_id を使って、レビューや写真の抽出を実行します
    7. 検索対象地域が重複する場合は、クエリ間で重複を排除します。Outscraper は同一リクエスト内の重複を排除しますが、別々のリクエスト間では排除しません
  2. Google Mapsのレビューを抽出・分析する:

    1. 対象ビジネスの place_id を取得します(以前のGoogle Maps検索結果から取得するか、手動で検索します)
    2. place_id を指定して GET /maps/reviews-v3 を呼び出し、sort(newest、most_relevant、highest_rating、lowest_rating)を設定します
    3. cutoff パラメーターを使用すると、特定の日付以降のレビューだけを取得できます。継続的なモニタリングに便利です
    4. reviewsLimit を設定して、場所ごとのレビュー数に上限を設けます(レビューが数千件あるビジネスのコストを管理できます)
    5. レスポンスには、投稿者、評価、テキスト、日付、「いいね」数、オーナーからの返信データが含まれます
    6. 感情分析を行うには、レビューをエクスポートし、評価の経時的な傾向、頻出キーワード、返信パターンを分析します
  3. メールアドレスと連絡先を含むリードリストを作成する:

    1. まずGoogle Maps検索でターゲット市場のビジネスを見つけ、ビジネス名、ウェブサイト、ドメインを抽出します
    2. 抽出したドメインを GET /emails-and-contacts に渡して、企業ウェブサイトからメールアドレスをスクレイピングします
    3. より詳しい情報を取得するには、企業名またはドメインを指定して GET /contacts-and-leads を使用し、1社あたり最大3名の連絡先について、名前、役職、メールアドレス、電話番号を取得します
    4. アウトリーチの前に、収集したメールアドレスをすべて GET /email-validator で検証し、無効なアドレスやリスクのあるアドレスを除外します
    5. GET /company-insights で企業規模・属性、技術スタック、ソーシャルプロフィールを取得して企業データを充実させ、ICPとの適合度に基づいてリードの優先順位を付けます
    6. 統合したデータセットをエクスポートし、CRMまたはアウトリーチツールにインポートします
  4. 非同期処理結果を受け取るWebhookコールバックを設定する:

    1. Outscraperのほとんどのエンドポイントは非同期で処理され、リクエストIDをすぐに返します
    2. GET /requests/{id} をポーリングする代わりに、コールバックURLを指定して webhook パラメーターを追加します
    3. タスクが完了すると、Outscraper が結果をWebhook URLにPOSTします
    4. Webhookエンドポイントはすぐにステータスコード200を返すようにしてください。データはそちらで非同期に処理します
    5. Zapierと連携する場合は、「Task Finished」トリガーを使用して後続のワークフローを開始します
  5. Business Catalogからリードリストを作成する:

    1. 利用するプランを選択します。テストまたは最大1,000件の小規模なリストにはAPIキーを使う POST /businesses-free を、実運用でのフルアクセスにはOAuth2を使う POST /businesses を使用します
    2. フィルターを定義します。地域は country_code と states/cities/postal_codes、ビジネスカテゴリは types(例:["restaurant", "cafe"])、評価は rating(例:「4.0+」)を指定します。また、連絡可能なビジネスに限定するには has_website: true、has_phone: true を指定します
    3. 同じリクエストにエンリッチメントを追加します。意思決定者のメールアドレスを取得するには、contacts_per_company と emails_per_contact を指定して contacts_n_leads を追加し、企業規模・属性の取得には company_insights を追加します
    4. fields 配列を使って必要な列だけを返すように指定します。レスポンスサイズを減らし、処理を高速化できます
    5. cursor でページネーションを行います。各レスポンスには next_cursor と has_more が含まれます。has_more が false になるまで繰り返します
    6. 結果はすぐに返されるため、非同期処理のポーリングは不要です。カタログはスクレイピングジョブではなく、事前に構築されたデータベースです
    7. アウトリーチの前に、スクレイピングAPIで GET /email-validator を使って、エンリッチメントで取得したメールアドレスを検証します
  6. Python SDK の使用:

    1. インストール:pip install outscraper
    2. 初期化:from outscraper import OutscraperClient; client = OutscraperClient(api_key='YOUR_KEY')(旧称の ApiClient も後方互換エイリアスとして引き続き使用できますが、現在は OutscraperClient が推奨されています)
    3. Google Maps の検索:results = client.google_maps_search('restaurants, NYC', limit=100)
    4. レビュー:reviews = client.google_maps_reviews('place_id_here', reviews_limit=50, sort='newest')
    5. メールアドレスの検証:results = client.validate_emails(['[email protected]'])
    6. すべての SDK メソッドでバッチ処理がサポートされています。効率的に処理するには、クエリのリストを渡してください

注意点

調査に基づくベストエフォートの内容です。特に、プランによって利用が制限される機能や、古くなっている可能性のある連携に関する注意点をご確認ください。

  1. Google Maps のクエリでは、1 件あたり最大 500 件までしか取得できないため、広範囲な検索ですべてのビジネスを取得することはできません。「restaurants, New York」と検索すると、ニューヨークのすべてのレストランではなく、最大 500 件が返されます。網羅的に取得するには、検索範囲をより小さな地域(郵便番号、近隣地域、行政区など)に分割し、複数のリクエストで取得した結果を重複排除してください。
  2. **非同期の結果を取得するにはポーリングまたはウェブフックが必要です。API から即座に結果が返るとは限りません。**ほとんどのエンドポイントは、まずリクエスト ID を返します。ステータスが完了するまで GET /requests/{id} をポーリングするか、webhook パラメーターを使ってコールバックで結果を受け取る必要があります。Python SDK はポーリングを自動で処理しますが、API を直接利用する場合は自分で実装する必要があります。
  3. メールアドレスの検証と連絡先情報のエンリッチメントは別々のモジュールで、費用も別です。「Contacts & Leads」で取得したメールアドレスが事前に検証済みだとは考えないでください。/contacts-and-leads エンドポイントはメールアドレスを検索しますが、配信可能性は検証しません。バウンスを避け、送信者の評価を守るため、アウトリーチの前に必ず見つかったメールアドレスを /email-validator で検証してください。
  4. **レート制限は約 20 QPS のソフト制限ですが、処理量を増やすにはバッチ処理が有効です。25 クエリのバッチ上限を活用してください。**25 件の個別リクエストを送信する代わりに、最大 25 件のクエリを配列にまとめて 1 回のリクエストで送信してください。これにより効率が上がり、レート制限にも達しにくくなります。大量のデータを継続的に利用する場合は、Outscraper に連絡して QPS の上限引き上げを依頼してください。
  5. **レビューのスクレイピング費用は取得量に応じて増加します。支出を管理するには reviewsLimit を設定してください。**1 つのビジネスに数万件のレビューがある場合もあります。reviewsLimit パラメーターを指定しないと、そのすべてを抽出し、料金が発生する可能性があります。レビュー履歴全体が必要な場合を除き、必ず適切な上限を設定してください。
  • 自己改善:ここに記載されていない情報が見つかった場合は、今日の日付とともに references/learnings.md に追記してください。

ステップ 5 — 関連スキル

  • /sales-prospect-list — Outscraper やその他のソースのデータを使って、見込み客リストを作成・改善します
  • /sales-enrich — クロスプラットフォームのデータエンリッチメント戦略(Outscraper とその他のエンリッチメントツールを組み合わせます)
  • /sales-deliverability — メールの配信可能性と検証の戦略(Outscraper のメール検証以外も対象とします)
  • /sales-integration — Outscraper を CRM、自動化ツール、その他のツールに接続します
  • /sales-do — どのスキルを使えばよいかわからない場合に使います。ルーターがあらゆる営業の目的に応じて適切なスキルを選びます。インストール:npx skills add sales-skills/sales --skill sales-do

使用例

例 1:営業エリア内の地域企業をスクレイピングする

ユーザーの依頼:「ダラス・フォートワース都市圏にあるすべての HVAC 企業について、連絡先情報と評価を含むリストを作成したいです。」 スキルの処理:

  1. 検索戦略を設計します。1 回のクエリあたり 500 件の上限を超えて網羅性を高めるため、DFW を特定の市や郵便番号に分割します。例:「HVAC, Dallas, TX」「HVAC, Fort Worth, TX」「HVAC, Arlington, TX」「HVAC, Plano, TX」「HVAC, Irving, TX」など。
  2. クエリをまとめて(1 リクエストあたり最大 25 件)、GET /google-maps-search を呼び出し、クエリごとに limit=500 を指定します。
  3. 結果には、企業名、住所全体、電話番号、ウェブサイト、Google の評価、レビュー件数、営業時間、カテゴリが含まれます。
  4. place_id を一意のキーとして、クエリ間で結果を重複排除します(同じ企業が地理的に重複する検索に含まれる場合があります)。
  5. 抽出したウェブサイトに対して GET /emails-and-contacts を実行し、アウトリーチ用のメールアドレスを見つけます。
  6. 収集したメールアドレスを GET /email-validator で検証し、無効なアドレスを除外してから CRM に読み込みます。 結果:ユーザーは、DFW 全域の HVAC 企業を網羅し、重複を除いたリストを入手できます。検証済みの連絡先情報、評価、レビュー件数が含まれており、CRM へのインポートや営業アウトリーチにすぐに使用できます。
例 2:複数プラットフォームにわたる競合レビュー分析

ユーザーの依頼:「Google Maps、Yelp、Trustpilot で、上位 3 社の競合について顧客の声をモニタリングしたいです。」 スキルの処理:

  1. Google Maps で各競合の place_id を特定します(検索または手動での確認によります)。
  2. 3 つのプラットフォームでレビューを抽出するよう設定します。Google Maps のレビューには GET /maps/reviews-v3、Yelp のレビューには GET /yelp/reviews、Trustpilot のレビューには GET /trustpilot/reviews を使用します。
  3. sort=newest と cutoff 日付パラメーターを使用して、最近のレビュー(例:過去 90 日間)のみを取得し、関連性とコストの両方を管理します。
  4. 企業ごと、プラットフォームごとに reviewsLimit=100 を設定し、データ量を管理しやすくします。
  5. 分析用に結果を CSV としてエクスポートします。時間の経過に伴う評価の分布、よくある不満の傾向、返信率と返信の質を確認することを推奨します。
  6. Zapier または API を呼び出す cron job を使用して、定期的な抽出(月次または週次)を設定し、時間の経過に伴うセンチメントの傾向を追跡することを提案します。 結果:ユーザーは、3 つのプラットフォームにわたる競合他社の最近のレビューを構造化したデータセットとして入手できます。これにより、顧客満足度、よくある課題、機会のある分野について競合インテリジェンスを得られます。
例 3:ターゲットアカウントリストへの企業属性データの追加

ユーザーの依頼:「200 社の企業ドメインのリストがあります。従業員数、業種、テックスタックを追加し、意思決定者の連絡先も見つけたいです。」 スキルの処理:

  1. 200 件のドメインを 25 件ずつのリクエストに分割し、GET /company-insights を実行します。合計 8 回の API 呼び出しになります。
  2. Company Insights は、業種、従業員数の範囲、売上高の範囲、テックスタック、ソーシャルプロフィール、設立年、本社所在地を返します。
  3. 同じドメインを使用して GET /contacts-and-leads を実行します。企業ごとに最大 3 名の連絡先について、氏名、役職、メールアドレス、電話番号、LinkedIn プロフィールが返されます。
  4. ユーザーのターゲットペルソナに応じて、役職の関連性(例:営業担当副社長、オペレーション部門長、CTO)を基準に連絡先の優先順位を付けます。
  5. 見つかったすべてのメールアドレスを GET /email-validator で検証し、無効なアドレスやリスクのあるアドレスに除外対象のフラグを付けます。
  6. 企業の属性データと連絡先データを 1 つの拡充済みデータセットにまとめ、CRM へのインポートやアウトリーチツールへの取り込みができる状態にします。 結果:ユーザーは、企業属性データを追加した 200 件のアカウントと、最大 600 名の検証済み意思決定者の連絡先を入手できます。ICP の基準で絞り込まれており、パーソナライズされたアウトリーチにすぐに使用できます。

トラブルシューティング

Google Maps 検索で想定より少ない結果しか返されない

症状:「restaurants, New York」のようなクエリで、数千件を想定していたのに、100~200件しか返されません。 原因:Google Maps では、検索クエリごとに表示される結果数に上限があり、Outscraper ではクエリあたり500件までに制限されています。人口密度の高い地域を広範囲に検索すると、この上限に達し、多くのビジネスが取得できません。 解決策:検索範囲を小さくし、地域をより細かく指定してください。「restaurants, New York」ではなく、地域や郵便番号ごとに「restaurants, 10001」「restaurants, 10002」などと検索します。1回の API リクエストで、こうしたクエリを最大25件まとめて実行できます。取得した結果は、place_id を一意の識別子として重複を除去してください。大規模なスクレイピングプロジェクトでは、郵便番号や地域名のリストからクエリをプログラムで生成し、漏れなくカバーすることを検討してください。

非同期リクエストが処理中のままになる、または結果が返されない

症状:リクエストを送信してリクエスト ID を受け取りましたが、GET /requests/{id} をポーリングしてもステータスが「processing」のままです。または、タスクが完了と表示されているのに結果が空です。 原因:大規模なリクエスト(クエリ数が多い、またはレビューの上限が高い場合)は、処理にかなりの時間がかかることがあります。結果が空の場合は、入力が無効(place_ids が間違っている、ドメインにアクセスできないなど)、または対象のデータが実際に存在しない(例:レビューのないビジネス)可能性があります。 解決策:処理に時間がかかるタスクでは、ポーリングの代わりにwebhookパラメーターを使用してください。結果の準備ができると、POST コールバックが届きます。入力データが有効か確認してください。place_ids が正しいこと、URL にアクセスできること、ドメインが名前解決できることを確認します。Python SDK を使用している場合は、タイムアウトを延長するか、非同期モードを使用してください。リクエストがいつまでも停止したままの場合は、Outscraper のステータスページを確認するか、サポートにお問い合わせください。なお、非常に大規模なリクエストは、内部で複数のサブタスクに分割されることがあります。

メールアドレス検証で大半のアドレスが「risky」と判定される

症状:/email-validator で検証すると、「valid」や「invalid」ではなく、「risky」と判定されるメールアドレスの割合が高くなります。 原因:「risky」は通常、メールサーバーがすべてのアドレスを受け付ける(キャッチオールドメイン)、または SMTP チェックで結論が出なかったことを意味します。多くの企業ドメインでは、任意のアドレス宛てのメールを受け付けるようキャッチオールを設定しているため、特定のメールボックスが存在するかどうかを確認できません。これは大企業のドメインでよく見られます。 解決策:「risky」と判定されたメールアドレスが、必ずしも不正なものとは限りません。多くはメールを届けられます。キャッチオールドメインでは、SMTP レベルで検証できなくても、メールアドレスの形式自体は正しい場合があります。「risky」と判定されたメールアドレスに送信する場合は注意し、アプローチの対象に含める一方で、バウンス率を注意深く監視してください。「risky」と判定されたアドレスからのバウンス率が5%を超えた場合は、それらを除外してください。重要なアプローチでは、過去の送信データやソーシャルプロフィールの照合など、追加のシグナルを使用する別の検証サービスを Outscraper の検証と併用することを検討してください。

コメント