Booking.com Hotels Scraper - Worldwide Search & Categories avatar

Booking.com Hotels Scraper - Worldwide Search & Categories

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Booking.com Hotels Scraper - Worldwide Search & Categories

Booking.com Hotels Scraper - Worldwide Search & Categories

Scrape Booking.com hotel search results for any destination worldwide. Extract names, prices, ratings, locations, room types, and listing links. Filter by property category or leave empty for all types.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

an hour ago

Last modified

Share

Booking.com Hotels Scraper

Scrape Booking.com search results and bounded public hotel details for any destination worldwide — prices, ratings, locations, listing links, hotel identity, and public address leads in structured JSON. Filter by property category, stars, review score, and free cancellation. No Booking partner API required.

Architecture: this Apify Actor is a thin client. Scraping runs on the booking-com Cloud Run worker over HTTPS + API key. Existing output fields are preserved; lead fields are additive.

Worker URL is config, not code: the Actor reads WORKER_BASE_URL from Actor environment variables (plus optional per-run workerBaseUrl). If you migrate the worker to a new host, update WORKER_BASE_URL (and WORKER_AUTH if the API key changes) in Apify Console — no Actor code change required. Set WORKER_PROVIDES_PROXY=1 when the worker supplies its own PROXY_URL instead of Apify RESIDENTIAL.


Need a dedicated scraper for one website?

This Actor is the general tool for protected public pages. If you already have one specific site and a field list, a dedicated scraper is faster and more stable: listing + detail, your export format, delivered to your Apify account or as a standalone runnable client.

I confirm the tier before you pay. The clock starts after that confirmation.

Start here: Submit a custom scraper request

Starter $50Dedicated $100Hard target $200–999
Site1 simple anti-bot public site1 medium anti-bot public siteCloudflare / aggressive anti-bot / custom parser
ScopeFull listing + detail fieldsListing + detail + pagination, your field listAgreed fields, repeatable runs
DeliveryCSV/JSON · Apify Actor or standalone runnable client (script/CLI)Same, plus a sample run and short instructionsFeasibility first, then build
Time24 hours after we confirm the URL is in scope48 hours after confirmationQuoted after feasibility
Fixes30 days for small public-layout changes30 daysScoped in the quote

Hard-target sites are not a 100% uptime promise. You get a dedicated parser that can be re-run on the agreed fields. If the URL is not feasible, you get a refund or pay an assessment fee only — you will know before the build starts.

Not in Starter/Dedicated: login-walled data, native APK / Windows installer / full web apps, or two-year maintenance. Those are a separate quote.


What does this Actor do?

  • Search Booking.com stays for cities, regions, countries, or landmarks worldwide
  • Resolve destinations via Booking autocomplete (dest_id / dest_type) when possible; falls back to free-text ss= search if autocomplete is unavailable
  • Filter by property types (empty = all), stars, min review score, and free cancellation
  • Support children / child ages in the search URL
  • Sort by popularity, price, reviews, stars, or distance
  • Extract hotelId, name, price, total price (when shown), rating, review count, location, room type, and image
  • Enrich a bounded number of public hotel Detail pages with hotel organization and postal address, while preserving honest absence reasons for unavailable contact fields
  • Paginate up to your maxResults limit via a Cloud Run scrape worker with worker-managed acquisition and proxy/egress; never unproxied

Output fields

FieldDescription
sourceAlways booking
hotelIdStable id from URL/card when available (e.g. sg/marina-bay-sands)
nameProperty name
urlBooking.com listing URL
priceNightly / primary displayed price (when available)
totalPriceTotal stay price when visible on the search card
currencyISO currency code
ratingNumeric review score (typically 1–10)
ratingTextRaw rating text from the card
reviewCountNumber of reviews
propertyTypeInferred type (Hotel, Apartment, Hostel, …)
locationNeighborhood / area text
distanceFromCenterDistance-from-center text
imageUrlPrimary card image
roomTypeRecommended unit / room text
amenitiesAmenity labels when present on SERP (often empty)
destination / checkin / checkoutEchoed from the search input when set
scrapedAtISO timestamp

Lead and contact fields

Every dataset item includes the complete lead shape, even when a search row could not be enriched. A missing value is paired with a reason in leadAbsences; the Actor does not silently omit lead keys.

