Booking Scraper
Pricing
from $3.99 / 1,000 results
Booking Scraper
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperX
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
11 days ago
Last modified
Categories
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, description | Nightly price in your chosen currency | Legal company name |
| Star rating & guest rating | Prices for your exact check-in/check-out dates | Contact e-mail & phone |
| Review count & category scores | Breakfast included flag | Registration & trade-register numbers |
| Full address + lat/lng | Check-in / check-out time windows | Registered business address |
| Up to 50 gallery photos | Price-range filtering | Host info & licence info |
| Room types with size, occupancy, price | Currency selection (11 currencies) | Hotel chain |
| Facilities list & property highlights | Flexible-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
traderInfoobject, 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
traderInfoto 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
- You choose an entry point — a destination string or a list of Booking.com URLs.
- The Actor builds the search with your language, currency, dates, occupancy and filters encoded exactly as Booking.com expects them.
- Result pages are walked until your
maxItemstarget for that destination or URL is reached. - 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.
- Rows are pushed to the dataset as they are extracted, so you can start downloading before the run finishes.
Quick start
- Open the Actor and type a city into Destination — e.g.
Barcelona. - Set Max results per destination — start with 10–20 while you check the output.
- (Optional) Add Check-in and Check-out dates to get real prices for that stay.
- 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.
Where to search
| Field | Type | Default | Description |
|---|---|---|---|
search | string | New York | City, region or landmark to search for accommodation. |
startUrls | array | [] | Booking.com URLs instead of (or alongside) a destination — search-result pages or hotel detail pages. |
maxItems | integer | 10 | Maximum properties per destination or per start URL. |
scrapeAdditionalHotelData | boolean | true | Open each property to add rooms, facilities, images, category scores and trader info. Turn off for a faster, lighter listing-level export. |
Filters
| Field | Type | Default | Description |
|---|---|---|---|
propertyType | string | none | hotels, apartments, hostels, guest houses, homestays, bed and breakfasts, holiday homes, boats, villas, motels, resorts, holiday parks, campsites, luxury tents. |
sortBy | string | distance_from_search | price, review_score_and_price, review_score, star_rating, distance_from_search. |
minimumRating | string | — | Minimum guest score, e.g. 7, 8, 9. |
starsCountFilter | string | any | 1–5 or any. |
minMaxPrice | string | 0-999999 | Price band, e.g. 50-200, or 100+ for a minimum only. |
Stay details
| Field | Type | Default | Description |
|---|---|---|---|
checkIn | string | — | YYYY-MM-DD or relative (2 weeks). Leave empty for a flexible search. |
checkOut | string | — | YYYY-MM-DD or relative (1 week). |
flexWindow | string | 0 | Allow dates to shift by 0, 1, 2, 3 or 7 days. |
rooms | integer | 1 | Number of rooms. |
adults | integer | 2 | Number of adults. |
children | integer | 0 | Number of children. |
Localisation & run options
| Field | Type | Default | Description |
|---|---|---|---|
currency | string | USD | USD, EUR, GBP, CAD, AUD, CHF, JPY, CNY, INR, BRL, MXN. |
language | string | en-gb | en-gb, en-us, de, fr, es, it, pt-br, nl, pl, ru, ja, zh. |
proxyConfiguration | object | no proxy | Optional. 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 thepricefield may be empty for some properties. Add dates whenever price accuracy matters.
Output data
One row per property.
| Field | Type | Description |
|---|---|---|
order | number | Position in the result set. |
url | string | Booking.com property URL. |
startUrlOrQuery | string | Which destination or start URL produced this row. |
name, type | string | Property name and accommodation type. |
description | string | Property description. |
stars | number | Official star rating. |
price, currency | number / string | Price for the requested stay, in the selected currency. |
rating, ratingLabel, reviews | number / string | Guest score, its label (e.g. Very good) and review count. |
categoryReviews | array | Per-category scores: { name, score } (cleanliness, staff, location…). |
breakfast | string / bool | Breakfast information from the listing. |
checkIn, checkOut | string | Property check-in / check-out time windows. |
checkInDate, checkOutDate | string | The stay dates used for the run. |
location | object | { lat, lng }. |
address | object | { full, city, country }. |
image, images | string / array | Main photo and up to 50 gallery photos. |
rooms | array | { id, name, description, size, occupancy, price } per room type. |
roomImages | array | { roomId, images[] }. |
facilities | array | { name, id } for every listed facility. |
highlights, policies, finePrint | array / string | Property highlights, key policies and fine print. |
hotelChain | string | Chain or brand, when the property belongs to one. |
hotelId | string | Booking.com property ID. |
hostInfo, licenseInfo | object | Host details and licence/registration information where published. |
traderInfo | object | { isBusiness, companyName, email, phone, firstName, middleName, lastName, registrationNumber, tradeRegisterName, address { street, postalCode, city, state, countryCode } }. |
breadcrumbs | array | { name, url } category path. |
timeOfScrapeISO | string | When 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 ApifyClientclient = 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.
maxItemsis per destination or per start URL, so three URLs atmaxItems: 100can return up to 300 rows.scrapeAdditionalHotelDatais 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
traderInfofields. - 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.
Legal & responsible use
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.