Booking Hotels Scraper - Most Comprehensive avatar

Booking Hotels Scraper - Most Comprehensive

Pricing

from $0.08 / 1,000 hotels

Go to Apify Store
Booking Hotels Scraper - Most Comprehensive

Booking Hotels Scraper - Most Comprehensive

πŸ”₯ ~$0.1/1K hotels πŸ”₯ Get hotel profiles, guest reviews, facilities, photos, nearby places, and stay availability by hotel or destination.

Pricing

from $0.08 / 1,000 hotels

Rating

0.0

(0)

Developer

Kai

Kai

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

4

Monthly active users

5 days ago

Last modified

Share

Booking Hotels

Search Booking.com by destination, or collect details for known hotels by URL or ID. Each Dataset item can include property details, photos, facilities, reviews, nearby places, rooms, availability, and rates.

Choose how to find hotels

Your starting pointUseThe Actor returns
A city, area, landmark, airport, or hotel namedestination and stayMatching properties and, when available, rooms and rates for the stay
One or more known propertieshotelsThe exact properties identified by Booking.com URL or numeric ID

Use one route in a new run. If you provide both, the destination search takes precedence.

Search a destination and check a stay

Use exact dates in YYYY-MM-DD format, or dates relative to the UTC run date. Relative dates keep a saved input useful for later runs.

{
"destination": "Tokyo, Japan",
"stay": {
"checkIn": "60 days",
"checkOut": "63 days",
"adults": 2,
"childrenAges": [],
"rooms": 1,
"currency": "JPY"
},
"results": {
"maxHotels": 10,
"sortBy": "guest_rating",
"includeReviews": false
},
"filters": {
"starRatings": ["4", "5"],
"minimumReviewScore": 8,
"propertyTypes": ["Hotels"],
"hotelAmenities": ["Free WiFi"]
}
}

The filters in this example keep four- and five-star hotels with a guest score of at least 8 and free Wi-Fi.

Collect known hotels

Use a Booking.com URL or numeric hotel ID when you do not need a destination search:

{
"hotels": [
"https://www.booking.com/hotel/jp/park-tokyo.html"
],
"results": {
"includeReviews": false
}
}

Add stay when you also need current availability. Add results.includeReviews: true when you need individual guest reviews.

Check one known hotel with prices and reviews

{
"hotels": [
"https://www.booking.com/hotel/jp/park-tokyo.html"
],
"stay": {
"checkIn": "60 days",
"checkOut": "63 days",
"adults": 2,
"childrenAges": [4, 9],
"rooms": 1,
"currency": "JPY"
},
"results": {
"includeReviews": true,
"maxReviewsPerHotel": 10
},
"language": "en-us"
}

Settings such as maxHotels and sortBy apply only to destination searches.

Search for one named hotel

A hotel name can also be a destination. This route can return the availableRooms field shown in the output reference.

{
"destination": "Park Hotel Tokyo, Tokyo",
"stay": {
"checkIn": "60 days",
"checkOut": "63 days",
"adults": 2,
"childrenAges": [],
"rooms": 1,
"currency": "JPY"
},
"results": {
"maxHotels": 1,
"sortBy": "recommended",
"includeReviews": false,
"maxReviewsPerHotel": 20
},
"language": "en-us"
}

Input reference

Use a destination search or a list of exact hotels. Choose one method for a new run. Dates can be exact, such as 2027-12-15, or relative to the UTC run date, such as 60 days.

New runs in Apify Console start with the Tokyo destination and stay values from the first destination example. API calls do not add a destination or stay.

Complete destination-search input

Select only the filters that match your search. A narrow combination can return no hotels.

