# Booking.com API for hotel prices, rooms and reviews

> Look a hotel up by name, then read what Booking.com shows a guest: a nightly price calendar, each room type with its rate plans, and the reviews with the property’s replies. Structured JSON, priced per call.

Canonical page: https://scrapercompany.com/booking-com-api. Endpoints and prices checked against the API on 2026-10-11.

For many hotels Booking.com is the largest source of OTA bookings, so its price is the one revenue teams watch most closely. Its own APIs are built for partners who sell or supply rooms, not for teams that want to read prices across many hotels. This API returns the public property page as data: you send the hotel’s Booking.com slug and get back prices, rooms and reviews.

Prices on Booking.com depend on where the visitor is. Set country_market and the request is priced as a guest from that country would see it, and the response says which market it was actually collected from. Booking.com returns 61 nights at a time; longer calendars are paged for you inside the same call, so a full year is one request and one charge.

## What you get

- `recommended_match`: the hotel’s Booking.com slug and country from a name and city search, with a confidence score
- `calendar[]`: one entry per night: available, price, currency and minimum length of stay
- `point_of_sale`: the visitor market the prices were collected for, and whether it was verified
- `rooms[].rate_plans[]`: price per rate plan, with free cancellation, no prepayment and breakfast flags
- `room_size, max_persons, beds`: room details, where Booking.com publishes them
- `reviews[]`: rating out of 10, title, text, guest country, room type, stay date and the property’s reply
- `provenance`: when and how each nightly price was observed

## Endpoints and price per call

| Endpoint | Method and path | What it returns | Credits per successful call | Price per call |
| --- | --- | --- | --- | --- |
| [Hotel search](https://scrapercompany.com/docs/reference/booking-search) | `POST /v1/ota/booking/search` | Booking.com slug for a hotel name and city, with match confidence | 2 credits | $0.0020 on Starter, $0.0012 on Growth, $0.0008 on Scale |
| [Price calendar](https://scrapercompany.com/docs/reference/booking-calendar) | `POST /v1/ota/booking` | Nightly prices from a start date, 61 nights by default and up to 365 in one call | 8 credits | $0.0078 on Starter, $0.0048 on Growth, $0.0032 on Scale |
| [Rooms and rate plans](https://scrapercompany.com/docs/reference/booking-rooms) | `POST /v1/ota/booking/rooms` | Every room type and rate plan for one stay | 8 credits | $0.0078 on Starter, $0.0048 on Growth, $0.0032 on Scale |
| [Reviews](https://scrapercompany.com/docs/reference/booking-reviews) | `POST /v1/ota/booking/reviews` | Guest reviews, up to 25 per page, sorted or filtered by keyword | 2 credits | $0.0020 on Starter, $0.0012 on Growth, $0.0008 on Scale |

Pricing: Free $0/month for 1,000 credits; Starter $49/month for 50,000 credits; Growth $149/month for 250,000 credits; Scale $399/month for 1,000,000 credits. Failed requests (4xx or 5xx) and empty results cost 0 credits. Free during the beta. https://scrapercompany.com/pricing

## Example

`POST /v1/ota/booking`, 8 credits per successful call.

```bash
curl -X POST "https://api.scrapercompany.com/v1/ota/booking" \
  -H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "pagename": "moxy-boston-downtown",
    "country": "us",
    "days": 61,
    "currency": "USD"
  }'
```

Response (trimmed):

```json
{
  "search_parameters": {
    "engine": "booking_calendar",
    "pagename": "moxy-boston-downtown",
    "country": "us",
    "start_date": "2029-02-18",
    "days": 3,
    "currency": "USD",
    "adults": 2,
    "rooms": 1,
    "country_market": "GB"
  },
  "property": {
    "pagename": "moxy-boston-downtown",
    "hotel_id": 5375786
  },
  "point_of_sale": {
    "country_market": "GB",
    "egress_mode": "proxy",
    "egress_market": "GB",
    "egress_market_verified": true
  },
  "calendar": [
    {
      "stay_date": "2029-02-18",
      "available": true,
      "availability": "available",
      "is_soldout": false,
      "price": 453,
      "currency": "USD",
      "min_length_of_stay": 1,
      "provenance": {
        "schema_version": 1,
        "observation_id": "rateobs_0123456789abcdef0123456789abcdef",
        "collection_id": "ratecol_0123456789abcdef0123456789abcdef",
        "observed_at": "2026-08-07T01:23:45.678Z",
        "source": "booking_com",
        "source_kind": "ota_calendar",
        "collector": "scrapingme.ota.booking",
        "source_property_id": "ChUIoben2Mv6-CYaCi9tLzA3czVwbjQQAQ",
        "requested_market": "US",
        "requested_currency": "USD",
        "returned_currency": "USD",
        "egress_mode": "direct",
        "price_basis": "room_base_before_taxes_and_fees",
        "derivation": "normalized_upstream"
      }
    },
    {
      "stay_date": "2029-02-19",
      "available": false,
      "availability": "sold_out",
      "is_soldout": true,
      "price": null,
      "currency": "USD",
      "min_length_of_stay": 1
    }
  ],
  "unavailable_dates": [
    "2029-02-19",
    "2029-02-20"
  ],
  "meta": {
    "source": "booking",
    "collection_id": "ratecol_0123456789abcdef0123456789abcdef",
    "observed_at": "2026-08-07T01:23:45.678Z",
    "calls": 1,
    "wire_bytes": 454,
    "elapsed_s": 2.147,
    "dates": 3,
    "priced": 1
  }
}
```

## FAQ

### Does Booking.com have a public API?

Not one you can sign up for. Booking.com’s Demand API is for approved affiliate partners, and its Connectivity APIs are for property-management systems and channel managers that supply rooms. Neither is meant for reading prices across hotels you do not manage, which is what this API does.

### How do I find a hotel’s Booking.com ID?

Send the hotel name and city to the hotel search endpoint. It returns the slug and country from the hotel’s Booking.com URL (for booking.com/hotel/us/moxy-boston-downtown.html, the slug is moxy-boston-downtown and the country is us), with a confidence score. Store it once and reuse it.

### Can I see the prices guests in another country see?

Yes. Booking.com prices by the visitor’s country, so set country_market (for example GB or DE) and the request is collected from that market. The point_of_sale block in the response confirms which market the prices came from.

### How many nights does one call return?

Up to 365. Booking.com returns 61 nights per response, so the API pages through longer windows for you inside the same call. It is billed once, at the calendar price, however many nights you ask for; a full year takes longer to answer than 61 nights.

### Do failed requests cost credits?

No. A failed or blocked call (any 4xx or 5xx response) costs 0 credits, and so does a search page that comes back empty. You pay only for successful results.

### How do I get an API key?

Create an account on the sign-up page. Public sign-up is invite-only during the beta, so join the waitlist there and we will email you when your account is ready. The Free plan includes 1,000 credits a month, and the API is free while it is in beta. You create and rotate keys yourself in the dashboard.

## Read next

- [Compare OTA rates guide](https://scrapercompany.com/docs/guides/compare-ota-rates)
- [Hotel reviews guide](https://scrapercompany.com/docs/guides/hotel-reviews)
- [Rate parity monitoring](https://scrapercompany.com/use-cases/rate-parity-monitoring)
- [All APIs](https://scrapercompany.com/apis.md)
