Get API key

Booking.com Search API

The Booking.com Search API returns accommodation search results as structured JSON. Search by destination or property name, specify stay dates and guests, and filter by price, property class, guest review score, property type and cancellation options. Results include available property details, ratings, displayed stay prices, matching rooms and filters. Core property fields can be null when unavailable; rooms starts as an empty array, while optional enrichment fields may be omitted. Use a returned property link with the Booking.com Place API for individual property details.

Endpoint: https://api.scrapingdog.com/booking/search

Each successful request costs 5 credits, including a valid empty search. Requests use a fixed page size of up to 30 properties. The supplied response below shows one property and a shortened selection of filters; totals and pagination reflect the full response. API keys use APIKEY. Example dates match the supplied response; choose today or future dates when executing requests.

API Parameters

🔑

Scrapingdog Parameters

  • api_key Required
    Your Scrapingdog API key, available on your dashboard. Replace APIKEY when executing requests. Send each key once in the GET query string; repeated, bracketed or nested query keys are not supported.

    Type: String
🔍

Search

  • query Required
    Destination or property search text, for example jaipur. Must be nonblank and at most 1,000 submitted characters before trimming. Leading and trailing whitespace is removed.

    Type: String
📅

Stay Dates

  • check_in_date Optional
    A real calendar date in YYYY-MM-DD format, today or in the future. Invalid calendar dates are rejected. Today is determined in Asia/Kolkata.

    Default: Today in Asia/Kolkata

    Type: Date string
  • check_out_date Optional
    A real calendar date in YYYY-MM-DD format, strictly after the effective check-in date. The stay must not exceed 90 nights.

    Default: The day after effective check-in

    Type: Date string
  • flex_window Optional
    Date flexibility of ± the selected number of days. Accepted values are exactly 1, 2, 3 or 7; 0 is invalid.

    Default: Unset, for exact dates

    Type: Integer enum
👥

Guests & Rooms

  • adults Optional
    Number of adults, from 1 to 30. Guest counts accept one or two decimal digits in query text.

    Default: 2

    Type: Integer
  • children Optional
    Number of children, from 0 to 10. Must equal the number of supplied children_ages; a positive child count without ages is invalid.

    Default: Number of supplied ages, otherwise 0

    Type: Integer
  • children_ages Optional
    Required for children. A comma-separated string with exactly one age per child, each from 0 to 17, for example 5,9. Up to 10 ages and 100 submitted characters. Ages describe children at checkout. Supplying ages alone infers the child count. Omit for zero children; an empty string is invalid. Do not send an array or repeated keys.

    Type: Comma-separated string
  • rooms Optional
    Number of rooms, from 1 to 30. Cannot exceed adults.

    Default: 1

    Type: Integer
🌐

Localization

  • language Optional
    A supported language code, for example en-us. Trimmed and lowercased; maximum 30 submitted characters. Omission leaves the Booking language selector unset, while transport uses an English fallback header.

    Default: No explicit language selection

    Type: String enum
  • currency Optional
    A supported currency code, such as INR, or hotel_currency for each property’s currency. Codes are trimmed and uppercased; the special value is normalized to hotel_currency. Maximum 30 submitted characters. Price bounds without a currency select USD. hotel_currency cannot be combined with price bounds.

    Default: Unset, or USD when price bounds require it

    Type: String enum
↕

️ Sorting & Price

  • sort_by Optional
    A supported sorter, for example price for lowest price first. Values are trimmed and case-sensitive; maximum 30 submitted characters.

    Default: popularity

    Type: String enum
  • min_price Optional
    Minimum nightly filter amount in the selected currency. Must be a non-negative decimal no greater than 9007199254740991, with at most 64 characters. Use digits with an optional decimal fraction; no spaces, signs, exponents or grouping commas. Supplying a bound without currency selects USD. Response price, old_price and tax amounts describe the stay, rather than nightly rates or a guaranteed final checkout total.

    Default: No explicit minimum

    Type: Non-negative decimal
  • max_price Optional
    Maximum nightly filter amount in the selected currency. Same numeric rules as min_price, including the 64-character maximum. Must be at least min_price when both are supplied. Bounds cannot be used with hotel_currency.

    Default: No explicit maximum

    Type: Non-negative decimal
🏨

Property Filters

  • hotel_class Optional
    One or more property class values from 1 to 5, as a comma-separated string such as 4,5. Item whitespace is trimmed and duplicates are removed; maximum 100 submitted characters. This classification differs from guest review score.

    Default: Unset

    Type: Comma-separated string
  • rating Optional
    Minimum guest review score. Accepted values are exactly 6, 7, 8 or 9, meaning 6+, 7+, 8+ or 9+ on Booking’s review scale.

    Default: Unset

    Type: Integer enum
  • property_types Optional
    A comma-separated string of supported property type IDs, for example 204 for Hotel or 201,220 for Apartment and Vacation Home. Values are trimmed and deduplicated; maximum 512 submitted characters. Do not send an array or repeated keys.

    Default: Unset

    Type: Comma-separated string
  • free_cancellation Optional
    Set to exactly true or false in query text. Values are case-sensitive and whitespace is not trimmed. In Python and PHP, use lowercase strings rather than native booleans whose query encoding can differ. A returned property’s policy flag depends on its available matching offer data.

    Default: false

    Type: Boolean string
  • nflt Optional
    Additional Booking filter tokens separated by semicolons, for example hotelfacility=107;mealplan=1. Discover tokens in filters[].options[].value and start at offset 0 after changing filters. These raw tokens are appended to typed selections without resolving conflicts or validating against a fixed token list; use consistent combinations. An empty string adds no filter. Normal HTTP/server URL limits apply. An option’s booking_link is a website URL, rather than a Scrapingdog request URL.

    Default: Unset

    Type: String