{
"destination": "Tokyo, Japan",
"stay": {
"checkIn": "60 days",
"checkOut": "63 days",
"adults": 2,
"childrenAges": [],
"rooms": 1,
"currency": "JPY"
},
"results": {
"maxHotels": 1,
"sortBy": "guest_rating",
"includeReviews": false,
"maxReviewsPerHotel": 20
},
"filters": {
"starRatings": [
"4",
"5"
],
"minimumTotalPrice": 30000,
"maximumTotalPrice": 60000,
"minimumReviewScore": 8,
"freeCancellation": true,
"distanceFromCenter": "3km",
"propertyTypes": [
"Hotels"
],
"neighborhoods": [
"Shinjuku Ward"
],
"mealPlans": [
"Breakfast included"
],
"hotelAmenities": [
"Free WiFi"
],
"roomAmenities": [
"Balcony"
],
"bedPreferences": [
"Double bed"
],
"brands": [
"Mitsui Garden"
],
"sustainabilityCertified": true,
"minimumBedrooms": 1,
"minimumBeds": 1,
"travelPurpose": "business"
},
"language": "en-us",
"proxyConfiguration": {
"useApifyProxy": true
}
}

Main fields

FieldTypeDefaultHow to use itExample
destinationstringnoneEnter a city, area, landmark, airport, or hotel name to search. Add stay and leave hotels empty."Tokyo, Japan"
stayobjectnoneSet dates and guests for availability. Partial or omitted dates are accepted; without both dates, no availability search is run.{"checkIn":"60 days","checkOut":"63 days"}
hotelsstring[]noneAdd Booking.com hotel URLs or numeric IDs when you already know the exact hotels. Leave destination empty. Repeated entries are processed in input order and can produce repeated records.["179801"]
resultsobjectshown belowSet search result limits, ordering, and review collection. With hotel URLs or IDs, change only the review settings.{"maxHotels":10,"includeReviews":true}
filtersobjectnoneNarrow a text search. Filters are ignored when destination search is not selected.{"starRatings":["4","5"]}
languagestringen-usChoose the locale for returned text and localized filter labels. Common values are en-us, en-gb, fr, de, es, it, and ja."fr"
proxyConfigurationobject{"useApifyProxy":true}Optional connection settings for the run.{"useApifyProxy":true}

For the recommended nested form, provide one of destination or hotels. If you provide both, destination search takes precedence and hotels is not used. Filters, results.maxHotels, and results.sortBy apply only to destination searches. Unknown fields are accepted, but they do not affect the run. In the legacy flat form, search takes precedence when both search and urls are present, so the URL list is not used for that request.

stay

FieldTypeDefaultHow to use itExample
checkInstringnoneChoose an exact date as YYYY-MM-DD, or a date relative to the UTC run date using days, weeks, months, or years."60 days"
checkOutstringnoneChoose an exact or relative checkout date. Relative dates are resolved when the run starts."63 days"
adultsinteger2Set the number of adult guests for the whole stay, from 1 to 30.2
childrenAgesinteger[][]Add one age, from 0 to 17, for each child. The Actor derives the child count from this list; do not add a separate children field.[4,9]
roomsinteger1Set the total number of rooms, from 1 to 30. Guests apply to the stay as a whole, not to individual rooms.2
currencystringnoneRequest stay prices in a three-letter uppercase currency. A price filter without currency is ignored."JPY"

results

FieldTypeDefaultHow to use itExample
maxHotelsinteger20Limit a text search to at most 250 hotels. Use 0 to collect all available results. Do not change it for hotel URLs or IDs.10
sortBystringrecommendedOrder text-search results by recommended, guest_rating, price_lowest, distance, stars_highest, or stars_lowest. Do not change it for hotel URLs or IDs."guest_rating"
includeReviewsbooleanfalseSet true to add individual reviews to each hotel record. This works for searches and specific hotels.true
maxReviewsPerHotelinteger20When reviews are enabled, stop after this many reviews per hotel, up to 1000. Use 0 to collect all available reviews.50

filters

All filters apply only to destination searches.

