Booking Hotel Scraper avatar

Booking Hotel Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Booking Hotel Scraper

Booking Hotel Scraper

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

API ninja

API ninja

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

5

Monthly active users

a day ago

Last modified

Categories

Share

🏨 What is Booking.com Hotel Search Scraper?

Booking.com Hotel Search Scraper extracts hotel search results from Booking.com, including stay prices, guest review scores, star ratings, locations, room information, photos, and property links. Paste a Booking.com search URL, choose how many hotels to collect, and start the Actor. You can also build a search using a destination and manual filters.

Use the results to compare accommodation, research destinations, monitor prices for a specific stay, or build travel datasets. Each hotel is saved as a structured record that you can browse in Apify Console or download for further analysis.

✨ Main features

  • πŸ”— Search by URL: reuse the destination, dates, guests, filters, language, and currency from a Booking.com search results URL.
  • πŸ› οΈ Manual search: enter a location or a known Booking destination ID, then choose your stay and hotel filters.
  • πŸ“„ Automatic pagination: collect your requested number of unique hotels or enable Scrape all to continue until the API returns an empty results array.
  • ⭐ Useful comparison data: see prices, star ratings, guest scores, review counts, and distance from the center together.
  • πŸ“‹ Two table views: start with Hotel details or switch to the compact Hotel overview.
  • πŸ’Ύ Original records: retain the endpoint's nested hotel data, including null values and listing flags.

Apify also provides scheduled runs, run logs, dataset downloads, and integrations for connecting results to your other tools.

πŸš€ How to scrape Booking.com hotels

  1. Open the Actor in Apify Console and select πŸ”— Booking.com search URL as the search mode.
  2. Paste a URL from a Booking.com search results page, such as https://www.booking.com/searchresults.html?ss=New%20York.
  3. Set Desired number of hotels. Start with 25 for a small trial run, or enable Scrape all to collect every available page.
  4. Optionally expand πŸ› οΈ Manual search & filters to override dates, guests, prices, ratings, language, or currency.
  5. Start the run, follow its progress in the logs, and open the Output tab to browse or download your results.

API access: the Actor requires a valid RapidAPI subscription/key for its Booking search endpoint. For your own deployment, configure the key as the RAPID_API_KEY environment variable before running. It is separate from your Apify API token and is not an input field. A deployment without a configured key will stop with an authentication configuration error.

πŸ”— URL search example

This example searches New York for two adults and children aged 5 and 12. Without dates in the URL or manual overrides, the endpoint defaults to tomorrow for a one-night stay.

{
"searchMode": "url",
"url": "https://www.booking.com/searchresults.html?ss=New%20York&group_adults=2&group_children=2&age=5&age=12",
"maxResults": 100,
"scrapeAll": false
}

πŸ› οΈ Manual search example

Choose manual mode to search without a Booking.com URL. This example looks for New York accommodation with three, four, or five stars and a guest score of at least 7, displaying prices in USD.

{
"searchMode": "manual",
"query": "New York",
"maxResults": 100,
"scrapeAll": false,
"adults": 2,
"children_ages": "5,12",
"rooms": 1,
"stars": "3,4,5",
"min_review_score": "7",
"locale": "en-us",
"currency": "USD"
}

♾️ Scrape all available results

{
"searchMode": "url",
"url": "https://www.booking.com/searchresults.html?ss=New%20York",
"scrapeAll": true
}

With scrapeAll enabled, maxResults is ignored. The Actor keeps requesting pages until the API returns results: []. There is no fixed page or result cap. Duplicate hotels are skipped, and a page containing only duplicates does not end the search.

βš™οΈ Input settings

Search and result limits

FieldWhat to enterDefault / behavior
searchMode"url" or "manual".Defaults to "url". Set "manual" explicitly for manual searches through the API.
urlA booking.com/searchresults.html URL containing a destination.Required in URL mode. You can supply a destination override through query or a destination ID/type pair.
maxResultsInteger of at least 25.Defaults to 100. Maximum unique hotels to save; ignored when scrapeAll is true.
scrapeAlltrue or false.Defaults to false. Enable to fetch pages until the API returns an empty results array.

Pagination is handled automatically. There is no page input. Each new search starts at page 1, and page/offset hints in a pasted URL are removed.

Destination

FieldWhat to enterBehavior
queryA location, such as "New York" or "Berlin".Resolves to the first matching destination. Overrides the URL destination when supplied.
dest_idA Booking destination ID, as a string.Use together with dest_type instead of query.
dest_typeThe destination type paired with the ID, such as "city".Copy the value associated with your destination ID from Autocomplete.

