Booking.com Scraper (Pay-Per-Event) avatar

Booking.com Scraper (Pay-Per-Event)

Under maintenance

Pricing

Pay per event

Go to Apify Store
Booking.com Scraper (Pay-Per-Event)

Booking.com Scraper (Pay-Per-Event)

Under maintenance

Scrape Booking.com hotel search results or direct hotel pages. Returns 22 fields per hotel including prices, ratings, reviews, location, address, and coordinates. Run-scoped dedupe by hotelId. Pay-per-event pricing — only pay for the hotels you actually scrape.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Arnas

Arnas

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Booking.com Scraper

Extract hotel and accommodation data from Booking.com. Get prices, ratings, reviews, room types, photos, availability, address, and coordinates for any location worldwide. Pay-per-event pricing — only pay for the hotels you actually scrape.

What does Booking.com Scraper do?

Booking.com Scraper extracts hotel and accommodation data from Booking.com search results or directly from specific hotel pages. Enter a city or region (or paste direct hotel URLs), 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.

It uses a real browser (Playwright) and residential proxies to load search results, which means it handles Booking.com's AWS WAF anti-bot protection reliably. Pagination is automatic — the scraper walks result pages until your maxResults limit is reached.

This actor is a clean-room reimplementation in the spirit of automation-lab/booking-scraper, at identical pay-per-event pricing, with two practical improvements:

  • Run-scoped dedupe by hotelId. Overlapping searches or sponsored-then-organic placements within a single run are pushed and charged exactly once.
  • Two extra output fields: address (a clean street/area string from the property tile) and coordinates ({ latitude, longitude }).

Who is it for?

Booking.com Scraper is built for data professionals, travel-industry analysts, and developers who need reliable access to Booking.com hotel data at scale — without a Booking.com API key or Affiliate Program approval.

  • Revenue managers and hoteliers monitoring competitor pricing
  • Travel agencies and OTAs building data feeds or price-comparison tools
  • Data analysts and researchers studying hotel supply, pricing trends, and reviews
  • Developers integrating accommodation data into apps, dashboards, or pipelines

Use cases

  • Travel price monitoring — track hotel prices over time to find the best booking window
  • Competitor analysis — 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 — 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 this scraper?

  • Handles anti-bot protection — Playwright + residential proxies bypass Booking.com's AWS WAF where HTTP scrapers fail
  • 22 data fields per hotel — prices, review scores, star ratings, room types, cancellation policy, breakfast, photos, address, coordinates, and more
  • Automatic pagination — walks all search result pages
  • Run-scoped dedupe — overlapping searches never double-bill
  • Flexible filters — dates, guests, rooms, price range, star rating, sort order, currency, language
  • Pay per result — no monthly subscription, only pay for the hotels you scrape
  • Clean, flat output — every field is a primitive type or simple object, ready for spreadsheets and databases

How to scrape Booking.com hotels

Option A — search by location

  1. Open the actor's Input tab
  2. Enter a locationQuery — any city, region, or country (e.g., "London", "Paris, France", "Tokyo")
  3. Optionally set checkin and checkout dates (default: tomorrow + 2 nights)
  4. Adjust adults, rooms, children as needed
  5. Set maxResults to control how many hotels to scrape
  6. Click Start

Example input:

{
"locationQuery": "London",
"checkin": "2026-06-01",
"checkout": "2026-06-03",
"adults": 2,
"rooms": 1,
"maxResults": 50,
"sortBy": "popularity",
"currency": "USD"
}

Option B — scrape specific hotels by direct URL

If you want data for one or more specific properties, paste their Booking.com URLs into the startUrls field. The scraper visits each property page and extracts all available data.

{
"startUrls": [
{ "url": "https://www.booking.com/hotel/gb/the-savoy.html" },
{ "url": "https://www.booking.com/hotel/gb/claridges.html" }
],
"checkin": "2026-06-01",
"checkout": "2026-06-03",
"adults": 2
}

Input parameters

ParameterTypeDefaultDescription
startUrlsarrayDirect Booking.com hotel page URLs to scrape. Either startUrls or locationQuery is required.
locationQuerystringCity, region, country, or hotel name to search. Required if no startUrls provided.
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 (location search). 0 = unlimited (hard-capped at 1000).
sortByenumpopularitySort order: popularity, price, bayesian_review_score, class, distance.
currencystringUSDCurrency code for prices (USD, EUR, GBP, etc.).
languagestringen-usLanguage code (en-us, de, fr, es, it, ja, zh-cn, etc.).
minPriceintegerMinimum price per night filter.
maxPriceintegerMaximum price per night filter.
starsFilterstring[]Filter by star rating (e.g., ["4","5"]).
proxyConfigurationobjectResidentialApify proxy. Residential is strongly recommended.