FieldTypeDefaultHow to use itExample
starRatingsstring[][]Keep hotels with any selected star rating. Values are strings from 1 through 5; you can select more than one.["4","5"]
minimumTotalPricenumbernoneSet the lowest total price for the full stay. The price filter is used only when both bounds and stay.currency are present.30000
maximumTotalPricenumbernoneSet the highest total price for the full stay. Incomplete price filters are ignored.60000
minimumReviewScoreintegernoneKeep hotels with a guest score at or above this whole number, from 5 through 9.8
propertyTypesstring[][]Keep selected property types. Use full labels available for the same destination, stay, and language.["Hotels"]
neighborhoodsstring[][]Limit results to named neighborhoods or districts available for the destination.["Shinjuku Ward"]
mealPlansstring[][]Keep stays offering the selected meal plans. Use the full localized labels.["Breakfast included"]
hotelAmenitiesstring[][]Keep properties with the selected hotel-wide amenities.["Free WiFi"]
roomAmenitiesstring[][]Keep stays with the selected in-room amenities.["Balcony"]
bedPreferencesstring[][]Request the selected bed option when it is available for the destination and stay.["Double bed"]
brandsstring[][]Keep hotels from the selected chains or brands available at the destination.["Mitsui Garden"]
freeCancellationbooleanfalseSet true to keep stays that offer a free-cancellation option.true
distanceFromCenterstringnoneSet the maximum distance from the destination center: 1km, 3km, or 5km."3km"
sustainabilityCertifiedbooleanfalseSet true to keep properties marked with a sustainability certification.true
minimumBedroomsintegernoneFor apartments or homes, require at least this many bedrooms, from 1 to 10.2
minimumBedsintegernoneRequire at least this many beds, from 1 to 10.2
travelPurposestringnoneSet the stay context to business or leisure."business"

Property, neighborhood, meal, amenity, bed, and brand names depend on the destination, stay, and selected language. Copy the full localized label shown in Booking.com's filters for the same search, such as Hotels or Free WiFi. Matching ignores capitalization and extra spaces. Names that are unavailable or ambiguous are ignored without failing the run.

Hotel record reference

The Actor saves one Dataset record for each returned hotel. Optional sections appear only when they apply. A null value means that Booking.com did not return a value. An empty array means that the section returned no items.

The examples shorten long arrays to one item. Review objects can contain the guestName and guestAvatarUrl keys. The JSON examples omit both keys because their values can identify individual guests. The exact keys remain in the field reference, so the shortened JSON is not an all-fields record.

Hotel details and rates

This example includes property details, rates, facilities, photos, food, reviews, and stay availability.

The direct-hotel record above did not contain availableRooms, and its matchingUnitConfiguration was null. This destination-search example shows both fields.

{
"hotelId": 179801,
"name": "Park Hotel Tokyo",
"availability": {
"price": {
"originalTotal": {
"amount": "189789.09090909088",
"currency": "JPY",
"formatted": "Β₯189,789"
}
},
"matchingUnitConfiguration": {
"name": "Twin Room - Non Smoking - Above 26th floor",
"area": null,
"beds": 2,
"bedrooms": 0,
"livingRooms": 0,
"kitchens": 0,
"bathrooms": 0,
"unitCount": 1,
"units": [
{
"unitTypeId": 8,
"name": "Twin Room - Non Smoking - Above 26th floor",
"unitCount": 1
}
]
}
},
"availableRooms": [
{
"roomId": "17980105",
"name": "Twin Room - Non Smoking - Above 26th floor",
"occupancy": 2,
"beds": 2,
"bathrooms": 0
}
]
}

Retained hotel projection

This selected-field projection matches retained Actor output captured on 31 July 2026. The shown values are unchanged. That run had results.includeReviews: false, so review fields are absent.

