apify-booking-host-leads

作者: apify

从Booking.com查找并丰富B2B线索——酒店、公寓和度假租赁——并提取每个房东或物业经理的真实联系方式(电子邮件,…)

npx skills add https://github.com/apify/awesome-skills --skill apify-booking-host-leads

Booking.com host & operator lead finder

Turn a Booking.com destination search into a clean table of accommodation hosts / property managers with their real contact details.

The key insight

When you scrape Booking.com, the host's contact email is sometimes already in the data under traderInfo (a trader-transparency disclosure). But this is region-dependent: strong in the EU (Zurich apartments: 80%) and Australia (Melbourne apartments: 82% in a 50-property test), and increasingly present in Asia (Beijing apartments: 65% as of June 2026, typically a QQ, 163, or Gmail address plus a Chinese company name). It is historically sparser in the US and UK. A naive chained Google Maps email scraper found emails for only ~10% and often matched the wrong business.

So use a waterfall: try the cheapest source first, fall through to more expensive ones only for leads still missing a contact. Never start with a Google Maps email extractor.

TierSourceGetsFires when
1Booking traderInfoemail, phone, companyalways (free, already scraped)
2Google Maps Email Extractor (by name)email, phone, socials, websitelead still has no email
3Google Search (by name)a candidate websitelead still has no website
4Website contact scraper (on the website)email / phone / socialslead has a website but still no email

Prerequisites

Workflow

  1. Collect inputs. Ask the user for: destination (city/area), property type (Apartments / Guest houses / Holiday homes / Villas surface the most independent operators; none = all), max properties, and output format (CSV / JSON / Google Sheet).
  2. Tier 1 - Scrape Booking.com. Run voyager/booking-scraper. Build a lead row per property from traderInfo and hostInfo (see Mapping below). Mark rows where traderInfo.email is present as contactSource: booking-trader.
  3. Tier 2 - Google Maps (only rows still missing an email). Run lukaskrivka/google-maps-with-contact-details with searchStringsArray = ["<name>, <destination>", ...]. Fill email/phone/socials and capture any website it returns. Mark filled rows google-maps.
  4. Tier 3 - Google Search (only rows still missing a website). Run apify/google-search-scraper with one query per lead ("<name> <city> official website"). Take the first non-OTA/non-social organicResults[].url as the candidate website.
  5. Tier 4 - scrape the website (only rows with a website but no email). Default: vdrmota/contact-info-scraper (deterministic, ~14s/site). Optional: apify/ai-web-scraper with a prompt for email/phone/contact-form URL - but in live testing it was slow and failed on multiple sites, so prefer the contact scraper. Mark filled rows website-contact (or website-ai). Cap the count to control cost.
  6. Deliver. Output one row per property. Report total rows, % with an email, and the contactSource breakdown. Rows still empty keep BookingURL (contact via Booking messaging).

Mapping (Booking item → lead row)

Output columnSource field
name, type, address, city, country, rating, ratingLabel, stars, reviews, BookingURLtop-level Booking fields (address.full, address.city, address.country, rating, ratingLabel, reviews, url)
email, phonetraderInfo.email / traderInfo.phone → fallback Google Maps emails[0] / phones[0]
companyName, registrationNumber, traderAddresstraderInfo.companyName / .registrationNumber / .address
hostName, managedPropertieshostInfo.name / hostInfo.managedProperties (operator-size signal)
website, socialsGoogle Maps fallback only; drop OTA domains (booking.com, agoda, expedia, etc.)
contactSourcebooking-trader | google-maps | none

Put email and phone immediately after address in the output.

Always return BookingURL (link to the property), rating, ratingLabel (e.g. "Superb", "Exceptional"), and reviews (review count) for every lead. These give each row its own quality signal, so leads can be ranked and prioritized without re-opening Booking.

Actor routing

