apify-booking-host-leads

โดย apify

ค้นหาและเพิ่มข้อมูลลูกค้า B2B จาก Booking.com - โรงแรม อพาร์ทเมนต์ และที่พักตากอากาศ - และดึงข้อมูลติดต่อจริงของเจ้าของหรือผู้จัดการที่พักแต่ละราย (อีเมล,…

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.

Skills เพิ่มเติมจาก apify

apify-influencer-brand-collabs
apify
ค้นหาความร่วมมือระหว่างแบรนด์และครีเอเตอร์บน Instagram โดยการเชื่อมต่อ Apify Actors ใช้เมื่อผู้ใช้ถามว่าใครร่วมงานกับแบรนด์ แบรนด์ใดที่ครีเอเตอร์ได้รับค่าตอบแทน...
apify-actor-development
apify
สร้าง, ดีบัก, และปรับใช้โปรแกรมคลาวด์แบบไร้เซิร์ฟเวอร์สำหรับการขูดเว็บ, ระบบอัตโนมัติ, และการประมวลผลข้อมูล รองรับเทมเพลต JavaScript, TypeScript, และ Python พร้อมไลบรารี Crawlee, Playwright, และ Cheerio ในตัวสำหรับการรวบรวมข้อมูลผ่าน HTTP และเบราว์เซอร์ รวมถึงการทดสอบในเครื่องผ่าน apify run พร้อมพื้นที่จัดเก็บแบบแยกส่วน, การตรวจสอบความถูกต้องของสคีมาสำหรับอินพุต/เอาต์พุต, และการปรับใช้ไปยังแพลตฟอร์ม Apify ผ่าน apify push ต้องมีการรับรองความถูกต้องของ Apify CLI และข้อมูลเมตา generatedBy ที่จำเป็นใน .actor/actor.json สำหรับ AI...
apify-actorization
apify
แปลงโปรเจกต์ที่มีอยู่ให้เป็น Apify Actors แบบไร้เซิร์ฟเวอร์ พร้อมการผสานรวม SDK เฉพาะภาษา รองรับ JavaScript/TypeScript (ด้วย Actor.init() / Actor.exit()), Python (ตัวจัดการบริบทแบบอะซิงก์) และภาษาอื่นๆ ผ่าน CLI wrapper มีเวิร์กโฟลว์ที่มีโครงสร้าง: apify init เพื่อสร้างโครงร่าง, ใช้ SDK wrapping, กำหนดค่า schemas อินพุต/เอาต์พุต, ทดสอบในเครื่องด้วย apify run, จากนั้นปรับใช้ด้วย apify push รวมถึงการตรวจสอบความถูกต้องของ schema อินพุตและเอาต์พุต, การทำ Docker containerization, และตัวเลือกการจ่ายต่อเหตุการณ์...
apify-content-analytics
apify
การวิเคราะห์เนื้อหาหลายแพลตฟอร์มผ่าน Apify Actors สำหรับ Instagram, Facebook, YouTube และ TikTok รองรับ Actors เฉพาะทางมากกว่า 17 รายการครอบคลุมโพสต์ รีล สตอรี่ คอมเมนต์ แฮชแท็ก ผู้ติดตาม และโฆษณาทั่วทั้งสี่แพลตฟอร์ม ดึงข้อมูลสคีมาของ Actor แบบไดนามิกโดยใช้ mcpc CLI เพื่อกำหนดอินพุตที่จำเป็นและฟิลด์เอาต์พุตที่มีอยู่ แสดงผลลัพธ์ในสามรูปแบบ: การแสดงผลแชทด่วน การส่งออก CSV หรือการส่งออก JSON พร้อมจำนวนผลลัพธ์ที่ปรับแต่งได้ ต้องใช้โทเค็น Apoken ในไฟล์ .env และ Node.js 20.6+...
apify-ecommerce
apify
ดึงข้อมูลสินค้า ราคา รีวิว และข้อมูลผู้ขายจากตลาดอีคอมเมิร์ซกว่า 50 แห่ง มีโหมดการทำงานสามแบบ: สินค้าและราคา (ติดตามราคา วิเคราะห์คู่แข่ง), รีวิวลูกค้า (วิเคราะห์ความรู้สึก ปัญหาคุณภาพ), และข้อมูลผู้ขาย (ค้นหาผู้ขายผ่าน Google Shopping) รองรับ Amazon (กว่า 20 ภูมิภาค), Walmart, eBay, IKEA, Costco และร้านค้าปลีกในยุโรป; ป้อนข้อมูลผ่าน URL สินค้า, URL หมวดหมู่ หรือค้นหาด้วยคำสำคัญ มีการวิเคราะห์ด้วย AI แบบเสริมเพื่อสร้างข้อมูลเชิงลึกเกี่ยวกับราคา...
apify-generate-output-schema
apify
สร้างสคีมาเอาต์พุต (dataset_schema.json, output_schema.json, key_value_store_schema.json) สำหรับ Apify Actor โดยการวิเคราะห์ซอร์สโค้ดของมัน ใช้เมื่อ...
apify-influencer-discovery
apify
ค้นหาและประเมินอินฟลูเอนเซอร์บน Instagram, Facebook, YouTube และ TikTok โดยใช้ Apify Actors เส้นทางคำขอค้นหาไปยัง Actors เฉพาะทางมากกว่า 15 รายการที่ครอบคลุมการขูดข้อมูลโปรไฟล์ การค้นหาแฮชแท็ก การวิเคราะห์การมีส่วนร่วม และการค้นหากลุ่มเฉพาะบนแพลตฟอร์มหลักทั้งหมด ดึงข้อมูลสคีมาของ Actor แบบไดนามิกผ่าน mcpc เพื่อกำหนดอินพุตที่จำเป็นและฟิลด์เอาต์พุตที่มีก่อนดำเนินการ รองรับโหมดการส่งออกสามแบบ: แสดงผลในแชทแบบอินไลน์, ไฟล์ CSV หรือ JSON พร้อมกำหนดจำนวนผลลัพธ์ที่ปรับแต่งได้...
apify-ultimate-scraper
apify
เว็บสแครปเปอร์อัตโนมัติที่เลือก Actor ที่เหมาะสมที่สุดสำหรับ 55+ แพลตฟอร์ม รวมถึง Instagram, TikTok, YouTube, Facebook, Google Maps และอื่นๆ ครอบคลุม Actor ที่กำหนดค่าไว้ล่วงหน้ากว่า 55 ตัวใน 8 แพลตฟอร์มหลัก พร้อมคำแนะนำการเลือกตามกรณีการใช้งานเฉพาะ (การสร้างลีด, การค้นหาอินฟลูเอนเซอร์, การตรวจสอบแบรนด์, การวิเคราะห์คู่แข่ง, การวิจัยเทรนด์) รองรับรูปแบบเอาต์พุตสามแบบ: การแสดงผลแชทด่วน, การส่งออก CSV หรือการส่งออก JSON พร้อมขีดจำกัดผลลัพธ์ที่ปรับแต่งได้ รวมถึงรูปแบบเวิร์กโฟลว์แบบหลาย Actor สำหรับการทำงานที่ซับซ้อน...