Booking.com Hotels & Prices Scraper — Dynamic Pricing
Pricing
from $3.50 / 1,000 results
Go to Apify Store

Booking.com Hotels & Prices Scraper — Dynamic Pricing
Scrape Booking.com hotel listings, nightly prices, reviews, and availability by destination and date range. Returns hotel name, price, star rating, review score, distance from center, photos, room types. Uses Playwright + residential proxy to bypass Booking's in-house anti-bot challenge.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Booking.com Hotels & Prices Scraper
Scrape hotel listings, nightly prices, ratings, and availability from booking.com by destination + check-in/out dates.
Features
- Bulk search by
{destination, checkin, checkout, adults, rooms}tuples - Returns hotel name, Booking URL, star rating, review score + count, address, distance from center, price (display + parsed amount + currency), original price (before discount), room type, photo, free cancellation / breakfast included flags
- Paginates 25 hotels/page via
offset=query string - Currency localization (EUR / USD / GBP / etc.)
- Multi-language support via Booking subdomain selector
- Uses Playwright + Apify residential proxy + fingerprint rotation to defeat Booking's in-house anti-bot challenge
Input
{"searches": [{ "destination": "Paris", "checkin": "2026-07-01", "checkout": "2026-07-02", "adults": 2, "rooms": 1 },{ "destination": "Amsterdam", "checkin": "2026-09-10", "checkout": "2026-09-12", "adults": 1, "rooms": 1 }],"maxHotelsPerSearch": 25,"currency": "EUR","languageCountry": "en-us","proxyConfig": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
| Field | Type | Default | Notes |
|---|---|---|---|
searches | array | (required) | {destination, checkin, checkout, adults, rooms} |
maxHotelsPerSearch | int | 25 | Paginates 25 at a time |
currency | string | EUR | ISO 4217 |
languageCountry | string | en-us | Booking subdomain lang tag |
proxyConfig | object | residential | Required — datacenter IPs blocked |
Output
One row per hotel result:
{"hotelId": "le-marais-paris","name": "Hôtel du Marais","hotelUrl": "https://www.booking.com/hotel/fr/le-marais-paris.html?checkin=2026-07-01&...","starRating": 3,"reviewScore": 8.4,"reviewScoreText": "Very Good","reviewCount": 1287,"address": "75004 Paris, France","distanceFromCenter": "0.8 km from center","priceDisplay": "€ 142","priceAmount": 142.0,"priceCurrency": "€","priceBeforeDiscount": 168.0,"roomType": "Double Room","photoUrl": "https://cf.bstatic.com/.../...jpg","freeCancellation": true,"breakfastIncluded": false,"searchDestination": "Paris","searchCheckin": "2026-07-01","searchCheckout": "2026-07-02","searchAdults": 2,"searchRooms": 1,"scrapedAt": "2026-05-18T12:00:00.000Z"}
Use cases
- Dynamic pricing / revenue management: monitor competitor pricing across destinations
- Travel arbitrage: identify price gaps between OTAs (compare with Expedia, Hotels.com scrapers)
- Hospitality analytics: review-volume / score / star-rating distribution per city
- Market entry research: what's the price floor for a 3* hotel in Vienna in low season?
Notes
- Booking ships an in-house JS bot challenge (~1.4 MB obfuscated). The actor uses Playwright to actually execute it, with one IP per request and a fresh browser fingerprint each time. Expect occasional retries.
- Residential proxy is mandatory. Datacenter IPs are blocked at the challenge layer; even cold residential IPs sometimes get challenged. Crawlee's session pool retires on block automatically.
- One concurrent browser per actor run — going parallel would burn through your IP pool. If you need bulk throughput, run multiple actor instances with different proxy countries.
- DOM-scraping uses Booking's stable
data-testidattributes — degrades gracefully when they tweak class names but breaks if they rename a testid (rare, ~quarterly). - Date format:
YYYY-MM-DDrequired forcheckin/checkout.
Changelog
- 2026-05-20 — Maintenance pass: reviewed the input schema and default values for a smooth one-click start, and rebuilt the Actor on the latest base image.
Last reviewed: 2026-05-20.