BOOKING PRICE SCRAPER - by room avatar

BOOKING PRICE SCRAPER - by room

Pricing

Pay per usage

Go to Apify Store
BOOKING PRICE SCRAPER - by room

BOOKING PRICE SCRAPER - by room

Track Booking.com prices by room type, per night, up to 365 days. Get rooms_left, rate options, meal plans, discounts, and sold-out detection. Clean output for revenue management and competitive analysis. CSV, JSON, HTML, Excel. Built by NoraView Intelligence.

Pricing

Pay per usage

Rating

5.0

(2)

Developer

NoraView Intelligence

NoraView Intelligence

Maintained by Community

Actor stats

0

Bookmarked

17

Total users

11

Monthly active users

14 hours ago

Last modified

Share

🏨 Booking.com Room-Level Price Scraper

Extract complete room-level pricing from any Booking.com hotel β€” every room type, every rate option, every date β€” up to 365 days ahead.

Unlike listing scrapers that return one price per hotel, this actor dives into each property page and extracts granular room-by-room data: prices, rate options, availability signals, meal plans, discounts, and sold-out detection.

One run = complete pricing visibility for your competitive set.

πŸ’‘ Paste hotel URLs, set your date range, hit Start. Results ready in JSON, CSV, or Excel.


🎯 Who is this for?

  • Revenue managers monitoring competitor pricing daily
  • Hotel operators tracking market positioning at the room-type level
  • Travel tech companies feeding structured pricing data into dashboards or algorithms
  • Market analysts studying seasonal trends and demand patterns
  • Consultants building competitive intelligence reports for hospitality clients

⚑ Why this over other Booking.com scrapers?

FeatureThis ActorListing-level scrapers
Data depthEvery room type + rate optionsOne price per hotel
Date rangeUp to 365 days aheadSingle date only
Rate optionsMultiple prices per room (refundable, non-refundable, etc.)Cheapest price only
Bed typesKing, Twin, Suite β€” all differentiatedNot available
Availabilityrooms_left + availability_statusNot available
Sold-out detectionTracks which dates are fully bookedNot available
Meal plansBreakfast included vs. paid, half-board, all-inclusiveNot available
Discount trackingOriginal vs. discounted price + percentageBasic or none
Guest matchingfit filtering β€” only shows rates matching your searchNot available

πŸ“₯ Input

FieldTypeRequiredDefaultDescription
hotelUrlsarrayβœ…β€”Booking.com hotel URLs (up to 10 per run)
daysAheadinteger❌30Number of days to scrape (1–365)
startDatestring❌TodayStart date in YYYY-MM-DD format
currencystring❌USDAny Booking.com currency: USD, EUR, GBP, MAD, AED, JPY…
adultsinteger❌2Number of adult guests
childreninteger❌0Number of children
roomsinteger❌1Number of rooms
includeSoldOutboolean❌trueInclude sold-out dates in results
delayBetweenRequestsinteger❌4Seconds between page loads (anti-blocking)
useApifyProxyboolean❌falseUse Apify Proxy for better success rates

Example input

{
"hotelUrls": [
"https://www.booking.com/hotel/ma/savoy-le-grand.html",
"https://www.booking.com/hotel/ma/longue-vie-hotels.html"
],
"daysAhead": 30,
"currency": "USD",
"adults": 2,
"rooms": 1,
"includeSoldOut": true
}

πŸ’‘ Tip: You only need the base hotel URL β€” query parameters like ?checkin=... are automatically handled. Works with any Booking.com property worldwide.


πŸ“€ Output

Each result represents one room type for one date. A hotel with 8 room types scraped across 30 days produces ~240 results β€” a complete pricing matrix.

Output fields

