{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Scraper – Hotels, Prices & Reviews",
    "description": "Scrape Booking.com hotels for any destination and dates: name, total price, rating, review count, stars, address, coordinates, photo and link, plus each hotel's reviews with score, text, guest nationality and traveller type. Every property Booking lists, no 1,000 cap. No key, no browser.",
    "version": "0.1",
    "x-build-id": "sz5BUgwdibdnj0Vec"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simple.actor~booking-hotels/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simple.actor-booking-hotels",
        "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/simple.actor~booking-hotels/runs": {
      "post": {
        "operationId": "runs-sync-simple.actor-booking-hotels",
        "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/simple.actor~booking-hotels/run-sync": {
      "post": {
        "operationId": "run-sync-simple.actor-booking-hotels",
        "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": {
          "queries": {
            "title": "Destinations (one per line)",
            "type": "array",
            "description": "Where to search, one per line, as you would type it into Booking.com: a city (\"Lisbon\"), a region (\"Algarve\"), a district (\"Shibuya, Tokyo\"), a landmark (\"Eiffel Tower\") or a country. You can also paste a search-results link copied from Booking.com; its destination, dates, guests and currency are used as they are.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD. With dates, every hotel comes with its total price for the stay and Booking lists only what is available. Leave both dates empty to list every property in the destination without prices — a cheap way to build a catalogue."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "YYYY-MM-DD, after the check-in date."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Adults per booking. Prices are for this many guests.",
            "default": 2
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Children per booking. Give their ages below if you want family pricing to be exact.",
            "default": 0
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One age per child, in years, e.g. [4, 9]. Booking prices some rooms by age."
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Rooms per booking.",
            "default": 1
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Three-letter code for the prices: USD, EUR, GBP, JPY… Booking converts at its own rate. Defaults to USD.",
            "default": "USD"
          },
          "maxHotels": {
            "title": "Hotels per destination",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "How many hotels to return per destination. A hundred arrive per request, and there is no thousand-hotel ceiling — a big city's full list of 1,500–7,000 properties is reachable. Booking's own count for the search is on every row, so a first run tells you how many there are.",
            "default": 100
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "recommended",
              "price",
              "review_score_and_price",
              "class"
            ],
            "type": "string",
            "description": "Booking's own sort orders. \"Recommended\" is what Booking shows first; the others are what its sort menu offers.",
            "default": "recommended"
          },
          "stars": {
            "title": "Star ratings",
            "type": "array",
            "description": "Only properties with these star ratings, e.g. [4, 5]. Leave empty for all."
          },
          "minReviewScore": {
            "title": "Minimum review score",
            "minimum": 6,
            "maximum": 9,
            "type": "integer",
            "description": "Only properties rated at least this, out of 10. Booking offers 6, 7, 8 and 9. Leave empty for all."
          },
          "freeCancellation": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Only properties offering free cancellation for the dates.",
            "default": false
          },
          "filters": {
            "title": "Any other Booking filter",
            "type": "string",
            "description": "Booking's own filter string, exactly as it appears after nflt= in a filtered Booking URL — e.g. ht_id=204 for hotels only, mealplan=1 for breakfast included, hotelfacility=107 for free WiFi. Several are joined with a semicolon. Added to the filters above."
          },
          "includeReviews": {
            "title": "Also collect each hotel's reviews",
            "type": "boolean",
            "description": "On, every hotel's reviews are collected too, as separate rows: score, title, what the guest liked and disliked, their nationality and traveller type, stay dates, room type, the hotel's reply and helpful votes. Charged per review; a hotel with a thousand reviews costs a thousand review rows, so set the cap below.",
            "default": false
          },
          "maxReviewsPerHotel": {
            "title": "Reviews per hotel",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "How many reviews to collect per hotel when reviews are on. Twenty-five arrive per request.",
            "default": 25
          },
          "reviewSort": {
            "title": "Review order",
            "enum": [
              "most_relevant",
              "newest_first"
            ],
            "type": "string",
            "description": "Booking's own review orders.",
            "default": "most_relevant"
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}