# Booking.com Scraper: Hotels, Prices and Reviews

> Booking.com scraper: get hotels, stay prices, room rates, guest reviews and price calendars from a city or hotel link for your dates. No login.

URL: https://cliqtomedia.com/actors/booking-scraper/

Category: Real estate, travel & cars · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/booking-scraper?fpr=cliqto

Get public Booking.com hotels for your dates and guests. Start with a city, a search link or a hotel link. Read prices, rooms, reviews and price calendars, with no login.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `search` in What to collect. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

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.



### Good for

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

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Search page or hotel check | $0.0035 (from $0.00245 on paid Apify plans) | One destination search page or one specific hotel/date/currency/language check, including no matches and unchanged prices. Charged before source work; invalid input is not charged. |
| Hotel result | $0.00225 (from $0.001575 on paid Apify plans) | One saved hotel result with the details and room rates requested in input. |
| Anonymous review | $0.0018 (from $0.00126 on paid Apify plans) | One anonymous guest review saved to the dataset. |
| Calendar day | $0.00045 (from $0.000315 on paid Apify plans) | One saved hotel/check-in date with price and availability. |
| Review page | $0.001 (from $0.0007 on paid Apify plans) | A source page of up to 25 reviews after a destination search, or a page after the first one for a direct hotel link. Includes filtered and final empty pages. |
| Calendar page | $0.001 (from $0.0007 on paid Apify plans) | A source batch of up to 31 check-in dates after a destination search, or a batch after the first one for a direct hotel link. Includes unchanged dates. |

- One result: about $0.0022.
- 1,000 results: about $2.25.
- Every day 100 results, for 30 days: about $6.75 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 8 November 2026. Current price: https://apify.com/cliqtomedia/booking-scraper?fpr=cliqto

## Questions

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

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

### Why is the price different from my browser?

Your browser can show Genius or member prices, another currency or other guests. Compare in a private window with the same dates.

### Can I get hotel emails or phone numbers?

No. The Actor does not return contact details. Review rows have no author name.

### 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.

## Data fields

- `recordType` (string): hotel, review or calendar. Use this column to distinguish rows.
- `status` (string): ok for a successfully collected record.
- `name` (string): Property name as published by Booking.com.
- `url` (string): Public Booking.com hotel page.
- `currency` (string): Three-letter currency for this row.
- `language` (string): Language of the description, or the original guest review language.
- `fetchedAt` (string): Time this record was collected, in ISO 8601 UTC.
- `destination` (string): Destination name or hotel link that produced this row.
- `availability` (string): available, soldOut or unknown. A missing search result alone is never treated as sold out.
- `hotelId` (integer): Stable Booking.com property number.
- `stars` (number): Property star rating; null for an unrated property.
- `rating` (number): Overall guest score, or the score for a review row, on a 0–10 scale.
- `reviewsCount` (number): Number of guest reviews reported by the property.
- `price` (number): Displayed total for the full stay. Calendar rows contain a rounded daily price label converted to a number.
- `pricePerNight` (number): Displayed stay total divided by the number of nights.
- `priceBeforeDiscount` (number): Stay total before the displayed discount, when Booking reports one.
- `excludedCharges` (number): Taxes or fees that Booking reports outside the displayed stay price.
- `priceWithCharges` (number): Displayed stay total plus excluded charges returned by Booking.
- `lat` (number): Property latitude.
- `lng` (number): Property longitude.
- `propertyTypeId` (number): Booking.com accommodation type number.
- `nights` (number): Number of nights in the stay.
- `adults` (number): Number of adults requested.
- `rooms` (number): Number of rooms requested.
- `previousPrice` (number): Price in the saved monitor baseline, or null on the first observation.
- `priceChange` (number): Current price minus the saved previous price, in this row’s currency.
- `distanceFromCenterMeters` (number): Distance to the city center in meters. Filled when the search reports it in English; null for other languages, for region searches such as Pattaya and when Booking gives no distance.
- `distanceLabel` (string): Distance text as Booking shows it in the requested language, for example 1.2 km from centre.
- `minimumNights` (number): Minimum stay length reported by the availability calendar.
- `stayNights` (number): Number of nights associated with an anonymous review.
- `ratingLabel` (string): Booking’s overall score label.
- `address` (string): Full public property address when available.
- `city` (string): Property city.
- `countryCode` (string): Two-letter property country code.
- `description` (string): Full public property description when details are on.
- `propertyType` (string): Accommodation type name reported by Booking.
- `mainPhoto` (string): Public URL of the main property photo.
- `finePrint` (string): Public property conditions and notices.
- `checkInTime` (string): Property’s check-in starting time.
- `checkOutTime` (string): Property’s latest check-out time.

## Input settings

