Booking Price Monitor · Hotel Rate Tracker
Pricing
from $2.49 / 1,000 hotel price retrieveds
Booking Price Monitor · Hotel Rate Tracker
Track hotel market rates on Booking.com. Paste a city search URL — get avg, min, max prices per property, discount %, promo flags and free cancellation across 5 upcoming periods. No login.
Pricing
from $2.49 / 1,000 hotel price retrieveds
Rating
0.0
(0)
Developer
Corentin Robert
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Track hotel prices across any Booking.com market. Paste a city search URL — get avg, min, max rates per property across 15 date windows (3 stay durations × 5 upcoming periods) with automatic discount detection.
No login. No API key. No account required.
Who is this for?
| You are… | Typical goal | Suggested setup |
|---|---|---|
| STR / hotel revenue manager | Benchmark your property against the market for coming months | City search URL with your star/type filters |
| Property management agency | Weekly pricing report for client portfolios across multiple cities | One URL per market · schedule every Monday |
| Real estate investor | Validate projected hotel revenues before purchase | City URL with price range filter · run once |
| Travel agency / OTA analyst | Monitor seasonal rate trends and discount windows | City URL · review windowSummary in run log |
| Data analyst / BI team | Feed price time-series into a dashboard | API integration · flat-prices view |
| Competitive intelligence team | Track competitor pricing by stars, type, or neighbourhood | Filtered Booking.com URL with your criteria |
What you get by default — property name, star rating, review score, coordinates, avg/min/max nightly rate for 1-night, 2-night, and 7-night stays, weekly discount %, max discount %, promo badge detection, free cancellation flag, pay-on-arrival flag, and a full priceByWindow[] array (one entry per date/duration combination).
Coverage: runs 15 search configurations per URL — 3 stay durations (1N, 2N, 7N) × 5 date windows (J+7, J+14, J+30, J+60, J+90 from today). Properties that only appear for specific stay durations are captured automatically.
Quick start
- Open the Actor in Apify Console and click Try for free
- Go to booking.com, search for a city, apply any filters you want (stars, property type, neighbourhood…), and copy the URL from your browser
- Paste it in the Booking.com search URL(s) field
- Click Start — results appear in the Dataset tab within a few minutes
- Use the Overview view to compare properties side by side, or Flat prices for a date-by-date spreadsheet
Tip: Your filters (guest count, star rating, property type, neighbourhood…) are automatically preserved in the search.
What it extracts
Per property
| Field | Description |
|---|---|
propertyName | Property display name |
propertyUrl | Direct link to the Booking.com property page |
city | City |
starRating | Star rating (1–5) |
rating | Guest review score (e.g. 8.4) |
reviewCount | Number of reviews |
latitude / longitude | GPS coordinates |
distanceFromCenter | Distance from city centre (e.g. "1.8 km from centre") |
currency | ISO currency code (e.g. EUR, USD) |
avgPrice1N / minPrice1N / maxPrice1N | Avg / min / max nightly rate across all 1-night windows |
avgPrice2N / minPrice2N / maxPrice2N | Same for 2-night stays |
avgPrice7N / minPrice7N / maxPrice7N | Same for 7-night stays |
weeklyDiscountPct | % cheaper per night for 7-night vs 1-night stays |
maxDiscountPct | Largest discount detected across all windows (vs original price) |
hasPromo | Promo badge detected (e.g. "Limited Time Deal") |
freeCancellation | Free cancellation available on at least one window |
noPrepayment | Pay on arrival available on at least one window |
priceSamples | Number of date/duration windows where a price was found |
priceByWindow[] | Array — one entry per (checkin, checkout, nights) configuration |
scrapedAt | ISO timestamp of the run |
priceByWindow array entry
| Field | Description |
|---|---|
checkin | Check-in date (YYYY-MM-DD) |
checkout | Check-out date |
nights | Stay duration (1, 2, or 7) |
pricePerNight | Price per night for this window |
totalPrice | Total stay price |
discountPct | % discount vs original price (0 if no discount) |
hasPromoFlag | Promo badge present for this specific window |
currency | Currency for this window |
Market summary (in run log)
At the end of each market scan, the run log prints:
─── Market Summary ──────────────────────────────────────────────────────────────Properties with prices : 743/743Free cancellation : 49%With active discount : 31%With promo badge : 23%Avg price by check-in date (2-night stays):2026-06-19: 403 EUR/night (743 properties)2026-06-26: 385 EUR/night (692 properties)2026-07-12: 391 EUR/night (678 properties)2026-08-11: 420 EUR/night (621 properties)2026-09-10: 372 EUR/night (589 properties)────────────────────────────────────────────────────────────────────────────────
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
searchUrls | array | — | Booking.com search URLs. Paste one or more. |
maxProperties | number | 0 | Max properties per URL. 0 = no cap (up to ~930, Booking.com backend limit). API-only. |
verboseLogs | boolean | false | Log per-page debug details. API-only. |
Input examples
Monitor a city market:
{"searchUrls": ["https://www.booking.com/searchresults.html?ss=Barcelona%2C+Spain"]}
Monitor multiple cities at once:
{"searchUrls": ["https://www.booking.com/searchresults.html?ss=Paris%2C+France","https://www.booking.com/searchresults.html?ss=Lisbon%2C+Portugal"]}
Monitor 4-star hotels only (with star filter applied on Booking.com):
{"searchUrls": ["https://www.booking.com/searchresults.html?ss=Rome%2C+Italy&nflt=class%3D4"]}
How it works
- URL parsing — extracts destination, guest count, and all filters from the pasted URL
- Date window generation — builds 15 configurations: 1N/2N/7N stays × J+7/J+14/J+30/J+60/J+90 from today
- GraphQL fetch — calls Booking.com's internal
/dml/graphqlendpoint (HTTP-only, no browser needed) for each configuration with full pagination - Deduplication — properties found across multiple windows are merged by
pageName - Aggregation — computes avg/min/max per stay duration, weekly discount, max discount, promo flag
- Dataset push — one row per property; market summary printed to run log
Why 3 stay durations? Booking.com returns different property sets depending on stay length — a property with a 3-night minimum stay is invisible in 1-night searches. Running all three durations guarantees maximum market coverage.
Data quality — what priceSamples means
A property only appears in a search window when it is available and priced for those exact dates. A fully-booked hotel for the next month appears in fewer windows.
priceSamples | Interpretation |
|---|---|
| 1–3 | Limited availability — appeared in few windows |
| 4–9 | Good coverage across date windows |
| 10–15 | Available across all or most windows |
For deep per-date analysis, see the Flat prices dataset view.
Output sample
{"propertyName": "Saphir Grenelle","propertyUrl": "https://www.booking.com/hotel/fr/saphirgrenelle.html","city": "Paris","starRating": 3,"rating": 7.2,"reviewCount": 1720,"latitude": 48.8484,"longitude": 2.2971,"distanceFromCenter": "4.1 km from centre","currency": "EUR","avgPrice1N": 173.9,"minPrice1N": 140.66,"maxPrice1N": 197.36,"avgPrice2N": 179.81,"minPrice2N": 144.71,"maxPrice2N": 205.46,"avgPrice7N": 209.7,"minPrice7N": 196.2,"maxPrice7N": 223.2,"weeklyDiscountPct": 0,"maxDiscountPct": 0,"hasPromo": false,"freeCancellation": false,"noPrepayment": false,"priceSamples": 11,"scrapedAt": "2026-06-13T09:48:01.831Z","priceByWindow": [{ "checkin": "2026-06-19", "checkout": "2026-06-20", "nights": 1, "pricePerNight": 197.36, "totalPrice": 197.36, "discountPct": 0, "hasPromoFlag": false, "currency": "EUR" },{ "checkin": "2026-06-19", "checkout": "2026-06-21", "nights": 2, "pricePerNight": 205.46, "totalPrice": 410.92, "discountPct": 0, "hasPromoFlag": false, "currency": "EUR" },{ "checkin": "2026-06-19", "checkout": "2026-06-26", "nights": 7, "pricePerNight": 223.2, "totalPrice": 1562.42, "discountPct": 0, "hasPromoFlag": false, "currency": "EUR" }]}
Dataset views
| View | Best for |
|---|---|
| Overview | Comparing properties side by side — avg prices, discounts, promo flags |
| Flat prices | Date-level analysis, pivot tables, Excel / Sheets import |
Performance and cost
| Scenario | Properties | Time (Apify cloud) |
|---|---|---|
| Paris full market (5 windows × 3 durations) | ~740 | ~20 s |
| Marbella, Spain | ~300 | ~10 s |
| 3 cities in one run | ~2,000 | ~60 s |
Runs are HTTP-only (no browser) — 256 MB memory, high concurrency.
No residential proxy needed — Booking.com's GraphQL endpoint is not gated by the HTML WAF. The actor works reliably without any proxy configuration.
Set up automated weekly monitoring
Most users run this actor on a schedule — once a week per city — and store results over time to track price trends.
Step-by-step in Apify Console:
- Open the Actor and click Schedule (top right)
- Set the frequency — every Monday at 08:00 is the most common for weekly reports
- Paste your search URL(s) in the input
- Save — the actor will run automatically and push data to the same dataset each time
Track trends across runs with the API:
Each run appends to the default dataset. Query it via the Apify API and filter by scrapedAt to build a time-series:
$curl "https://api.apify.com/v2/datasets/{datasetId}/items?token={token}&fields=propertyName,avgPrice1N,scrapedAt"
Tip: use the flat-prices dataset view to get one row per property per date window — ideal for feeding directly into Excel, Google Sheets, or a BI tool.
How much does it cost?
You pay per hotel row successfully written to the dataset. Properties with no price are never billed.
| Plan | Price per property |
|---|---|
| FREE | $0.00399 |
| BRONZE | $0.00349 |
| SILVER | $0.00299 |
| GOLD | $0.00249 |
| PLATINUM / DIAMOND | $0.00199 |
Plus a one-time $0.05 actor start charge (same across all plans).
Typical cost
| Scenario | Properties | FREE | BRONZE | GOLD |
|---|---|---|---|---|
| Test run — Paris, 50 properties | 50 | ~$0.25 | ~$0.22 | ~$0.17 |
| Full city scan — Paris | ~740 | ~$3.00 | ~$2.63 | ~$1.89 |
| Full city scan — Marbella | ~300 | ~$1.25 | ~$1.10 | ~$0.80 |
| 3 cities in one run | ~2,000 | ~$8.03 | ~$7.03 | ~$5.05 |
All figures include the $0.05 actor-start charge.
Is it legal to scrape Booking.com?
This Actor only accesses data that Booking.com makes publicly available on its search results pages — property names, star ratings, review scores, publicly listed prices, and publicly visible policies (free cancellation, etc.). No login, account, or credentials are required or used.
As with any data, ensure your use complies with applicable regulations, including GDPR where personal data may be involved.
Local development
npm install# Edit storage/key_value_stores/default/INPUT.json with your test URLsnode src/main.js
Or use the Apify CLI:
$apify run
Also available
- Booking.com Hotel Search Scraper — Search any destination and export all hotels with prices, ratings, policies, and coordinates. Beats the 1,000 result cap.
- Booking.com Availability Monitor — Day-by-day availability calendar with sold-out detection for up to 180 days ahead.
- Booking Reviews Scraper — All guest reviews for any Booking.com property, with sentiment and contact enrichment.
- Booking Pro Host Scraper — Professional host contacts (emails, phones, company names) from Booking.com markets.
- Airbnb Price Monitor — Same concept for Airbnb: nightly rates, availability, discount detection.
Support
Custom scraper or tailored automation? Contact corentin@outreacher.fr.