{
"recordType": "hotel",
"status": "complete",
"failedSections": [],
"hotelId": 179801,
"name": "Park Hotel Tokyo",
"city": "Tokyo",
"countryCode": "jp",
"starRating": {
"value": 4,
"symbol": "STARS"
},
"reviewScore": 9,
"reviewsCount": 3489,
"stayRequest": {
"checkIn": "2026-09-29",
"checkOut": "2026-10-01",
"adults": 2,
"children": 0,
"childrenAges": [],
"rooms": 1,
"currency": "JPY"
},
"availability": {
"hasAvailability": true,
"price": {
"total": {
"amount": "97988.9328",
"currency": "JPY",
"formatted": "Β₯97,989"
},
"originalTotal": null,
"averagePerNight": null,
"chargesText": [],
"taxExceptionsText": []
},
"freeCancellationAvailable": true,
"rateComponents": [
{
"roomId": "17980101",
"occupancy": 2,
"mealPlanId": 2,
"policyGroupId": "366275015",
"packageId": "0",
"finalPrice": {
"amount": "97988.9328",
"currency": "JPY",
"formatted": null
},
"originalPrice": {
"amount": "97988.9328",
"currency": "JPY",
"formatted": null
},
"freeCancellationUntil": "2026-09-27T15:00:00.000Z"
}
],
"matchingUnitConfiguration": {
"name": "Queen Room - Non Smoking - Above 27th floor",
"area": null,
"beds": 1,
"bedrooms": 0,
"livingRooms": 0,
"kitchens": 0,
"bathrooms": 0,
"unitCount": 1,
"units": [
{
"unitTypeId": 9,
"name": "Queen Room - Non Smoking - Above 27th floor",
"unitCount": 1
}
]
}
},
"scrapedAt": "2026-07-31T13:43:40.200Z"
}

Top-level field reference

FieldTypeMeaning
recordTypestringAlways hotel.
statusstringcomplete when all requested sections succeeded; otherwise partial.
failedSectionsstring[]Requested sections that did not complete.
inputSourcestringThe URL, hotel ID, or destination that produced the record.
hotelIdintegerBooking.com hotel ID.
namestringHotel name.
urlstring or nullThe hotel URL from your input. A numeric hotel ID gives https://www.booking.com/hotel/<id>. Search results have null.
accommodationTypestring or nullProperty type.
address, city, countryCodestring or nullProperty address data.
latitude, longitudenumber or nullProperty coordinates.
starRatingobject or nullStar value and symbol.
preferredLevelstring or nullBooking.com preferred-property level.
isTravelProud, isSustainablebooleanProperty markers.
description, summarystring or nullProperty description and summary.
reviewScore, reviewsCountnumber or nullOverall guest score and advertised review count.
ratingScoresobject[]Scores for categories such as cleanliness and location.
houseRulesobject or nullCheck-in and check-out times.
facilitiesobject[]Hotel facilities and charge information.
photosobject[]Original photo URLs, text, types, and tags.
surroundingsobject or nullNearby places grouped by category.
mealsobject[]Available meal details.
restaurantsobject[]On-site restaurants and cuisines.
legalInfoobject or nullTrader and company contact data.
finePrintsstring[]Important notices and conditions.
languagesSpokenstring[]Spoken languages. This list can be empty.
featuredReviewsobject[]Reviews selected for the hotel profile.
reviewsobject[]Requested individual reviews. Present only when reviews are enabled.
reviewsMetadataobjectReview count and completion data. Present only when reviews are enabled.
stayRequestobjectResolved dates, guests, rooms, and currency. Present when complete dates are supplied.
availabilityobjectStructured stay availability and rates. Present when complete dates are supplied.
pricingobjectCompact price data from the hotel or search result.
availableRoomsobject[]Matching rooms from a destination result when Booking.com supplies them.
scrapedAtstringUTC time when the record was created.

Possible failedSections values are propertyInfo, reviewSummary, facilities, photos, surroundings, food, availability, location, and reviews.

Nested field reference