📄

Pagination

  • offset Optional
    Digits-only non-negative safe integer, up to 9007199254740961. Start at 0 and follow the returned next_offset or scrapingdog_pagination.next, keeping all effective dates, guests, currency and filters. Offsets need not be multiples of 30. Stop when continuation is null; an empty page ends pagination even if the reported total is positive. The requested page size is fixed at 30. total_results counts returned properties; total_available and search_information.total_results describe the upstream total. Keep numeric property_id values as numbers.

    Default: 0

    Type: Integer

API Examples

API result preview
Code to Integrate
curl "https://api.scrapingdog.com/booking/search?api_key=APIKEY&query=jaipur&check_in_date=2026-10-30&check_out_date=2026-10-31&adults=2&children=0&rooms=1&free_cancellation=false&sort_by=popularity&offset=0"
API Response
{
  "search_metadata": {
    "status": "Success",
    "booking_url": "https://www.booking.com/searchresults.html?ss=jaipur&group_adults=2&no_rooms=1&group_children=0&checkin=2026-10-30&checkout=2026-10-31&order=popularity&offset=0",
    "total_time_taken": 1.37
  },
  "search_parameters": {
    "engine": "booking",
    "query": "jaipur",
    "offset": 0,
    "limit": 30,
    "adults": 2,
    "children": 0,
    "rooms": 1,
    "free_cancellation": false,
    "sort_by": "popularity",
    "check_in_date": "2026-10-30",
    "check_out_date": "2026-10-31"
  },
  "search_information": {
    "destination": "Jaipur",
    "total_results": 1098,
    "destination_id": -2098033,
    "destination_type": "CITY"
  },
  "total_time_taken": 1.37,
  "total_results": 30,
  "total_available": 1098,
  "next_offset": 30,
  "scrapingdog_pagination": {
    "current": "https://api.scrapingdog.com/booking/search?api_key=APIKEY&query=jaipur&offset=0&adults=2&children=0&rooms=1&free_cancellation=false&sort_by=popularity&check_in_date=2026-10-30&check_out_date=2026-10-31",
    "next": "https://api.scrapingdog.com/booking/search?api_key=APIKEY&query=jaipur&offset=30&adults=2&children=0&rooms=1&free_cancellation=false&sort_by=popularity&check_in_date=2026-10-30&check_out_date=2026-10-31"
  },
  "properties": [
    {
      "position": 1,
      "property_id": 7967119,
      "name": "The Knights' Inn",
      "link": "https://www.booking.com/hotel/in/the-knights-39-inn.html?group_adults=2&no_rooms=1&group_children=0&checkin=2026-10-30&checkout=2026-10-31&order=popularity",
      "type": "Hotel",
      "hotel_class": 3,
      "preferred_partner": false,
      "location": "Jaipur",
      "address": "Rana Sanga Marg Near Akashya Patra Mandir Jagatoura",
      "distance": "8.2 miles from downtown",
      "public_transport": null,
      "gps_coordinates": {
        "latitude": 26.8033,
        "longitude": 75.857862
      },
      "rating": 10,
      "rating_text": "Exceptional",
      "reviews": 1,
      "location_rating": null,
      "price": "$21.68",
      "extracted_price": 21.6836143034377,
      "currency": "USD",
      "old_price": null,
      "extracted_old_price": null,
      "taxes_and_fees": "$1.08",
      "extracted_taxes_and_fees": 1.08418071517197,
      "rooms": [
        {
          "name": "Junior Suite",
          "type": "Private suite",
          "beds": 1,
          "bathrooms": 1,
          "bedrooms": 1,
          "living_rooms": 1,
          "units": 1,
          "room_id": 796711902,
          "size": "194 ft²",
          "bed_options": [
            {
              "king_bed": 1
            }
          ],
          "bed_configurations": [
            {
              "beds": [
                {
                  "bed_type_id": 3,
                  "count": 1
                }
              ]
            }
          ]
        }
      ],
      "eco_certified": false,
      "thumbnail": "https://cf.bstatic.com/xdata/images/hotel/square600/412367712.jpg?k=fd87877088d6d49ab57aa4138e7204405eb14d8a8a61c574f37100b05c8294ed&o=",
      "property_type_id": 204,
      "city": "Jaipur",
      "country_code": "in",
      "value_for_money_rating": 10,
      "free_cancellation": false,
      "no_prepayment": true,
      "availability": "We have 7 left at this price",
      "sponsored": false,
      "featured": false,
      "newly_opened": false
    }
  ],
  "filters": [
    {
      "title": "Your budget (per night)",
      "options": [],
      "slider": {
        "min": 3,
        "max": 90,
        "currency": "USD"
      }
    },
    {
      "title": "Popular filters",
      "options": [
        {
          "name": "5 stars",
          "value": "class=5",
          "count": 53,
          "selected": false,
          "booking_link": "https://www.booking.com/searchresults.html?ss=jaipur&group_adults=2&no_rooms=1&group_children=0&checkin=2026-10-30&checkout=2026-10-31&order=popularity&offset=0&nflt=class%3D5"
        },
        {
          "name": "Free Wifi",
          "value": "hotelfacility=107",
          "count": 1033,
          "selected": false,
          "booking_link": "https://www.booking.com/searchresults.html?ss=jaipur&group_adults=2&no_rooms=1&group_children=0&checkin=2026-10-30&checkout=2026-10-31&order=popularity&offset=0&nflt=hotelfacility%3D107"
        }
      ]
    }
  ]
}