Booking.com Scraper: Hotels, Prices, Reviews, No Login avatar

Booking.com Scraper: Hotels, Prices, Reviews, No Login

Pricing

from $1.58 / 1,000 hotel results

Go to Apify Store
Booking.com Scraper: Hotels, Prices, Reviews, No Login

Booking.com Scraper: Hotels, Prices, Reviews, No Login

Get Booking.com hotels with stay prices, room rates, guest reviews and price calendars for your dates from a city or hotel link. Track price changes. No login or API key.

Pricing

from $1.58 / 1,000 hotel results

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Security

Limited permissions

Share

Booking.com Scraper takes a city, a Booking.com search link or a hotel link and returns hotels with stay prices, room offers, guest reviews and price calendars for your dates, so you can compare a market or watch price changes without manual copying. Add one city and run 10 hotels with no login or API key: this costs about $0.03 on the Free plan.

Booking.com Scraper: city and dates in, hotels with stay prices out, with rooms, reviews, price calendar and price changes

Table of contents

What it does

The Actor collects public Booking.com data in five modes, which you choose in mode:

modeWhat you addWhat you get
searchCity, region or search linkOne row per hotel with the price for your stay
hotelHotel link or hotel IDThe same row for hotels you already know
reviewsHotel link, hotel ID or cityOne row per review, without author names
calendarHotel link, hotel ID or cityOne row per check-in date, up to 365 dates
monitorSame as search and a name for the historyOnly hotels whose price changed since the last run

Every hotel row can also carry room offers, photos, facilities, category scores and nearby places.

Good fit

  • You need hotel prices for exact dates and guests, for one city or many.
  • You compare your hotel with others nearby, or follow prices every day.
  • You read guest reviews in a spreadsheet or give them to an AI agent.

Not a fit:

  • Genius, member, mobile-only and other personal prices. The Actor does not log in.
  • Flights, car rental and attractions.
  • Hotel contact details and leads.
  • Booking a room. The Actor only reads data.

👉 Try it now: open the input form

How it works

  1. You add a city, a link or a hotel ID, and your dates and guests.
  2. The Actor opens the public Booking.com results for that stay and reads hotels, rooms, reviews or dates, without a login.
  3. Rows go to the Dataset, a short report goes to RUN_SUMMARY, and you export them or send a summary to Slack or Notion.

👉 Try it now: open the input form

Quick start

The input form with three marked boxes: city, hotels to save, dates and guests

  1. Open the input form. Keep Pattaya or type your city in destination (box 1 in the picture).

  2. Keep maxItems at 10 (box 2 in the picture). This is the number of hotels to save.

  3. Open Dates and guests (box 3 in the picture) and set checkIn and checkOut. If you leave both empty, the Actor checks one night, seven days from today.

  4. Press Start. A run with these settings usually takes about two minutes.

  5. Open the Hotels and prices tab and check name, price and rating (box 5 in the picture).

    The Hotels and prices table with hotel names, stay prices and guest scores marked

Expected result: 10 rows with recordType set to hotel and status set to ok. price is the total for the whole stay in currency. The run status is SUCCEEDED and RUN_SUMMARY shows stopReason as COMPLETED, with truncated: true because Pattaya has more than 10 hotels.

👉 Try it now: open the input form

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Compare prices in a city for one staydestination, checkIn, checkOutHotel rowname, price, rating, starsCSV or Excel, Google Sheets
Check rooms and terms at hotels you followstartUrls with hotel links, includeRoomsHotel row with roomRatesroomRates, freeCancellation, excludedChargesAPI, your database
Read what guests saymode: reviews, startUrls, reviewAfterReview rowreviewDate, rating, positiveText, negativeTextAI agent, spreadsheet
Find cheap dates for a hotelmode: calendar, calendarDaysCalendar rowcheckIn, price, availabilitySpreadsheet, chart
Get told when prices movemode: monitor, stateName, an Apify scheduleChanged hotel rowchangeType, previousPrice, priceChangeSlack or Notion summary

👉 Try it now: open the input form

Input

