{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Scraper: Reviews, Room Prices & Search",
    "description": "Paste a hotel link or a destination. Get every guest review, room prices with all taxes and fees for up to 90 dates, or every property a search lists, even for whole regions. $1.50 per 1,000 results.",
    "version": "0.0",
    "x-build-id": "GCONBGb54EmEfUxCi"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sourabhbgp~booking-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sourabhbgp-booking-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/sourabhbgp~booking-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sourabhbgp-booking-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/sourabhbgp~booking-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sourabhbgp-booking-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "reviews",
              "hotels",
              "search"
            ],
            "type": "string",
            "description": "Reviews: every guest review of the hotels below, with the hotel's score and subscores. Hotel details and room prices: one row per hotel with its profile, plus one row per room offer for each check-in date you ask for, with the all-in price and every tax and fee listed. Search: every property a Booking.com search lists for a destination, with its place in the list, whether it is an ad, its score and its price for your dates.",
            "default": "reviews"
          },
          "hotelUrls": {
            "title": "Hotel links or IDs",
            "type": "array",
            "description": "Used by Reviews and Hotel details. One per line: a Booking.com hotel link such as https://www.booking.com/hotel/gb/the-savoy.html (any language version, with or without the part after ?), or a numeric Booking hotel ID. Apartments, villas and guest houses use the same links.",
            "items": {
              "type": "string",
              "pattern": "^\\s*(\\d{1,10}|https?://(www\\.)?booking\\.com/(hotel/[a-zA-Z]{2}/[a-z0-9-]+|reviews/[a-zA-Z]{2}/hotel/[a-z0-9-]+)(\\.[a-z]{2}(-[a-z]{2})?)?\\.html([?#].*)?)\\s*$"
            }
          },
          "searches": {
            "title": "Search destinations or search links",
            "type": "array",
            "description": "Used by Search. One per line: a destination as you would type it on Booking.com (a city, region, district, landmark or airport, for example London or Eiffel Tower), searched as Booking's own search box does when you press Enter (text Booking takes as one property is refused: use Hotel details and room prices for that), or a Booking.com search results link. A link keeps its own destination, dates, guests, filters and order; the settings below fill in what it leaves out. The currency below always applies.",
            "items": {
              "type": "string",
              "pattern": "^\\s*((?!https?://)\\S.*|https?://(www\\.)?booking\\.com/searchresults(\\.[a-z]{2}(-[a-z]{2})?)?\\.html(\\?\\S*)?)\\s*$"
            }
          },
          "maxReviewsPerHotel": {
            "title": "Max reviews per hotel",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many reviews for each hotel. 0 returns the hotel summary row only.",
            "default": 100
          },
          "sortReviewsBy": {
            "title": "Sort reviews by",
            "enum": [
              "NEWEST_FIRST",
              "OLDEST_FIRST",
              "MOST_RELEVANT",
              "SCORE_DESC",
              "SCORE_ASC"
            ],
            "type": "string",
            "description": "The order Booking returns reviews in. A date window works with every order; with Newest first or Oldest first the run stops reading at the window's edge, with the other orders it reads the whole list and keeps only reviews inside the window.",
            "default": "NEWEST_FIRST"
          },
          "reviewedDateFrom": {
            "title": "Reviewed on or after",
            "type": "string",
            "description": "Only reviews written on or after this date (UTC). Pick a date, or a period such as 7 days for scheduled runs. Reviews outside the window are never returned or charged."
          },
          "reviewedDateTo": {
            "title": "Reviewed on or before",
            "type": "string",
            "description": "Only reviews written on or before this date (UTC, the whole day included). Pick a date or a period such as 1 day."
          },
          "travellerType": {
            "title": "Traveller type",
            "enum": [
              "ALL",
              "COUPLES",
              "FAMILIES",
              "SOLO_TRAVELLERS",
              "GROUP_OF_FRIENDS",
              "BUSINESS_TRAVELLERS"
            ],
            "type": "string",
            "description": "Only reviews from this kind of guest, filtered by Booking itself. Business trip filters on the trip's purpose, so those reviews still show their guest type (couple, family, solo or group).",
            "default": "ALL"
          },
          "reviewScore": {
            "title": "Review score",
            "enum": [
              "ALL",
              "REVIEW_ADJ_SUPERB",
              "REVIEW_ADJ_GOOD",
              "REVIEW_ADJ_AVERAGE_PASSABLE",
              "REVIEW_ADJ_POOR",
              "REVIEW_ADJ_VERY_POOR"
            ],
            "type": "string",
            "description": "Only reviews in this score band, filtered by Booking itself.",
            "default": "ALL"
          },
          "reviewLanguages": {
            "title": "Review languages",
            "type": "array",
            "description": "Only reviews written in these languages, filtered by Booking itself. Empty = all languages. Reviews are always returned in the language they were written in.",
            "items": {
              "type": "string",
              "enum": [
                "en",
                "fr",
                "de",
                "es",
                "it",
                "nl",
                "pt",
                "ru",
                "ja",
                "zh",
                "ko",
                "ar",
                "he",
                "tr",
                "pl",
                "sv",
                "no",
                "da",
                "fi",
                "cs",
                "sk",
                "hu",
                "ro",
                "bg",
                "el",
                "hr",
                "sr",
                "sl",
                "uk",
                "lt",
                "lv",
                "et",
                "is",
                "ca",
                "th",
                "vi",
                "id"
              ],
              "enumTitles": [
                "English (also en-US)",
                "French",
                "German",
                "Spanish",
                "Italian",
                "Dutch",
                "Portuguese (also pt-BR)",
                "Russian",
                "Japanese",
                "Chinese",
                "Korean",
                "Arabic",
                "Hebrew",
                "Turkish",
                "Polish",
                "Swedish",
                "Norwegian",
                "Danish",
                "Finnish",
                "Czech",
                "Slovak",
                "Hungarian",
                "Romanian",
                "Bulgarian",
                "Greek",
                "Croatian",
                "Serbian",
                "Slovenian",
                "Ukrainian",
                "Lithuanian",
                "Latvian",
                "Estonian",
                "Icelandic",
                "Catalan",
                "Thai",
                "Vietnamese",
                "Indonesian"
              ]
            }
          },
          "reviewText": {
            "title": "Reviews mentioning",
            "type": "string",
            "description": "Only reviews that contain this word or phrase, searched by Booking itself (not case-sensitive), for example breakfast."
          },
          "includeHotelSummary": {
            "title": "Add a hotel summary row",
            "type": "boolean",
            "description": "One extra row per hotel before its reviews: overall score, review count, the 7 category scores with the city-average range, how reviews split by score, traveller type and language, and the hotel's profile (address, description, facilities, house rules, legal trader details). Hotel details mode always returns this row.",
            "default": true
          },
          "onlyNewReviews": {
            "title": "Only new reviews since the last run",
            "type": "boolean",
            "description": "For scheduled Reviews runs: return only reviews that an earlier run with this setting has not returned yet, per hotel and filter set. Reads newest first. The memory is kept in the storage named below, in your own account.",
            "default": false
          },
          "onlyNewReviewsStore": {
            "title": "Memory storage name",
            "pattern": "^[a-zA-Z0-9-]{1,63}$",
            "type": "string",
            "description": "Name of the key-value store that remembers returned reviews. Use a different name to keep separate memories, for example one per client.",
            "default": "booking-reviews-seen"
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Stays starting on this date. Pick a date, or a period such as 30 days, counted forward from the day the run starts (useful for scheduled runs). Leave empty for hotel details only, or for a search of every property without prices."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of each stay.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Adults in total, across all rooms.",
            "default": 2
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Rooms to book. Each price Booking returns is for one room.",
            "default": 1
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One age per child, 0 to 17. Leave empty for no children. Ages change which rooms and prices Booking offers.",
            "items": {
              "type": "string",
              "pattern": "^\\s*(1[0-7]|[0-9])\\s*$"
            }
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "AED",
              "ARS",
              "AUD",
              "AZN",
              "BHD",
              "BRL",
              "CAD",
              "CHF",
              "CLP",
              "CNY",
              "COP",
              "CZK",
              "DKK",
              "EGP",
              "FJD",
              "GEL",
              "HKD",
              "HUF",
              "IDR",
              "ILS",
              "INR",
              "ISK",
              "JOD",
              "JPY",
              "KRW",
              "KWD",
              "KZT",
              "MDL",
              "MXN",
              "MYR",
              "NAD",
              "NOK",
              "NZD",
              "OMR",
              "PHP",
              "PLN",
              "QAR",
              "RON",
              "RSD",
              "RUB",
              "SAR",
              "SEK",
              "SGD",
              "THB",
              "TRY",
              "TWD",
              "UAH",
              "UYU",
              "VND",
              "XOF",
              "ZAR"
            ],
            "type": "string",
            "description": "Prices are returned in this currency, as Booking converts them. When this is not the hotel's own currency, rows also carry the price in the hotel's currency.",
            "default": "USD"
          },
          "checkInDays": {
            "title": "Check-in dates to check",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Check this many consecutive check-in dates, starting at the check-in date. For example 30 gives the room prices of every stay starting in the next 30 days. Each date is one more set of rows.",
            "default": 1
          },
          "onlyCheapestRate": {
            "title": "Cheapest offer only",
            "type": "boolean",
            "description": "Return one row per check-in date: the lowest all-in price among rooms that sleep your guests (guests divided by rooms), whatever the meal plan or cancellation terms.",
            "default": false
          },
          "calendarDays": {
            "title": "Availability calendar days",
            "minimum": 0,
            "maximum": 400,
            "type": "integer",
            "description": "Also return one row per day for this many days from the check-in date (or from today): whether a stay can start that day, the minimum stay, and Booking's calendar price. The calendar price ignores deals and is not the price of any one room, so use the room price rows for what a guest pays. 0 = no calendar.",
            "default": 0
          },
          "maxResultsPerSearch": {
            "title": "Max results per search",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many properties for each search. Booking lets one search order reach about 1,100 properties; past that the run reads other orders, and a city, region or country in parts, until it has them all.",
            "default": 100
          },
          "sortResultsBy": {
            "title": "Sort results by",
            "enum": [
              "popularity",
              "price",
              "price_from_high_to_low",
              "review_score_and_price",
              "bayesian_review_score",
              "class",
              "class_asc",
              "distance_from_search",
              "upsort_bh"
            ],
            "type": "string",
            "description": "The order Booking lists properties in. Ads appear only in Our top picks. Booking shows different visitors different versions of Our top picks, so each search reads its ranked list as one visitor, and positions can differ between runs.",
            "default": "popularity"
          },
          "starRatings": {
            "title": "Star rating",
            "type": "array",
            "description": "Only properties with these star ratings, filtered by Booking itself. Empty = any.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "minReviewScore": {
            "title": "Minimum review score",
            "enum": [
              "ANY",
              "60",
              "70",
              "80",
              "90"
            ],
            "type": "string",
            "description": "Only properties with at least this guest review score, filtered by Booking itself.",
            "default": "ANY"
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Only these kinds of property, filtered by Booking itself. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "204",
                "201",
                "220",
                "208",
                "216",
                "203",
                "219",
                "213",
                "222",
                "228",
                "225",
                "215"
              ],
              "enumTitles": [
                "Hotels",
                "Apartments",
                "Holiday homes",
                "Bed and breakfasts",
                "Guest houses",
                "Hostels",
                "Aparthotels",
                "Villas",
                "Homestays",
                "Chalets",
                "Capsule hotels",
                "Boats"
              ]
            }
          },
          "freeCancellationOnly": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Only properties Booking lists with free cancellation for your dates.",
            "default": false
          },
          "mealPlans": {
            "title": "Meals",
            "type": "array",
            "description": "Only properties offering these meal plans for your dates, filtered by Booking itself. Empty = any.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "9",
                "4",
                "999"
              ],
              "enumTitles": [
                "Breakfast included",
                "Breakfast and dinner included",
                "All inclusive",
                "Self catering"
              ]
            }
          },
          "minPricePerNight": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the currency above, all taxes and fees included. Needs a check-in date. Booking's own price filter lets some properties through outside the range, so every row is checked again on its all-in price per night."
          },
          "maxPricePerNight": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the currency above, all taxes and fees included. Needs a check-in date."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Booking refuses requests from Apify servers without a proxy. The default datacenter proxy works.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}