Booking.com Hotel Scraper -- Prices, Ratings & Availability
Pricing
Pay per usage
Booking.com Hotel Scraper -- Prices, Ratings & Availability
Scrape Booking.com hotel listings for any destination worldwide. Extract hotel names, nightly prices, guest ratings, star ratings, amenities, room types, distances, images, and availability. Supports date-based pricing, multi-room searches, currency selection, and smart pagination. Ideal for travel
Pricing
Pay per usage
Rating
0.0
(0)
Developer

Ricardo Akiyoshi
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 minutes ago
Last modified
Categories
Share
Booking.com Hotel Scraper
Scrape hotel listings from Booking.com for any destination worldwide. Extract prices, ratings, reviews, amenities, room types, availability, and more. Export data to JSON, CSV, or Excel.
Features
- Any destination — Search any city, region, or area that Booking.com supports
- Date-based pricing — Get actual prices for your check-in/check-out dates
- 36 currencies — Display prices in USD, EUR, GBP, JPY, and 32 more
- Multiple sort options — Sort by popularity, price, review score, distance, or stars
- Star rating filter — Filter to only 3-star, 4-star, 5-star, or any combination
- Rich data extraction — Hotel name, price, rating (out of 10), review count, star rating, address, distance from center, amenities, room type, images, and direct booking URL
- Free breakfast & cancellation flags — Instantly see which hotels offer these perks
- Smart pagination — Automatically follows pages to get all results
- Anti-detection — Rotates 10+ User-Agent strings with realistic browser headers (sec-fetch, sec-ch-ua, etc.)
- Deduplication — Automatically removes duplicate hotels across pages
- Proxy support — Works with Apify proxy for reliable large-scale scraping
- PPE pricing — Pay only for what you scrape (per hotel result)
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
destination | string | "New York" | City or area to search (required) |
checkIn | string | 14 days from now | Check-in date (YYYY-MM-DD) |
checkOut | string | 15 days from now | Check-out date (YYYY-MM-DD) |
adults | integer | 2 | Number of adult guests |
rooms | integer | 1 | Number of rooms |
maxResults | integer | 25 | Max hotels to scrape (0 = unlimited) |
currency | string | "USD" | Price display currency (ISO 4217) |
sortBy | string | "popularity" | Sort order: popularity, price, review_score, distance, stars |
starRating | array | [] | Filter by star rating, e.g. [4, 5] |
maxConcurrency | integer | 3 | Concurrent requests (lower = safer) |
proxyConfiguration | object | none | Apify proxy settings |
Example Input
{"destination": "Paris","checkIn": "2026-05-01","checkOut": "2026-05-04","adults": 2,"rooms": 1,"maxResults": 50,"currency": "EUR","sortBy": "review_score","starRating": [4, 5]}
Example Output
Each hotel in the dataset contains:
{"hotelName": "Hotel Le Marais","price": 189,"currency": "EUR","rating": 8.7,"reviewCount": 2451,"starRating": 4,"address": "3rd arr., Paris","distance": "0.8 km from center","amenities": ["Free WiFi", "Air conditioning", "Non-smoking rooms"],"imageUrl": "https://cf.bstatic.com/xdata/images/hotel/square200/12345.jpg","bookingUrl": "https://www.booking.com/hotel/fr/le-marais.html","roomType": "Superior Double Room","freeBreakfast": true,"freeCancellation": true,"destination": "Paris","checkIn": "2026-05-01","checkOut": "2026-05-04","nights": 3,"adults": 2,"rooms": 1,"scrapedAt": "2026-03-01T12:00:00.000Z"}
Use Cases
Travel Price Comparison
Compare hotel prices across destinations or date ranges. Find the cheapest dates for your trip by running multiple scrapes with different check-in/check-out combinations.
Hospitality Market Research
Analyze hotel pricing strategies, occupancy indicators (via price fluctuations), and competitive positioning across markets. Track how prices change over time for revenue management insights.
Travel App Data Feed
Power your travel comparison app, hotel aggregator, or price alert service with structured Booking.com data. Combine with other OTA scrapers for comprehensive coverage.
Investment & Real Estate Analysis
Evaluate hotel market saturation, average daily rates (ADR), and guest satisfaction scores by area. Useful for hospitality investment decisions and market entry analysis.
Content & SEO
Generate data-driven travel content: "Top 10 Hotels in Barcelona Under $100", "Best Rated Hotels in Tokyo", etc. Use real pricing data for authentic, valuable content.
Tips for Best Results
- Use proxies — Booking.com has aggressive anti-bot protection. Residential proxies (Apify RESIDENTIAL group) give the best results.
- Keep concurrency low — Start with
maxConcurrency: 2for reliable scraping. Increase only if proxies handle it well. - Specific destinations — "Paris, France" works better than just "Paris". More specific = more accurate results.
- Future dates only — Check-in must be a future date. If no dates are provided, the scraper defaults to 14 days from now.
- Star filter — Use
starRating: [4, 5]to focus on higher-end properties and reduce noise.
Data Fields Reference
| Field | Type | Description |
|---|---|---|
hotelName | string | Hotel property name |
price | number | Price per night (numeric) |
currency | string | Currency code (e.g., "USD") |
rating | number | Guest review score (1.0 - 10.0) |
reviewCount | number | Total number of guest reviews |
starRating | number | Official star rating (1-5) |
address | string | Hotel address or district |
distance | string | Distance from city center |
amenities | array | List of highlighted amenities |
imageUrl | string | Hotel thumbnail image URL |
bookingUrl | string | Direct link to hotel on Booking.com |
roomType | string | Recommended room type shown |
freeBreakfast | boolean | Whether breakfast is included |
freeCancellation | boolean | Whether free cancellation is available |
destination | string | Search destination used |
checkIn | string | Check-in date (YYYY-MM-DD) |
checkOut | string | Check-out date (YYYY-MM-DD) |
nights | number | Number of nights |
adults | number | Number of adult guests |
rooms | number | Number of rooms |
scrapedAt | string | ISO 8601 timestamp of when data was scraped |
Limitations
- Booking.com uses aggressive anti-bot protection. Using residential proxies is strongly recommended for production use.
- Prices shown are the "starting from" prices displayed in search results — actual prices may vary on the booking page depending on room availability.
- Booking.com frequently updates their HTML structure. If the scraper stops working, please open a GitHub issue.
- Maximum practical limit is around 500-1000 results per run due to Booking.com pagination limits.
License
MIT
Integration — Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("sovereigntaylor/booking-scraper").call(run_input={"location": "Paris, France","checkIn": "2026-04-01","checkOut": "2026-04-05","maxResults": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['hotelName']}: {item.get('price', 'N/A')} — {item.get('rating', 'N/A')} stars")
Integration — JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('sovereigntaylor/booking-scraper').call({location: 'Paris, France',checkIn: '2026-04-01',checkOut: '2026-04-05',maxResults: 50});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(item => console.log(item.hotelName || item.name || 'N/A'));