BOOKING PRICE SCRAPER - by room
Pricing
Pay per usage
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
Actor stats
0
Bookmarked
17
Total users
11
Monthly active users
14 hours ago
Last modified
Categories
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?
| Feature | This Actor | Listing-level scrapers |
|---|---|---|
| Data depth | Every room type + rate options | One price per hotel |
| Date range | Up to 365 days ahead | Single date only |
| Rate options | Multiple prices per room (refundable, non-refundable, etc.) | Cheapest price only |
| Bed types | King, Twin, Suite β all differentiated | Not available |
| Availability | rooms_left + availability_status | Not available |
| Sold-out detection | Tracks which dates are fully booked | Not available |
| Meal plans | Breakfast included vs. paid, half-board, all-inclusive | Not available |
| Discount tracking | Original vs. discounted price + percentage | Basic or none |
| Guest matching | fit filtering β only shows rates matching your search | Not available |
π₯ Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
hotelUrls | array | β | β | Booking.com hotel URLs (up to 10 per run) |
daysAhead | integer | β | 30 | Number of days to scrape (1β365) |
startDate | string | β | Today | Start date in YYYY-MM-DD format |
currency | string | β | USD | Any Booking.com currency: USD, EUR, GBP, MAD, AED, JPYβ¦ |
adults | integer | β | 2 | Number of adult guests |
children | integer | β | 0 | Number of children |
rooms | integer | β | 1 | Number of rooms |
includeSoldOut | boolean | β | true | Include sold-out dates in results |
delayBetweenRequests | integer | β | 4 | Seconds between page loads (anti-blocking) |
useApifyProxy | boolean | β | false | Use 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
| Field | Type | Description |
|---|---|---|
hotel_url | string | Source URL |
hotel_name | string | Property name as shown on Booking.com |
scrape_timestamp | string | When this data was collected (UTC) |
check_in_date | string | Check-in date (YYYY-MM-DD) |
check_out_date | string | Check-out date (YYYY-MM-DD) |
room_id | integer | Booking.com internal room type ID |
room_name | string | Full room name (e.g., "Superior King Room with Pool View") |
room_name_clean | string | Room name with bed type suffix removed |
bed_type | string | Bed configuration (e.g., "1 extra-large double bed") |
max_guests | integer | Maximum occupancy for this room |
currency | string | Price currency |
price | number | Lowest available price for this room |
price_primary | number | Best price for 2-guest standard occupancy (revenue management metric) |
original_price | number | Pre-discount price (null if no discount) |
discount_percent | integer | Discount percentage (null if no discount) |
rooms_left | integer | Booking.com availability signal (null = high availability) |
availability_status | string | available, low_availability, or sold_out |
meal_plan | string | Meal plan description |
is_breakfast_included | boolean | Whether breakfast is included at no extra cost |
is_refundable | boolean | Whether free cancellation is offered |
rate_options | array | All pricing tiers for this room (see below) |
rate_options_count | integer | Number of rate options available |
Rate options structure
Each entry in rate_options contains:
| Field | Type | Description |
|---|---|---|
price | number | Price for this specific rate |
max_guests | integer | Guest count this rate is designed for |
is_refundable | boolean | Free cancellation available |
original_price | number | Pre-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
| Status | Meaning | Revenue insight |
|---|---|---|
available | Rooms widely available | Normal market conditions |
low_availability | Booking.com shows scarcity alert | rooms_left has the exact count β demand is building |
sold_out | No rooms available for this date | Peak 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.
| Value | Meaning |
|---|---|
1β9 | Exact count shown by Booking.com β real scarcity signal |
10 | Booking.com display cap β actual inventory is β₯ 10 |
null | Booking.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(notprice) when comparing against your own rates
π Integrations
Connect this scraper to your existing workflow:
| Integration | Use case |
|---|---|
| Apify Scheduler | Automate daily/weekly price monitoring |
| Webhooks | Get notified when a run completes |
| API | Pull data programmatically (see API tab) |
| Google Sheets | Direct export for quick analysis |
| n8n / Make / Zapier | No-code automation pipelines |
| JSON / CSV / Excel | Download 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'sdata-fltrsattribute (most reliable source) - β
fitfiltering β rate options only include rates matching your search parameters - β
Fixed
rooms_leftextraction β 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_statusavailability 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.