All fields are optional. With an empty input the Actor searches Pattaya and returns up to 10 hotels for one night, seven days from the current UTC date. destinations and hotelIds take plain values, startUrls takes {"url"} objects. Duplicates in destinations, startUrls and hotelIds are removed.

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
modeWhat to collectstringNosearchsearch, hotel, reviews, calendar, monitorSets the row typereviewsStart with search
destinationCity or destinationstringNoPrefill PattayaCity or region nameSearches this placeLondonLeave empty if you add links
destinationsMore destinationsarrayNoEmptyCity or region namesAdds searches["Phuket","Krabi"]Each place has its own maxItems
startUrlsBooking.com linksarrayNoEmptyHotel or search linksUses these hotels or that search[{"url":"https://www.booking.com/hotel/th/hilton-pattaya.html"}]In JSON, each link is a {"url"} object. Link filters are kept
hotelIdsHotel IDsarray of integersNoEmptyPositive numbersChecks these hotels[27653]Links are usually easier
maxItemsMaximum hotels per searchintegerNo101 or moreStops each search at this number100Start small, see Limits
checkIn, checkOutCheck-in and check-out datesstringNoOne night, seven days from todayYYYY-MM-DDStay dates2026-12-01Set both or neither
dateRangesSeveral date rangesarrayNoEmpty{"checkIn","checkOut"} objectsRepeats the search per range[{"checkIn":"2026-12-01","checkOut":"2026-12-03"}]Replaces the two date fields
adultsAdultsintegerNo21 to 50Guests for the price3Match your real stay
roomsRoomsintegerNo11 to 50Rooms for the price2Match your real stay
childrenAgesChildren's agesarrayNoEmpty0 to 17Adds children to the stay[4,9]One number per child
currencyCurrencystringNoUSDThree-letter codePrice currencyEUR
currenciesSeveral currenciesarrayNoEmptyThree-letter codesRepeats each search["USD","THB"]Replaces currency, multiplies cost
languageLanguagestringNoen-gbBooking.com codeHotel text languagedeReview text stays original
languagesSeveral languagesarrayNoEmptyBooking.com codesRepeats each search["en-gb","fr"]Replaces language, multiplies cost
minPrice, maxPriceStay price limitsnumberNoEmpty0 or moreTotal for the whole stay, without excluded charges50, 150Not a price per night
minScoreMinimum guest ratingnumberNoEmpty0 to 10Keeps hotels at or above it8
starsStar ratingsarrayNoEmptyStar numbersKeeps these stars[4,5]Empty also includes unrated hotels
propertyTypeProperty typestringNoAnyhotel, apartment, hostel, resort, villa, guestHouse, holidayHomeLimits the searchvilla
sortBySort hotels bystringNodistance_from_searchprice, bayesian_review_score, review_score_and_price, class_asc, class_desc, class_and_price, popularityOrder of the searchpriceMatters with a small maxItems
freeCancellationOnlyFree cancellation onlybooleanNofalsetrue, falseKeeps these offerstrueRead the deadline in the room offer
breakfastIncludedBreakfast included onlybooleanNofalsetrue, falseKeeps these offerstrue
includeDetailsHotel descriptions and facilitiesbooleanNotruetrue, falseAdds text, photos, policiesfalseTurn off for speed
includeRoomsRoom types and offersbooleanNotruetrue, falseAdds roomTypes, roomRatesfalseTurn off for speed
includeReviewScoresCategory scores and review summarybooleanNotruetrue, falseAdds score fieldsfalse
includeSurroundingsNearby placesbooleanNofalsetrue, falseAdds surroundingstrue
includeReviewsAlso collect anonymous reviewsbooleanNofalsetrue, falseAdds review rows after hotelstrueAdds review charges
maxReviewsPerHotelMaximum reviews per hotelintegerNoEmpty1 or moreStops reviews per hotel and language500Empty: all in reviews mode, 100 in others
reviewSortSort reviews bystringNoNEWEST_FIRSTMOST_RELEVANT, OLDEST_FIRST, SCORE_DESC, SCORE_ASCReview orderSCORE_ASCKeep newest with reviewAfter
reviewAfterReviews from datestringNoEmptyYYYY-MM-DDKeeps this date and later2026-01-01Limits history and cost
reviewLanguagesReview text languagesarrayNoEmptyLanguage codesSkips other reviews["en","de"]More pages may be checked
reviewScoreReview score groupstringNoALLREVIEW_ADJ_SUPERB, REVIEW_ADJ_GOOD, REVIEW_ADJ_AVERAGE_PASSABLE, REVIEW_ADJ_POOR, REVIEW_ADJ_VERY_POORKeeps one score groupREVIEW_ADJ_POOR
calendarStartDateCalendar startstringNoFirst check-in dateYYYY-MM-DDFirst date to check2026-12-01
calendarDaysCalendar daysintegerNo301 to 365Dates per hotel90
calendarNightsNights per calendar stayintegerNo11 to 30One night: rounded price. More: exact total3More than one night adds a check per date
stateNameMonitor namestringNodefaultLetters, numbers, _, -Name of the saved historypattaya-2-adultsOne name per guest set
onlyNewOnly new recordsbooleanNofalsetrue, falseSkips records seen beforetrueWorks with stateName
includeUnchangedInclude unchanged pricesbooleanNofalsetrue, falseMonitor also returns unchanged hotelstrueAdds hotel charges
outputFormatOutput formatstringNonestednested, flatflat writes arrays as JSON textflatUse flat for spreadsheets
proxyConfigurationProxyobjectNoApify datacenterDatacenter groups or your proxy URLsNetwork route{"useApifyProxy":true}Keep the default
deliveryConnectorSend results tostringNoEmptyYour connectorPosts a short summaryChoose in the formSee Slack or Notion
deliveryTargetNotion page or channelstringNoEmptyNotion page link or Slack channel IDWhere the summary goesSlack channel ID

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Links and a city togetherdestinationstartUrlsBoth run. In the form, clear destination if you only want linksPattaya + one hotel linkAdds one more search
Several valuesmaxItemsdestinations, dateRanges, currencies, languagesThe limit applies to each combination2 cities × 2 date ranges × 10Up to 40 hotels
Date fieldscheckIn, checkOutdateRangesdateRanges winsBoth setOnly the ranges are checked
One date onlycheckInno checkOutThe run stops with BOTH_DATES_REQUIREDCheck-in onlyNo charge
Search link filtersstartUrlsminScore, stars, other filtersA filter you set here replaces the same filter in the linkLink with 4 stars + stars: [5]Other link filters stay
Empty starsstars: []stars: [4,5]The empty list includes unrated hotels, the list does not[4,5]Fewer rows
Monitor with guestsstateNameadults, rooms, datesUse a separate name for each guest setpattaya-2-adultsMixed names compare unlike prices
Reviews from a citymode: reviews, destinationmaxItemsmaxItems sets hotels, maxReviewsPerHotel sets reviews5 hotels × 100Up to 500 reviews

