Booking.com Scraper
Pricing
Pay per event
Booking.com Scraper
Extract hotel and accommodation data from Booking.com search results. Get prices, ratings, reviews, room types, photos, and availability for any location worldwide. Handles anti-bot protection automatically. Export to JSON, CSV, Excel, or connect via API.
Pricing
Pay per event
Rating
0.0
(0)
Developer

Stas Persiianenko
Actor stats
0
Bookmarked
5
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
What does Booking.com Scraper do?
Booking.com Scraper extracts hotel and accommodation data from Booking.com search results. Enter a city or region, set your travel dates and guest count, and get structured data on prices, ratings, reviews, room types, and availability -- exported as JSON, CSV, or Excel. No Booking.com account required.
It uses a real browser (Playwright) to load search results, which means it handles Booking.com's AWS WAF anti-bot protection reliably. Pagination is handled automatically -- the scraper follows result pages until your maxResults limit is reached or all results are collected.
Use cases
- Travel price monitoring -- track hotel prices in a destination over time to find the best booking window
- Competitor analysis for hoteliers -- compare your property's pricing and review scores against nearby competitors
- Market research -- analyze hotel supply, pricing tiers, and review distributions across cities or regions
- Lead generation for travel agencies -- build lists of hotels with contact pages, locations, and ratings
- Aggregator data feeds -- power a travel comparison site or internal dashboard with fresh Booking.com data
Why use Booking.com Scraper?
- Handles anti-bot protection -- uses Playwright with residential proxies to bypass Booking.com's AWS WAF, where simple HTTP scrapers fail
- 20+ data fields per hotel -- prices, review scores, star ratings, room types, cancellation policy, breakfast, photos, and more
- Automatic pagination -- scrapes across multiple result pages without manual intervention
- Flexible search filters -- set dates, guests, rooms, price range, star rating, sort order, currency, and language
- Pay per result -- no monthly subscription, you only pay for the hotel results you actually scrape
- Clean, flat output -- every field is a primitive type (string, number, boolean), ready for spreadsheets and databases
What data can you extract from Booking.com?
Each hotel result includes up to 20 structured fields:
| Field | Type | Description |
|---|---|---|
| name | string | Hotel or property name |
| url | string | Direct Booking.com URL (tracking params removed) |
| hotelId | number | Booking.com internal hotel ID |
| location | string | Neighborhood and city |
| starRating | number | Star rating (1-5) |
| reviewScore | number | Guest review score (0-10) |
| reviewCount | number | Total number of guest reviews |
| reviewScoreWord | string | Rating label (e.g., "Excellent", "Very Good") |
| price | number | Total price for the stay |
| pricePerNight | number | Price per night |
| currency | string | Currency code (USD, EUR, GBP, etc.) |
| roomType | string | Recommended room/unit type |
| freeCancellation | boolean | Whether free cancellation is available |
| breakfastIncluded | boolean | Whether breakfast is included |
| photoUrl | string | Hotel photo URL |
| propertyType | string | Property type (Hotel, Apartment, etc.) |
| checkin | string | Check-in date (YYYY-MM-DD) |
| checkout | string | Check-out date (YYYY-MM-DD) |
| distanceFromCenter | string | Distance from city center |
| scrapedAt | string | ISO 8601 timestamp of when the data was collected |
How much does it cost to scrape Booking.com?
This Actor uses pay-per-event pricing -- you pay only for what you scrape. No monthly subscription. All platform costs (compute, proxy, storage) are included.
| Event | Cost |
|---|---|
| Actor start | $0.05 per run |
| Per hotel result | $0.005 per hotel |
Real-world cost examples:
| Search | Results | Estimated cost |
|---|---|---|
| London, 10 hotels | 10 | ~$0.10 |
| Paris, 30 hotels | 30 | ~$0.20 |
| New York, 75 hotels | 75 | ~$0.43 |
| Tokyo, 100 hotels | 100 | ~$0.55 |
Cost includes all platform compute, residential proxy, and storage. Browser-based scraping uses more compute than HTTP scrapers, but it actually works against Booking.com's anti-bot defenses.
How to scrape Booking.com hotels
- Go to the Booking.com Scraper input page on Apify Console
- Enter a Location -- any city, region, or country (e.g., "London", "Paris, France", "Tokyo")
- Optionally set Check-in and Check-out dates (defaults to tomorrow + 2 nights)
- Adjust Adults, Rooms, and Children if needed
- Set Max results to control how many hotels to scrape
- Click Start and wait for results
Example input:
{"locationQuery": "London","checkin": "2026-04-01","checkout": "2026-04-03","adults": 2,"rooms": 1,"maxResults": 50,"sortBy": "popularity","currency": "USD"}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| locationQuery | string | (required) | City, region, or country to search (e.g., "London", "Paris, France") |
| checkin | string | tomorrow | Check-in date in YYYY-MM-DD format |
| checkout | string | checkin + 2 days | 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) |
| children | integer | 0 | Number of children (0-10) |
| maxResults | integer | 100 | Maximum number of hotels to return. 0 = unlimited |
| sortBy | enum | popularity | Sort order: popularity, price, bayesian_review_score, class, distance |
| currency | string | USD | Currency code for prices (USD, EUR, GBP, etc.) |
| language | string | en-us | Language code for results (en-us, de, fr, es, it, ja, zh-cn, etc.) |
| minPrice | integer | -- | Minimum price per night filter |
| maxPrice | integer | -- | Maximum price per night filter |
| starsFilter | string[] | -- | Filter by star rating (e.g., ["4", "5"] for 4- and 5-star hotels only) |
Output example
{"name": "citizenM London Shoreditch","url": "https://www.booking.com/hotel/gb/citizenm-london-shoreditch.html","hotelId": 189710206,"location": "Hackney, London","starRating": null,"reviewScore": 8.7,"reviewCount": 3356,"reviewScoreWord": "Excellent","price": 224,"pricePerNight": 112,"currency": "USD","roomType": null,"freeCancellation": false,"breakfastIncluded": false,"photoUrl": "https://cf.bstatic.com/xdata/images/hotel/square240/772469398.webp?k=...","propertyType": null,"checkin": "2026-04-01","checkout": "2026-04-03","distanceFromCenter": "2.4 miles from downtown","scrapedAt": "2026-03-05T00:40:43.148Z"}
Tips for best results
- Start small -- test with
maxResults: 10before running large scrapes to verify your search returns what you expect - Set specific dates -- Booking.com prices vary significantly by date; always set
checkinandcheckoutfor accurate pricing - Use price filters -- narrow results with
minPriceandmaxPriceto focus on your target segment - Filter by stars -- use
starsFilter: ["4", "5"]to only get upscale properties - Sort by price -- set
sortBy: "price"to get the cheapest options first, useful for budget monitoring - Change currency -- set
currencyto your local currency to avoid conversion math - Pagination is automatic -- the scraper loads additional result pages as needed until
maxResultsis reached - Residential proxies recommended -- the actor uses residential proxies by default for best reliability against Booking.com's WAF
Integrations
Connect Booking.com Scraper to other apps and services using Apify integrations:
- Google Sheets -- automatically export hotel data to a spreadsheet for tracking prices over time
- Slack / Discord -- get notified when a scraping run finishes
- Zapier / Make -- trigger workflows when new hotel data is available (e.g., alert when prices drop)
- Webhooks -- send results directly to your own API endpoint
- Schedule -- run the scraper automatically on a daily or weekly basis to monitor price changes
See Apify integrations for the full list.
Using the Apify API
You can run Booking.com Scraper programmatically using the Apify API. This is useful for integrating hotel data into your own applications or automated pipelines.
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('YOUR_ACTOR_ID').call({locationQuery: 'London',checkin: '2026-04-01',checkout: '2026-04-03',adults: 2,rooms: 1,maxResults: 50,currency: 'USD',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Found ${items.length} hotels`);console.log(items[0]);
Python:
from apify_client import ApifyClientclient = ApifyClient('YOUR_API_TOKEN')run = client.actor('YOUR_ACTOR_ID').call(run_input={'locationQuery': 'London','checkin': '2026-04-01','checkout': '2026-04-03','adults': 2,'rooms': 1,'maxResults': 50,'currency': 'USD',})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(f'Found {len(items)} hotels')print(items[0])
FAQ
How does this scraper handle Booking.com's anti-bot protection? Booking.com uses AWS WAF to block automated requests. This scraper uses a full Playwright browser with residential proxies and anti-detection flags, which bypasses the WAF reliably. Simple HTTP-based scrapers typically get blocked.
Can I scrape hotels in any country?
Yes. Enter any city, region, or country name in the locationQuery field. Booking.com covers over 2.5 million properties worldwide. You can also set the language parameter to get results in your preferred language.
How many hotels can I scrape in one run?
There is no hard limit. Set maxResults: 0 for unlimited. The scraper automatically paginates through all available results. A typical city search returns 200-1,000+ properties depending on the destination.
Does it scrape individual hotel detail pages? No. This scraper extracts data from search result listings only, which gives you 20 fields per hotel including price, rating, reviews, and availability. This approach is faster and more cost-efficient than visiting each hotel page individually.
Can I filter results by price range or star rating?
Yes. Use minPrice and maxPrice to set a nightly price range, and starsFilter to limit results to specific star ratings (e.g., ["4", "5"] for 4- and 5-star hotels).
What happens if Booking.com shows a CAPTCHA? The scraper detects WAF challenge pages and automatically retries with a different proxy. If challenges persist, it will retry up to 3 times per page before moving on.
Can I export results to CSV or Excel? Yes. Apify datasets support JSON, CSV, Excel, XML, and HTML export formats. Use the dataset export buttons in Apify Console or the API.
How fast is the scraper? Speed depends on the number of results and pagination depth. A typical 50-hotel scrape completes in 30-60 seconds. The scraper uses browser rendering, so it is slower than HTTP-based scrapers but handles anti-bot measures that HTTP scrapers cannot.
Related scrapers
- Airbnb Scraper -- scrape Airbnb listings, prices, and reviews
- TripAdvisor Scraper -- extract hotels, restaurants, and reviews from TripAdvisor
- Google Maps Scraper -- scrape business listings, reviews, and ratings from Google Maps