# Booking.com destination search: `POST /v1/ota/booking/hotels`

Cost: 4 credits (4 per started 25 properties returned (an empty answer, a place Booking.com cannot find and failed requests are free)). Docs: https://scrapercompany.com/docs/reference/booking-hotels

The properties Booking.com lists for a place and a stay.

Each property carries its `hotel_id`, the `pagename` and `country` that
`POST /v1/ota/booking` and `/v1/ota/booking/rooms` price, the stay
price (total, per night, before-discount, and taxes where Booking
states them), review score and count, stars, property type, address,
coordinates, distance, photo, the matched room and Booking's policy
flags. Filters and sort orders are Booking's own. Page on with
`pagination.next_offset`, resending the same body.

Billed per started 25 properties returned; an empty answer is free.

Request body (JSON):

- `query` (string | null; optional; min length 2): Destination as a guest would type it: a city, region, district, landmark or airport. Booking resolves free text itself; `search_information.destination` says what it chose. For an exact place use `dest_id`.
- `dest_id` (integer | null; optional): Booking's destination id from `POST /v1/ota/booking/destinations` (negative for most cities, e.g. Lisbon is `-2167973`).
- `dest_type` (string | null; optional; one of airport, city, country, district, hotel, landmark, region): The `dest_type` that came with `dest_id`.
- `url` (string | null; optional): A `booking.com/searchresults.html` link. Its destination, dates, guests, filters (`nflt`), sort (`order`), currency and language are used unless this request sets them.
- `check_in` (string (date); required): First night of the stay, `YYYY-MM-DD`. Taken from `url` when it has one.
- `check_out` (string (date) | null; optional): Departure date. An alternative to `nights` — if both are given, this wins.
- `nights` (integer; optional; default 1; min 1, max 90): Length of stay. Ignored when `check_out` is supplied.
- `adults` (integer; optional; default 2; min 1, max 30): Adults across all rooms.
- `children_ages` (array of integer; optional; max items 10): One age (0-17) per child. Booking prices children by age.
- `rooms` (integer; optional; default 1; min 1, max 30): Rooms requested.
- `currency` (string; optional; default USD; one of AED, ARS, AUD, BRL, CAD, CHF, CLP, CNY, COP, CZK, DKK, EGP, EUR, GBP, HKD, HUF, IDR, ILS, INR, JPY, KRW, MXN, MYR, NOK, NZD, PEN, PHP, PLN, QAR, RON, SAR, SEK, SGD, THB, TRY, TWD, USD, VND, ZAR): ISO 4217 code for the returned prices. Major currencies include AED, AUD, BRL, CAD, CHF, CNY, EUR, GBP, HKD, INR, JPY, KRW, MXN, NZD, SGD, USD; all 39 supported codes are listed in the enum.
- `language` (string; optional; default en-us): Booking's site language for names and labels (`en-us`, `en-gb`, `fr`, `de`, `es`, `it`, `pt-pt`, `ja`...).
- `sort` (string; optional; default popularity; one of bayesian_review_score, class, class_and_price, class_asc, distance_from_search, popularity, price, price_from_high_to_low, review_score_and_price, upsort_bh): Booking's own sort orders: - `popularity`: Our top picks (Booking's default) - `upsort_bh`: Homes and apartments first - `price`: Price, lowest first - `price_from_high_to_low`: Price, highest first - `review_score_and_price`: Best reviewed and lowest price - `class`: Stars, highest first - `class_asc`: Stars, lowest first - `class_and_price`: Stars and price - `distance_from_search`: Distance from the searched place - `bayesian_review_score`: Top reviewed
- `stars` (array of string; optional): Star classes to keep: any of `1`-`5` and `unrated`.
- `min_review_score` (integer | null; optional; one of 6, 7, 8, 9): Booking's review filter: 6, 7, 8 or 9 and up. Booking also keeps properties with no reviews yet (`review_score` null).
- `property_types` (array of string; optional): Booking's property types by name (`Hotels`, `Apartments`, `Hostels`, `Resorts`, `Villas`...) or numeric `ht_id`. Booking groups some types with others, so a row's own `property_type` can differ.
- `price_min` (integer | null; optional; min 0): Lowest price per night, in `currency`.
- `price_max` (integer | null; optional; min 1): Highest price per night, in `currency`.
- `free_cancellation` (boolean; optional; default false): Only properties with a free-cancellation rate.
- `no_prepayment` (boolean; optional; default false): Only properties that take no prepayment.
- `meal_plan` (string | null; optional; one of all_inclusive, all_meals, breakfast, breakfast_and_dinner, breakfast_and_lunch, kitchen): Keep properties with this meal plan.
- `filters` (string; optional; default ): Advanced: Booking's own filter string (the `nflt` parameter of a search link, e.g. `hotelfacility=107;di=929`), added to the fields above.
- `limit` (integer; optional; default 25; min 1, max 1000): Properties to return, in Booking's order. Billed per started 25 returned.
- `offset` (integer; optional; default 0; min 0, max 1000): Properties to skip: page on with `pagination.next_offset`. Booking lists about 1,000 properties per search at most.
- `country_market` (string | null; optional; one of AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UK, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW): Visitor country (point of sale), two letters, e.g. `GB`. Booking and Agoda price by the visitor's country - measured 2026-10-03, Booking showed a GB visitor 321 USD where US and CA visitors saw 276 for the same night - so this asks for the price a visitor from that country sees. The answer's `point_of_sale` block says whether that country was actually served; when it was not, the price is the default market's. Omit for the previous behaviour.

Base URL: `https://api.scrapercompany.com`. Auth: send your key in the `x-api-key` header. A failed request (4xx or 5xx) or an empty result costs 0 credits.

- [Full API reference as one Markdown file](https://scrapercompany.com/llms-full.txt)
- [OpenAPI spec](https://scrapercompany.com/openapi.json)
