Booking.com Scraper
Pricing
from $0.80 / 1,000 results
Booking.com Scraper
Scrape Booking.com hotel listings with ease. Extract prices, reviews, availability & ratings instantly. Perfect for price monitoring, travel market research, competitor analysis & accommodation data collection. Scale your data insights.
Pricing
from $0.80 / 1,000 results
Rating
5.0
(7)
Developer
Shahid Irfan
Maintained by CommunityActor stats
3
Bookmarked
25
Total users
2
Monthly active users
14 days ago
Last modified
Categories
Security
Limited permissionsShare
What does Booking.com Scraper do?
Booking.com Scraper collects structured hotel listings from a public Booking.com search results or destination page. Paste one search, city, region, district, or country URL with a destination, and the Actor returns one dataset item per unique property with hotel identity, location, ratings, displayed prices, booking policies, sustainability signals, and photo URLs.
The Actor is built for travel market research, accommodation catalogs, price and position monitoring, and hospitality competitor analysis. It paginates automatically until it reaches your result limit or page limit, removes duplicate properties, and saves each page as soon as it is ready.
Why use Booking.com Scraper?
- Build destination datasets - Collect hotel names, addresses, coordinates, star ratings, review scores, and accommodation types for a city or region.
- Track price signals - Save displayed stay prices, price before discount, average nightly amounts, currencies, and total price fields when Booking.com publishes them.
- Compare booking policies - Identify free cancellation, no-prepayment, pet-friendly, and meal-plan signals across a destination.
- Create reusable catalogs - Keep direct Booking.com hotel URLs, descriptions, badges, certifications, and photos in one exportable dataset.
- Run repeat collection - Use Apify schedules to refresh a destination weekly or daily, then send results to sheets, databases, or webhooks.
- Avoid duplicates - Properties are deduplicated by hotel identity before they are saved, even across pages.
What data can you extract from Booking.com?
Each item represents one hotel or accommodation listing. Optional fields appear only when Booking.com publishes them for that property and search context.
| Field | Type | Description |
|---|---|---|
searchUrl | String | Normalized Booking.com search URL used for collection |
searchLocation | String | Destination text from the search |
checkinDate | String | Check-in date used for the search |
checkoutDate | String | Check-out date used for the search |
stayLengthDays | Integer | Number of nights in the stay |
rooms | Integer | Number of rooms requested |
adults | Integer | Number of adults requested |
children | Integer | Number of children requested |
hotelId | Integer | Booking.com property identifier |
hotelName | String | Property display name |
hotelUrl | String | Direct Booking.com property page URL |
address | String | Property address when published |
city | String | Property city |
countryCode | String | Property country code |
latitude | Number | Property latitude |
longitude | Number | Property longitude |
displayLocation | String | Neighborhood or location text from the listing |
starRating | Number | Property star rating |
reviewScore | Number | Main guest review score |
reviewCount | Integer | Main guest review count |
reviewScoreText | String | Review score label, such as Very Good |
externalReviewScore | Number | External review score when shown |
externalReviewCount | Integer | External review count when shown |
displayPriceText | String | Price label shown for the stay |
displayPriceAmount | Number | Displayed stay price |
displayPriceCurrency | String | Currency for the displayed price |
priceBeforeDiscountAmount | Number | Price before a displayed reduction |
finalPriceAmount | Number | Final price from the best available price block |
finalPriceCurrency | String | Currency for the final price |
originalPriceAmount | Number | Original price when reported in the same currency as the final price |
originalPriceCurrency | String | Currency for the original price |
freeCancellation | Boolean | Whether free cancellation is shown |
noPrepaymentNeeded | Boolean | Whether no prepayment is shown |
petsAllowedFree | Boolean | Whether pets are shown as allowed free of charge |
mealPlan | String | Included meal-plan text when available |
description | String | Short property description |
isPreferred | Boolean | Preferred property flag |
isPreferredPlus | Boolean | Preferred Plus flag |
geniusRateAvailable | Boolean | Genius rate availability flag |
isSustainable | Boolean | Sustainability flag |
certifications | Array of Strings | Sustainability certifications |
uspBadges | Array of Strings | Property benefit badges |
cardLabels | Array of Strings | Additional listing labels |
photoUrls | Array of Strings | Property photo URLs |
topPhotoUrls | Array of Strings | Main property photo URLs |
How to use Booking.com Scraper
- Open the Actor on Apify.
- Paste a public Booking.com search results or city page URL into
startUrl. - Set
results_wantedto the maximum number of unique properties to save. - Adjust
max_pagesif the search needs more or fewer result pages. - Keep the residential proxy default for cloud runs, or adjust it for local runs.
- Start the run and open the dataset when it finishes.
- Download the results or connect the dataset to your workflow.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | String | No | London search URL | Booking.com search results, city, region, district, or country URL. Destination, dates, rooms, and guest details from the URL are used. |
results_wanted | Integer | No | 20 | Maximum number of unique properties to save |
max_pages | Integer | No | 10 | Safety cap for result pages |
proxyConfiguration | Object | No | Apify residential proxy | Apify proxy settings. Keep the residential default for cloud runs. |
The startUrl field includes a working default, so an empty run still collects a small London dataset. Provide your own URL to target another destination.
Usage Examples
Basic destination collection
Collect the first 20 unique properties for London.
{"startUrl": "https://www.booking.com/searchresults.html?ss=London%2C+Greater+London%2C+United+Kingdom&group_adults=2&no_rooms=1&group_children=0","results_wanted": 20}
Date-specific price collection
Include check-in and check-out dates to receive price and cancellation data for a specific stay.
{"startUrl": "https://www.booking.com/searchresults.html?ss=Paris%2C+Ile-de-France%2C+France&checkin=2026-11-10&checkout=2026-11-14&group_adults=2&no_rooms=1&group_children=0","results_wanted": 100,"max_pages": 8}
Collection with a specific proxy country
Cloud runs use the residential default. Set a proxy country when you need stable pricing.
{"startUrl": "https://www.booking.com/searchresults.html?ss=Dubai%2C+United+Arab+Emirates&checkin=2026-11-10&checkout=2026-11-13&group_adults=2&no_rooms=1&group_children=0","results_wanted": 60,"max_pages": 5,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "GB"}}
Sample Output
{"searchUrl": "https://www.booking.com/searchresults.html?ss=London%2C+Greater+London%2C+United+Kingdom&group_adults=2&no_rooms=1&group_children=0&checkin=2026-10-24&checkout=2026-10-25&lang=en-us","searchLocation": "London","checkinDate": "2026-10-24","checkoutDate": "2026-10-25","stayLengthDays": 1,"rooms": 1,"adults": 2,"children": 0,"hotelId": 417266,"hotelName": "Mayfair House","hotelUrl": "https://www.booking.com/hotel/gb/mayfair-house.html","address": "22-28 Shepherd Street","city": "London","countryCode": "gb","latitude": 51.5061055745871,"longitude": -0.14794796705246,"displayLocation": "Westminster Borough, London","starRating": 5,"reviewScore": 8.5,"reviewCount": 344,"reviewScoreText": "Very Good","displayPriceText": "Total","displayPriceAmount": 136007.11,"displayPriceCurrency": "PKR","priceBeforeDiscountAmount": 226676.05,"finalPriceAmount": 136007.11,"finalPriceCurrency": "PKR","freeCancellation": false,"noPrepaymentNeeded": false,"isPreferred": true,"isSustainable": false,"photoUrls": ["https://cf.bstatic.com/xdata/images/hotel/square600/868213787.webp?k=77a032d72e244baa879888b3b1bf931202dfc2e32a755cfe3996305e7fe64fda&o="]}
Prices and currencies reflect the network location and stay context of the run. A search from another country can return a different currency and a different set of available properties.
Tips for best results
- Use a complete search URL copied after selecting the destination, dates, guests, and rooms. City pages such as
https://www.booking.com/city/gb/london.htmlalso work. - Include dates when you need price or cancellation signals. If the URL has no dates, the Actor uses upcoming dates and reports them in each item.
- Stale dates are moved to the next available stay range so the search still returns prices.
- Start with
results_wanted: 20to confirm the destination and field coverage before a large run. - Increase
max_pageswhen the result limit is higher than one page can provide. Pagination is capped at 40 pages. - Keep the residential proxy enabled for cloud runs. Booking.com blocks datacenter IPs, and runs without a proxy return no listings.
- Public listing content changes often. Review the dataset preview before scheduling recurring runs.
Integrations and export formats
| Option | Useful for |
|---|---|
| JSON | Applications, data pipelines, and AI or RAG workflows |
| CSV | Spreadsheet analysis and quick imports |
| Excel | Travel reporting and business reviews |
| XML | Systems that require XML feeds |
| Google Sheets | Shared destination and competitor reports |
| Webhooks | Starting another service after a run finishes |
| Make or Zapier | No-code automation |
| Apify API | Starting runs and reading datasets from your own systems |
Frequently Asked Questions
Can I collect Booking.com listings for a specific destination?
Yes. Set startUrl to a Booking.com search results page or a city, region, district, or country page for that destination.
Can I collect multiple destinations in one run?
No. One run processes one startUrl. Create separate runs for separate destinations, or schedule several runs when you need recurring coverage.
Why is the price in an unexpected currency?
Booking.com chooses a currency from the network location and session context. To compare prices across runs, use the same proxy country and the same stay dates, or convert the saved amounts after collection.
Why are some price or policy fields missing?
Fields can be missing when Booking.com does not publish them for a property, when the search has no available inventory, or when a listing has no current offer. The Actor omits empty values from each item.
How many hotel listings can I collect?
Set results_wanted up to 1000 and max_pages up to 40. The Actor stops when it reaches the result limit, the page limit, or the end of available inventory.
Does the Actor return room-level availability?
No. It returns listing-card details and listing-level price and policy signals. Room inventory, exact room types, and live availability depend on the dates and session used for the search.
Can I export Booking.com data to CSV or Excel?
Yes. Apify datasets support CSV, Excel, JSON, XML, and other export options in Apify Console.
Can I schedule recurring Booking.com collection?
Yes. Create an Apify schedule to run the Actor hourly, daily, or weekly, then connect the run to a dataset, webhook, or integration.
What should I do if a run returns no listings?
Check that the URL is a Booking.com search results page with a destination. Add dates, try a nearby date range, and keep the residential proxy enabled if the source is inconsistent from your network. If the problem continues, report the input URL and run ID through the Issues tab.
Is it legal to collect Booking.com data?
Public web data collection can be subject to laws, privacy rules, and website terms. You are responsible for using the Actor lawfully, respecting Booking.com rules, and handling collected data responsibly.
Related Actors
- Agoda Hotels Scraper - Collect hotel listings and prices from Agoda.
- Expedia Hotels Scraper - Gather Expedia hotel listings, ratings, and location data.
- Trip.com Hotels Scraper - Build Trip.com hotel datasets for travel comparison.
Support
For bugs, field requests, or source changes, use the Issues tab on the Actor page or contact the developer through Apify. Include the input URL, run ID, and a short description of the missing or unexpected result.
Legal Notice
This Actor is intended for legitimate collection and analysis of publicly available Booking.com listing information. You are responsible for complying with Booking.com terms, applicable laws, privacy obligations, and any restrictions that apply to your intended use of the data.