Booking.com Scraper avatar

Booking.com Scraper

Pricing

from $3.50 / 1,000 hotel scrapeds

Go to Apify Store
Booking.com Scraper

Booking.com Scraper

Scrape hotels and prices from Booking.com by city or search URL. Returns separate price fields — nightly rate, price before discount, taxes and fees, and total — plus ratings, stars, location and coordinates. Filter by dates, stars, score and price. Residential proxy, honest run status.

Pricing

from $3.50 / 1,000 hotel scrapeds

Rating

0.0

(0)

Developer

Agilevendor

Agilevendor

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

43 minutes ago

Last modified

Share

Booking.com Scraper — hotels & prices

Scrape hotels and room prices from Booking.com by destination or search URL. Give it a city and dates, and the Actor returns a structured list of properties with separate price fields — nightly rate, strike-through price, taxes and fees, and the total for the stay — plus ratings, stars, location and coordinates. Built for travel analysts, price-monitoring and market research.

What does this Booking.com scraper do?

For each property in the search results it collects:

  • Separate price fieldsnightly, strikeout (price before discount), taxesAndFees, and total for the whole stay, each as its own number, plus a taxInclusive flag so you always know whether tax is already in the total. This is the main reason to use it: most scrapers give you a single blended number you can't break down.
  • Property facts — name, Booking.com URL, hotel id, address, city, country, latitude/longitude, and the main photo URL.
  • Ratings — review score, number of reviews, star rating.
  • Honest run status — if Booking blocks a request, the run does not silently report success with an empty result. The page is retried on a fresh session; you are not charged for blocked, empty pages.

How to scrape hotel prices from Booking.com?

  1. Enter a destination in Search (for example Amsterdam) — or paste Booking.com search-result URLs into Start URLs.
  2. Set check-in and check-out dates (optional). Prices exist only for specific dates; if you leave the dates empty, the Actor uses a default stay ~30 days ahead so you still get live prices.
  3. Choose how many hotels to collect with Max hotels, pick a currency, and optionally filter by stars, score, price range or property type. The Actor pages through the results for you and keeps collecting until it reaches Max hotels or the end of the result set. Booking.com caps any single result set at about 1000 properties; to go beyond that, run several narrower searches (by stars, price band, area or dates) — each returns its own set.
  4. Run it. Results appear in the dataset and can be exported to JSON, CSV or Excel.

Input

FieldDescription
searchDestination to search (city, region, landmark). Either this or startUrls.
startUrlsBooking.com search-result page URLs to scrape directly.
maxItemsHow many hotels to collect (controls cost).
checkIn / checkOutStay dates (YYYY-MM-DD). Default to 30/32 days ahead if left empty, so prices are always available.
adults / children / roomsOccupancy.
currency / languagePicked from a list.
propertyTypesOne or more accommodation types (hotels, apartments, hostels, …).
starsCountOne or more star ratings (1–5).
minScoreMinimum review score (6, 7, 8 or 9).
minPrice / maxPricePrice-per-night range in the chosen currency.
sortByResult ordering (price, stars, distance, top reviewed, …).
extractAdditionalHotelDataVisit each hotel's own page to also collect the photo gallery, full description, facilities, per-room details and featured reviews. Loads one extra page per hotel and is billed as a separate event.
proxyConfigurationResidential proxy (required — see below).

Example:

{
"search": "Amsterdam",
"checkIn": "2026-07-23",
"checkOut": "2026-07-25",
"maxItems": 25,
"currency": "EUR"
}

Output (one record per hotel)

Booking.com Scraper output example

{
"name": "Hotel Continental Amsterdam",
"url": "https://www.booking.com/hotel/nl/continentcentre.html",
"hotelId": "10927",
"propertyType": "hotel",
"address": "Damrak 40 - 41",
"city": "Amsterdam",
"countryCode": "nl",
"latitude": 52.3757,
"longitude": 4.8962,
"reviewScore": 6.3,
"reviewsCount": 1450,
"ratingLabel": "Pleasant",
"stars": 1,
"image": "https://cf.bstatic.com/xdata/images/hotel/square600/...",
"price": {
"nightly": 215.18,
"strikeout": null,
"taxesAndFees": 22,
"total": 430.35,
"currency": "EUR",
"taxInclusive": false,
"nights": 2,
"genius": null
},
"rooms": [
{ "name": "Superior Double Room", "nbAllBeds": 1, "nbBedrooms": 0, "nbBathrooms": 0, "nbKitchens": 0, "area": null, "bedCount": 1 }
],
"location": {
"district": "Amsterdam City Centre",
"distanceToCenter": "400 m from centre",
"publicTransport": "Dam Square is within 200 metres",
"isCentrallyLocated": true
},
"policies": {
"freeCancellation": true,
"noPrepayment": true,
"petsAllowedForFree": false
},
"searchRank": 1,
"scrapedAt": "2026-06-23T14:05:40.792Z",
"customData": {}
}

Notes on prices: nightly/strikeout/taxesAndFees/total come straight from what Booking.com shows for your dates. When taxes are charged on top, taxInclusive is false and taxesAndFees holds the amount; when they are already included, taxInclusive is true and taxesAndFees is null. genius holds the Genius discount info when Booking applies one, otherwise null. Anything you pass in Custom data is attached to every record under customData.

rooms, location and policies are taken from the search result itself, so every record carries them at no extra cost.

Additional hotel data (optional)

The photo gallery, full facilities list, long description, per-room details and featured reviews live only on each hotel's own page. Turn on extractAdditionalHotelData to have the Actor visit each hotel page and add these fields to the record. This loads one extra page per hotel and is billed as a separate event, so enable it only when you need this depth.

When enabled, each record additionally contains:

{
"images": ["https://cf.bstatic.com/xdata/images/hotel/max1024x768/..."],
"gallery": [
{ "url": "https://cf.bstatic.com/.../...jpg?k=...", "alt": "…", "type": "…" }
],
"facilities": [
{ "name": "Safety deposit box", "slug": "safe_deposit_box", "groupId": 1 }
],
"description": "This budget hotel is located opposite the Museum Square …",
"rooms": [
{ "name": "Basic Twin Room", "description": "…", "roomSize": 15, "maxPersons": 2, "maxGuests": 2, "bathroomCount": 1, "bedCount": 1, "photos": ["https://…"] }
],
"reviews": {
"score": 7.2,
"reviewsCount": 3138,
"featured": [
{ "score": 9, "title": "…", "positive": "…", "negative": "…", "guestName": "…", "guestCountry": "…", "tripType": "…" }
]
}
}

(In this mode rooms is enriched with the per-room detail — size, occupancy, bed configuration and room photos — from the hotel page.)

Proxy and cost

Booking.com blocks datacenter IP addresses, so residential proxies are required. Proxy traffic is billed to the account that runs the Actor. The Actor is priced per scraped hotel, with no charge for blocked or empty pages.

This Actor collects only public, non-personal data — hotel listings and prices shown to any visitor. It does not log in, bypass access controls, or collect personal data. Scraping public pages is generally lawful, but you are responsible for how you use the data and for complying with Booking.com's terms and applicable laws. This is not legal advice.

Your feedback

This Actor is actively maintained. If you hit a bug, notice a change on Booking.com that breaks the output, or want a new field or option, open an issue on the Issues tab of this Actor — it goes straight to the developer.