Input examples

Hotels in a city

{
"destination": "Pattaya",
"maxItems": 10,
"checkIn": "2026-12-01",
"checkOut": "2026-12-02"
}
  • Expected behavior: one search for one night and 2 adults.
  • Expected output: up to 10 hotel rows with price, rating and roomRates.
  • Limit or cost note: about $0.03 on the Free plan and usually about two minutes.

Fast price list without details

{
"destination": "Bangkok",
"maxItems": 850,
"includeDetails": false,
"includeRooms": false,
"includeReviewScores": false
}
  • Expected behavior: several search pages, with repeated hotels removed.
  • Expected output: up to 850 hotel rows with prices and scores, without rooms and descriptions.
  • Limit or cost note: about $1.94 on the Free plan and about one minute.

Reviews of one hotel

{
"mode": "reviews",
"startUrls": [
{ "url": "https://www.booking.com/hotel/th/hilton-pattaya.html" }
],
"maxReviewsPerHotel": 800
}
  • Expected behavior: newest reviews first, up to 800.
  • Expected output: review rows with reviewDate, rating, positiveText, negativeText and managerReply.
  • Limit or cost note: about $1.47 on the Free plan. Use reviewAfter to stop early.

A year of dates for one hotel

{
"mode": "calendar",
"startUrls": [
{ "url": "https://www.booking.com/hotel/th/hilton-pattaya.html" }
],
"calendarDays": 365
}
  • Expected behavior: 365 check-in dates of one night each.
  • Expected output: calendar rows with checkIn, availability, minimumNights, price and priceText.
  • Limit or cost note: about $0.18 on the Free plan. priceIsRounded is true because Booking.com shows rounded labels for this view.

