关于 apify-booking-host-leads
该技能将 Booking.com 住宿搜索结果整理为房东或物业运营方线索,面向需要联系住宿经营者的用户。它优先使用 Booking.com 的商家披露信息,再逐级补充联系方式和网站,并保留房源链接及评分信息。
主要功能
- 01从 Booking.com 搜集住宿线索
- 02优先提取商家披露的联系方式
- 03按缺失信息逐级补充网站与联系方式
- 04输出含来源和房源质量信息的表格
适用场景
- 01为目标城市住宿经营者建立联系名单
- 02查找物业管理方的邮箱和电话
- 03按评分及评论数筛选潜在合作对象
MCP 相关
该技能说明 Apify MCP server 和 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(交易方透明度披露)下。但这取决于地区:欧盟地区数据丰富(苏黎世公寓:80%),澳大利亚也很丰富(墨尔本公寓:在 50 套房源的测试中为 82%),亚洲地区也逐渐增多(截至 2026 年 6 月,北京公寓为 65%,通常是 QQ、163 或 Gmail 邮箱,另附中国公司名称)。美国和英国的相关数据历来较少。简单串联使用 Google Maps 邮箱抓取器,只找到约 10% 的邮箱,而且经常匹配到错误的企业。
因此应使用瀑布式流程:先尝试成本最低的数据源,仅对仍缺少联系信息的线索使用成本更高的数据源。绝不要一开始就使用 Google Maps 邮箱提取器。
| 层级 | 来源 | 可获取信息 | 触发条件 |
|---|---|---|---|
| 1 | Booking traderInfo | 邮箱、电话、公司 | 始终使用(免费,已抓取) |
| 2 | Google Maps Email Extractor(按名称搜索) | 邮箱、电话、社交账号、网站 | 线索仍没有邮箱 |
| 3 | Google Search(按名称搜索) | 候选网站 | 线索仍没有网站 |
| 4 | 网站联系信息抓取器(针对该网站) | 邮箱/电话/社交账号 | 线索有网站,但仍没有邮箱 |
前置条件
- Apify 账号(注册)
- 通过以下任一方式进行身份验证:
apify login(使用 Apify CLI 时采用 OAuth)APIFY_TOKEN环境变量- 从 Apify Console → Settings → Integrations 获取令牌
工作流
- 收集输入信息。 向用户询问:目的地(城市/地区)、物业类型(公寓/招待所/度假屋/别墅最能找到独立运营方;
none= 全部)、房源数量上限,以及输出格式(CSV / JSON / Google Sheet)。 - 层级 1 - 抓取 Booking.com。 运行
voyager/booking-scraper。根据traderInfo和hostInfo为每套房源创建一行线索(参见下文的映射)。将traderInfo.email不为空的行标记为contactSource: booking-trader。 - 层级 2 - Google Maps(仅处理仍缺少邮箱的行)。 运行
lukaskrivka/google-maps-with-contact-details,并设置searchStringsArray = ["<name>, <destination>", ...]。填入邮箱/电话/社交账号,并记录其返回的任何网站。将已填充的行标记为google-maps。 - 层级 3 - Google Search(仅处理仍缺少网站的行)。 运行
apify/google-search-scraper,为每条线索使用一个搜索词("<name> <city> official website")。将第一个非 OTA/非社交网站的organicResults[].url作为候选网站。 - 层级 4 - 抓取网站(仅处理有网站但没有邮箱的行)。 默认使用
vdrmota/contact-info-scraper(确定性抓取,每个网站约 14 秒)。也可选择使用apify/ai-web-scraper,并提示其查找邮箱/电话/联系表单 URL;但实测中速度较慢,而且在多个网站上失败,因此优先使用联系信息抓取器。将已填充的行标记为website-contact(或website-ai)。限制抓取数量以控制成本。 - 交付结果。 每套房源输出一行。报告总行数、有邮箱的比例,以及
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(例如“优秀”“卓越”)和 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 | 通过提示词使用大模型提取;灵活,但测试中速度较慢且可靠性较低 |
在可用时,优先选择由 apify 维护的 Actor。
调用 Actor — Apify CLI
每次调用都带上这三个标志(--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
# 第 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
# 第 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
# 第 4 层 - 使用 AI 从网站提取联系邮箱/表单 URL
# (根据 Actor 的输入架构确认提示词/指令字段名称)
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)都是等效的替代方案。
故障排除
- 未返回邮箱 → 你可能读的是 Google Maps 输出,而不是
traderInfo。请先重新检查 Booking 条目的traderInfo字段。 - 邮箱对应的商家不正确 → 这是 Google Maps 回退匹配到了一个通用地点。请信任
contactSource: booking-trader行;将google-maps行视为置信度较低。 - 许多行的
contactSource: none→ 这些房东未公开商家信息,也没有匹配的 Google Business。使用BookingURL通过 Booking 联系,或接受邮箱为空。 - 运行成本上升 → 完全跳过 Google Maps 回退;仅
traderInfo就能覆盖约 80%。 - 成本说明请参阅 references/gotchas.md。