Booking.com Hotels & Prices Scraper — Dynamic Pricing avatar

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

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

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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"]
}
}
FieldTypeDefaultNotes
searchesarray(required){destination, checkin, checkout, adults, rooms}
maxHotelsPerSearchint25Paginates 25 at a time
currencystringEURISO 4217
languageCountrystringen-usBooking subdomain lang tag
proxyConfigobjectresidentialRequired — 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-testid attributes — degrades gracefully when they tweak class names but breaks if they rename a testid (rare, ~quarterly).
  • Date format: YYYY-MM-DD required for checkin/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.