Booking Scraper
Pricing
$24.99/month + usage
Booking Scraper
Scrape Booking.com hotels at scale. Extract prices, ratings, reviews, photos, availability for any destination. Filter by stars, price, score. Get 20+ data points per hotel. Supports all currencies & languages. Fast, reliable with residential proxies
Pricing
$24.99/month + usage
Rating
0.0
(0)
Developer
SilentFlow
Actor stats
1
Bookmarked
9
Total users
2
Monthly active users
15 days ago
Last modified
Categories
Share
Booking.com Hotel Scraper
by SilentFlow
Extract hotel data from Booking.com at scale. Get prices, ratings, reviews, photos, and availability for any destination worldwide.
✨ Why use this scraper?
- 📊 Comprehensive data — 20+ fields per hotel: prices, reviews, photos, amenities, and more
- 🌍 Global coverage — Search any destination worldwide: cities, regions, or entire countries
- 💰 Real-time prices — Get current availability and pricing for your dates
- ⚡ Fast & reliable — ~25 hotels/second with residential proxy support
🎯 Use cases
| Industry | Application |
|---|---|
| Travel agencies | Compare hotel prices across destinations |
| Market research | Analyze hospitality market trends |
| Price monitoring | Track competitor pricing |
| Data analytics | Build travel recommendation systems |
| Academic research | Study tourism and pricing patterns |
📥 Input parameters
Search
You have two options:
Option 1 (Recommended): Paste a Booking.com search URL — go to booking.com, set your destination, dates, guests, price range, stars, sort order, and any other filter, then copy the URL.
Option 2: Use the fields below for a simple location-based search.
| Parameter | Type | Required | Description |
|---|---|---|---|
searchUrl | string | No | Full Booking.com search URL with all filters applied |
location | string | No | City, region, or country (e.g., "Paris", "Bali", "New York") |
checkIn | string | No | Check-in date in YYYY-MM-DD (default: 7 days from now) |
checkOut | string | No | Check-out date in YYYY-MM-DD (default: 8 days from now) |
adults | integer | No | Number of adult guests (default: 2) |
children | string | No | Comma-separated ages of children (e.g., "2,5,10") |
rooms | integer | No | Number of rooms (default: 1) |
Either searchUrl or location is required.
Options
| Parameter | Type | Default | Description |
|---|---|---|---|
currency | string | USD | Currency for prices (USD, EUR, GBP, JPY, etc.) |
language | string | en-us | Results language (en-us, fr, de, es, it, ja, etc.) |
maxItems | integer | 100 | Maximum hotels to return (max: 1,000) |
enrichDetails | boolean | false | Visit each hotel page for full description, photos, facilities |
Tip: Need to filter by price, stars, or review score? Set those filters on booking.com and paste the URL into
searchUrl— the scraper reads all filters directly from the URL.
enrichDetailsadds ~1-2s per hotel (3 parallel workers). A 50-hotel scrape takes ~20-30s extra. You get full descriptions, 10-60 photos per hotel, facilities list, and highlights.
📊 Output data
Each hotel record contains:
{"hotelId": "12345678","name": "Grand Hotel Paris","type": "Hotel","url": "https://www.booking.com/hotel/fr/grand-hotel-paris.html","address": "1 Avenue des Champs-Élysées","city": "Paris","country": "fr","latitude": 48.8566,"longitude": 2.3522,"distanceFromCenter": "0.5 km from center","publicTransport": "Champs-Élysées Clemenceau station is within 200 yards","starRating": 5,"reviewScore": 9.2,"reviewCount": 2847,"reviewWord": "Superb","price": 450.00,"originalPrice": 520.00,"currency": "EUR","pricePerNight": 225.00,"taxesAndCharges": 45.00,"mainPhoto": "https://cf.bstatic.com/xdata/images/hotel/...","photos": ["https://cf.bstatic.com/..."],"checkIn": "2026-04-15","checkOut": "2026-04-17","description": "Located on the Champs-Élysées...","facilities": ["Free WiFi", "Spa", "Restaurant", "Parking"],"highlights": ["Great location", "Top-rated breakfast"],"freeCancellation": true,"breakfastIncluded": true,"noPrepayment": false,"isPreferred": true,"isSustainable": true,"scrapedAt": "2026-04-01T12:00:00Z"}
🗂️ Data fields
| Category | Fields |
|---|---|
| Identity | hotelId, name, type, url |
| Location | address, city, country, latitude, longitude, distanceFromCenter, publicTransport |
| Ratings | starRating, reviewScore, reviewCount, reviewWord |
| Pricing | price, originalPrice, currency, pricePerNight, taxesAndCharges, discount |
| Media | mainPhoto, photos |
| Details | description, facilities, highlights |
| Policies | freeCancellation, breakfastIncluded, noPrepayment |
| Badges | isPreferred, isPreferredPlus, isSustainable |
| Meta | checkIn, checkOut, scrapedAt |
🚀 Examples
Simple search — Paris hotels
{"location": "Paris","maxItems": 50}
Detailed hotel data with photos & description
{"location": "Tokyo","checkIn": "2026-07-01","checkOut": "2026-07-05","adults": 2,"currency": "JPY","maxItems": 50,"enrichDetails": true}
Using a Booking.com URL (with all filters)
{"searchUrl": "https://www.booking.com/searchresults.html?ss=New+York&checkin=2026-08-01&checkout=2026-08-03&nflt=class%3D5%3Breview_score%3D90","maxItems": 100}
💻 Integrations
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("silentflow/booking-scraper").call(run_input={"location": "Barcelona","checkIn": "2026-09-01","checkOut": "2026-09-03","maxItems": 50,"currency": "EUR"})for hotel in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{hotel['name']}: {hotel['price']} {hotel['currency']}")
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('silentflow/booking-scraper').call({location: 'London',checkIn: '2026-10-15',checkOut: '2026-10-17',maxItems: 100,currency: 'GBP'});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(hotel => console.log(`${hotel.name}: £${hotel.price}`));
📈 Performance & limits
| Metric | Value |
|---|---|
| Hotels per page | ~25 |
| Average speed | ~25 hotels/second |
| Max items per run | 1,000 |
| Supported destinations | Worldwide |
💡 Tips for best results
- Use specific locations — "Paris, France" works better than just "Paris"
- Use
searchUrlfor advanced filters — Set price range, stars, review score, sort order directly on booking.com, then paste the URL - Set realistic dates — Prices vary significantly by date
- Start small — Test with
maxItems: 10before large scrapes
❓ FAQ
Q: How do I filter by price, stars, or review score?
A: Go to booking.com, apply all your filters, then paste the URL into searchUrl. The scraper reads filters directly from the URL.
Q: Why are some prices different from the Booking.com website? A: Prices on Booking.com vary based on user location and login status. The scraper sees prices as a new visitor.
Q: Can I scrape hotel details pages? A: This scraper focuses on search results. For detailed info (full description, all photos, room types), contact us for a custom solution.
Q: What happens if no hotels are found? A: The scraper returns an empty dataset. Check your location spelling and date range.
📬 Support
Need help? We're here for you:
- Feature requests: Let us know what you need
- Custom solutions: Contact us for enterprise integrations or high-volume needs
Check out our other scrapers: SilentFlow on Apify