Booking.com Rates Scraper
Pricing
from $1.50 / 1,000 rate rows
Booking.com Rates Scraper
The Booking.com Rates Scraper prices named hotels across a whole range of check-in dates, lengths of stay and occupancies in one run, returning total and per-night rates, taxes, cancellation terms, sold-out dates and ~100 competitor rates per stay — ideal for revenue management and rate shopping.
Pricing
from $1.50 / 1,000 rate rows
Rating
0.0
(0)
Developer
FalconScrape
Maintained by CommunityActor stats
1
Bookmarked
14
Total users
5
Monthly active users
2 days ago
Last modified
Categories
Share
📈 Booking.com Rates Scraper: Hotel Price Tracker and Rate Shopping
Track Booking.com hotel rates across a whole calendar in one run. The Booking.com Rates Scraper takes the properties you care about, a range of check-in dates, the lengths of stay and the occupancies you sell, and returns one clean rate row per combination: total price, price per night, taxes, cancellation terms and sold-out dates. Use it as a hotel price tracker, a rate shopping tool for revenue management, or a simple alternative to a Booking.com API for rate data.
Most Booking.com scrapers price one stay per run, so a rate calendar means scheduling sixty near-identical jobs and stitching them together. This one takes the whole matrix as input.
🎯 Use Cases
- Hotel price tracker: schedule a daily run over the next 90 days and build your own Booking.com rate history, date by date.
- Hotel revenue management: see your own published rates for every check-in date, length of stay and occupancy in one table, and spot where minimum-stay pricing kicks in.
- Hotel rate shopping against your comp set: switch on competitor rates and every cell also returns about 100 nearby properties priced for the exact same stay.
- Rate parity checks: compare the Booking.com rate for each date with what your own website or other channels show for the same stay.
- Sold-out and demand signals: see which dates a competitor sells out, weeks before they arrive.
- Market research for analysts: export city-level hotel price comparison data with stars, review scores and location for each property.
✨ Features
- Whole date ranges, not single stays: give a first and last check-in date and every date in between is priced. Booking.com sells about 450 days ahead, and the Actor covers that whole horizon.
- Multiple lengths of stay: price 1, 2, 3, 4, 5, 6, 7, 10, 14, 21 or 28 nights side by side.
- Multiple occupancies: 1 to 6 adults, each priced separately, so you see where the rate jumps to a larger unit.
- Sold-out dates are real rows:
soldOut: truewith null prices. "Sold out" and "no data" mean opposite things to a revenue manager, and this Actor keeps them apart. - Competitor rates for the same stay: around 100 same-city properties per cell, priced for identical dates, occupancy and length of stay. A like-for-like hotel comp set, not a separate search.
- Paste a name, URL or ID: a hotel name (
The Savoy, London), a Booking.com property URL, or a property ID. A name and a URL of the same hotel are priced once, not twice. - 20 currencies: rates are quoted in the currency you choose.
- Complete series first: the matrix is filled property by property, so a run that stops at your limit still holds full date series for the properties it reached.
- Fair billing: you pay per rate row. The run never prices more cells than
maxItemsor your run's cost limit allows, and competitor rows never use up the budget your own rate rows need. When the cost limit is reached the run stops cleanly and its status says how many stays were left.
🛠️ How It Works
- List your properties: one per line, as a hotel name, a Booking.com property URL or a property ID. The log prints the property each entry matched, so check it on a first small run.
- Set the check-in date range, lengths of stay and occupancies: every combination is priced. Two lengths of stay and two occupancies over 30 dates is 120 rate rows. Leave the dates empty for the next 14 days.
- Run the scraper and download the rates as JSON, CSV, Excel or HTML, or pull them through the API into your BI tool.
⚙️ Input
Only the property list is required.
| Field | What it does |
|---|---|
Properties (hotels) | Hotel names, Booking.com property URLs or property IDs, one per line. |
First check-in date (checkinFrom) | Start of the range, YYYY-MM-DD. Defaults to tomorrow. |
Last check-in date (checkinTo) | End of the range, YYYY-MM-DD. Defaults to 14 dates. Dates past the ~450-day horizon are clamped. |
Lengths of stay (losNights) | Nights per stay. Each date is priced once per length. Default 1 and 2. |
Occupancy (occupancy) | Adult counts. Each date and length is priced once per occupancy. Default 2. |
Currency (currency) | Currency for all rates. Default USD. |
Include competitor rates (includeCompetitors) | Also return ~100 nearby properties priced for the same stay, billed separately. Default off. |
Maximum rate rows (maxItems) | Stop after this many rate rows for your properties. Competitor rows are not counted here. Default 100. |
Example: a 90-day rate calendar for two London hotels at two lengths of stay.
{"hotels": ["The Savoy, London", "https://www.booking.com/hotel/gb/claridge-s.en-gb.html"],"checkinFrom": "2026-11-01","checkinTo": "2027-01-29","losNights": ["1", "2"],"occupancy": ["2"],"currency": "GBP","includeCompetitors": false,"maxItems": 400}
Rate rows are properties × dates × lengths of stay × occupancies. Ten hotels over 90 dates with 3 lengths of stay and 2 occupancies is 5,400 rows, so maxItems is your seatbelt. Large matrices need a longer run timeout: the run stops about 30 seconds before its timeout, keeps everything collected so far, and its status says how many stays were not reached.
When the run ends, its status message sums it up, for example Saved 28 rate rows. 3 sold out., plus any stays that failed to load or were not listed. A run where nothing could be loaded at all is marked as failed, so a scheduled job never passes an empty dataset off as a success.
💰 Pricing: Booking.com Rates per Row
Pay only for the rates you get. No monthly rental.
| Event | Price | What you get |
|---|---|---|
| Rate row | $0.0015 per row ($1.50 per 1,000) | One stay for one of your properties: a check-in date, length of stay and occupancy. Sold-out dates included. |
| Competitor rate row | $0.0001 per row ($0.10 per 1,000) | One nearby property priced for the same stay. Only when competitor rates are on. |
| Actor start | $0.00005 per run | Charged once when the run starts. |
Examples:
- Default input (The Guardsman, London: 14 dates, 1 and 2 nights) = 28 rate rows = $0.042.
- One hotel, 90 dates, 2 lengths of stay = 180 rate rows = $0.27. With competitor rates on, add ~18,000 competitor rows ($1.80) = $2.07.
- Ten hotels, 90 dates, 2 lengths of stay, daily for 30 days = 54,000 rate rows = $81.
📊 Sample Output Data
One row per property × check-in date × length of stay × occupancy. Below, a real rate row for The Savoy and a real competitor row priced alongside it (from two different runs).
[{"hotelId": 280149,"hotelName": "The Savoy","hotelUrl": "https://www.booking.com/hotel/gb/the-savoy.en-gb.html","slug": "the-savoy","stars": 5,"reviewScore": 9.4,"reviewsCount": 1433,"checkin": "2026-10-21","checkout": "2026-10-23","nights": 2,"adults": 2,"rooms": 1,"soldOut": false,"currency": "USD","totalPrice": 2335.44,"pricePerNight": 1167.72,"priceBeforeDiscount": null,"taxesAndCharges": 467.09,"roomName": null,"bedrooms": null,"beds": 1,"mealPlan": null,"breakfastIncluded": false,"freeCancellation": true,"freeCancellationUntil": "2026-10-19T23:00:00Z","noPrepayment": true,"geniusRateAvailable": false,"address": "Strand","district": "Westminster Borough, London","distanceFromCentre": "0.4 miles from centre","city": "London","countryCode": "gb","latitude": 51.5102983074989,"longitude": -0.12086033821106,"isCompetitor": false,"comparedToHotelId": null,"comparedToHotelName": null,"scrapedAt": "2026-10-13T06:19:08.422Z"},{"hotelId": 5789033,"hotelName": "The Guardsman Hotel","stars": 5,"reviewScore": 8.8,"checkin": "2026-10-02","checkout": "2026-10-03","nights": 1,"adults": 2,"soldOut": false,"currency": "GBP","totalPrice": 273.13,"pricePerNight": 273.13,"priceBeforeDiscount": 329.86,"taxesAndCharges": 59.38,"mealPlan": "Breakfast included","breakfastIncluded": true,"freeCancellation": true,"freeCancellationUntil": "2026-09-30T23:00:00Z","isCompetitor": true,"comparedToHotelId": 280149,"comparedToHotelName": "The Savoy","…": "…"}]
totalPrice is the cheapest available rate for the whole stay and taxesAndCharges is the extra Booking.com lists as not included in it. priceBeforeDiscount is the struck-through price when the property runs a deal. A sold-out cell keeps every property field but has soldOut: true and null prices.
| Field | Description |
|---|---|
hotelId, hotelName, hotelUrl, slug | Property identity and link |
checkin, checkout, nights, adults, rooms | The matrix cell this rate belongs to |
soldOut | true when the property has no availability for this cell; prices are then null |
totalPrice, pricePerNight, currency | Cheapest available rate for the whole stay and per night |
priceBeforeDiscount, taxesAndCharges | Pre-discount price and excluded taxes and fees, where Booking.com shows them |
roomName, bedrooms, beds | The unit the rate was matched to, where Booking.com labels it |
mealPlan, breakfastIncluded | What the rate includes |
freeCancellation, freeCancellationUntil, noPrepayment | Booking conditions attached to the rate |
stars, reviewScore, reviewsCount | Property quality signals, for normalising comparisons. null when the property has no reviews yet |
address, district, distanceFromCentre, city, countryCode, latitude, longitude | Location |
isCompetitor, comparedToHotelId, comparedToHotelName | false for your properties; on competitor rows, the property they were priced alongside |
scrapedAt | When the rate was captured: the key for your time series |
🔁 Schedule and Integrate Your Hotel Price Tracker
For rate tracking, run it once a day with the same input. Every run is a dated snapshot of the calendar, and together they form your rate history: the difference between runs is rate movement, and the difference between your rate and the comp set is your position. Set it up in Apify Schedules. Send the rows to Google Sheets, Zapier, Make, n8n or a webhook with Apify integrations, so new rates land where your revenue team already works.
🤖 Use with AI Agents (MCP)
This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (https://mcp.apify.com). An agent can call it with:
{ "hotels": ["The Savoy, London"], "losNights": ["1"], "occupancy": ["2"], "maxItems": 14 }
❓ Booking.com API and Rates FAQ
Does Booking.com have an official API? Booking.com offers APIs to approved partners: a connectivity API for hotels and channel managers to manage their own inventory, and an affiliate (demand) API for approved affiliate partners. Neither gives open access to the public rates of any property you choose. This Actor needs no key, account or approval and returns the same public rates a guest sees, laid out as a date × length of stay × occupancy matrix with a competitor set.
How do I track Booking.com hotel prices over time?
Booking.com doesn't show past prices. Schedule this Actor daily with the same input and keep each run's dataset (or append it to a Google Sheet). Key on checkin, nights, adults and scrapedAt to chart how each future date's rate moves.
Do I need a Booking.com account? No. The Actor collects only the public rates any visitor sees without logging in. It collects no private personal data. How you use the data is your responsibility; consult a lawyer if you are unsure.
Does it return every room type and rate plan? No. Each cell returns the cheapest available rate matching that occupancy, which is what rate shopping compares. A full room × meal plan × cancellation policy grid is not part of this Actor.
Why is roomName, mealPlan or priceBeforeDiscount empty?
Booking.com doesn't always label the unit behind the cheapest offer, especially for hotels, and shows a meal plan or a struck-through price only when there is one. Those fields are null then; the price is still the rate for that stay.
Why didn't the price change between 1 and 2 adults? The same room was matched for both. Rates move when the occupancy forces a larger unit, which is Booking.com's own pricing behaviour.
How many competitors do I get, and can I track a whole city? Around 100 per cell, drawn from the same city as your property and priced for the identical stay; the set varies slightly by date and availability. The Actor is built around named properties, so for city-wide listings use the Booking.com Listings Scraper below.
Something is broken or missing? Open an issue on the Issues tab and it will be looked at. Custom versions and other data sources are available on request.
🔗 Related Scrapers
- Booking.com Listings Scraper: every property in a city with prices, to find the hotels you then track here.
- Booking Reviews Scraper: guest reviews for the same properties, to pair rates with reputation.
- Google Hotels Scraper & Price Tracker: hotel prices across booking sites on Google, for rate parity checks beyond Booking.com.
- TripAdvisor Reviews Scraper: TripAdvisor reviews for your property and its comp set.