Booking.com Price Scraper avatar

Booking.com Price Scraper

Pricing

from $0.37 / 1,000 results

Go to Apify Store
Booking.com Price Scraper

Booking.com Price Scraper

Extract live public Booking.com hotel prices with explicit currency, occupancy/dates context, and taxes/fees breakdown when Booking shows them. Supports destination search, filters, and fast single-hotel lookups. No login required.

Pricing

from $0.37 / 1,000 results

Rating

0.0

(0)

Developer

rainminer

rainminer

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

21 hours ago

Last modified

Categories

Share

What does Booking.com Price Scraper do?

Booking.com Price Scraper extracts live public hotel prices from Booking.com with explicit currency, requested dates/occupancy context, and taxes/fees breakdown when Booking exposes them on the property page. Use a destination search, a Booking search URL (filters preserved), or a single hotel URL for a low-latency lookup — no login or user cookies required.

What can this Actor do?

  • Scrape destination search results and optional hotel detail enrichment
  • Capture explicit currency and displayed stay prices (no invented / guessed amounts)
  • Extract room-level offers with public VAT / city tax / charges lines when present
  • Capture minimum nights / min stay (and maximum nights when Booking shows them) for the stay’s check-in
  • Apply common search filters (stars, minimum review score, sort, currency, language)
  • Flag priceComplete and taxesFeesComplete so incomplete public data is never silently filled
  • Run on the Apify platform with scheduling, monitoring, dataset export, and API access

Why scrape Booking.com prices?

  • Price monitoring — Track live public rates for competitors or portfolio hotels
  • Travel intelligence — Compare destinations with consistent occupancy and currency
  • Tax transparency — Keep excluded/included fee lines when Booking shows them
  • Apify platform — Schedule runs and export JSON, CSV, Excel, or webhooks

What data can you extract?

FieldDescription
nameHotel name
urlCanonical public hotel URL with stay params
imageUrl / imagePrimary hotel image (image aliases imageUrl for drop-in pipelines)
imageUrls / imagesImage gallery when available
currencyParsed display currency (for example EUR, USD)
priceAmount / priceStay price amount (price aliases priceAmount for drop-in pipelines)
pricePerNightAmountPer-night amount when Booking shows it
totalWithTaxesFeesAmountTotal including publicly shown taxes/fees when available
taxesAndFeesLine items (VAT, city tax, etc.) with included/excluded flags
roomOffersRoom/block-level public offers for the stay
minimumNightsMin stay / minimum nights for the check-in when Booking exposes it
maximumNightsMaximum nights when Booking exposes it (often null)
reviewScore / ratingPublic review score (rating alias)
reviewCount / reviewsPublic review count (reviews alias)
reviewScoreWord / ratingLabelScore label such as "Excellent"
stars / type / description / locationStars, property type, description, { lat, lng } when public
address / addressDetails / city / countryCodeAddress string plus structured details
checkIn / checkOut / checkInDate / checkOutDateRequested stay dates (ISO). Policy times are in checkInTime / checkOutTime
adults / children / childrenAges / roomsRequested stay context (rooms = occupancy count)
breakfastMeal plan / breakfast hint when Booking exposes it
priceCompleteTrue only when amount + currency were explicitly present
taxesFeesCompleteTrue only when a public taxes/fees breakdown (or total with fees) was present
completenessNotesHuman-readable gaps — never silent empty success
guessedPriceAlways false — this Actor does not invent prices

How to scrape Booking.com hotel prices

  1. Open the Actor in Apify Console.
  2. Enter a destination (for example Amsterdam) and/or Start URLs (search or hotel pages).
  3. Set check-in / check-out (or leave blank for dynamic ~30/32-day defaults), guests, childrenAges when traveling with children, rooms, and preferred currency.
  4. Keep Enrich hotel details enabled for taxes/fees fidelity (disable for faster search-card-only runs).
  5. Set Max hotels per start URL (default 5) and run.
  6. Download results from the dataset tab.

Supported URL patterns

  • Search results: https://www.booking.com/searchresults*.html?...
  • Hotel detail: https://www.booking.com/hotel/{country}/{hotel-slug}.html

Dates and occupancy on the URL are overwritten by the Actor input stay context so runs stay reproducible.

Input

This Actor keeps a price-fidelity wedge: dynamic default dates, required child ages, honest completeness flags, and no guessed prices.