Price changes every day

{
"mode": "monitor",
"destination": "Pattaya",
"maxItems": 50,
"stateName": "pattaya-2-adults",
"checkIn": "2026-12-01",
"checkOut": "2026-12-02"
}
  • Expected behavior: the first run saves the prices as a base and marks hotels as new. Later runs compare with that base.
  • Expected output: rows with changeType set to priceDown, priceUp, soldOut, available or new.
  • Limit or cost note: if nothing changed, the run ends with NO_CHANGES and you pay only for the checks.

👉 Try it now: open the input form

Output

The Dataset has one table with three row types in recordType: hotel, review and calendar. Use the tabs Hotels and prices, Property details, Review text, Calendar and monitoring and Spreadsheet columns, or open All fields. A field with no value in the source is null, not 0.

Output fields

FieldMeaningTypeCan be empty?Example / enumSource / notes
recordTypeRow typestringNohotel, review, calendar
statusRow statusstringNook
hotelIdBooking.com property numberintegerNo27653Use with hotelIds
nameHotel namestringNoBella Villa Cabana
urlHotel pagestringNohttps://www.booking.com/hotel/th/...Without personal parameters
priceTotal for the whole staynumberYes62.18In calendar rows, a rounded label if priceIsRounded is true
pricePerNightprice divided by nightsnumberYes62.18
priceBeforeDiscountCrossed-out pricenumberYes100.29Only if shown
excludedChargesTaxes and fees not in pricenumberYes3.93
priceWithChargesprice plus excludedChargesnumberYes66.11
currencyPrice currencystringNoUSD
availabilityCan you book these dates?stringYesavailable, soldOut, unknown
starsStar classnumberYes4Many apartments have none
ratingGuest score, 0 to 10numberYes7.8In review rows, the score of that review
reviewsCountNumber of reviewsintegerYes1054
address, city, countryCodeLocationstringYesNaklua, thWith details on
lat, lngCoordinatesnumberYes12.99, 100.92
distanceFromCenterMetersDistance from the city centernumberYes122null for region searches such as Pattaya
distanceLabelDistance as Booking.com shows itstringYes1.2 km from centerIn the language you chose
checkIn, checkOut, nights, adults, roomsThe stay you asked formixedNo2026-11-11
roomRatesOffers for your datesarrayYesPrice, meal plan, cancellationWith includeRooms
roomTypesRoom descriptions and facilitiesarrayYesWith includeRooms
facilities, photos, descriptionHotel detailsmixedYesWith includeDetails
reviewCategories, reviewDistribution, reviewSummaryScore detailsmixedYesStaff 8.4With includeReviewScores. reviewSummary is not on every hotel
surroundingsNearby placesarrayYesWith includeSurroundings
changeType, previousPrice, priceChangeChange since the last runmixedYespriceDown, priceUp, soldOut, available, new, unchangedmonitor only
reviewId, reviewDate, title, positiveText, negativeTextReview contentstringYesreview rows
travelerType, roomType, stayCheckIn, stayCheckOut, managerReplyReview contextmixedYesreview rows. No author name, photo or profile
minimumNights, stayNights, priceText, priceIsRoundedCalendar detailsmixedYes$55, truecalendar rows
destination, language, fetchedAtRun contextstringYesPattayafetchedAt is the time of the check

Output entities and surfaces

SituationDataset/API/KVS/live viewResult shapeUser action
Normal itemDatasetHotel, review or calendar row. RUN_SUMMARY has stopReason COMPLETEDExport or read through the API
Domain-empty resultKey-value store RUN_SUMMARYNo rows, status SUCCEEDED, stopReason NO_MATCHES, NOT_FOUND or NO_CHANGESCheck the name, filters or link
Partial resultDataset and RUN_SUMMARYSaved rows stay. CHARGE_LIMIT is SUCCEEDED with partial: true. COMPLETED_WITH_SKIPS means some hotels had broken data and were skipped. truncated: true means maxItems was reachedRaise the limit, or use the rows as they are
Technical failure or retryLog, RUN_SUMMARYStatus FAILED, a SOURCE_* code or DEADLINE, saved rows stay, partial: true. Each request is tried up to 3 times firstRun again later or read Troubleshooting
ReportsKey-value store COMPARISON, MARKET_SUMMARYPrice comparison by destination and dates, summary of the saved rowsMARKET_SUMMARY describes your rows, not the whole market

