Booking.com Room-Level Hotel Price Scraper avatar

Booking.com Room-Level Hotel Price Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Booking.com Room-Level Hotel Price Scraper

Booking.com Room-Level Hotel Price Scraper

Scrape and track Booking.com hotel prices by room type and date, up to 365 days ahead. Extract rate options, availability, sold-out dates, meal plans, discounts, refundable rates, and geo-pricing. Built for hotel revenue management and competitive rate analysis. Export JSON, CSV, Excel, or HTML.

Pricing

from $5.00 / 1,000 results

Rating

5.0

(2)

Developer

HotelSignals Lab

HotelSignals Lab

Maintained by Community

Actor stats

10

Bookmarked

275

Total users

59

Monthly active users

3.1 days

Issues response

4 hours ago

Last modified

Share

Booking.com hotel price scraper for room-level rates, availability, and competitive rate tracking.

Scrape and track Booking.com hotel prices by room type, date, occupancy, source market, and rate option for up to 365 days ahead. Instead of returning a single listing-level price, this Actor extracts room-by-room data from each property: public and discounted prices, availability signals, sold-out dates, cancellation terms, meal plans, taxes, room facilities, and nested rate options.

Use direct hotel URLs for competitor monitoring, paste a filtered Booking.com search URL, or enter a destination query to discover and scrape matching properties. Export the results as JSON, CSV, Excel, or HTML, or connect them to an API, webhook, scheduler, or automation workflow.

🔍 What does this Booking.com hotel price scraper extract?

  • Room-level prices for each check-in date
  • Every room type returned for the selected occupancy
  • Public, primary, original, and discounted prices
  • Refundable and non-refundable rate options
  • Breakfast, meal plan, tax, and pay-later information
  • Available, low-availability, urgent, and sold-out signals
  • Booking.com scarcity counts with a confidence label
  • Bed type, room size, view, facilities, and selected amenities
  • Length-of-stay prices when LOS analysis is enabled
  • Public, Genius, and optional wholesale/partner rates
  • Source-market tags for multi-country geo-pricing comparisons
  • Hotel metadata in discovery mode, including score, review count, stars, facilities, address, and description

🚀 Quick start

  1. Choose one targeting mode:
    • Add specific Booking.com property URLs under Target Hotels.
    • Paste a Booking.com results URL under Search URL.
    • Enter a destination or property query under Search by text.
  2. Select the dates, occupancy, currency, source markets, and optional filters.
  3. Click Start, then open the run's Output tab to preview or export the dataset.

For a first test, use one hotel, 3–7 days, one proxy country, and the default concurrency. Scale the run only after confirming that the output matches your use case.

🎯 Choose an input mode

Direct hotel mode

Use hotelUrls when you already know which properties to monitor. This is the best mode for daily competitor rate tracking and portfolio benchmarking.

{
"hotelUrls": [
"https://www.booking.com/hotel/ma/savoy-le-grand.html",
"https://www.booking.com/hotel/ma/longue-vie-hotels.html"
],
"startDate": "2026-09-01",
"daysAhead": 30,
"currency": "EUR",
"adults": 2,
"rooms": 1,
"includeSoldOut": true,
"useApifyProxy": true,
"proxyCountries": ["FR"]
}

Search URL mode

Use searchUrl to preserve filters already selected on Booking.com, such as destination, dates, star rating, meal plan, distance, or property type. Search results are discovered first, then each selected property is scraped for room-level rates.

Search by text

Use searchText for a simple destination or property query such as riad with pool in fes. The Actor builds the Booking.com search request automatically and processes up to maxProperties matching properties.

When more than one targeting field is supplied, direct hotel URLs take priority, followed by the search URL and then search text.

⚙️ Input configuration

Targeting and dates

FieldTypeDefaultDescription
hotelUrlsarrayBooking.com property URLs for direct monitoring.
searchUrlstringA Booking.com search-results URL with the desired filters.
searchTextstringA destination or property query used to build a search automatically.
maxPropertiesinteger50Maximum number of properties to process in discovery mode.
startDatestringTodayFirst check-in date in YYYY-MM-DD format.
daysAheadinteger10Number of check-in dates to scan, from 1 to 365.
includeSoldOutbooleantrueKeep sold-out room/date combinations in the output.

Search and occupancy

FieldTypeDefaultDescription
currencystringUSDOutput currency, such as USD, EUR, GBP, MAD, AED, or JPY.
propertyTypestringAll typesOptional property-type filter for discovery mode.
minReviewScorenumber0Minimum Booking.com review score.
maxReviewScorenumber0Maximum review score; 0 means no maximum.
adultsinteger2Number of adults used for the price search.
childreninteger0Number of children used for the price search.
roomsinteger1Number of rooms requested.

