{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Hotels Scraper - Worldwide Search & Categories",
    "description": "Scrape Booking.com hotel search results for any destination worldwide. Extract names, prices, ratings, locations, room types, and listing links. Filter by property category or leave empty for all types.",
    "version": "0.3",
    "x-build-id": "chpPerYTdboM8rugN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lentic_clockss~booking-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lentic_clockss-booking-hotels-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/lentic_clockss~booking-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lentic_clockss-booking-hotels-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/lentic_clockss~booking-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lentic_clockss-booking-hotels-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": {
          "destination": {
            "title": "Destination",
            "type": "string",
            "description": "City, region, country, area, or landmark (e.g. 'Tokyo', 'Lombardia', 'Côte d'Azur', '東京'). Resolved through Booking.com's own autocomplete unless destId and destType are given.",
            "default": "Singapore"
          },
          "checkin": {
            "title": "Check-in Date",
            "type": "string",
            "description": "Check-in date (YYYY-MM-DD). Leave both dates empty to search 3 weeks from today for 2 nights, so prices are shown. Past dates and dates more than 500 days ahead are refused.",
            "default": ""
          },
          "checkout": {
            "title": "Check-out Date",
            "type": "string",
            "description": "Check-out date (YYYY-MM-DD), after check-in. Give both dates or neither.",
            "default": ""
          },
          "adults": {
            "title": "Number of Adults",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of adult guests.",
            "default": 2
          },
          "children": {
            "title": "Number of Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Number of children. When set without childAges, ages default to 8.",
            "default": 0
          },
          "childAges": {
            "title": "Child Ages",
            "type": "array",
            "description": "Ages for each child (0–17). Length should match children; padded/truncated automatically.",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 17
            },
            "default": []
          },
          "rooms": {
            "title": "Number of Rooms",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of rooms (Booking.com no_rooms).",
            "default": 1
          },
          "maxResults": {
            "title": "Max results per destination",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Most property rows for each destination. Default 70; larger numbers are collected in parts of 70. All row types count together. The whole run stops at your maximum total charge. Booking.com can have fewer matching properties. Free Apify plan: up to 200 rows per run and 10 runs of this Actor (limits set by the Actor developer).",
            "default": 70
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Preferred ISO currency code (e.g. 'USD', 'EUR', 'SGD'). Each row's currency field says which currency the shown price is in.",
            "default": "USD"
          },
          "lang": {
            "title": "Language",
            "type": "string",
            "description": "Booking.com UI language tag (e.g. 'en-us', 'en-gb', 'de', 'fr', 'ja').",
            "default": "en-us"
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "popularity",
              "price",
              "review_score",
              "review_and_price",
              "stars_desc",
              "stars_asc",
              "distance",
              "homes_first"
            ],
            "type": "string",
            "description": "SERP sort order.",
            "default": "popularity"
          },
          "propertyTypes": {
            "title": "Property Types",
            "type": "array",
            "description": "Accommodation categories to include. Empty = all categories. Maps to Booking.com ht_id filters.",
            "items": {
              "type": "string",
              "enum": [
                "hotel",
                "apartment",
                "hostel",
                "motel",
                "resort",
                "bed_and_breakfast",
                "villa",
                "guesthouse",
                "holiday_home",
                "aparthotel",
                "lodge",
                "homestay",
                "country_house",
                "capsule_hotel",
                "campground",
                "inn",
                "ryokan",
                "riad",
                "chalet",
                "holiday_park",
                "tent",
                "love_hotel",
                "pension"
              ]
            },
            "default": []
          },
          "stars": {
            "title": "Star Ratings",
            "type": "array",
            "description": "Hotel star classes to include (1–5). Maps to nflt class= filters.",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5
            },
            "default": []
          },
          "minReviewScore": {
            "title": "Minimum Review Score",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Minimum guest review score (0–10). Leave empty for no filter. Maps to Booking review_score in tenths (e.g. 8.0 → 80)."
          },
          "freeCancellation": {
            "title": "Free Cancellation Only",
            "type": "boolean",
            "description": "When true, only listings with free cancellation (nflt oos=1).",
            "default": false
          },
          "destId": {
            "title": "Destination ID",
            "type": "string",
            "description": "Optional Booking dest_id from autocomplete. When set with destType, skips autocomplete.",
            "default": ""
          },
          "destType": {
            "title": "Destination Type",
            "enum": [
              "",
              "city",
              "region",
              "country",
              "landmark",
              "airport",
              "district",
              "hotel",
              "coordinates"
            ],
            "type": "string",
            "description": "Optional Booking dest_type (city, region, country, landmark, airport, district, hotel, coordinates).",
            "default": ""
          },
          "customNfltFilters": {
            "title": "Custom nflt Filters",
            "type": "array",
            "description": "Raw Booking.com nflt fragments (e.g. 'class=5', 'oos=1', 'review_score=80'). Merged with propertyTypes.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "detailUrls": {
            "title": "Hotel detail URLs",
            "type": "array",
            "description": "Optional Booking.com /hotel/{country}/{slug}.html URLs. When provided, the worker skips destination search and processes up to detailEnrichLimit URLs. Requires enrichDetails=true.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "enrichDetails": {
            "title": "Enrich hotel details",
            "type": "boolean",
            "description": "Open up to detailEnrichLimit hotel pages to add address, geo, phone and the hotel's own website when public. Rows not opened keep the same fields with absence reasons.",
            "default": true
          },
          "detailEnrichLimit": {
            "title": "Detail enrichment limit",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of emitted hotels whose detail pages are fetched. Remaining rows still include the complete lead shape with honest absence reasons.",
            "default": 3
          },
          "workerBaseUrl": {
            "title": "Worker base URL (optional)",
            "type": "string",
            "description": "Control-plane endpoint for this run. Leave empty (defaults to the Actor's WORKER_BASE_URL)."
          },
          "country": {
            "title": "Country hint",
            "type": "string",
            "description": "Optional ISO country code or name (e.g. 'US', 'GB', 'Germany'). Only used when the destination is a postal code or address autocomplete does not know — e.g. 'SW1A 1AA' or '10001' — which is then resolved through the control-plane geo data.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}