Booking Scraper avatar

Booking Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Booking Scraper

Booking Scraper

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

ScraperX

ScraperX

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

11 days ago

Last modified

Share

Booking.com Scraper — Hotels, Prices, Rooms, Ratings & Trader Contact Data

Extract structured accommodation data from Booking.com — hotels, apartments, hostels, villas, resorts and more. Search by destination or paste your own Booking.com URLs, then get back a clean dataset with prices, star ratings, guest scores, room types, facilities, photos, coordinates and the property's official trader information (company name, e-mail and phone).

No account, no API key, no cookies. Just a destination and a click.


What you get

🏨 Property data💰 Pricing & availability🧾 Business / trader data
Name, type, descriptionNightly price in your chosen currencyLegal company name
Star rating & guest ratingPrices for your exact check-in/check-out datesContact e-mail & phone
Review count & category scoresBreakfast included flagRegistration & trade-register numbers
Full address + lat/lngCheck-in / check-out time windowsRegistered business address
Up to 50 gallery photosPrice-range filteringHost info & licence info
Room types with size, occupancy, priceCurrency selection (11 currencies)Hotel chain
Facilities list & property highlightsFlexible-date search (±1–7 days)Breadcrumb category path

Key features

  • Two ways in. Type a destination (Paris, New York, Bali) or paste Start URLs — Booking.com search-result pages or individual hotel detail pages. Mix and match in one run.
  • Real Booking.com filters. Property type, star count, minimum guest rating, price range, sort order (price, review score, star rating, distance) — applied to the search, not filtered after the fact.
  • Date-aware pricing. Provide check-in and check-out dates and the Actor returns the live price for that stay, for your chosen number of rooms, adults and children. Dates can be absolute (2026-09-14) or relative (2 weeks).
  • Flexible dates. Allow the stay to shift by up to 7 days to catch cheaper availability.
  • Deep property data on demand. With Scrape additional hotel data enabled (the default), each property is opened and enriched with room types, facilities, full photo galleries, per-room images, category review scores, fine print and trader details.
  • Trader / business contact data. Booking.com publishes trader disclosure for professional hosts — company name, e-mail, phone, registration number and registered address. The Actor returns it in a structured traderInfo object, which makes this genuinely useful for travel-industry lead generation.
  • 12 interface languages, 11 currencies. Get titles, descriptions and prices in the market you actually care about.
  • Smart proxy escalation. Runs direct by default; if Booking.com pushes back it automatically escalates to datacenter and then residential proxies, so you are not paying for residential traffic you did not need.

Use cases

  • Hotel price monitoring & revenue management — track your own and competitors' nightly rates for specific dates and react to the market.
  • Competitive set analysis — pull every 4-star property within a destination and compare ratings, facilities and price positioning.
  • Travel agency & OTA feeds — build or refresh an inventory database with descriptions, photos, room types and coordinates.
  • Lead generation for travel-tech / hospitality suppliers — use traderInfo to reach property operators with a verified company name, e-mail and phone.
  • Market research & investment analysis — measure supply, average rating and price levels by city, district or property type.
  • Content & SEO projects — populate destination guides with real property data, images and guest sentiment.
  • Academic and data-science datasets — export thousands of normalised accommodation records to CSV or Excel.

How it works

  1. You choose an entry point — a destination string or a list of Booking.com URLs.
  2. The Actor builds the search with your language, currency, dates, occupancy and filters encoded exactly as Booking.com expects them.
  3. Result pages are walked until your maxItems target for that destination or URL is reached.
  4. Each property page is opened (when Scrape additional hotel data is on) and the embedded page state, GraphQL payloads and JSON-LD block are parsed into one flat, predictable record.
  5. Rows are pushed to the dataset as they are extracted, so you can start downloading before the run finishes.

Quick start

  1. Open the Actor and type a city into Destination — e.g. Barcelona.
  2. Set Max results per destination — start with 10–20 while you check the output.
  3. (Optional) Add Check-in and Check-out dates to get real prices for that stay.
  4. Click Start, then export the Output tab as CSV, Excel or JSON.

Minimal input

{
"search": "Barcelona",
"maxItems": 20
}

Input configuration

Nothing is strictly required — the Actor ships with working defaults.

FieldTypeDefaultDescription
searchstringNew YorkCity, region or landmark to search for accommodation.
startUrlsarray[]Booking.com URLs instead of (or alongside) a destination — search-result pages or hotel detail pages.
maxItemsinteger10Maximum properties per destination or per start URL.
scrapeAdditionalHotelDatabooleantrueOpen each property to add rooms, facilities, images, category scores and trader info. Turn off for a faster, lighter listing-level export.