Proxy, performance, and optional analysis

FieldTypeDefaultDescription
useApifyProxybooleantrueUse Apify Proxy for more reliable Booking.com access. Required for multi-country runs.
proxyCountriesarray["FR"]Source markets to scrape. Every result is tagged with proxy_country.
concurrencyinteger3Number of hotels processed in parallel. Increase carefully.
delayBetweenRequestsinteger3Delay in seconds between date requests.
includeLosAnalysisbooleanfalseExtract multi-night prices for length-of-stay analysis.
includeWholesaleRatesbooleanfalseInclude partner/wholesale (bbasic) rates and tag them separately.
tieredCadencebooleanfalseScrape near dates more frequently than distant dates to reduce monitoring cost.
webhookUrlstringOptional Slack or Discord webhook for error alerts.

📤 Output structure

The default dataset contains room-price records. Discovery runs can also include a hotel metadata record with record_type: "discovery" before the room-level results for that property.

Hotel discovery metadata

Discovery records can include:

  • hotel_url, hotel_name, and booking_hotel_id
  • Review score, review count, and category breakdown
  • Star rating, address, neighborhood, and property description
  • Hotel facilities and photo count
  • proxy_country and scrape_timestamp

Room-price records

Each room-price record represents a room type for a check-in/check-out combination and source market. Important fields include:

GroupFields
Identityhotel_name, hotel_url, booking_hotel_id, room_id, room_name, room_name_clean
Datescheck_in_date, check_out_date, scrape_timestamp
Priceprice, price_primary, price_public, original_price, discount_percent, currency
Availabilityis_sold_out, availability_status, rooms_left, stock_confidence, min_stay
Roombed_type, max_guests, room_size_sqm, room_view, facilities, room_amenities
Termsmeal_plan, is_breakfast_included, is_refundable, book_now_pay_later
Taxestaxes_included, taxes_excluded
Ratesrate_options, rate_options_count
Marketproxy_country

Example room-price output

{
"hotel_name": "Savoy Le Grand Hotel Marrakech",
"hotel_url": "https://www.booking.com/hotel/ma/savoy-le-grand.html",
"check_in_date": "2026-09-01",
"check_out_date": "2026-09-02",
"room_id": 160633804,
"room_name": "Prestige Double Room with Pool View",
"bed_type": "1 extra-large double bed",
"room_size_sqm": 43,
"room_view": "Pool view",
"currency": "EUR",
"price": 186,
"price_primary": 186,
"price_public": 186,
"availability_status": "available",
"rooms_left": null,
"stock_confidence": "hidden",
"is_refundable": false,
"is_breakfast_included": true,
"proxy_country": "FR",
"rate_options_count": 1,
"rate_options": [
{
"price": 186,
"public_price": 186,
"max_guests": 2,
"is_refundable": false,
"is_genius": false,
"is_wholesale": false,
"meal_plan": "breakfast"
}
]
}

🧭 Understanding prices and availability

price, price_primary, and price_public

  • price is the selected lowest room price for the requested stay.
  • price_primary is the primary comparable rate selected for the requested occupancy.
  • price_public is the public price before a member-only or app discount when Booking.com exposes it.
  • original_price and discount_percent describe a visible struck-through discount when available.

Use the same dates, occupancy, currency, meal plan, cancellation terms, and source market when comparing hotels. Otherwise, apparently similar prices may represent different products.

rooms_left and stock_confidence

rooms_left is an availability signal exposed by Booking.com, not a direct connection to the hotel's property-management system.

ConfidenceMeaning
exactBooking.com displayed a visible scarcity count for the room.
cappedBooking.com exposed a capped value; the true inventory may be higher.
hiddenBooking.com did not expose a reliable stock count.

Treat rooms_left: null as “no stock count exposed,” not as proof of unlimited availability.

Geo-pricing

Booking.com can display different prices depending on visitor location. Add multiple proxyCountries while keeping the currency, dates, and occupancy fixed to compare source-market cohorts. Each output row is tagged with its proxy_country.

Genius and wholesale rates

Genius discounts and partner/wholesale rates can make an apparent competitor price difficult to compare with a public retail rate. Use price_public, is_genius, and is_wholesale to keep these rate types separate. Wholesale rates are excluded unless includeWholesaleRates is enabled.

💰 How much does it cost?

