{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Scraper for Hotel Prices & Reviews",
    "description": "Extract Booking.com hotel search results with prices, ratings, review counts, addresses, coordinates, direct hotel URLs, filters, and optional room details.",
    "version": "0.4",
    "x-build-id": "aNGqf2V4dyfRdAmxF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/runtime~booking-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-runtime-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/runtime~booking-scraper/runs": {
      "post": {
        "operationId": "runs-sync-runtime-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/runtime~booking-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-runtime-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": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "URLs to start crawling from. Defaults to Booking.com homepage.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "destination": {
            "title": "Destination",
            "type": "string",
            "description": "The city or destination to search for hotels.",
            "default": "Paris"
          },
          "getDetails": {
            "title": "Get Detailed Information",
            "type": "boolean",
            "description": "When enabled, the actor will visit each individual hotel page to extract complete addresses and coordinates. This provides more accurate data but takes longer to run. For quick tests, keep this disabled.",
            "default": false
          },
          "checkin": {
            "title": "Check-in Date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Check-in date in YYYY-MM-DD format.",
            "default": "2026-07-09"
          },
          "checkout": {
            "title": "Check-out Date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Check-out date in YYYY-MM-DD format.",
            "default": "2026-07-10"
          },
          "groupAdults": {
            "title": "Number of Adults",
            "type": "string",
            "description": "Number of adults.",
            "default": "2"
          },
          "groupChildren": {
            "title": "Number of Children",
            "type": "string",
            "description": "Number of children.",
            "default": "0"
          },
          "noRooms": {
            "title": "Number of Rooms",
            "type": "string",
            "description": "Number of rooms.",
            "default": "1"
          },
          "priceMin": {
            "title": "Minimum Price (€ per night)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price per night in euros."
          },
          "priceMax": {
            "title": "Maximum Price (€ per night)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price per night in euros."
          },
          "stars": {
            "title": "Star Rating",
            "type": "array",
            "description": "Filter by star rating (1-5). Can specify multiple ratings. Example: [4, 5]",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ]
            }
          },
          "minReviewScore": {
            "title": "Minimum Review Score",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Minimum review score (0-10)."
          },
          "freeCancellation": {
            "title": "Free Cancellation",
            "type": "boolean",
            "description": "Filter for properties with free cancellation.",
            "default": false
          },
          "petsAllowed": {
            "title": "Pets Allowed",
            "type": "boolean",
            "description": "Filter for properties that allow pets.",
            "default": false
          },
          "adultsOnly": {
            "title": "Adults Only",
            "type": "boolean",
            "description": "Filter for adults-only properties.",
            "default": false
          },
          "maxHotels": {
            "title": "Maximum Hotels",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of hotels to extract from the search results. Set to 0 to extract all available hotels. Recommended: 5 for quick tests, 10-50 for production.",
            "default": 5
          },
          "failOnNoResults": {
            "title": "Fail when no hotels are extracted",
            "type": "boolean",
            "description": "When enabled, the Actor fails the run if no hotels are saved. Useful for monitoring, saved tasks, and integrations that must detect blocked or empty runs.",
            "default": false
          },
          "timeout": {
            "title": "Timeout (seconds)",
            "minimum": 300,
            "maximum": 3600,
            "type": "integer",
            "description": "Maximum time in seconds for request handler timeout. Note: The Actor Run Timeout (in Settings → Default Run Options) must be higher than this value. Recommended: 1800-3600 seconds for detailed extractions.",
            "default": 1800
          },
          "batchSize": {
            "title": "Batch Size",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Number of hotels to extract in each batch. Use 1 for one-by-one extraction, or higher for batch processing.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Choose to use no proxy, Apify Proxy, or provide custom proxy URLs.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "FR"
            }
          },
          "newUrlFunction": {
            "title": "Custom Proxy URL Function",
            "type": "string",
            "description": "Custom function to generate proxy URLs. Advanced users only."
          },
          "districts": {
            "title": "Districts/Neighborhoods",
            "type": "array",
            "description": "Filter by specific districts or neighborhoods.",
            "items": {
              "type": "string"
            }
          },
          "maxDistanceFromCenter": {
            "title": "Max Distance from Center (km)",
            "minimum": 0,
            "type": "number",
            "description": "Maximum distance from city center in kilometers."
          },
          "customFilters": {
            "title": "Custom Filters (nflt codes)",
            "type": "array",
            "description": "Custom filters using Booking.com nflt codes. To find these codes, apply filters manually on Booking.com and inspect the URL. Example: ['ht_id=204', 'ht_id=207']",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}