Booking.com Scraper avatar

Booking.com Scraper

Pricing

Pay per event

Go to Apify Store
Booking.com Scraper

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

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

46

Total users

17

Monthly active users

2 hours ago

Last modified

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:

FieldTypeDescription
namestringHotel or property name
urlstringDirect Booking.com URL (tracking params removed)
hotelIdnumberBooking.com internal hotel ID
locationstringNeighborhood and city
starRatingnumberStar rating (1-5)
reviewScorenumberGuest review score (0-10)
reviewCountnumberTotal number of guest reviews
reviewScoreWordstringRating label (e.g., "Excellent", "Very Good")
pricenumberTotal price for the stay
pricePerNightnumberPrice per night
currencystringCurrency code (USD, EUR, GBP, etc.)
roomTypestringRecommended room/unit type
freeCancellationbooleanWhether free cancellation is available
breakfastIncludedbooleanWhether breakfast is included
photoUrlstringHotel photo URL
propertyTypestringProperty type (Hotel, Apartment, etc.)
checkinstringCheck-in date (YYYY-MM-DD)
checkoutstringCheck-out date (YYYY-MM-DD)
distanceFromCenterstringDistance from city center
scrapedAtstringISO 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.

EventCost
Actor start$0.05 per run
Per hotel result$0.005 per hotel

Real-world cost examples:

SearchResultsEstimated cost
London, 10 hotels10~$0.10
Paris, 30 hotels30~$0.20
New York, 75 hotels75~$0.43
Tokyo, 100 hotels100~$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

  1. Go to the Booking.com Scraper input page on Apify Console
  2. Enter a Location -- any city, region, or country (e.g., "London", "Paris, France", "Tokyo")
  3. Optionally set Check-in and Check-out dates (defaults to tomorrow + 2 nights)
  4. Adjust Adults, Rooms, and Children if needed
  5. Set Max results to control how many hotels to scrape
  6. 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

ParameterTypeDefaultDescription
locationQuerystring(required)City, region, or country to search (e.g., "London", "Paris, France")
checkinstringtomorrowCheck-in date in YYYY-MM-DD format
checkoutstringcheckin + 2 daysCheck-out date in YYYY-MM-DD format
adultsinteger2Number of adult guests (1-30)
roomsinteger1Number of rooms (1-30)
childreninteger0Number of children (0-10)
maxResultsinteger100Maximum number of hotels to return. 0 = unlimited
sortByenumpopularitySort order: popularity, price, bayesian_review_score, class, distance
currencystringUSDCurrency code for prices (USD, EUR, GBP, etc.)
languagestringen-usLanguage code for results (en-us, de, fr, es, it, ja, zh-cn, etc.)
minPriceinteger--Minimum price per night filter
maxPriceinteger--Maximum price per night filter
starsFilterstring[]--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: 10 before running large scrapes to verify your search returns what you expect
  • Set specific dates -- Booking.com prices vary significantly by date; always set checkin and checkout for accurate pricing
  • Use price filters -- narrow results with minPrice and maxPrice to 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 currency to your local currency to avoid conversion math
  • Pagination is automatic -- the scraper loads additional result pages as needed until maxResults is 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 ApifyClient
client = 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().items
print(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:

  1. Save your search input (location, dates, filters)
  2. Go to Schedules in Apify Console and set up a daily or weekly run
  3. Export each run to Google Sheets using the Google Sheets integration to build a price history spreadsheet
  4. 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.