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
46
Total users
17
Monthly active users
2 hours 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.
cURL:
curl -X POST "https://api.apify.com/v2/acts/automation-lab~booking-scraper/runs?token=YOUR_API_TOKEN&waitForFinish=300" \-H "Content-Type: application/json" \-d '{"locationQuery": "London","checkin": "2026-04-01","checkout": "2026-04-03","adults": 2,"rooms": 1,"maxResults": 50,"currency": "USD"}'
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/booking-scraper').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('automation-lab/booking-scraper').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])
Use with AI agents via MCP
Booking.com Scraper is available as a tool for AI assistants that support the Model Context Protocol (MCP).
Setup for Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/booking-scraper"
Setup for Claude Desktop, Cursor, or VS Code
Add this to your MCP config file:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/booking-scraper"}}}
Example prompts
Once connected, try asking your AI assistant:
- "Find hotels in Paris for June 15-20 under $150/night"
- "Scrape hotel prices and ratings in downtown Barcelona"
Learn more in the Apify MCP documentation.
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.
The scraper is returning 0 results. What should I check?
Verify your locationQuery is a valid Booking.com destination. Try using the same search on booking.com first to confirm results exist. If dates are in the past or availability is limited, you may get fewer results. Also check the run log for WAF challenge messages -- occasional retries are normal, but persistent blocks may require switching proxy groups.
Why are some fields null (starRating, roomType, propertyType)? Booking.com doesn't show all fields for every property in search results. Non-rated properties (hostels, apartments) may lack star ratings. Room type may not be displayed if multiple room options are available. These fields are extracted as-is from the search results page.
Can I monitor prices over time? Yes. Use Apify Schedules to run the scraper daily or weekly with the same search parameters. Export to Google Sheets to build a price tracking spreadsheet, or use webhooks to trigger alerts when prices drop below a threshold.
Legality
Booking.com Scraper only accesses publicly available hotel listing data from Booking.com search results. It does not bypass any login walls, CAPTCHAs, or access controls. The data collected is the same as what any visitor can see when searching for hotels on booking.com without an account.
Web scraping of publicly available data is generally legal, but you should review Booking.com's Terms of Service and applicable laws in your jurisdiction. Use the data responsibly and in compliance with privacy regulations like GDPR. You can read more about the legality of web scraping.
How do I monitor Booking.com hotel prices over time?
Use Apify's built-in scheduling to run the scraper automatically on a recurring basis with the same search parameters:
- Save your search input (location, dates, filters)
- Go to Schedules in Apify Console and set up a daily or weekly run
- Export each run to Google Sheets using the Google Sheets integration to build a price history spreadsheet
- Use webhooks or Zapier to trigger alerts when prices drop below a threshold
This approach is widely used by travel agencies, hotel revenue managers, and deal hunters who want to book at the optimal time.
Can I scrape hotel reviews from Booking.com?
This scraper extracts review scores and counts from search result pages — you get reviewScore (0–10), reviewCount, and reviewScoreWord (e.g., "Excellent") for each hotel. However, it does not scrape individual review text, since reviews live on individual hotel pages rather than search results.
If you need full review text for specific hotels, you would need to follow individual hotel URLs — a feature that may be added in a future version.
Does Booking.com block scrapers?
Yes. Booking.com uses AWS WAF (Web Application Firewall) to detect and block automated traffic. Standard HTTP scrapers are typically blocked immediately. This actor bypasses the WAF by:
- Using a full Playwright browser (same as a real user's browser)
- Routing requests through residential proxy IPs (not datacenter IPs)
- Applying browser fingerprint randomization and anti-detection flags
This approach reliably handles Booking.com's WAF challenges. If you encounter persistent blocks, the scraper automatically retries with different proxy IPs up to 3 times per page.
What are the best alternatives to the Booking.com API?
Booking.com does not offer a public API for accommodation search data. There are two main options for programmatic access:
- Affiliate API — Booking.com's Affiliate Partner Program provides a search API, but requires approval and revenue sharing. It's intended for travel booking integrations, not data analysis.
- Web scraping — The most flexible option for data analysis, price monitoring, and market research. This scraper handles all the anti-bot complexity for you and exports clean structured data.
For market research, price tracking, and competitive analysis, scraping is typically the faster path since the affiliate API requires partnership approval.
Related scrapers
- Airbnb Scraper — Scrape Airbnb listings, prices, and availability
- Airbnb Reviews Scraper — Extract guest reviews from Airbnb listings