Output example

This is a shortened row from the Quick start run (Pattaya, 2026-11-11 to 2026-11-12). distanceFromCenterMeters is null because Pattaya is a region search. changeType is null outside monitor.

{
"recordType": "hotel",
"status": "ok",
"hotelId": 27653,
"name": "Bella Villa Cabana",
"url": "https://www.booking.com/hotel/th/best-western-bella-villa-cabana.html",
"stars": 4,
"rating": 7.8,
"ratingLabel": "Good",
"reviewsCount": 1054,
"price": 62.18,
"pricePerNight": 62.18,
"priceBeforeDiscount": 100.29,
"excludedCharges": 3.93,
"priceWithCharges": 66.11,
"currency": "USD",
"availability": "available",
"address": "55/7 M.1Sukhumvit Rd. Naklua Banglamung, 20150 Naklua , Thailand",
"city": "Naklua",
"countryCode": "th",
"lat": 12.9901208145351,
"lng": 100.922231376171,
"distanceFromCenterMeters": null,
"propertyType": "HOTEL",
"checkInTime": "14:00",
"checkOutTime": "11:00",
"breakfast": "Breakfast included",
"freeCancellation": false,
"roomRates": [
{
"roomId": "2765301",
"name": "Deluxe Standard - No Pets",
"price": 62.18,
"currency": "USD",
"mealPlan": "BREAKFAST",
"priceBeforeDiscount": 100.29,
"priceInHotelCurrency": 2099.26,
"hotelCurrency": "THB",
"excludedCharges": 3.93
}
],
"checkIn": "2026-11-11",
"checkOut": "2026-11-12",
"nights": 1,
"adults": 2,
"rooms": 1,
"destination": "Pattaya",
"language": "en-gb",
"fetchedAt": "2026-11-04T11:22:25.032Z",
"changeType": null
}

Send results to Slack or Notion

Pick your connector in the optional deliveryConnector field. After the run saves its data, the Actor posts a short summary (up to 25 rows and a link to the full dataset) there. Put a Notion page link or a Slack channel ID in deliveryTarget: in Notion every run is added on top of that one page, so your workspace does not fill up with new pages. A delivery error never fails the run and costs nothing extra. Connect a service once in Apify Console → MCP connectors.

Use case → fields

Use caseFields to read
Price listname, price, currency, checkIn, checkOut, rating
Full cost of a stayprice, excludedCharges, priceWithCharges, roomRates
Reputation checkrating, reviewCategories, reviewDate, positiveText, negativeText
Cheap datescheckIn, availability, price, priceIsRounded, minimumNights
Price alertchangeType, previousPrice, price, priceChange

👉 Try it now: open the input form

Pricing

You pay per result and per check. The Actor pays its own Apify platform usage, so you do not get a separate usage bill for the run.

Pricing unit

Prices per event on the Free plan. Paid Apify plans pay less: Bronze 10% less, Silver 20% less, Gold and higher 30% less. The Store page shows your price.

EventFree plan priceWhen it is charged
hotel (main price)$0.00225 ($2.25 per 1,000)Each saved hotel row
review$0.0018 ($1.80 per 1,000)Each saved review
calendar-day$0.00045 ($0.45 per 1,000)Each saved calendar date
check$0.0035Each search page or hotel check, including checks that find no matches or no changes
review-page$0.001Up to 25 reviews read after a city search, or each page after the first for a direct hotel link
calendar-page$0.001Up to 31 dates read after a city search, or each batch after the first for a direct hotel link

Cost examples

Free plan prices. Real numbers can be a little higher when one search has to be split into several price ranges.