The current Store price starts at $5 per 1,000 dataset results. Check the Actor's Pricing tab for the latest price and any additional platform-usage charges.

A room-price result generally represents one room type for one check-in date and source market. For example:

1 hotel × 30 dates × 8 room types × 1 proxy country ≈ 240 room-price results

At $5 per 1,000 results, 240 results cost approximately $1.20 before any separately billed platform usage. Discovery metadata and the actual number of rooms returned can change the final result count.

To control cost:

  • Test with 3–7 days before scaling to 365 days.
  • Limit maxProperties in discovery mode.
  • Use one proxy country unless geo-pricing is required.
  • Enable tiered cadence for recurring monitoring.
  • Keep LOS analysis disabled unless multi-night pricing is needed.

🏨 Booking.com price-tracking use cases

Daily competitor rate monitoring

Schedule the Actor with a fixed set of hotel URLs and compare room-level prices, discounts, cancellation policies, and sold-out dates over time.

Revenue management

Benchmark comparable rooms under comparable conditions. Separate public, Genius, and wholesale prices and monitor scarcity signals before adjusting your own rates.

Geo-pricing analysis

Compare how the same room is priced for visitors from France, the United States, the United Kingdom, or other supported source markets.

Seasonal and event analysis

Scan future dates to identify price peaks, low-availability periods, sold-out dates, and potential event-driven demand.

Hotel and travel data products

Feed structured room-level rates into dashboards, market-intelligence systems, alerts, research workflows, and travel applications through the Apify API.

🔌 API, scheduling, and integrations

Every run can be started from Apify Console or through the API. Results can be:

  • Scheduled daily, weekly, or at a custom interval
  • Downloaded as JSON, CSV, Excel, or HTML
  • Read programmatically from the default dataset
  • Sent to downstream systems through webhooks
  • Connected to Google Sheets, Make, Zapier, or n8n workflows
  • Used by AI agents when the Actor's input, dataset, and output schemas are enabled

❓ FAQ

How is this different from a standard Booking.com scraper?

Many listing scrapers return one headline price per property from search results. This Actor is designed for room-level rate intelligence: multiple room types, dates, availability states, and nested rate options from each property page.

Does it work with any Booking.com property?

It supports Booking.com property pages such as hotels, resorts, riads, apartments, hostels, guesthouses, and similar accommodation types. Results depend on what Booking.com exposes for the selected dates, occupancy, and market.

Do I need a proxy?

Apify Proxy is strongly recommended and is required for multi-country source-market comparisons. Disabling it can reduce reliability because Booking.com may limit or block repeated requests.

Why is a room missing?

The room may be sold out, unavailable for the selected occupancy or minimum stay, hidden for that source market, or excluded by the selected rate and search conditions. Enable sold-out tracking when availability gaps matter.

Are rooms_left values the hotel's exact inventory?

Not necessarily. They are Booking.com availability signals. Use stock_confidence to distinguish visible, capped, and hidden counts.

Can I scrape several source countries in one run?

Yes. Add multiple values to proxyCountries and keep useApifyProxy enabled. Keep the same currency and search conditions across countries for a clean comparison.

Can I include partner or wholesale rates?

Yes. Enable includeWholesaleRates. These rates remain tagged with is_wholesale: true so they can be separated from public retail prices.

How frequently should I run the Actor?

Daily runs are suitable for active competitor monitoring. Weekly runs may be enough for longer-term market research. Frequency should match how quickly the monitored market changes and the cost of the chosen date range.

⚠️ Data notes

  • Booking.com can change its page structure, price presentation, and availability signals without notice.
  • Output reflects the selected date, occupancy, currency, source market, and run time.
  • A successful scrape does not guarantee that every field is exposed for every property or room.
  • Validate important pricing decisions against the live booking page.
  • Use the Actor responsibly and ensure that your use complies with applicable rules and agreements.

💬 Support, feature requests, and custom solutions

Have a question, found a bug, or need something the Actor does not currently support? Open an issue in the Issues tab.

You can contact us for:

  • Unexpected or missing results
  • New fields or data points
  • Additional filters or source markets
  • Custom output formats
  • API, webhook, or automation integrations
  • Large-scale hotel monitoring
  • Custom pricing and competitive-intelligence workflows

When reporting a problem, include the run ID, input mode, and one affected Booking.com property URL whenever possible. This helps us investigate and respond faster.

For a custom solution, describe the number of hotels, target markets, schedule, required fields, and preferred output format.

Do not share passwords, API tokens, private credentials, or sensitive webhook URLs in public issues.