Filters

FieldTypeDefaultDescription
propertyTypestringnonehotels, apartments, hostels, guest houses, homestays, bed and breakfasts, holiday homes, boats, villas, motels, resorts, holiday parks, campsites, luxury tents.
sortBystringdistance_from_searchprice, review_score_and_price, review_score, star_rating, distance_from_search.
minimumRatingstringMinimum guest score, e.g. 7, 8, 9.
starsCountFilterstringany15 or any.
minMaxPricestring0-999999Price band, e.g. 50-200, or 100+ for a minimum only.

Stay details

FieldTypeDefaultDescription
checkInstringYYYY-MM-DD or relative (2 weeks). Leave empty for a flexible search.
checkOutstringYYYY-MM-DD or relative (1 week).
flexWindowstring0Allow dates to shift by 0, 1, 2, 3 or 7 days.
roomsinteger1Number of rooms.
adultsinteger2Number of adults.
childreninteger0Number of children.

Localisation & run options

FieldTypeDefaultDescription
currencystringUSDUSD, EUR, GBP, CAD, AUD, CHF, JPY, CNY, INR, BRL, MXN.
languagestringen-gben-gb, en-us, de, fr, es, it, pt-br, nl, pl, ru, ja, zh.
proxyConfigurationobjectno proxyOptional. If Booking.com blocks the run, the Actor falls back to datacenter and then residential proxies automatically.

Prices need dates. Without checkIn / checkOut, Booking.com shows a flexible search and the price field may be empty for some properties. Add dates whenever price accuracy matters.


Output data

One row per property.

FieldTypeDescription
ordernumberPosition in the result set.
urlstringBooking.com property URL.
startUrlOrQuerystringWhich destination or start URL produced this row.
name, typestringProperty name and accommodation type.
descriptionstringProperty description.
starsnumberOfficial star rating.
price, currencynumber / stringPrice for the requested stay, in the selected currency.
rating, ratingLabel, reviewsnumber / stringGuest score, its label (e.g. Very good) and review count.
categoryReviewsarrayPer-category scores: { name, score } (cleanliness, staff, location…).
breakfaststring / boolBreakfast information from the listing.
checkIn, checkOutstringProperty check-in / check-out time windows.
checkInDate, checkOutDatestringThe stay dates used for the run.
locationobject{ lat, lng }.
addressobject{ full, city, country }.
image, imagesstring / arrayMain photo and up to 50 gallery photos.
roomsarray{ id, name, description, size, occupancy, price } per room type.
roomImagesarray{ roomId, images[] }.
facilitiesarray{ name, id } for every listed facility.
highlights, policies, finePrintarray / stringProperty highlights, key policies and fine print.
hotelChainstringChain or brand, when the property belongs to one.
hotelIdstringBooking.com property ID.
hostInfo, licenseInfoobjectHost details and licence/registration information where published.
traderInfoobject{ isBusiness, companyName, email, phone, firstName, middleName, lastName, registrationNumber, tradeRegisterName, address { street, postalCode, city, state, countryCode } }.
breadcrumbsarray{ name, url } category path.
timeOfScrapeISOstringWhen the record was collected.

Example output

{
"order": 1,
"url": "https://www.booking.com/hotel/es/example-barcelona.html",
"name": "Example Hotel Barcelona",
"type": "hotel",
"stars": 4,
"price": 186,
"currency": "EUR",
"rating": 8.7,
"ratingLabel": "Fabulous",
"reviews": 3421,
"categoryReviews": [
{ "name": "Cleanliness", "score": 9.1 },
{ "name": "Location", "score": 9.4 }
],
"checkInDate": "2026-09-14",
"checkOutDate": "2026-09-17",
"location": { "lat": 41.3874, "lng": 2.1686 },
"address": { "full": "Carrer d'Example 12", "city": "Barcelona", "country": "ES" },
"rooms": [
{ "id": "1234501", "name": "Double Room", "size": "18 m²", "occupancy": 2, "price": 186 }
],
"facilities": [{ "name": "Free WiFi", "id": "107" }, { "name": "Rooftop pool", "id": "433" }],
"traderInfo": {
"isBusiness": true,
"companyName": "Example Hoteles S.L.",
"email": "reservas@example-hotel.es",
"phone": "+34 933 000 000",
"address": { "city": "Barcelona", "countryCode": "ES" }
},
"hotelId": "example-barcelona",
"images": ["https://cf.bstatic.com/…"],
"timeOfScrapeISO": "2026-08-10T09:22:41Z"
}