Waterfall tierActor IDMaintainerBest for
1 - Booking + trader contactsvoyager/booking-scrapercommunityPrimary. traderInfo holds host email/phone/company
2 - email/social/website by namelukaskrivka/google-maps-with-contact-detailscommunityEmails Booking doesn't disclose; also returns a website
3 - discover a websiteapify/google-search-scraperapifyFinding the host's official site when Maps has none
4 - extract from the website (default)vdrmota/contact-info-scrapercommunityDeterministic email/phone/social extraction; fast and reliable
4 - extract from the website (alt)apify/ai-web-scraperapifyLLM extraction via prompt; flexible but slow/unreliable in testing

Prefer apify-maintained Actors where available.

Calling Actors — Apify CLI

Three flags on every call (--json, --user-agent, 2>/dev/null):

# 1. Scrape 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 - enrich names that have no traderInfo email
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 - discover a website for leads that still have none
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 - AI-extract a contact email / form URL from the website
# (confirm the prompt/instructions field name against the Actor's input schema)
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

# Inspect input schema / fetch results
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

The Apify MCP server (https://mcp.apify.com) and any MCP client (e.g. mcpc) are equivalent alternatives.

Troubleshooting

  • No emails returned → you are probably reading Google Maps output instead of traderInfo. Re-check the Booking item's traderInfo field first.
  • Emails for the wrong business → that is the Google Maps fallback matching a generic place. Trust contactSource: booking-trader rows; treat google-maps rows as lower confidence.
  • Many contactSource: none rows → those hosts disclosed no trader info and have no Google Business match. Use the BookingURL to contact via Booking, or accept the blank.
  • Run cost climbs → skip the Google Maps fallback entirely; traderInfo alone covers ~80%.
  • See references/gotchas.md for cost notes.

来自 apify 的更多技能

bug-triage
apify
对 apify/apify-mcp-server 上的开放 bug 问题进行分类。分析、草拟回复、获取批准、发布。
official
apify-influencer-brand-collabs
apify
通过串联Apify Actors发现Instagram品牌与创作者的合作关系。当用户询问某品牌与谁合作、某创作者曾与哪些品牌进行付费合作时使用…
official
dig
apify
用于在Apify MCP服务器上探索、规划和指定工作的灵活技能。请勿编辑源文件——此技能仅用于理解和规划。
official
apify-financial-news
apify
发现并提取追踪的投资组合公司在33个经过验证的一级来源(彭博社、路透社、金融时报、华尔街日报、IntelliNews、捷克通讯社、波兰通讯社、保加利亚通讯社……)中的财经新闻。
official
apify-actor-development
apify
创建、调试和部署用于网页抓取、自动化及数据处理的无服务器云程序。支持JavaScript、TypeScript和Python模板,集成Crawlee、Playwright和Cheerio库,用于HTTP和基于浏览器的爬取。包含通过apify run进行的本地测试(使用隔离存储)、输入/输出的模式验证,以及通过apify push部署到Apify平台。需要Apify CLI认证,并在.actor/actor.json中强制包含generatedBy元数据以用于AI...
official
apify-actorization
apify
将现有项目转换为无服务器Apify Actors,支持语言特定的SDK集成。支持JavaScript/TypeScript(使用Actor.init() / Actor.exit())、Python(异步上下文管理器)以及通过CLI包装器的任何语言。提供结构化工作流:使用apify init搭建脚手架,应用SDK封装,配置输入/输出模式,通过apify run进行本地测试,然后使用apify push进行部署。包含输入和输出模式验证、Docker容器化以及可选的按事件付费...
official
apify-generate-output-schema
apify
通过分析Apify Actor的源代码生成输出模式(dataset_schema.json、output_schema.json、key_value_store_schema.json)。在以下情况下使用…
official
apify-ultimate-scraper
apify
自动化网页抓取工具,为55多个平台(包括Instagram、TikTok、YouTube、Facebook、Google Maps等)选择最优Actor。涵盖8大主流平台的55多个预配置Actor,并提供针对特定用例的选择指导(潜在客户生成、网红发现、品牌监控、竞争对手分析、趋势研究)。支持三种输出格式:快速聊天显示、CSV导出或JSON导出,可自定义结果数量限制。包含多Actor工作流模式,适用于复杂...
official