apify-booking-host-leads について
Booking.comの宿泊施設検索を、ホストや施設運営者のリード一覧に変換するスキルです。宿泊事業者への連絡先を探すユーザー向けに、まずBooking.comの開示情報を確認し、不足する連絡先やウェブサイトを段階的に補完しながら、施設URLや評価も保持します。
主な機能
- 01Booking.comから宿泊施設のリードを収集
- 02開示された事業者連絡先を優先
- 03不足するサイトや連絡先を段階的に補完
- 04情報源と施設評価を含む表を出力
活用シーン
- 01地域の宿泊施設運営者の連絡先リスト作成
- 02物件管理者のメールや電話番号の検索
- 03評価やレビュー数による提携候補の絞り込み
MCP 対応
Apify MCPサーバーとMCPクライアントを、Apify Actorsの呼び出し方法として利用できると説明しています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ apify/ awesome-skills --skill apify-booking-host-leadsインストール後、Claude Code で/apify-booking-host-leadsを入力して読み込まれたか確認します。
同梱ファイルreferences/gotchas.md
詳細
Booking.com のホストおよび運営者リード検索
Booking.com の目的地検索結果を、宿泊施設のホスト/物件管理者と実際の連絡先情報をまとめた見やすい表に変換します。
重要なポイント
Booking.com をスクレイピングすると、ホストの連絡先メールアドレスが traderInfo(事業者情報の開示)にすでに含まれていることがあります。ただし、これは地域によって異なります。EU(チューリッヒのアパートメントでは80%)とオーストラリア(50件の物件をテストしたところ、メルボルンのアパートメントでは82%)では高い割合で見つかり、アジアでも増加しています(2026年6月時点で、北京のアパートメントでは65%。通常、QQ、163、Gmail のメールアドレスと中国企業名が含まれています)。米国と英国では、歴史的に見つかる割合が低くなっています。単純に Google Maps のメールスクレイパーを連結して使った場合、メールアドレスが見つかったのは約10%にすぎず、間違った事業者に紐付けられることもよくありました。
そのため、段階的な方法を使います。まず最も低コストの情報源を試し、連絡先がまだ見つからないリードに限り、よりコストの高い情報源へ進みます。Google Maps のメール抽出ツールから始めないでください。
| 段階 | 情報源 | 取得できる情報 | 実行条件 |
|---|---|---|---|
| 1 | Booking の traderInfo | メールアドレス、電話番号、会社名 | 常時(無料で、スクレイピング済み) |
| 2 | Google Maps Email Extractor(名称で検索) | メールアドレス、電話番号、SNS、ウェブサイト | リードにメールアドレスがない場合 |
| 3 | Google Search(名称で検索) | 候補となるウェブサイト | リードにウェブサイトがない場合 |
| 4 | ウェブサイトの連絡先情報スクレイパー | メールアドレス/電話番号/SNS | リードにウェブサイトはあるが、メールアドレスがない場合 |
前提条件
- Apify アカウント(登録)
- 次のいずれかの方法で認証します。
apify login(Apify CLI を使う場合の OAuth)APIFY_TOKEN環境変数- Apify Console → Settings → Integrations のトークン
ワークフロー
- 入力情報を収集します。 ユーザーに目的地(都市/エリア)、物件タイプ(Apartments / Guest houses / Holiday homes / Villas は独立系の運営者が最も多く見つかります。
none= すべて)、物件の最大件数、出力形式(CSV / JSON / Google Sheet)を確認します。 - 段階1 - Booking.com をスクレイピングします。
voyager/booking-scraperを実行します。各物件のtraderInfoとhostInfoからリードの行を作成します(下記のマッピングを参照)。traderInfo.emailがある行にはcontactSource: booking-traderを設定します。 - 段階2 - Google Maps(メールアドレスがまだない行のみ)。
searchStringsArray = ["<name>, <destination>", ...]を指定してlukaskrivka/google-maps-with-contact-detailsを実行します。メールアドレス、電話番号、SNS を補完し、返されたウェブサイトも記録します。補完した行にはgoogle-mapsを設定します。 - 段階3 - Google Search(ウェブサイトがまだない行のみ)。 リードごとに1件のクエリ(
"<name> <city> official website")を指定してapify/google-search-scraperを実行します。OTA や SNS 以外のorganicResults[].urlのうち、最初のものを候補のウェブサイトとして使用します。 - 段階4 - ウェブサイトをスクレイピングします(ウェブサイトはあるが、メールアドレスがない行のみ)。 デフォルトでは
vdrmota/contact-info-scraperを使用します(動作が安定しており、1サイトあたり約14秒)。任意で、メールアドレス/電話番号/問い合わせフォームの URL を取得するプロンプトを指定してapify/ai-web-scraperを使うこともできます。ただし、実環境のテストでは処理が遅く、複数のサイトで失敗したため、連絡先情報スクレイパーの使用を推奨します。補完した行にはwebsite-contact(またはwebsite-ai)を設定します。コストを抑えるため、件数に上限を設けてください。 - 結果を提供します。 物件ごとに1行を出力します。合計行数、メールアドレスがある行の割合、
contactSourceの内訳を報告します。連絡先が空の行にはBookingURLを残します(Booking のメッセージ機能で連絡できます)。
マッピング(予約物件 → リード行)
| 出力列 | ソースフィールド |
|---|---|
name, type, address, city, country, rating, ratingLabel, stars, reviews, BookingURL | Booking のトップレベルフィールド(address.full、address.city、address.country、rating、ratingLabel、reviews、url) |
email, phone | traderInfo.email / traderInfo.phone → Google Maps の emails[0] / phones[0] にフォールバック |
companyName, registrationNumber, traderAddress | traderInfo.companyName / .registrationNumber / .address |
hostName, managedProperties | hostInfo.name / hostInfo.managedProperties(運営規模の指標) |
website, socials | Google Maps のみをフォールバックとして使用し、OTA ドメイン(booking.com、agoda、expedia など)は除外 |
contactSource | booking-trader | google-maps | none |
出力では、email と phone を address の直後に配置します。
すべてのリードについて、必ず BookingURL(物件へのリンク)、rating、ratingLabel(例:「Superb」、「Exceptional」)、reviews(レビュー数)を返してください。これらは各行固有の品質指標となるため、Booking を再度開かずにリードのランク付けと優先順位付けができます。
Actor のルーティング
| ウォーターフォールの階層 | Actor ID | メンテナー | 最適な用途 |
|---|---|---|---|
| 1 - Booking + 事業者の連絡先 | voyager/booking-scraper | コミュニティ | 第一候補。 traderInfo にホストのメールアドレス/電話番号/会社情報があります |
| 2 - 名前からメール/ソーシャル/ウェブサイトを取得 | lukaskrivka/google-maps-with-contact-details | コミュニティ | Booking が公開していないメールアドレスの取得。ウェブサイトも返します |
| 3 - ウェブサイトを特定 | apify/google-search-scraper | apify | Maps にない場合に、ホストの公式サイトを検索します |
| 4 - ウェブサイトから抽出(デフォルト) | vdrmota/contact-info-scraper | コミュニティ | メールアドレス/電話番号/ソーシャル情報を確実に抽出します。高速で信頼性があります |
| 4 - ウェブサイトから抽出(代替) | apify/ai-web-scraper | apify | プロンプトを使った LLM による抽出です。柔軟ですが、テストでは低速で信頼性に欠けます |
利用可能な場合は、apify がメンテナンスする Actor を優先してください。
アクターの呼び出し — Apify CLI
呼び出しごとに3つのフラグを指定します(--json、--user-agent、2>/dev/null)。
# 1. Booking.comをスクレイピング
apify actors call "voyager/booking-scraper" \
-i '{"search":"Melbourne","maxItems":50,"propertyType":"Apartments","currency":"USD","language":"en-us","sortBy":"distance_from_search","rooms":1,"adults":2}' \
--json \
--user-agent apify-awesome-skills/apify-booking-host-leads \
2>/dev/null
# Tier 2 - traderInfoにメールアドレスがない名前を補完
apify actors call "lukaskrivka/google-maps-with-contact-details" \
-i '{"searchStringsArray":["<name>, Melbourne"],"locationQuery":"Melbourne","maxCrawledPlacesPerSearch":1,"language":"en"}' \
--json \
--user-agent apify-awesome-skills/apify-booking-host-leads \
2>/dev/null
# Tier 3 - まだウェブサイトが見つかっていないリードのウェブサイトを特定
apify actors call "apify/google-search-scraper" \
-i '{"queries":"<name> Melbourne official website","maxPagesPerQuery":1,"resultsPerPage":5,"countryCode":"us","languageCode":"en"}' \
--json \
--user-agent apify-awesome-skills/apify-booking-host-leads \
2>/dev/null
# Tier 4 - ウェブサイトから連絡先メールアドレス/フォームURLをAIで抽出
# (プロンプト/指示フィールドの名前を、アクターの入力スキーマで確認してください)
apify actors call "apify/ai-web-scraper" \
-i '{"startUrls":[{"url":"<website>"}],"prompt":"Extract the contact email, phone, and contact-form URL. Return JSON keys: email, phone, contactFormUrl."}' \
--json \
--user-agent apify-awesome-skills/apify-booking-host-leads \
2>/dev/null
# 入力スキーマの確認/結果の取得
apify actors info "voyager/booking-scraper" --input --json \
--user-agent apify-awesome-skills/apify-booking-host-leads 2>/dev/null
apify datasets get-items DATASET_ID --format json \
--user-agent apify-awesome-skills/apify-booking-host-leads 2>/dev/null
Apify MCP サーバー(https://mcp.apify.com)と任意のMCPクライアント(例:mcpc)も同等の代替手段です。
トラブルシューティング
- メールアドレスが返されない →
traderInfoではなく、Google Mapsの出力を参照している可能性があります。まずBookingアイテムのtraderInfoフィールドを再確認してください。 - 別の事業者のメールアドレスが返される → Google Mapsのフォールバックが一般的な場所とマッチしています。
contactSource: booking-traderの行を信頼し、google-mapsの行は信頼度が低いものとして扱ってください。 contactSource: noneの行が多い → これらのホストは事業者情報を公開しておらず、Google Businessにもマッチするものがありません。BookingURLを使ってBooking経由で連絡するか、空欄のままにしてください。- 実行コストが増加する → Google Mapsのフォールバックを完全に省略してください。
traderInfoだけで約80%をカバーできます。 - コストに関する注意事項はreferences/gotchas.mdを参照してください。