Output

Each record contains up to 22 structured fields. You can download the dataset in JSON, CSV, Excel, XML, or HTML.

FieldTypeDescription
namestringHotel or property name
urlstringCanonical Booking.com URL (tracking params stripped)
hotelIdnumberBooking.com internal hotel ID (used for dedupe)
locationstringNeighborhood and city
addressstringStreet / area address ← extra over automation-lab/booking-scraper
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.)
coordinatesobject{ latitude, longitude }extra over automation-lab/booking-scraper
checkinstringCheck-in date (YYYY-MM-DD)
checkoutstringCheck-out date (YYYY-MM-DD)
distanceFromCenterstringDistance from city center
scrapedAtstringISO 8601 timestamp

Example output:

{
"name": "citizenM London Shoreditch",
"url": "https://www.booking.com/hotel/gb/citizenm-london-shoreditch.html",
"hotelId": 189710206,
"location": "Hackney, London",
"address": "Hackney, London",
"starRating": null,
"reviewScore": 8.7,
"reviewCount": 3356,
"reviewScoreWord": "Excellent",
"price": 224,
"pricePerNight": 112,
"currency": "USD",
"roomType": "Comfort Double Room",
"freeCancellation": true,
"breakfastIncluded": false,
"photoUrl": "https://cf.bstatic.com/xdata/images/hotel/square240/772469398.webp",
"propertyType": null,
"coordinates": null,
"checkin": "2026-06-01",
"checkout": "2026-06-03",
"distanceFromCenter": "2.4 miles from downtown",
"scrapedAt": "2026-05-22T16:00:00.000Z"
}

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, residential proxy, storage) are included.

EventFreeBusiness Gold
Actor start (per run)$0.0575$0.030
Per hotel scraped (deduped by hotelId)$9.76 / 1,000$5.09 / 1,000

Real-world cost examples (Free tier):

SearchResultsEstimated cost
London, 10 hotels10~$0.15
Paris, 30 hotels30~$0.35
New York, 75 hotels75~$0.79
Tokyo, 100 hotels100~$1.03

Tips for best results

  • Target specific hotels with direct URLs — for known properties, startUrls is more reliable than name search.
  • Start small — test with maxResults: 10 before scaling up.
  • Set explicit dates — Booking prices vary significantly by date; always pin checkin/checkout for accurate pricing.
  • Use price + star filtersminPrice/maxPrice and starsFilter narrow results without paying for irrelevant rows.
  • Residential proxies recommended — Booking's AWS WAF blocks datacenter IPs fast.

API usage

cURL:

curl -X POST "https://api.apify.com/v2/acts/<account>~booking-scraper/runs?token=YOUR_API_TOKEN&waitForFinish=300" \
-H "Content-Type: application/json" \
-d '{"locationQuery":"London","checkin":"2026-06-01","checkout":"2026-06-03","maxResults":50,"currency":"USD"}'

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('<account>/booking-scraper').call({
locationQuery: 'London',
checkin: '2026-06-01',
checkout: '2026-06-03',
maxResults: 50,
currency: 'USD',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.length} hotels`);

Python:

from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('<account>/booking-scraper').call(run_input={
'locationQuery': 'London',
'checkin': '2026-06-01',
'checkout': '2026-06-03',
'maxResults': 50,
'currency': 'USD',
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(f'Found {len(items)} hotels')

FAQ

How does this scraper handle Booking.com's anti-bot protection? Booking 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.

Can I scrape hotels in any country? Yes. Enter any city, region, or country in locationQuery. Booking covers 2.5M+ properties worldwide.

How many hotels can I scrape in one run? Set maxResults: 0 for unlimited (hard-capped at 1000 per run for safety). Typical city searches return 200–1,000+ properties.

How do I scrape a specific hotel? Use startUrls with the property's direct Booking.com URL (e.g., https://www.booking.com/hotel/gb/the-savoy.html).

Can I filter by price or star rating? Yes — minPrice, maxPrice, and starsFilter (e.g., ["4","5"]).

What if Booking shows a CAPTCHA? The scraper detects WAF challenge pages and automatically rotates the residential IP, retrying up to 3 times per request.

Why are some fields null? Booking doesn't show every field for every property. Non-rated properties (hostels, apartments) often lack starRating. coordinates are populated when Booking exposes lat/lng in the search tile or in the JSON-LD on the property page.

Does the dedupe affect the result count? Yes — if a property appears twice in a single run (e.g., sponsored slot + organic placement), it's pushed and charged once.

Legality

This scraper only accesses publicly available hotel listing data from Booking.com search results. It does not bypass logins, CAPTCHAs, or access controls. 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.