FieldTypeBooking.com meaning
phones[{value, type, e164?}]Public hotel phone numbers found on the measured Detail surface. The accepted Paris random-run sample returned [].
emails[{value, type}]Public hotel email addresses found on Detail. The accepted Paris random-run sample returned [].
address{street, unit, locality, region, postalCode, country, full}Postal address from Detail JSON-LD/visible content. unit is the street or door number. The accepted Paris sample exposed 76 Rue De Clichy, unit 76, and postal code 75009.
geo{lat, lng} or nullCoordinates when the public Detail exposes them. This supplements the address, it does not replace it.
person{name, role?} or nullNamed public hotel contact. No separate person was visible on the measured hotel Detail.
org{name, id?} or nullHotel organization identity, for example Hotel Pilime in the accepted Paris run.
web{website, socials[]}Canonical Booking hotel URL plus public property-level social links, if any. Booking platform support/social links are excluded.
leadSourcestring enumSurface that produced the lead: search, detail, entity, contact, or reveal-xhr. Current Booking enrichment uses search or detail.
leadRevealstring enumHow the lead was exposed: visible, click, xhr, gated, image, or absent. Current measured hotel address and organization are visible.
leadAbsencesobject/mapPer-field reason such as 本站无 for a measured public-surface absence, 闸门锁 for a gate, or 未验证 when Detail enrichment did not complete.

Reveal cost

  • enrichDetails defaults to true and opens at most detailEnrichLimit hotel Detail pages, default 3, maximum 10.
  • The measured Booking hotel addresses and organizations are already visible. No phone, email, or address reveal click/XHR was performed; the accepted fully sampled Paris row returned measured absence reasons for those contact channels.
  • Detail enrichment adds one protected-page acquisition per selected hotel. It increases run time and proxy/browser use, so keep detailEnrichLimit small for routine search runs.
  • Rows beyond the enrichment limit still include all ten lead keys, with 未验证(详情补全未成功) where appropriate.

Honest limitations

  • The accepted latest-build random run exposed hotel organizations and door-number-level postal addresses for all three Paris rows, but no public property phone, email, named person, or property social account on the fully sampled Detail row.
  • geo was not extracted from the accepted Paris sample and is marked 未验证; the populated postal address must not be treated as coordinate proof.
  • Search rows are not evidence that a contact field is absent across Booking.com. If Detail acquisition fails or is not attempted, the row uses 未验证, not 本站无.
  • Partner Support and Booking platform contact/social routes are not hotel leads. The Actor does not log in, open support cases, or attribute platform contacts to a property.

More Actors like this

Looking for another travel / stays scraper, or a specialized Actor outside Booking.com hotels? Use a dedicated Actor when one exists — structured fields, better coverage, usually lower cost. Use this Actor for Booking.com hotel / accommodation search results.

Similar travel & stays Actors

Prefer another specialized scraper?

Jobs & Freelance

E-commerce

Real Estate

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.


How to use

  1. Enter a destination (city, region, country, or landmark — e.g. Tokyo, France, near Times Square)
  2. Set check-in / check-out (YYYY-MM-DD) for accurate prices
  3. Optionally choose property types, stars, review score, sort, language, currency, and proxy country
  4. Click Start — results appear in the Dataset tab
{
"destination": "Tokyo",
"checkin": "2026-08-01",
"checkout": "2026-08-03",
"adults": 2,
"maxResults": 20,
"currency": "USD",
"lang": "en-us",
"proxyCountry": "JP"
}

Example: apartments only in Paris

{
"destination": "Paris",
"checkin": "2026-08-01",
"checkout": "2026-08-05",
"adults": 2,
"propertyTypes": ["apartment"],
"sort": "price",
"maxResults": 30,
"currency": "EUR",
"lang": "en-us",
"proxyCountry": "FR"
}

Example: family stay with filters

{
"destination": "Singapore",
"checkin": "2026-08-01",
"checkout": "2026-08-03",
"adults": 2,
"children": 1,
"childAges": [8],
"stars": [4, 5],
"minReviewScore": 8.0,
"freeCancellation": true,
"propertyTypes": ["hotel"],
"maxResults": 20,
"currency": "SGD",
"proxyCountry": "SG"
}

Leaving propertyTypes empty means all accommodation categories.

Example output

Lead-focused excerpt from accepted random latest-build run bqjEZY7rgqZy2tiHE:

{
"source": "booking",
"hotelId": "fr/hotelauroremontmartre",
"name": "Hotel Pilime",
"url": "https://www.booking.com/hotel/fr/hotelauroremontmartre.en-gb.html",
"phones": [],
"emails": [],
"address": {
"street": "76 Rue De Clichy, 9th arr., 75009 Paris, France",
"unit": "76",
"locality": "76 Rue De Clichy",
"region": "Ile de France",
"postalCode": "75009",
"country": "France",
"full": "76 Rue De Clichy, 9th arr., 75009 Paris, France, 76 Rue De Clichy, Ile de France, 75009, France"
},
"geo": null,
"person": null,
"org": {
"name": "Hotel Pilime",
"id": null
},
"web": {
"website": "https://www.booking.com/hotel/fr/hotelauroremontmartre.en-gb.html",
"socials": []
},
"leadSource": "detail",
"leadReveal": "visible",
"leadAbsences": {
"phones": "本站无(已测公开酒店详情)",
"emails": "本站无(已测公开酒店详情)",
"geo": "未验证(已测详情未提取经纬度)",
"person": "本站无(已测公开酒店详情)",
"web.socials": "本站无(已测 property 级)"
}
}