In manual mode, provide either a query or both destination ID and type. Do not supply a query and a destination ID/type pair together. A URL entered in manual mode is ignored.

Stay and guests

FieldWhat to enterWhen left blank
checkinA date in YYYY-MM-DD format, today or later.Uses the valid URL date, otherwise tomorrow.
checkoutA date in YYYY-MM-DD format, after check-in.Uses the valid URL date, otherwise check-in plus one night.
adultsInteger from 1 to 30.Uses the URL value, otherwise 2.
children_agesComma-separated ages from 0 to 17, such as "5,12".Keeps URL ages, otherwise no children.
roomsInteger from 1 to 30.Uses the URL value, otherwise 1.

To remove children from a URL-based search, remove the URL's age and group_children parameters. Leaving children_ages blank preserves the URL values.

Hotel filters, language, and currency

FieldWhat to enterWhen left blank
sort_byA supported order code. The selector suggests common choices.Uses the URL order, otherwise Booking's top picks (popularity).
price_minNonnegative integer: minimum total stay price.Keeps the URL filter, otherwise no minimum.
price_maxNonnegative integer: maximum total stay price, at least price_min.Keeps the URL filter, otherwise no maximum.
starsComma-separated ratings from 1 to 5, such as "4,5".Keeps URL filters, otherwise all star ratings.
min_review_score"6" (Pleasant), "7" (Good), "8" (Very good), or "9" (Superb).Keeps the URL filter, otherwise no minimum.
localeA Booking language code, such as "en-us", "de", or "fr".Uses the URL language, otherwise en-us.
currencyA three-letter currency code, such as "USD", "EUR", or "GBP".Uses the URL currency, otherwise USD.

Booking's website sort codes, including bayesian_review_score, price_from_high_to_low, distance_from_search, and upsort_bh, are accepted as aliases.

How URL values and manual filters interact

Any explicitly passed parameter overrides its URL counterpart; invalid URL hints (past dates, unknown codes) are ignored rather than rejected. Leave optional filters blank to keep your URL settings or use the endpoint defaults.

For example, a URL with group_adults=4 keeps four adults when adults is blank. Setting adults to 2 overrides it. Explicitly entered manual values are validated: a past manual check-in date, an invalid child age, or a maximum price below the minimum will stop the run.

Both price filters refer to the total stay price in the selected currency, rather than a nightly budget.

πŸ“Š Output and example data

The default dataset contains one record per unique hotel, with the original nested structure preserved. Depending on the search, Booking may also return other accommodation types, such as apartments.

The Output tab offers:

  • πŸ“‹ Hotel details β€” default: all 33 documented fields, with location, price, rating, and room information expanded into columns.
  • 🏨 Hotel overview β€” compact: photo, name, Booking.com link, city, total stay price, currency, stars, guest score, review summary/count, distance from the center, and sold-out status.

Apify's built-in raw data view and the dataset API retain the original records. The custom tables change presentation, not stored data. Download results as JSON, CSV, or Excel from the dataset export options; JSON preserves nested objects.

What data is included?

Data groupIncluded information
PropertyHotel ID, name, Booking.com link, page name, accommodation type/type ID, and image URL.
LocationAddress, city, country code, latitude, longitude, distance from the center, nearby public transport, and central-location flag.
Reviews and starsGuest score, review count, localized review summary, star rating, and raw star symbol.
Room / unitUnit name, number of beds, and number of bedrooms, when supplied.
PriceCurrency, total stay price, nightly price, price before discount, and taxes/charges information, when supplied.
Listing flagsPreferred, sponsored, new, sold out, and sustainability flags.

The following is an illustrative record from a New York search. Your hotel's availability, order, and prices depend on the dates and guests you choose.

