{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Hotel Details Scraper: Rooms & Prices",
    "description": "Scrape Booking.com hotel details from hotel URLs: room types with amenities, facilities by group, photos, address, coordinates, review score, stars and the cheapest offer for your dates (total, taxes, free cancellation, breakfast). One flat row per hotel, no personal data.",
    "version": "0.1",
    "x-build-id": "XK4PPJGktdjakGgUC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/myth84~booking-hotel-details-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-myth84-booking-hotel-details-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/myth84~booking-hotel-details-scraper/runs": {
      "post": {
        "operationId": "runs-sync-myth84-booking-hotel-details-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/myth84~booking-hotel-details-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-myth84-booking-hotel-details-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": {
          "hotelUrls": {
            "title": "Booking.com hotel URLs",
            "type": "array",
            "description": "One hotel page per line, copied from your browser: <code>https://www.booking.com/hotel/pt/masa-campo-grande.html</code> (any Booking.com domain, language suffixes such as <code>.en-gb.html</code> and query parameters are fine) or just <code>pt/masa-campo-grande</code>. 1 to 1,000 URLs; duplicates are fetched once. Search result URLs are not accepted: use the Booking.com Scraper for searches.",
            "items": {
              "type": "string",
              "pattern": "^(https?://|(www\\.)?booking\\.|[A-Za-z]{2}/)"
            }
          },
          "checkIn": {
            "title": "Check-in",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Check-in date, YYYY-MM-DD, e.g. <code>2026-12-01</code>, given with checkOut. Leave both dates empty to price a stay starting 30 days from today (UTC) for 3 nights, better for schedules: fixed dates expire."
          },
          "checkOut": {
            "title": "Check-out",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Check-out date, YYYY-MM-DD, after checkIn, e.g. <code>2026-12-04</code>. Required when checkIn is set; with both dates empty, the stay ends 3 nights after the check-in in 30 days."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of adults, 1 to 30; the price of the offer depends on the number of guests. Default 2: the most searched occupancy.",
            "default": 2
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Number of children (0 to 17 years old), 0 to 10; give their ages in childrenAges, Booking.com prices depend on them. Default 0: adults only.",
            "default": 0
          },
          "childrenAges": {
            "title": "Children ages",
            "type": "array",
            "description": "Age of each child, one number from 0 to 17 per child, e.g. <code>[5, 9]</code>; no more ages than children. Default empty: a child without a listed age counts as 8 years old.",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 17
            },
            "default": []
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of rooms (units) to book, 1 to 30; the offer is priced for this many rooms. Default 1: one room for all the guests.",
            "default": 1
          },
          "includeOffer": {
            "title": "Include the cheapest offer",
            "type": "boolean",
            "description": "Also price your stay, one more request per hotel (asked once more after an empty answer): total price of the cheapest available room for your dates and guests, crossed-out price, taxes not included, free cancellation date, breakfast and the room type it belongs to. Default on: every row carries the price of the stay. Untick it for descriptions, facilities and photos only (faster).",
            "default": true
          },
          "maxPhotos": {
            "title": "Photos per hotel",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of gallery photos (1024 × 768 URLs) kept per hotel, 0 to 200; 0 keeps none. Default 45: the number Booking.com shows on its hotel pages.",
            "default": 45
          },
          "currency": {
            "title": "Currency",
            "pattern": "^[A-Za-z]{3}$",
            "type": "string",
            "description": "ISO 4217 code of the offer prices, e.g. <code>EUR</code>, <code>USD</code> or <code>GBP</code>: Booking.com converts every price of the offer into it; paid facilities keep the hotel's own currency. Pick one or type any code Booking.com accepts. Default EUR: the currency of our validation runs.",
            "default": "EUR"
          },
          "language": {
            "title": "Language",
            "pattern": "^[a-z]{2}(-[a-z]{2})?$",
            "type": "string",
            "description": "Booking.com language code of the texts (hotel name, description, room names, facilities, deal badges): two lowercase letters, optionally a region, e.g. <code>en-us</code>, <code>en-gb</code>, <code>fr</code>, <code>de</code>, <code>pt-pt</code>. Default en-us: English (US), the language of our validation runs.",
            "default": "en-us"
          },
          "maxResults": {
            "title": "Maximum hotels",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of hotels saved and charged, 1 to 1,000; useful to cap a long list of URLs. A page Booking.com does not know gives no row and is not charged. Default 100: about $0.25 on the Free plan. The form is prefilled with 50: the three prefilled hotel URLs make a quick first run, and a pasted list is not cut short.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxies of the requests. Default: Apify datacenter proxies, included in the price and enough for Booking.com hotel pages in our tests. A proxy country you select is recorded in viewCountryCode; you can also give your own proxy URLs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxRequests": {
            "title": "Max requests",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Safety cap on requests for the whole run: one per hotel page and one per offer, each asked at most once more after an unusable or empty answer. Default 2500: enough for 1,000 hotels with their offer (2,000 requests) and some retries.",
            "default": 2500
          },
          "delayMs": {
            "title": "Delay between hotels",
            "minimum": 0,
            "maximum": 30000,
            "type": "integer",
            "description": "Pause after each hotel, in milliseconds, 0 to 30,000 (four hotels are processed at a time); 0 disables it. Default 500: half a second, a gentle pace with four hotels in parallel.",
            "default": 500
          },
          "debugStoreResponses": {
            "title": "Store raw responses",
            "type": "boolean",
            "description": "Debugging only: save every API response (hotel page and offer) in the run's key-value store. Default off: it uses storage.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}