Booking.com Hotel Scraper
Pricing
from $2.50 / 1,000 scraped place results
Booking.com Hotel Scraper
Extract hotel names, nightly prices, guest ratings, room types, taxes and fees, and photo URLs from Booking.com search results and hotel pages. Search by destination and dates, monitor rates on a schedule, and export to JSON, CSV, or Excel. No Booking.com account needed.
π¨ What does Booking.com Hotel Scraper do?
Booking.com Hotel Scraper extracts hotel names, nightly prices, guest ratings, room types, taxes and fees, and photo URLs from Booking.com search results and individual hotel pages. Give it a destination like "Paris" plus your check-in and check-out dates, and it returns the hotels Booking.com shows for that search, priced for those exact dates, guests, and currency.
Use it to build hotel price monitoring pipelines, run travel market research, feed rate comparison dashboards, or collect hotel inventory data for a city without copying listings by hand. It works on public pages only: no Booking.com account, no login, no personal data.
π§³ What data can I scrape from Booking.com?
| π¨ Hotel names and direct hotel URLs | π΅ Nightly prices for your exact dates |
| βοΈ Guest rating scores | π§Ύ Taxes and fees as a separate line |
| π Room names and unit descriptions | π± Prices in the currency you choose |
| π Check-in / check-out dates used for pricing | π Hotel photo URLs |
| π’ Result rank within the search | π Address, city, and coordinates when the page provides them |
π― Use cases
- Hotel rate monitoring: track how competitor prices move across dates and seasons
- Travel market research: compare average nightly rates between cities or districts
- Price comparison products: feed live hotel prices into your own app or dashboard
- Revenue management: see where your property ranks in search results and how it is priced against neighbors
- Tourism research: build datasets of hotel supply, ratings, and pricing for a region
β¬οΈ How to use
- Open the actor in Apify Console and click Try for free.
- Type a destination into Location query (for example
Paris). Alternatively, paste one or more full Booking.com search URLs into Booking.com search URLs, or direct hotel page URLs into Booking.com hotel URLs. - Set Check-in date and Check-out date in
YYYY-MM-DDformat, plus the number of Adults and Rooms. - Optionally set Currency (for example
USD) and Language (for exampleen-us). - Keep Use Apify Proxy enabled and add
RESIDENTIALto Proxy groups. - Click Start. When the run finishes, open the Output tab for a clean hotel table, or download everything from the Dataset tab as JSON, CSV, Excel, or XML.
π‘ Tips for scraping hotels on Booking.com
1οΈβ£ Always provide check-in and check-out dates. Booking.com only shows complete room and pricing info when dates are set β without them you get listings but thinner pricing data. Prices returned match your exact dates, guest count, and currency.
2οΈβ£ Use locationQuery as your primary input. It builds a clean search URL that parses reliably. Pasted search URLs work too, but Booking.com serves some URL variants with a layout that carries no listing data.
3οΈβ£ Split big cities into districts for more coverage. One search returns the first result page (~25 hotels). "Paris Le Marais", "Paris Montmartre", and "Paris Latin Quarter" as separate runs cover far more of the city than one generic "Paris" search.
4οΈβ£ Keep residential proxy on. Booking.com fronts its pages with an AWS WAF JavaScript challenge that blocks most datacenter IPs. The actor runs a real browser to solve it, and residential IPs pass far more reliably.
Example input
{"locationQuery": "Paris","checkInDate": "2026-08-20","checkOutDate": "2026-08-22","adults": 2,"rooms": 1,"maxResults": 25,"currency": "USD","language": "en-us","useApifyProxy": true,"proxyGroups": ["RESIDENTIAL"]}
βοΈ Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchUrls | array | [] | Full Booking.com search result URLs to scrape. Use public URLs only. |
hotelUrls | array | [] | Direct public Booking.com hotel page URLs to scrape. |
locationQuery | string | β | Destination name used to build a Booking.com search URL when no search URL is supplied. |
checkInDate | string | β | Check-in date in YYYY-MM-DD format. |
checkOutDate | string | β | Check-out date in YYYY-MM-DD format. |
adults | integer | 2 | Number of adult guests (1β30). |
rooms | integer | 1 | Number of rooms (1β30). |
maxResults | integer | 50 | Maximum number of hotel records to emit (1β500). |
currency | string | β | Currency code to request, for example USD or EUR. |
language | string | β | Language/locale to request, for example en-us. |
requestTimeoutSecs | integer | 30 | Timeout for each page request in seconds (5β120). |
useApifyProxy | boolean | true | Route requests through Apify Proxy. Keep this on. |
proxyGroups | array | [] | Proxy groups to use, for example ["RESIDENTIAL"] (recommended). |
At least one of searchUrls, hotelUrls, or locationQuery is required.
β¬οΈ Output example
Results appear in the Output tab as a sortable hotel table, and in the Dataset tab for export. Each hotel looks like this (taken from a real run for Paris, 20β22 August 2026):
{"searchUrl": "https://www.booking.com/searchresults.html?ss=Paris&group_adults=2&no_rooms=1&checkin=2026-08-20&checkout=2026-08-22&selected_currency=USD&lang=en-us","hotelUrl": "https://www.booking.com/hotel/fr/appart-39-odalys-paris-xvii.html?checkin=2026-08-20&checkout=2026-08-22&group_adults=2&no_rooms=1","hotelName": "Appart'hΓ΄tel Odalys City - Paris XVII","rating": "7.7","price": "158","currency": "USD","taxesAndFees": "+US$25 taxes and fees","roomName": "Standard Studio (2 Adults) Entire studio - 1 bathroom - 1 kitchen - 22 m2","checkInDate": "2026-08-20","checkOutDate": "2026-08-22","adults": "2","rank": "2","imageUrls": "[\"https://cf.bstatic.com/xdata/images/hotel/square240/759499775.webp\"]","scrapedAt": "2026-07-10T20:21:05.242338+00:00"}
Fields like address, city, amenities, and description are included when the page variant Booking.com serves contains them; otherwise they stay empty rather than being filled with guesses. The actor never emits fake rows: if a page is blocked or has no listing data, it records the failure in the run summary instead of inventing results.
π° How much does it cost to scrape Booking.com?
Based on a measured cloud run, scraping 1,000 hotel results uses about 0.74 compute units, roughly $0.30 of platform usage on the Apify Starter plan ($0.40 per CU).
Residential proxy bandwidth is the larger share: the same measured run used about 0.27 GB per 1,000 results, roughly $2.20 at the standard $8/GB residential rate. All in, plan for around $2.50 per 1,000 hotel results. Small runs cost proportionally: a 25-hotel test run consumed about $0.06 total, so the free plan's monthly credit is plenty for testing and small extractions.
βοΈ Need reviews, not listings?
This actor focuses on hotel inventory and pricing. If you need guest review text and ratings, pair it with Tripadvisor Reviews Scraper β it extracts full review text, ratings, dates, reviewer profiles, and owner responses for hotels, restaurants, and attractions.
β FAQ
Do I need a Booking.com account?
No. The actor scrapes public pages without authentication of any kind.
Why do I need a residential proxy?
Booking.com protects its pages with a JavaScript bot challenge that blocks most datacenter IPs outright. The actor runs a real browser to pass the challenge, and residential IPs pass it far more reliably. Set proxyGroups to ["RESIDENTIAL"] for consistent results.
How many hotels does one search return?
One search URL returns the first page of results, which is around 25 hotels. To cover more of a city, add several more specific searches: by district, neighborhood, or landmark. Each runs as its own search URL and the results land in the same dataset.
What export formats are supported?
Everything the Apify platform offers: JSON, CSV, Excel (XLSX), XML, and RSS. Download from the Dataset tab in the Console or fetch programmatically through the Apify API.
Can I integrate Booking.com Hotel Scraper with other apps?
Yes. Through Apify integrations it connects to Zapier, Make, Slack, Google Sheets, Google Drive, GitHub, LangChain, and more. You can also use webhooks to trigger an action whenever a run finishes β for example, append fresh prices to a spreadsheet every morning.
Can I run it on a schedule or call it from my code?
Yes. Use Apify Schedules to run it daily or weekly, which is the usual setup for price monitoring. You can also start runs and fetch results via the Apify REST API or the JavaScript and Python clients β see the API tab on this page for ready-made code examples.
Why did my run return no results?
The most common cause is running without residential proxy, in which case Booking.com serves a bot challenge instead of listings. Check the run log and the OUTPUT record in the key-value store: the actor documents exactly which URLs were blocked and why. Retrying with "proxyGroups": ["RESIDENTIAL"] resolves the vast majority of empty runs.
Are the prices accurate?
Prices are read from the same public page a visitor sees for your exact dates, guest count, and currency, including the separate taxes-and-fees line. They reflect the moment of the scrape; Booking.com adjusts prices frequently, which is exactly why scheduled monitoring runs are useful.
π Related actors
- Tripadvisor Reviews Scraper β extract hotel and restaurant review text, ratings, and reviewer profiles
- Airbnb Listings Scraper β extract Airbnb listings, prices, and ratings for the same destinations
- Google Maps Scraper β scrape hotels, restaurants, and other places with reviews and contact details from Google Maps
- Shopify Products Scraper β extract product catalogs and prices from any Shopify store