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

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:

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.

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 ApifyClient
client = 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().items
print(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.