ScenarioInput scopeExpected item/event countBase chargeOptional chargeStop/cap behavior
Quick start1 city, 10 hotels1 check, 10 hotel$0.026NoneStops at maxItems
Medium run1 city, 100 hotels1 check, 100 hotel$0.2285NoneStops at maxItems or your spending limit
Large price list1 city, 850 hotels9 check, 850 hotel$1.944NoneStops at maxItems or your spending limit
Hotel reviews1 hotel link, 800 reviews1 check, 31 review-page, 800 review$0.0035 + $0.031$1.44Stops at maxReviewsPerHotel
Year calendar1 hotel link, 365 dates1 check, 11 calendar-page, 365 calendar-day$0.0035 + $0.011$0.16425Stops at calendarDays
No matches or no changesAnyAt least 1 check, 0 rowsFrom $0.0035NoneSUCCEEDED, NO_MATCHES or NO_CHANGES
  • Spending limit: the smallest limit that the run accepts is $0.006, enough for one check and one hotel. When the limit is reached, the run stops with CHARGE_LIMIT, keeps saved rows and starts no new work.
  • Empty results: a search with no matches, or a monitor with no changes, is charged for its checks only.
  • Invalid input: rejected before any request, with no charge.
  • Failed runs: you pay for rows and checks finished before the failure. The rows stay in the Dataset.

👉 Try it now: open the input form

Limits

  • Time: with details and rooms on, one hotel takes about 5 to 6 seconds in our tests, so 100 hotels take 7 to 11 minutes. Without details, 850 hotels took under one minute. A run that reaches its timeout stops with DEADLINE and keeps saved rows. The default timeout is 3600 seconds: for more than about 550 hotels with details, raise it in Run options or turn details off.
  • One hotel: up to 40 seconds and 2.5 MiB of responses per hotel. Over that, or with broken data, the hotel is skipped without a hotel charge. A run stops on the third skip; every 20 saved rows allow one more, but three in a row always stop it.
  • Tested sizes: 850 hotels from one search, 800 reviews from one hotel, 365 calendar dates. maxItems has no fixed upper limit, but a larger run depends on what Booking.com shows.
  • Search window: Booking.com shows about 1,000 results per search. The Actor splits a larger search by price range and removes repeated hotels. If a range cannot be split further, the run stops with a clear error.
  • Prices: prices are public prices for the chosen dates, guests and currency at the time of the check. Genius, member and mobile-only prices are not included. Booking.com can show different visitors different prices: in our tests most prices matched across repeated runs, but one run in eight was 7% higher, and one hotel showed $53 in one run and $172 in the next, minutes apart, because only the first visitor got a discount.
  • Calendar: one night gives rounded labels (priceIsRounded: true). Use calendarNights above 1 for exact stay totals, or dateRanges with includeRooms for full offers.
  • Monitor: because visitor prices can differ, a single priceUp or priceDown is a signal to check, not proof of a new rate. Confirm it with the next run before you act. soldOut needs a direct check. A hotel missing from a search is not marked sold out. History keeps up to 30,000 records per stateName and drops the oldest and sold-out records first.
  • Reviews: author name, photo and profile are not returned. Review text is cleaned of the shown name and contact details on a best-effort basis, so read it before you publish it.
  • Rooms: an offer in roomRates can have name: null when Booking.com does not name it. Price and terms are still there.
  • Reports: MARKET_SUMMARY and COMPARISON describe your saved rows, not the whole market.
  • Proxy: Apify datacenter proxies are used by default. Residential, Unblocker and Google SERP groups are rejected with USE_DATACENTER_OR_CUSTOM_PROXY. Your own proxy URLs are allowed.

👉 Try it now: open the input form

API, export and integrations

  • Export: download the Dataset as JSON, CSV, Excel, XML or HTML from the run page. For spreadsheets, set outputFormat to flat.
  • API: start the Actor with the Apify API and read rows from the default Dataset. RUN_SUMMARY is in the default key-value store.
  • Scheduling: create an Apify schedule with mode: monitor to follow prices every day.
  • Webhooks: use Apify webhooks or the Make, Zapier and n8n integrations to send new rows to your systems.
  • SDK: call the Actor from the Apify client for JavaScript or Python.

This Actor is a separate tool. It is not a Booking.com API and is not connected with Booking.com.

Use with AI agents (MCP)

  • MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/booking-scraper.
  • Smallest useful input:
{ "destination": "Pattaya" }
  • Key output fields: name, price, currency, rating, url.
  • Time and cost: usually about two minutes and about $0.03 on the Free plan.
  • Limits: public prices only. Set checkIn and checkOut, or the stay is one night, seven days from today.