Illustrative values — a live run returns current Booking.com data.


Usage examples

Cheapest 4-star hotels in Rome for a specific weekend

{
"search": "Rome",
"maxItems": 100,
"starsCountFilter": "4",
"sortBy": "price",
"checkIn": "2026-10-03",
"checkOut": "2026-10-05",
"adults": 2,
"currency": "EUR",
"language": "en-gb"
}

Family apartments with a good score and a price ceiling

{
"search": "Lisbon",
"propertyType": "apartments",
"minimumRating": "8",
"minMaxPrice": "60-180",
"rooms": 1,
"adults": 2,
"children": 2,
"maxItems": 50
}

Lead list of professional hosts in a destination

{
"search": "Dubai",
"maxItems": 200,
"scrapeAdditionalHotelData": true
}

Export, then keep rows where traderInfo.isBusiness is true and traderInfo.email is not empty.

Track specific properties over time

{
"startUrls": [
"https://www.booking.com/hotel/gb/example-london.html",
"https://www.booking.com/hotel/fr/example-paris.html"
],
"checkIn": "2 weeks",
"checkOut": "3 weeks",
"currency": "GBP"
}

Save this as a Task and attach a daily Schedule for a rolling rate tracker.


Run it from your own code

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraperx/booking-scraper").call(run_input={
"search": "Barcelona",
"maxItems": 50,
"checkIn": "2026-09-14",
"checkOut": "2026-09-17",
"currency": "EUR",
})
for hotel in client.dataset(run["defaultDatasetId"]).iterate_items():
print(hotel["name"], hotel.get("price"), hotel.get("rating"))

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });
const run = await client.actor('scraperx/booking-scraper').call({
search: 'Barcelona',
maxItems: 50,
checkIn: '2026-09-14',
checkOut: '2026-09-17',
currency: 'EUR',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL

curl -X POST "https://api.apify.com/v2/acts/scraperx~booking-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"search":"Barcelona","maxItems":50}'

Integrations

Push results into Google Sheets, Airtable, Slack, Make, Zapier, Google Drive or any HTTP endpoint through webhooks, and use Schedules for automatic daily or weekly refreshes.


Pricing

The Actor uses Apify's pay-per-event model — a small Actor-start charge plus a charge per property row delivered. You pay for the data you receive, not for unpredictable compute time. Current rates are shown on the Pricing tab of this Actor's page, and Apify displays an estimate before and during every run. Free Apify accounts include monthly credit that is enough to test it end to end.


Limits & good to know

  • Prices depend on dates. Flexible searches (no dates) show indicative or missing prices — that is how Booking.com works, not an Actor limitation.
  • maxItems is per destination or per start URL, so three URLs at maxItems: 100 can return up to 300 rows.
  • scrapeAdditionalHotelData is the expensive part. Turning it off gives a much faster listing-level export when you only need name, price and rating.
  • Trader data is not universal. Booking.com only publishes trader disclosure for professional hosts, mainly in the EU. Private hosts return empty traderInfo fields.
  • Galleries are capped at 50 images per property to keep dataset rows manageable.
  • Default run options are 4 GB memory and a 1-hour timeout — raise the timeout for large destination sweeps.

FAQ

Do I need a Booking.com account or cookies? No. Only publicly visible pages are read.

Can I scrape a specific hotel instead of a whole city? Yes — paste the hotel's Booking.com URL into startUrls.

Can I get room-level prices? Yes. With additional hotel data enabled, each row includes a rooms array with names, sizes, occupancy and prices for the requested stay.

Are guest reviews included? Aggregate data is: overall rating, rating label, review count and per-category scores. Individual review texts are not part of this Actor's output.

Which currencies and languages are supported? 11 currencies (USD, EUR, GBP, CAD, AUD, CHF, JPY, CNY, INR, BRL, MXN) and 12 interface languages.

What if Booking.com blocks the run? The Actor detects it and escalates automatically to datacenter and then residential proxies. You can also preset a proxy configuration yourself.

In which formats can I export? JSON, CSV, Excel (XLSX), XML and RSS — from the UI or via the API.


This Actor collects only publicly available information from Booking.com — the same content any visitor can see. It does not log in, bypass paywalls or access private data. Trader contact details are published by Booking.com as part of statutory business disclosure; if you use them for outreach, ensure you comply with GDPR, ePrivacy and local marketing rules. You are responsible for how the exported data is used.

Support

Need an extra field, hit a bug, or want a custom variant? Open an issue on the Issues tab.