{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Scraper: Hotel Prices by City & Date",
    "description": "Search Booking.com by city, region, district, landmark or airport and get every available hotel with its price for your dates, star rating, review score, free cancellation and location. Filters, sorting, up to 10,000 hotels per search. Plain HTTP, no browser. Not affiliated with Booking.com.",
    "version": "0.1",
    "x-build-id": "zLx2JluHvgVIsqvdy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/aleksandrbooking~booking-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-aleksandrbooking-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/aleksandrbooking~booking-scraper/runs": {
      "post": {
        "operationId": "runs-sync-aleksandrbooking-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/aleksandrbooking~booking-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-aleksandrbooking-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",
        "required": [
          "destinations"
        ],
        "properties": {
          "destinations": {
            "title": "Places to search",
            "type": "array",
            "description": "Cities, regions, districts, landmarks, airports or countries, one per line, e.g. Batumi, Manhattan, London Heathrow Airport. A name is matched the way Booking.com's own search box matches it, and the matched place is shown in every row. You can also paste a Booking.com search results link: only its destination is used, the dates and filters in it are ignored.",
            "items": {
              "type": "string"
            }
          },
          "startDate": {
            "title": "Check-in date",
            "pattern": "^$|^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "YYYY-MM-DD (UTC). Leave empty to use tomorrow. Today is allowed; a date in the past is moved to today."
          },
          "days": {
            "title": "How many check-in dates",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of consecutive check-in dates, from the date above. Every date is a separate search with its own rows: 50 hotels over 7 dates is 350 billable rows.",
            "default": 1
          },
          "nights": {
            "title": "Nights per stay",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of stay. Each row carries the price for the whole stay and the price per night.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of adult guests. Occupancy changes the price and the list of available hotels.",
            "default": 2
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of rooms to price for the same stay.",
            "default": 1
          },
          "childrenAges": {
            "title": "Children ages",
            "maxItems": 10,
            "type": "array",
            "description": "Age of each child as a JSON list, e.g. [5, 9]. Booking.com prices children by age. Leave empty for adults only.",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 17
            },
            "default": []
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "GEL",
              "PLN",
              "TRY",
              "CHF",
              "CAD",
              "AUD",
              "AED",
              "SEK",
              "JPY"
            ],
            "type": "string",
            "description": "Prices are verified to come back in this currency; a result priced in another is skipped and not charged.",
            "default": "USD"
          },
          "maxResults": {
            "title": "Hotels per place and date",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The most hotels to collect for each place and each check-in date. One row is one billable hotel. Booking.com shows about 1,000 per search on one query; asking for more makes the Actor repeat the search by price band and by property type, which reads a large city in full (London: about 3,300 hotels in two minutes).",
            "default": 100
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "popularity",
              "price",
              "review_score_and_price",
              "bayesian_review_score",
              "class",
              "class_asc",
              "distance_from_search"
            ],
            "type": "string",
            "description": "The order of Booking.com's own results page. With a limit below the number of hotels listed, this decides which hotels you get. Rows found by repeating the search by price band come after the first thousand, in band order.",
            "default": "popularity"
          },
          "starRatings": {
            "title": "Star ratings",
            "type": "array",
            "description": "Keep only hotels with these star ratings. Leave empty for all, unrated properties included. Unrated properties cannot be asked for on their own.",
            "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": [
              "0",
              "6",
              "7",
              "8",
              "9"
            ],
            "type": "string",
            "description": "Keep only hotels reviewed at or above this score. Properties with no reviews are dropped when a score is set.",
            "default": "0"
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Keep only these kinds of property, using Booking.com's own groups. The groups overlap by design: Hotels also lists aparthotels, and Apartments also lists hotels that sell apartments. Every row names its exact type in accommodationType, so you can narrow further.",
            "items": {
              "type": "string",
              "enum": [
                "hotels",
                "apartments",
                "aparthotels",
                "guest_houses",
                "hostels",
                "bed_and_breakfasts",
                "villas",
                "holiday_homes",
                "homestays"
              ],
              "enumTitles": [
                "Hotels",
                "Apartments",
                "Aparthotels",
                "Guest houses",
                "Hostels",
                "Bed and breakfasts",
                "Villas",
                "Holiday homes",
                "Homestays"
              ]
            }
          },
          "freeCancellationOnly": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Keep only hotels whose cheapest rate can be cancelled for free. The free window closes as check-in nears, so a search for tomorrow lists few of them (Rome, one night, 12 October 2026: 43 of 2,126 hotels).",
            "default": false
          },
          "breakfastIncluded": {
            "title": "Breakfast included",
            "type": "boolean",
            "description": "Keep only hotels whose cheapest rate includes a meal plan with breakfast.",
            "default": false
          },
          "minPricePerNight": {
            "title": "Lowest price per night",
            "minimum": 0,
            "type": "number",
            "description": "In the currency above, as it appears in the row (pricePerNight). Hotels cheaper than this are dropped."
          },
          "maxPricePerNight": {
            "title": "Highest price per night",
            "minimum": 1,
            "type": "number",
            "description": "In the currency above, as it appears in the row (pricePerNight). Hotels dearer than this are dropped."
          },
          "concurrency": {
            "title": "Searches in parallel",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "How many place and date searches run at the same time. Each page of a search is read one after another.",
            "default": 2
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify datacenter proxies are the default and what this Actor is priced on. Apify residential groups are not available here; a run that asks for one is refused in the first seconds, before any row is charged. For a specific country, or a residential address, choose Custom proxies and supply your own. The country decides whether Booking.com quotes prices with or without local tax, which each row reports as pricesIncludeTaxes.",
            "default": {
              "useApifyProxy": true
            }
          },
          "dryRun": {
            "title": "Dry run (owner only)",
            "type": "boolean",
            "description": "Produce data without charging events. Honored only for runs started by the Actor owner; ignored for everyone else.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}