FieldTypeDescription
hotel_urlstringSource URL
hotel_namestringProperty name as shown on Booking.com
scrape_timestampstringWhen this data was collected (UTC)
check_in_datestringCheck-in date (YYYY-MM-DD)
check_out_datestringCheck-out date (YYYY-MM-DD)
room_idintegerBooking.com internal room type ID
room_namestringFull room name (e.g., "Superior King Room with Pool View")
room_name_cleanstringRoom name with bed type suffix removed
bed_typestringBed configuration (e.g., "1 extra-large double bed")
max_guestsintegerMaximum occupancy for this room
currencystringPrice currency
pricenumberLowest available price for this room
price_primarynumberBest price for 2-guest standard occupancy (revenue management metric)
original_pricenumberPre-discount price (null if no discount)
discount_percentintegerDiscount percentage (null if no discount)
rooms_leftintegerBooking.com availability signal (null = high availability)
availability_statusstringavailable, low_availability, or sold_out
meal_planstringMeal plan description
is_breakfast_includedbooleanWhether breakfast is included at no extra cost
is_refundablebooleanWhether free cancellation is offered
rate_optionsarrayAll pricing tiers for this room (see below)
rate_options_countintegerNumber of rate options available

Rate options structure

Each entry in rate_options contains:

FieldTypeDescription
pricenumberPrice for this specific rate
max_guestsintegerGuest count this rate is designed for
is_refundablebooleanFree cancellation available
original_pricenumberPre-discount price (null if none)

πŸ’‘ Note: Rate options only include rates that match your search parameters (e.g., searching for 2 adults filters out 1-person-only rates). This gives you clean, comparable data.

Example output

{
"hotel_url": "https://www.booking.com/hotel/ma/longue-vie-hotels.html",
"hotel_name": "Longue vie Hotels",
"scrape_timestamp": "2026-03-07T14:08:11Z",
"check_in_date": "2026-03-07",
"check_out_date": "2026-03-08",
"room_id": 824004703,
"room_name": "Standard Double or Twin Room",
"room_name_clean": "Standard Double or Twin Room",
"bed_type": "Choose your bed (if available) 2 single beds 1 large double bed",
"max_guests": 2,
"currency": "USD",
"price": 118,
"price_primary": 118,
"original_price": 145,
"discount_percent": 19,
"rooms_left": 4,
"availability_status": "low_availability",
"meal_plan": "breakfast",
"is_breakfast_included": true,
"is_refundable": false,
"rate_options": [
{
"price": 118,
"max_guests": 2,
"is_refundable": false,
"original_price": 130
},
{
"price": 131,
"max_guests": 2,
"is_refundable": false,
"original_price": 145
}
],
"rate_options_count": 2
}

πŸ” Understanding key fields

availability_status

StatusMeaningRevenue insight
availableRooms widely availableNormal market conditions
low_availabilityBooking.com shows scarcity alertrooms_left has the exact count β€” demand is building
sold_outNo rooms available for this datePeak demand β€” opportunity to optimize your rates

rooms_left

Booking.com displays scarcity signals ("Only 3 left!") when inventory drops below a threshold. This scraper captures that signal.

ValueMeaning
1–9Exact count shown by Booking.com β€” real scarcity signal
10Booking.com display cap β€” actual inventory is β‰₯ 10
nullBooking.com is not showing any scarcity alert β€” high availability

price vs. price_primary

  • price = absolute cheapest option (may be 1-person rate or restricted offer)
  • price_primary = best price for standard 2-guest occupancy β€” the rate most travelers actually book. This is the metric revenue managers should use for competitive benchmarking.

πŸ’‘ Tips for best results

  • Start with 7–30 days to validate your setup, then scale to 365
  • Schedule daily runs with Apify Scheduler β€” hotel prices change constantly
  • Use Apify Proxy (useApifyProxy: true) for better success rates on large runs
  • Monitor up to 10 hotels per run for optimal speed and reliability
  • Track sold-out patterns over time to map demand cycles in your market
  • Compare rate_options to analyze refundable vs. non-refundable pricing strategies
  • Use price_primary (not price) when comparing against your own rates

πŸ”— Integrations

Connect this scraper to your existing workflow:

