Install any skill in seconds. Free to start, no credit card required.
Get Started Free →apify/apify-booking-host-leads
Find and enrich B2B leads from Booking.com - hotels, apartments, and vacation rentals - and pull each host's or property manager's real contact details (email, phone, company name, registration number).
Passed 14 of 20 test cases with the skill, and 4 of 20 without it.
and 17 more in the full report
12 fixed4 passed either way6 still failing1 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 12 test cases the skill fixed. Same model, same prompt, with and without the skill.
Provide the CLI command to fetch dataset items in JSON format for Apify dataset ID ds_12345 with standard CLI user agent tracking.
| Checked | Without skill | With skill |
|---|---|---|
| Executes apify datasets get-items ds_12345 --format json. | Passed | Passed |
| Includes --user-agent apify-awesome-skills/apify-booking-host-leads on dataset fetch commands. | Missed | Passed |
The instructions your model reads when the skill loads.
Turn a Booking.com destination search into a clean table of accommodation hosts / property managers with their real contact details.
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.
| Tier | Source | Gets | Fires when |
|---|---|---|---|
| 1 | Booking traderInfo | email, phone, company | always (free, already scraped) |
| 2 | Google Maps Email Extractor (by name) | email, phone, socials, website | lead still has no email |
| 3 | Google Search (by name) | a candidate website | lead still has no website |
| 4 | Website contact scraper (on the website) | email / phone / socials | lead has a website but still no email |
apify login (OAuth, if using the Apify CLI)APIFY_TOKEN environment variablenone = all), max properties, and output format (CSV / JSON / Google Sheet).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.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.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.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.contactSource breakdown. Rows still empty keep BookingURL (contact via Booking messaging).| Output column | Source field |
|---|---|
name, type, address, city, country, rating, ratingLabel, stars, reviews, BookingURL | top-level Booking fields (address.full, address.city, address.country, rating, ratingLabel, reviews, url) |
email, phone | traderInfo.email / traderInfo.phone → fallback Google Maps emails[0] / phones[0] |
test cases passed, vs 4 / 20 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.