👉 Try it now: open the input form

Troubleshooting

The run has no rows

  • Symptom: SUCCEEDED, an empty Dataset, stopReason is NO_MATCHES.
  • Likely reason: the place has no offers for these dates, or the filters are too narrow. RUN_SUMMARY shows how many rows were dropped in filtered.
  • Check: try the same search on Booking.com in your browser.
  • Action: remove minPrice, maxPrice, minScore or stars, or change the dates.

A hotel was not found

  • Symptom: stopReason is NOT_FOUND, or notFound is above 0 in RUN_SUMMARY. notFoundInputs lists the first 20 of them.
  • Likely reason: the link or the ID is old or wrong.
  • Check: open the link in your browser.
  • Action: copy the link again from Booking.com.

The monitor returns nothing

  • Symptom: stopReason is NO_CHANGES.
  • Likely reason: prices did not change since the last run with this stateName.
  • Check: unchanged in RUN_SUMMARY.
  • Action: this is normal. Set includeUnchanged to true to see all prices.

The run stopped with CHARGE_LIMIT

  • Symptom: fewer rows than maxItems, partial: true.
  • Likely reason: your maximum cost per run was reached.
  • Check: events in RUN_SUMMARY.
  • Action: raise the limit or lower maxItems.

The run failed with DEADLINE

  • Symptom: status FAILED, saved rows are in the Dataset, partial: true.
  • Likely reason: the run timeout ended before the work did.
  • Check: the timeout in Run options and the number of saved rows.
  • Action: raise the timeout, lower maxItems, or turn off includeDetails and includeRooms.

The run failed with SOURCE_BLOCKED, SOURCE_RATE_LIMIT or SOURCE_TIMEOUT

  • Symptom: status FAILED, rows saved before the error stay.
  • Likely reason: Booking.com did not answer for now, even after repeats.
  • Check: the error text in the log and blockedRequests in RUN_SUMMARY.
  • Action: wait some minutes and run again. If you changed the proxy, go back to the default.

The run ended with COMPLETED_WITH_SKIPS

  • Symptom: status SUCCEEDED, partial: true, hotelsSkipped is above 0 and warnings names the reason.
  • Likely reason: Booking.com returned broken or very large data for that hotel. One hotel may use up to 40 seconds and 2.5 MiB of responses. Over that, it is skipped and the run moves on.
  • Check: hotelsSkipped and warnings in RUN_SUMMARY. A skipped hotel adds no hotel charge.
  • Action: run that hotel again later by its link. The run stops on the third skip. Every 20 saved rows allow one more skip, but three in a row always stop it. It ends with status FAILED and the source code, because that usually means a wider problem at the source.

The run failed at once with an input error

  • Symptom: status FAILED, no rows, no charge, a code such as BOTH_DATES_REQUIRED, INVALID_DATES, INVALID_BOOKING_URL or INVALID_CURRENCY.
  • Likely reason: a value has the wrong format.
  • Check: the message in the log and in RUN_SUMMARY.
  • Action: fix that field. Dates are YYYY-MM-DD, and check-out must be after check-in.

👉 Try it now: open the input form

FAQ

Do I need a Booking.com account or an API key?

No. The Actor reads public pages without a login. You need only an Apify account.

Why is price different from my browser?

Your browser can show Genius or member prices, another currency, or other guests. Booking.com prices also change often. Compare with a private window and the same dates and guests. excludedCharges shows taxes and fees that are not in price.

Is this an official Booking.com API?

No. It is a separate tool that returns public data through the Apify API. It is not connected with Booking.com.

Do I pay when there are no results?

You pay only for the checks, usually $0.0035 on the Free plan. Invalid input costs nothing.

Can I get hotel emails or phone numbers?

No. The Actor does not return contact details.

Do reviews include guest names?

No. Rows have the review text, score, date, traveler type and room type, without the author's name, photo or profile.

How fresh is the data?

Each row is read during your run. fetchedAt shows the time. Rows are not reused from earlier runs.

👉 Try it now: open the input form

👉 Try it now: open the input form

Support

Open a request in the Issues tab of this Actor. Add the run ID, the mode and the error text. Do not send tokens, cookies or passwords.

👉 Try it now: open the input form