PathJSON type and presenceChild contract
starRatingobject or nullvalue: number; symbol: string
ratingScoresobject arrayEach item has string name and translation, plus number value and reviewsCount.
houseRulesobject or nullcheckinFrom, checkinUntil, checkoutFrom, and checkoutUntil are strings or null.
facilitiesobject arrayid and groupId: number; title: string; chargeMode: string or null
photosobject arrayid: number; url: string; altText and type: string or null; tags: object array
photos[].tagsobject arrayEach item has number id and string name.
surroundingsobject or nullCategory keys map to arrays of {name: string, distance: string}.
mealsobject arraymealType: string; price, style, and cuisine: string or null
restaurantsobject arrayname: string; cuisines: string array
legalInfoobject or nullisTrader: boolean; companyName, email, and phone: string or null
featuredReviewsobject arrayEach item uses the review contract below.
reviewsoptional object arrayPresent only when reviews are enabled. Each item uses the review contract below.
Review itemobjectscore and date: number; positiveText and negativeText: string; reviewUrl, title, guestName, guestCountry, language, guestAvatarUrl, and guestCountryName: string or null; isTranslatable: boolean or null
reviewsMetadataoptional objectadvertisedCount: number or null; returnedCount: number; complete: boolean; topicIds: string array
stayRequestoptional objectcheckIn and checkOut: string; adults, children, and rooms: number; childrenAges: number array; currency: string or null
availabilityoptional objecthasAvailability: boolean; price: object or null; freeCancellationAvailable: boolean or null; rateComponents: object array; matchingUnitConfiguration: object or null
availability.priceobject or nulltotal: money object; originalTotal and averagePerNight: money object or null; chargesText and taxExceptionsText: string array
Money objectobjectamount and currency: string; formatted: string or null
availability.rateComponentsobject arrayroomId: string; occupancy: number; mealPlanId: number or null; policyGroupId, packageId, and freeCancellationUntil: string or null; finalPrice: money object; originalPrice: money object or null
availability.matchingUnitConfigurationobject or nullname: string; area: string or null; beds, bedrooms, livingRooms, kitchens, bathrooms, and unitCount: number; units: object array
availability.matchingUnitConfiguration.unitsobject arrayunitTypeId and unitCount: number; name: string
pricingoptional objectdisplayPrice, currency, and averagePricePerNight: string; showFreeCancellation: boolean
availableRoomsoptional object arrayEach item has string roomId and name, plus number occupancy, beds, and bathrooms.

reviewsMetadata.returnedCount equals the saved reviews.length. reviewsMetadata.complete is true when the requested review limit was reached or all reviews made available by Booking.com were collected. The advertised review count can still be higher than returnedCount.

The surroundings keys depend on the property. The example includes landmarks, restaurants, cafeBars, supermarkets, beaches, skiLifts, bus, metro, train, and airports. Empty arrays are valid. Search prices and room lists also depend on the selected dates and Booking.com availability.

Availability and result behaviour

  • results.maxHotels: 0 and results.maxReviewsPerHotel: 0 collect all currently available results and can make a run much longer.
  • Review arrays stay inside their hotel record. If a record becomes too large, review collection stops and the record is marked partial.
  • A valid destination, filter combination, or dated stay can return no matching hotel. Dated hotel records report this with availability.hasAvailability: false.
  • Hotel URLs and IDs are handled independently. Malformed or unavailable references are skipped while valid siblings are still saved. If none can be returned, the run completes with zero records.
  • An omitted selection or an empty hotels/legacy urls list is a successful zero-work run that saves no records.
  • Guest counts apply to the stay as a whole. Room-by-room guest allocation is not supported.
  • The Actor does not verify that checkout is after check-in.
  • Results do not include every bookable rate plan, complete payment and cancellation terms, every tax schedule, or a checkout flow.
  • Booker country, platform-specific rates, and membership deals cannot be selected independently.
  • Flexible dates and coordinate-radius search are not input options.
  • Review sorting, traveler filters, topic filters, and review-text search are not input options.
  • Optional sections can be temporarily unavailable. Check status and failedSections before treating a hotel record as complete.
  • Booking.com can change or remove public values. Prices, room availability, ratings, and review totals are point-in-time results.