- `mode` (string): Find hotels, check specific properties, collect anonymous reviews, get a daily calendar, or return price changes since the previous run.
- `destination` (string): Enter a city or region, such as Pattaya or London. If you provide only hotel or search links, leave this empty. With no destination or links, Pattaya is used.
- `destinations` (array): Search several cities or regions in one run. Duplicate names are removed.
- `startUrls` (array): Hotel links or search-results links copied from Booking.com. Search filters in a link are kept unless you set the matching filter below.
- `hotelIds` (array): Booking.com property numbers to check. Hotel links are usually easier to use.
- `maxItems` (integer): Maximum hotels for each destination, date range, currency and language. There is no fixed upper limit; the run timeout and your charge limit still apply.
- `checkIn` (string): Use YYYY-MM-DD. Set both dates, or leave both empty to check a one-night stay seven days from the current UTC date.
- `checkOut` (string): Use YYYY-MM-DD. The check-out date must be after check-in.
- `dateRanges` (array): Optional list of {"checkIn":"2026-12-01","checkOut":"2026-12-03"} objects. These ranges replace the two date fields above.
- `adults` (integer): Total adults staying at each property.
- `rooms` (integer): Number of rooms needed for the stay.
- `childrenAges` (array): Age of each child, from 0 to 17. Use an empty list for no children.
- `currency` (string): Three-letter currency code for prices, such as USD, EUR, GBP or THB.
- `currencies` (array): Optional currency codes. If set, each search is repeated in these currencies instead of the currency above.
- `language` (string): Booking.com language code, such as en-gb, en-us, de, fr or ru. Guest review text stays in its original language.
- `languages` (array): Optional language codes. If set, searches and hotel descriptions are fetched in each selected language.
- `minPrice` (number): Minimum displayed total for the whole stay in the selected currency. Booking may show extra charges separately.
- `maxPrice` (number): Maximum displayed total for the whole stay, before any separately excluded charges.
- `minScore` (number): Keep properties with a guest rating at or above this value, from 0 to 10.
- `stars` (array): Keep these property star ratings. For example [4,5] selects four- and five-star properties. An empty list includes unrated properties too.
- `propertyType` (string): Limit the source search to one accommodation type.
- `sortBy` (string): Booking.com source ordering. The same ordering is used while paging through a search.
- `freeCancellationOnly` (boolean): Keep offers that Booking marks as free cancellation. Read the deadline in each room offer.
- `breakfastIncluded` (boolean): Keep the displayed offers that include breakfast.
- `includeDetails` (boolean): Include full descriptions, photos, facilities, property policies and check-in times.

## Step by step on Apify

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).

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Compare prices in a city for one stay | `destination`, `checkIn`, `checkOut` | Hotel row | `name`, `price`, `rating`, `stars` | CSV or Excel, Google Sheets |
| Check rooms and terms at hotels you follow | `startUrls` with hotel links, `includeRooms` | Hotel row with `roomRates` | `roomRates`, `freeCancellation`, `excludedCharges` | API, your database |
| Read what guests say | `mode: reviews`, `startUrls`, `reviewAfter` | Review row | `reviewDate`, `rating`, `positiveText`, `negativeText` | AI agent, spreadsheet |
| Find cheap dates for a hotel | `mode: calendar`, `calendarDays` | Calendar row | `checkIn`, `price`, `availability` | Spreadsheet, chart |
| Get told when prices move | `mode: monitor`, `stateName`, an Apify schedule | Changed hotel row | `changeType`, `previousPrice`, `priceChange` | Slack or Notion summary |

## Tips

- Keep maxItems at 10 for a first run. It sets how many hotels are saved.
- Use monitor mode to get only hotels whose price changed since the last run.
- Turn details off for a fast price list. Many hotels with details need a longer timeout.

## 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.
- 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.

## Sample result

```json
{
  "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
}
```

## Use it from code

Actor ID: `cliqtomedia/booking-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/booking-scraper").call(run_input={
    "mode": "search",
    "destination": "Pattaya"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~booking-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "search", "destination": "Pattaya"}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/booking-scraper")
result = tool.invoke({"run_input": {"mode": "search", "destination": "Pattaya"}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [Google Flights Scraper - Prices & Times, No Login](https://cliqtomedia.com/actors/google-flights-scraper/)
- [OpenTable Reviews & Restaurants Scraper, No Login](https://cliqtomedia.com/actors/opentable-reviews-scraper/)
- [OpenStreetMap POI Extractor: Cafes, Shops, Hotels by City](https://cliqtomedia.com/actors/openstreetmap-poi-extractor/)
- [99acres & MagicBricks India Property Scraper - No Login](https://cliqtomedia.com/actors/india-property-listings/)
- [Airbnb Scraper: Listings, Prices, Calendar - No Login](https://cliqtomedia.com/actors/airbnb-scraper/)
- [Events Scraper: Eventbrite, Meetup & Luma — No Login](https://cliqtomedia.com/actors/events-aggregator/)