{
"id": 1424666,
"name": "Holiday Inn New York City - Times Square by IHG",
"link": "https://www.booking.com/hotel/us/holiday-inn-new-york-times-square-south.html",
"page_name": "holiday-inn-new-york-times-square-south",
"accommodation_type": "hotel",
"accommodation_type_id": 204,
"image": "https://cf.bstatic.com/xdata/images/hotel/square600/234143597.webp?k=7b099bf5edd5f41533f10215acf0c6ef6c22b8fc7b358ca496757b235f08d9c3&o=",
"location": {
"address": "585 8th Avenue",
"city": "New York (New York)",
"country_code": "us",
"latitude": 40.755131,
"longitude": -73.99134,
"distance_from_center": "1 miles from downtown",
"nearest_public_transport": "42nd Street-Port Authority Bus Terminal station is within 350 yards",
"is_centrally_located": true
},
"rating": {
"score": 7.9,
"count": 3190,
"word": "Good",
"stars": 3,
"stars_symbol": "NONE"
},
"unit": {
"name": null,
"beds": 2,
"bedrooms": 0
},
"price": {
"currency": "USD",
"total": 431.12,
"per_night": null,
"before_discount": 634,
"charges_info": null
},
"is_preferred": true,
"is_sponsored": false,
"is_new": false,
"is_sold_out": false,
"is_sustainable": false
}

Prices and missing values: price.total is the total price returned for the searched stay. Taxes and fee inclusion are not inferred; consult charges_info when available and verify the offer on Booking.com. A null nightly price or room name means that value was not supplied. The Actor does not replace missing prices with zero or calculate missing nightly prices.

Search-level metadata, such as destination resolution, stay dates, and pagination counts, is not added to individual hotel rows. Keep the search input with your exported dataset when comparing runs.

πŸ’° Pricing and controlling costs

This Actor uses pay-per-event pricing, effective October 12, 2026. You pay for the Actor start and each result saved to the default dataset. Apify platform usage costs for the run are included, so there is no separate platform usage charge for running this Actor.

EventStandard priceBronze, Silver, or Gold price
Actor start (apify-actor-start)$0.01 per run$0.01 per run
Saved hotel result (apify-default-dataset-item)$10.00 per 1,000 results$1.00 per 1,000 results

The result rate is $0.01 per saved hotel at the standard price or $0.001 per saved hotel with a Bronze, Silver, or Gold discount. The discount applies to results; the Actor start remains $0.01. Check the Actor's Pricing tab for the rate available to your account.

Example run costs

Hotels saved in one runStandard price, including startBronze, Silver, or Gold, including start
100$1.01$0.11
1,000$10.01$1.01

These examples assume one Actor start and the stated number of saved results. If a search saves fewer hotels, the result charge reflects the number actually saved. The $0.01 start charge applies even when no results are saved; each additional run has its own start charge.

Start with 25 results to check the search, then increase maxResults as needed. Enable Scrape all when you want every available page until the API returns an empty results array. Automatic pagination and duplicate removal help keep the dataset focused on unique hotels.

πŸ”Œ API, scheduling, and integrations

Use the same input JSON through the Apify API to run searches from scripts, applications, or automation workflows. The run's results output links to the default dataset's original hotel rows.

Save repeatable searches as tasks and schedule them to track selected destinations. For a rolling one-night search, omit fixed dates from both the URL and manual fields so the endpoint can apply its relative defaults. To compare prices for one particular trip, keep the dates, guests, currency, and filters consistent across runs.

Apify integrations let you connect runs and datasets to workflow tools and storage systems. You can also combine this Actor with other tools from Apify Store to process or deliver the resulting hotel data.

❓ FAQ and support

Why did I receive fewer hotels than requested?

maxResults is a ceiling. Your destination and filters may produce fewer results, and some hotels may repeat between pages. The Actor continues until it reaches the requested number of unique hotels or the API returns an empty results array. Try broader filters or a different stay to explore more accommodation.

Why do prices or results differ from my browser?

Compare the destination, dates, guest ages, rooms, currency, and sort order first. Prices and availability can change between searches. Manual overrides may also make the Actor's search differ from the pasted URL. Always verify an offer on the property's Booking.com page before making a reservation.

Does it collect individual guest reviews or make reservations?

It collects hotel search results, including aggregate review scores and counts. Individual review text and reservation creation are outside this Actor's scope.

What should I do if a run fails?

Check the final error in the run log. For input errors, confirm the search mode, provide a valid destination, and check dates and numeric ranges. For HTTP 401 or 403, the deployment operator should check its RapidAPI key and subscription. Rate-limit and temporary server failures are retried automatically; if they persist, check the provider's allowance and try again later. Hotels saved before a failure remain in the dataset, so inspect partial results before starting another run.

How can I report a problem or request a feature?

Open the Actor's Issues tab in Apify Console and include the run ID, relevant error message, and a minimal example of the search settings. Remove credentials before sharing input or logs. For bugs in your own deployment, you can also open an issue in the GitHub repository.