Booking.com Availability & Rate Calendar Scraper
Pricing
from $8.00 / 1,000 property calendars
Booking.com Availability & Rate Calendar Scraper
Track Booking.com availability and nightly rates date by date. Per-property calendar with occupancy rate, min/max/median prices, weekend vs weekday rates, minimum-stay detection and remaining offers per night. No account or API key needed.
Pricing
from $8.00 / 1,000 property calendars
Rating
0.0
(0)
Developer
Luis Segura
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Track availability and nightly rates on Booking.com date by date. Give it a property, a search, or a whole destination, and get back a calendar: which nights are open, which are gone, and what each one costs.
A Booking.com scraper built for availability tracking, hotel price monitoring, occupancy analysis and rate shopping — hotels, apartments, villas, hostels and B&Bs, anywhere Booking.com lists them.
No Booking.com account required. No API key needed.
Why a calendar, not a listing dump
Most Booking.com scrapers answer "what does this property cost today?". That is one number, and it is stale tomorrow.
This actor answers the questions that number can't:
- How full is this property? 30 nights checked, 11 with no rooms left → 37% booked.
- How does it price the calendar? Weekend average vs weekday average, min, max, median.
- When does it get expensive? A rate per date, so you can see the season, the holiday spike, the soft mid-week.
- Is it sold out, or is it a minimum-stay rule? Turn on
detectMinStayand the actor probes longer stays before calling a night sold out — a distinction that quietly wrecks occupancy estimates when nobody makes it.
That is the difference between a price check and a revenue-management input.
What You Get
One dataset item per property.
Property
| Field | Description |
|---|---|
propertyId | Booking.com internal hotel ID |
propertyName | Property name |
url | Canonical property URL |
city, country | Location |
starRating | Official star rating |
reviewScore | Guest review score (0–10) |
latitude, longitude | Coordinates |
currency | Currency of every rate in the item |
Window summary
| Field | Description |
|---|---|
startDate, endDate | First and last check-in date probed |
lengthOfStay | Nights priced per date |
daysChecked | Dates successfully checked |
daysAvailable | Dates with at least one bookable room |
daysSoldOut | Dates with nothing bookable |
daysFailed | Dates that could not be checked (see calendar[].error) |
occupancyRate | daysSoldOut / daysChecked — the occupancy proxy |
minRate, maxRate, avgRate, medianRate | Nightly rate statistics |
weekendAvgRate, weekdayAvgRate | Friday/Saturday vs Sunday–Thursday check-ins |
Calendar (one entry per date)
| Field | Description |
|---|---|
date, checkout, nights | The stay window probed |
available | Whether anything was bookable |
minStayNights | Detected minimum stay, when longer than requested |
cheapestTotal, cheapestPerNight | Cheapest offer for that stay |
priceFormatted | Price as Booking.com displays it |
roomsOffered | How many rate offers came back |
cheapestRoomName | Room type of the cheapest offer |
mealPlan | e.g. all_inclusive, breakfast_included |
cancellationType | e.g. free_cancellation, non_refundable |
isGeniusRate | Whether the cheapest offer is a Genius rate |
isWeekend | Friday or Saturday check-in |
error | Why a date could not be checked (null when fine) |
How to Use It
Mode A — specific properties
{"propertyUrls": ["https://www.booking.com/hotel/do/barcelo-bavaro-palace-deluxe.html","https://www.booking.com/hotel/do/hyatt-zilara-cap-cana.html"],"daysAhead": 30,"lengthOfStay": 2,"currency": "USD"}
Any Booking.com URL works — any language, any tracking parameters. They are normalised for you.
Mode B — a search you already filtered
{"searchUrl": "https://www.booking.com/searchresults.html?ss=Punta+Cana&nflt=class%3D5","maxProperties": 25,"daysAhead": 60}
Mode C — a whole destination
{"location": "Las Terrenas","maxProperties": 20,"daysAhead": 90,"detectMinStay": true}
Sample Output
{"propertyId": "24708","propertyName": "Barceló Bávaro Palace All Inclusive","city": "Punta Cana","country": "Dominican Republic","starRating": 5,"reviewScore": 8.1,"currency": "USD","startDate": "2026-11-20","endDate": "2026-12-19","lengthOfStay": 2,"daysChecked": 30,"daysAvailable": 24,"daysSoldOut": 6,"occupancyRate": 0.2,"minRate": 742.11,"maxRate": 1204.5,"avgRate": 889.34,"medianRate": 861.2,"weekendAvgRate": 976.4,"weekdayAvgRate": 852.7,"calendar": [{"date": "2026-11-20","checkout": "2026-11-22","nights": 2,"available": true,"minStayNights": null,"cheapestTotal": 1600.0,"cheapestPerNight": 800.0,"priceFormatted": "US$1,600","roomsOffered": 12,"cheapestRoomName": "Family Double Room","mealPlan": "all_inclusive","cancellationType": "free_cancellation","isGeniusRate": true,"isWeekend": true,"error": null}],"scrapedAt": "2026-09-09T14:12:03.918Z"}
Use Cases
- Revenue management — watch your competitive set's rate and availability curve, and reprice against it.
- Hotel and STR market research — occupancy and ADR proxies for a destination, without buying a data subscription.
- Investment and acquisition analysis — seasonality and pricing power of a property before you buy it.
- Travel deal monitoring — schedule a daily run and catch the night a rate drops.
- OTA parity checks — compare Booking.com rates against your direct channel.
Schedule it daily and each run is a snapshot; stacked over weeks, the dataset becomes a booking-pace history nobody sells off the shelf.
Pricing & Cost
$0.008 per property calendar, whatever the window length — one item, one charge.
| Run | Properties | Result items | Actor cost |
|---|---|---|---|
| One property, 30 nights | 1 | 1 | $0.008 |
| Competitive set, 30 nights | 10 | 10 | $0.08 |
| Destination scan, 60 nights | 50 | 50 | $0.40 |
Platform usage (proxy and compute) is billed to your own Apify account on top, as it is by every availability monitor on the Store. That matters here because each check-in date is one request per property: a 30-day window moves about 10 MB per property, a 90-day window about 30 MB. Choose your proxy tier with that in mind, and start with a small daysAhead and maxProperties before scaling up.
Proxy Recommendations
| Volume | Recommended setting |
|---|---|
| Under ~50 requests | Apify Proxy, datacenter, is usually fine |
| Anything larger | Apify Proxy with the RESIDENTIAL group |
| Large destination scans | RESIDENTIAL plus requestsPerSecond: 1 |
The actor adapts its own rate: it backs off and refreshes its session when Booking.com pushes back, then speeds up again while requests succeed.
Limitations
- Rates are the cheapest bookable offer for the requested guest count and stay length. Change
adults,roomsorlengthOfStayand the numbers change — that is Booking.com's behaviour, not a bug. occupancyRateis a proxy, not booked occupancy. It measures what the public site refuses to sell you. A property closed for renovation and a property fully booked look the same from outside.- One-night probes are unreliable on properties with a two-night minimum. That is why
lengthOfStaydefaults to 2 and whydetectMinStayexists. - Long horizons return less data. Booking.com stops selling beyond roughly 16 months out, and many properties load far less than that.
- Dates that could not be checked are reported, not hidden — they appear in
daysFailedwith a reason incalendar[].error, so a partial run is visible instead of masquerading as a sold-out property.
Frequently Asked Questions
Do I need a Booking.com account or an API key? No. Everything comes from the public property pages, exactly what any visitor sees without logging in.
How is the occupancy rate calculated?
daysSoldOut / daysChecked — the share of probed check-in dates where Booking.com offered no bookable room for your guest count and stay length. It is a proxy for occupancy, not booked occupancy: a property closed for renovation looks the same from outside.
Can I run it every day to build price history?
Yes, and that is the point. Put it on an Apify schedule and each run is a snapshot; stacked over weeks you get booking pace and rate history for your competitive set. Pin apifyProxyCountry so every run measures from the same country — Booking.com prices vary by visitor location.
What kinds of property does it handle? Anything with a Booking.com property page: hotels, resorts, apartments, aparthotels, villas, hostels, guesthouses and B&Bs, worldwide.
Can I export the data to Excel, CSV or Google Sheets?
Yes. Every Apify dataset exports to CSV, Excel, JSON, XML or HTML, and can be pushed to Google Sheets through Apify integrations. Use the unwind=calendar export option to get one row per date instead of one row per property.
How is this different from a Booking.com price scraper? A price scraper answers "what does this cost today". This one returns the whole curve: a rate and an availability flag for every check-in date in the window, plus how many offers are left on each night — which is what tells you whether a rate is about to move.
Does it detect minimum-stay restrictions?
Yes, with detectMinStay on. When a date returns nothing, it retries with longer stays before calling the night sold out, and writes the answer to minStayNights. Without that step, every property with a two-night minimum looks fully booked.
Is scraping Booking.com legal? This Actor reads only public, non-personal information. You are responsible for how you use it, including Booking.com's Terms of Service and the data-protection rules where you operate.
Legal
This actor collects only publicly available information from Booking.com property pages — the same rates and availability any visitor sees without logging in. It collects no personal data and no guest information.
You are responsible for how you use the output, including compliance with Booking.com's Terms of Service and with the data-protection rules that apply where you operate.