BOOKING PRICE SCRAPER - by room avatar

BOOKING PRICE SCRAPER - by room

Pricing

from $3.00 / 1,000 results

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

from $3.00 / 1,000 results

Rating

5.0

(1)

Developer

NoraView Intelligence

NoraView Intelligence

Maintained by Community

Actor stats

0

Bookmarked

29

Total users

18

Monthly active users

10 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.