FieldNotes
searchDestination text
startUrlsOptional Booking search/hotel URLs (public pages only; no account shared lists)
checkIn / checkOutYYYY-MM-DD; leave empty for dynamic ~30/32 days ahead
flexWindowOptional stay flexibility (0/1/2/3/7) for search/destination
adults / roomsOccupancy context
childrenAgesAges 0–17 per child (required for accurate child pricing; sets age= on Booking URLs)
childrenOptional; must match childrenAges.length when both are set
currency / languageDisplay preferences (expanded enums)
propertyTypeBooking property-type filter (Hotels, Apartments, …)
minMaxPricePer-night range such as 100-150 or 100+
starsCountFilter / minScore / sortBySearch filters (includes unrated stars)
enrichHotelDetailsRoom + taxes/fees enrichment (default true)
extractAdditionalHotelDataAlias of enrichHotelDetails; used only when that field is omitted
maxItemsPer start URL / destination
proxyConfigurationDefault off; enable residential if your IP is blocked

Output example

{
"name": "citizenM Amsterdam South",
"url": "https://www.booking.com/hotel/nl/citizenm-amsterdam-city.en-gb.html?checkin=2026-09-07&checkout=2026-09-09&group_adults=2&no_rooms=1&selected_currency=EUR",
"imageUrl": "https://cf.bstatic.com/xdata/images/hotel/max500/772469520.jpg",
"image": "https://cf.bstatic.com/xdata/images/hotel/max500/772469520.jpg",
"currency": "EUR",
"priceAmount": 296,
"price": 296,
"pricePerNightAmount": 148,
"totalWithTaxesFeesAmount": 395,
"taxesAndFees": [
{
"label": "21 % VAT",
"amount": 62.16,
"included": false,
"type": "percentage__excluded"
},
{
"label": "12.50 % City tax",
"amount": 37.0,
"included": false,
"type": "percentage__excluded"
}
],
"rating": 8.6,
"reviews": 2450,
"ratingLabel": "Excellent",
"stars": 4,
"type": "hotel",
"location": { "lat": "52.3676", "lng": "4.9041" },
"checkIn": "2026-09-07",
"checkOut": "2026-09-09",
"checkInDate": "2026-09-07",
"checkOutDate": "2026-09-09",
"adults": 2,
"children": 0,
"childrenAges": [],
"rooms": 1,
"minimumNights": 1,
"maximumNights": null,
"priceComplete": true,
"taxesFeesComplete": true,
"guessedPrice": false,
"priceSource": "hotel_rooms",
"completenessNotes": [
"Price taken from public hotel room offers for the requested stay context."
]
}

Pricing

This Actor can be monetized on Apify with pay-per-event pricing after publication. Platform compute and proxy usage are billed separately by Apify.

FAQ

Why is maximumNights often null?

Booking commonly publishes a minimum stay for a check-in date, but does not always publish a matching maximum nights limit on the public hotel page. When it is missing, the field is null — this Actor does not invent limits.

Does this Actor log in to Booking.com?

No. It only reads public search and hotel pages. It does not accept Booking usernames, passwords, or user session cookies.

Why are taxes/fees sometimes missing?

Booking often shows a clean search-card price and only exposes the full charges breakdown on the hotel page. Enable Enrich hotel details. If enrichment fails after retries, the Actor keeps an honest search-card fallback with taxesFeesComplete=false instead of silently dropping the row. If Booking still does not publish a breakdown for that stay, completeness flags and notes explain the gap — prices are never guessed.

Do I need child ages?

Yes whenever children > 0. Booking prices depend on each child's age. Provide childrenAges (for example [5, 8]); the Actor sends Booking age= / req_age= parameters. Runs with children but no ages fail validation instead of returning inaccurate prices.

What happens if the run finds nothing?

If every requested search/hotel fails or is blocked and no rows are pushed, the Actor exits with code 1. Empty successful runs are not allowed.

Can I scrape a single hotel quickly?

Yes. Pass a hotel URL in Start URLs. The Actor skips destination search and loads that property with your dates/occupancy.

Do I need a proxy?

Many environments clear Booking’s AWS WAF browser challenge without a proxy. If runs are blocked in your region or on datacenter IPs, enable Apify residential proxies in the input.

Looking for other travel sources? See rainminer hotel Actors such as eDreams Hotels Scraper, Despegar Hotels Scraper, and hotel.de Scraper on Apify Store.

Image Credit

Image credit: Booking.com