IntegrationUse case
Apify SchedulerAutomate daily/weekly price monitoring
WebhooksGet notified when a run completes
APIPull data programmatically (see API tab)
Google SheetsDirect export for quick analysis
n8n / Make / ZapierNo-code automation pipelines
JSON / CSV / ExcelDownload in any format

πŸš€ Use cases

Daily competitor monitoring β€” Track what your competitive set charges across every room type, every day. See exactly how competitors price their rooms, when they discount, and when they sell out.

Revenue management β€” Feed room-level market data into pricing decisions. Compare your rates against competitors using matching rate options (same occupancy, same cancellation policy, same meal plan).

Seasonal trend analysis β€” Scrape 365 days to visualize demand curves, identify shoulder seasons, and plan promotions around events and holidays.

Portfolio benchmarking β€” Manage multiple properties? Compare each one against its local market at the room-type level.

Travel platform data feeds β€” Power booking engines, metasearch tools, or dashboards with structured, validated pricing data.


❓ FAQ

Does this work with any Booking.com property? Yes β€” any hotel, resort, riad, apartment, or boutique property listed on Booking.com, in any country.

What currencies are supported? All currencies available on Booking.com: USD, EUR, GBP, MAD, AED, SAR, JPY, and 30+ more.

What does rooms_left: null mean? Booking.com is not displaying a scarcity alert for this room β€” it has comfortable availability. When inventory drops, Booking.com shows alerts like "Only 3 left!" and rooms_left captures that exact count.

What does rooms_left: 10 mean? This is Booking.com's display cap. The actual inventory is 10 or more β€” Booking.com doesn't show exact counts above this threshold.

Why are sold-out dates valuable? Sold-out dates reveal peak demand periods. If a competitor is fully booked, that's a high-demand window where you can optimize your own rates.

What's the difference between price and price_primary? price is the absolute cheapest rate (might be a 1-person restricted offer). price_primary is the best rate matching standard 2-guest occupancy β€” the one revenue managers should benchmark against.

How is this different from Voyager's Booking Scraper? Voyager scrapes hotel listings from search results (many hotels, basic data). This actor scrapes room-level pricing within specific hotels (deep data per property). They serve different use cases and can complement each other.

How often should I run this? For active revenue management, daily runs are recommended. Prices and availability on Booking.com change frequently β€” sometimes multiple times per day.

Can I scrape more than 10 hotels? For optimal reliability, each run handles up to 10 hotels. For larger sets, schedule multiple runs or use the Apify API to batch them.


πŸ“ Changelog

v2.0.3 β€” March 2026

  • βœ… Clean output schema β€” reduced from 35+ fields to 22 focused fields
  • βœ… Accurate max_guests β€” uses Booking.com's data-fltrs attribute (most reliable source)
  • βœ… fit filtering β€” rate options only include rates matching your search parameters
  • βœ… Fixed rooms_left extraction β€” expanded JSON parsing window + safety net pass
  • βœ… Fixed is_breakfast_included β€” correctly detects all Booking.com breakfast formats
  • βœ… price_primary β€” new field for revenue management benchmarking

v2.0.0 β€” February 2026

  • ✨ Room-by-room extraction with multiple rate options per room
  • ✨ rooms_left + availability_status availability tracking
  • ✨ Discount detection with original price and percentage
  • ✨ Meal plan and cancellation policy extraction
  • ✨ Sold-out detection across date ranges

v1.0.0 β€” February 2026

  • Initial release

πŸ’¬ Support & feature requests

Have a question, found a bug, or want a new feature? β†’ Open an issue on the Issues tab.

Want a custom solution for your revenue management needs? β†’ Reach out via Issues.


Built by NoraView Intelligence β€” AI-powered revenue management for independent hotels.

Track Booking.com prices by room type, per night, up to 365 days ahead. Get rooms_left, rate options, meal plans, discounts, refundable pricing, and sold-out detection. Clean structured output for revenue management and competitive analysis. CSV, JSON, HTML, Excel.