{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Scraper — Hotels, Prices & Reviews",
    "description": "Scrape hotels, prices, ratings, and reviews from Booking.com. Search by destination + dates or extract detailed info from hotel URLs. Filters by stars, price range, property type, review score. Returns structured JSON with prices, discounts, availability, amenities, room types, and photos.",
    "version": "1.0",
    "x-build-id": "bkzgqeUh942KEV8Yn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/skipper_lume~booking-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-skipper_lume-booking-com-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/skipper_lume~booking-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-skipper_lume-booking-com-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/skipper_lume~booking-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-skipper_lume-booking-com-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": "Scraping mode",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Choose 'search' to find hotels by destination + dates, or 'detail' to extract full info from specific hotel URLs.",
            "default": "search"
          },
          "destination": {
            "title": "Destination",
            "type": "string",
            "description": "City, region, or hotel name to search (e.g. 'Amsterdam', 'Paris, France', 'Hilton London'). Required for 'search' mode."
          },
          "checkin": {
            "title": "Check-in date",
            "type": "string",
            "description": "Check-in date in YYYY-MM-DD format. Defaults to 30 days from today."
          },
          "checkout": {
            "title": "Check-out date",
            "type": "string",
            "description": "Check-out date in YYYY-MM-DD format. Defaults to 32 days from today."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of adult guests.",
            "default": 2
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Number of children.",
            "default": 0
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of rooms needed.",
            "default": 1
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Price currency code (USD, EUR, GBP, etc.).",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Booking.com language code (en-us, de, fr, nl, etc.).",
            "default": "en-us"
          },
          "maxPages": {
            "title": "Max search pages",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Maximum number of search result pages to scrape. Each page has ~25 hotels.",
            "default": 5
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "",
              "price",
              "distance",
              "class",
              "class_asc",
              "review_score_and_price",
              "bayesian_review_score",
              "popularity"
            ],
            "type": "string",
            "description": "Sort order for search results.",
            "default": ""
          },
          "minPrice": {
            "title": "Min price per night",
            "type": "integer",
            "description": "Minimum price filter (in selected currency)."
          },
          "maxPrice": {
            "title": "Max price per night",
            "type": "integer",
            "description": "Maximum price filter (in selected currency)."
          },
          "stars": {
            "title": "Star rating filter",
            "type": "array",
            "description": "Filter by hotel star rating (e.g. [4, 5] for 4- and 5-star only).",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5
            }
          },
          "propertyTypes": {
            "title": "Property type filter",
            "type": "array",
            "description": "Booking.com property type IDs. Common: 204=Hotel, 201=Apartment, 208=Hostel, 219=B&B, 213=Villa, 220=Resort.",
            "items": {
              "type": "integer"
            }
          },
          "minReviewScore": {
            "title": "Min review score",
            "minimum": 60,
            "maximum": 90,
            "type": "integer",
            "description": "Minimum review score filter: 60=Pleasant, 70=Good, 80=Very Good, 90=Superb."
          },
          "urls": {
            "title": "Hotel URLs (detail mode)",
            "type": "array",
            "description": "List of Booking.com hotel page URLs to scrape in 'detail' mode.",
            "items": {
              "type": "string"
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Max parallel browser pages (higher = faster but more memory).",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "⚠️ IMPORTANT: Booking.com blocks datacenter IPs. You MUST use residential proxies for reliable results. Select 'Apify Proxy (residential)' or provide your own residential proxy URLs. Without residential proxies, most requests will be blocked."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}