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
3 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