Input

FieldTypeDefaultNotes
destinationstringSingaporeCity / region / country / landmark
checkin / checkoutstring(empty)YYYY-MM-DD
adultsinteger21–10
childreninteger00–10
childAgesinteger[][]Ages 0–17; padded to children
roomsinteger11–10
maxResultsinteger501–500
currencystringUSDISO code + cur_curr cookie
langstringen-usUI language tag
sortenumpopularitypopularity, price, review_score, …
propertyTypesstring[][]Empty = all categories
starsinteger[][]1–5 → class= filters
minReviewScorenumber(null)0–10 → review_score= tenths
freeCancellationbooleanfalseoos=1
destId / destTypestring(empty)Skip autocomplete when both set
customNfltFiltersstring[][]Raw nflt fragments
detailUrlsURL[][]Optional genuine Booking /hotel/... Detail URLs; skips destination search and requires enrichDetails=true
enrichDetailsbooleantrueFetch bounded public hotel Detail pages for lead enrichment
detailEnrichLimitinteger3Maximum Detail pages to enrich, 1–10
proxyCountrystring(empty)RESIDENTIAL country (default US)
proxyobject(none)Optional Apify proxy editor

Supported property types

hotel, apartment, hostel, motel, resort, bed_and_breakfast, villa, guesthouse, holiday_home, aparthotel, lodge, homestay, country_house, capsule_hotel, campground, inn, ryokan, riad, chalet, holiday_park, tent, love_hotel, pension

Limits & notes

  • Bounded Detail enrichmentenrichDetails=true enriches at most detailEnrichLimit rows; remaining rows keep the complete lead shape with honest absence reasons
  • Autocomplete — tries API + UI suggestion fallback; if both fail, search continues with free-text ss= (destSource:query_only in warnings)
  • Proxy required — proxy/egress is supplied by the worker; the Actor does not fall back to direct/unproxied browsing
  • Anti-bot — the production worker uses its configured acquisition chain (the accepted run used geonode-extract); unresolved challenge responses fail the page/attempt

Diagnostics

Each run writes:

  • INPUT_ECHO — sanitized input including resolved destId/destType and nflt
  • RUN_SUMMARY — status, counters, field completeness, warnings (destSource:…, proxy mode, etc.)
  • ERROR_SUMMARY — written only on hard failures

Statuses: ok | partial | blocked.

Pricing

This Actor uses pay-per-event pricing. Platform usage costs are included — you do not pay separate Apify compute on top of the event prices below (User pays platform usage costs: No).

EventPrice
Actor Start (apify-actor-start)$0.005 per start
Result (apify-default-dataset-item)$2.00 / 1,000 listings ($0.002 each)

Every hotel listing written to the default dataset is billed as one result.

Store discount tiers

Tier$/1,000per result
FREE*$2.000$0.002
BRONZE$2.000$0.002
SILVER$2.000$0.002
GOLD$1.500$0.0015
PLATINUM$1.500$0.0015
DIAMOND$1.500$0.0015

*FREE is the list price before any Store volume discount. GOLD, PLATINUM, and DIAMOND pay $1.50 / 1,000.

Example cost estimates

ListingsApprox. event cost*
100~$0.205
1,000~$2.005
10,000~$20.005

*Assumes one Actor start plus $0.002 per Dataset item (FREE/BRONZE/SILVER). Exact start billing can scale with allocated memory (one start event per GB, minimum one). This Actor defaults to 512 MB, so a typical run is one start event.

This price change is scheduled for 2026-10-03 14:24 UTC (22:24 CST). Until then, the Store pricing panel is the live bill.

Free Apify plan limits (set by this Actor's developer)

LimitFree Apify planPaid Apify plan
Runs of this Actor10 runs totalUnlimited
Results per run (maxResults)Up to 500Up to 500

When the run cap is hit, the run finishes with a clear status message — not an Apify platform error. Paying Apify users are not subject to the run cap.

FAQ

Can I search any country?
Yes. Enter a city, region, or country name. The Actor tries Booking autocomplete for dest_id; if that fails it still searches with the destination text. Inventory is global on www.booking.com.

What does empty propertyTypes mean?
All categories — hotels, apartments, hostels, and other accommodation types shown on the SERP.

Do I need a Booking.com account?
No.

Are amenities always filled?
No. Amenities are primarily card-level fields and are often absent on SERP cards. Detail enrichment currently focuses on the public hotel identity, address, geo, and contact lead shape rather than a full amenities catalog.

Why did my free-plan run stop after 10 runs?
Free Apify plan users get 10 runs of this Actor and up to 500 results per run. These limits are set by the Actor developer (not Apify). When you hit the run cap, the run finishes with a clear status message — it is not a platform bug. Upgrade to a paid Apify plan for unlimited runs.

All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.

Jobs & Freelance

Real Estate

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ Browse the full profile: apify.com/lentic_clockss