{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Scraper — Hotels, Prices & Reviews",
    "description": "Scrape Booking.com: hotels from destination searches with prices for your dates (per stay, per night, taxes), review scores, stars and distance; hotel details with facilities and policies; guest reviews. Monitor prices and new reviews.",
    "version": "0.1",
    "x-build-id": "8TanU3zOIOPLZ0C07"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tortuga~booking-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tortuga-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/tortuga~booking-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tortuga-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/tortuga~booking-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tortuga-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": [
              "search",
              "hotels",
              "reviews"
            ],
            "type": "string",
            "description": "search: one item per hotel in a destination's search results with the price for your dates. hotels: one details item per hotel (address, coordinates, facilities, policies, check-in/out, photos, score breakdown; with a check-in date also price and availability). reviews: one item per guest review.",
            "default": "search"
          },
          "destinations": {
            "title": "Destinations",
            "type": "array",
            "description": "Cities, regions, districts or landmarks to search, e.g. \"Paris\" or \"Manhattan, New York\". Resolved with Booking.com's own destination search. In hotels and reviews mode a destination stands for its top hotels (see Max hotels per destination).",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Booking.com URLs",
            "type": "array",
            "description": "Hotel pages (https://www.booking.com/hotel/fr/mirific.html, any language suffix and query works) or search pages (https://www.booking.com/searchresults.html?ss=Paris&checkin=2026-12-01&checkout=2026-12-03). Dates, guests and filters (nflt) in a URL apply to that URL when the input does not set them.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many items in total (hotels or reviews across all inputs). With 'Only new or changed items' in search mode, the first Max items hotels of each search are watched.",
            "default": 100
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Check-in date (YYYY-MM-DD) for prices. Search mode without a date uses the dates in the search URL, else 7 days from today. Hotel details without a date have no prices. Use fixed dates when monitoring prices."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Length of stay. Prices are given per stay and per night.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Guests for prices and availability.",
            "default": 2
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Rooms for prices and availability.",
            "default": 1
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Currency of all prices (ISO code such as USD, EUR, GBP, JPY). Booking.com converts at its own rate.",
            "default": "USD"
          },
          "sortBy": {
            "title": "Sort search results by",
            "enum": [
              "popularity",
              "price",
              "reviewScoreAndPrice",
              "bestReviewed",
              "priceHighToLow",
              "starsHighToLow",
              "starsLowToHigh",
              "distance"
            ],
            "type": "string",
            "description": "Search order. Empty = Booking.com's default (Our top picks) or the order in the search URL."
          },
          "starRatings": {
            "title": "Star ratings",
            "type": "array",
            "description": "Only hotels with these star ratings. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "5",
                "4",
                "3",
                "2",
                "1"
              ],
              "enumTitles": [
                "5 stars",
                "4 stars",
                "3 stars",
                "2 stars",
                "1 star"
              ]
            }
          },
          "minReviewScore": {
            "title": "Minimum review score",
            "enum": [
              "9",
              "8",
              "7",
              "6"
            ],
            "type": "string",
            "description": "Only properties with at least this guest review score."
          },
          "freeCancellationOnly": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Only offers with free cancellation."
          },
          "breakfastIncluded": {
            "title": "Breakfast included only",
            "type": "boolean",
            "description": "Only offers that include breakfast."
          },
          "maxHotelsPerSearch": {
            "title": "Max hotels per destination",
            "minimum": 1,
            "type": "integer",
            "description": "Hotels and reviews mode: how many top hotels of each destination or search URL are processed.",
            "default": 10
          },
          "maxReviewsPerHotel": {
            "title": "Max reviews per hotel",
            "minimum": 1,
            "type": "integer",
            "description": "Reviews mode: cap per hotel. Booking.com serves every review of a hotel (thousands for big hotels).",
            "default": 100
          },
          "sortReviewsBy": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "mostRelevant",
              "highestRating",
              "lowestRating",
              "oldest"
            ],
            "type": "string",
            "description": "Review order. 'Only reviews newer than' and monitoring always use newest first.",
            "default": "newest"
          },
          "reviewLanguages": {
            "title": "Review languages",
            "type": "array",
            "description": "Only reviews written in these languages (codes such as en, fr, de, es, it, nl, pt, ru, zh, ja). Empty = all languages.",
            "items": {
              "type": "string"
            }
          },
          "reviewsNewerThan": {
            "title": "Only reviews newer than",
            "type": "string",
            "description": "Only reviews newer than: a date (YYYY-MM-DD) or a period such as '7 days' or '24 hours'. Reviews are read newest first and paging stops at the first page that is entirely older."
          },
          "onlyNewOrChanged": {
            "title": "Only new or changed items",
            "type": "boolean",
            "description": "Remember what earlier runs of this search returned and output only new items or items whose price/status changed. Use with a Schedule; unchanged items are not charged. Search: price, struck-through price, availability, review score. Hotels: price, availability, review score, stars. Reviews: only reviews not seen before among the newest 'Max reviews per hotel'.",
            "default": false
          },
          "monitoringKey": {
            "title": "Monitoring key",
            "type": "string",
            "description": "Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify datacenter proxy (default) works; no residential or Unblocker proxy is needed. Booking.com can show different prices to visitors from different countries: pick a proxy country to pin it (important when monitoring prices).",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}