{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Scraper - Hotel Prices, Availability & Reviews",
    "description": "Scrape Booking.com without login: hotels for any destination and dates with 50+ fields (total and nightly price, rating, reviews, stars, distance, room, free cancellation, breakfast, coordinates), plus guest reviews of any hotel. US$ 3.50 per 1,000 hotels, errors free.",
    "version": "0.1",
    "x-build-id": "x1GZ1ZV4xXA5EO6eV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~booking-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-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/scrapewise~booking-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-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/scrapewise~booking-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-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": {
          "destinations": {
            "title": "Destinations",
            "type": "array",
            "description": "Places to search, one per line, written as you would type them in the Booking.com search box: a city, region, neighborhood or landmark, for example Lisbon, Algarve, Manhattan or Eiffel Tower. Each destination is searched with the dates, guests and filters below and returns one row per property with price, rating, address and coordinates. Also accepts 'search', 'searchQueries' and 'locations'.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max hotels per destination",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum properties per destination, for example 100 (default) or 2000 for a full city. Booking.com lists about 1,000 properties per search order; with the default order the Actor adds price-ordered passes to reach up to about 2,000. You pay per hotel delivered, so this is the cost cap per destination. 'maxHotelsPerDestination' also works.",
            "default": 50
          },
          "checkIn": {
            "title": "Check-in",
            "type": "string",
            "description": "Check-in date in YYYY-MM-DD format, for example 2026-12-15. Prices and availability are for these dates. Empty = 30 days from today."
          },
          "checkOut": {
            "title": "Check-out",
            "type": "string",
            "description": "Check-out date in YYYY-MM-DD format, after check-in. Empty = check-in plus 'Nights'. Prices in the output are for the whole stay."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Length of the stay when 'Check-out' is empty, from 1 (default) to 90. Ignored when a check-out date is set.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "type": "integer",
            "description": "Number of adults in the search, default 2. Booking.com prices and the rooms offered depend on it, so use the group you want to price.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children ages",
            "type": "array",
            "description": "One age per child, from 0 to 17, one per line, for example 5 and 8 for two children. Booking.com uses the ages to pick rooms and prices. Empty = no children.",
            "items": {
              "type": "string"
            }
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "type": "integer",
            "description": "Number of rooms in the search, default 1. Prices are for all the rooms together.",
            "default": 1
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Booking.com currency code for every price, for example USD (default), EUR, GBP, BRL or JPY. Booking.com converts the prices itself.",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Booking.com language code for texts such as room names, distances and deal labels: en-us (default), en-gb, pt-br, es, de, fr, it, ja. Hotel names stay as the property wrote them.",
            "default": "en-us"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "popularity",
              "price",
              "price_from_high_to_low",
              "review_score_and_price",
              "bayesian_review_score",
              "class",
              "class_asc",
              "distance_from_search",
              "upsort_bh"
            ],
            "type": "string",
            "description": "Booking.com's own result orders: our top picks (popularity, the default), lowest price, highest price, best reviewed and lowest price, top reviewed, stars high or low, distance from the searched place, and others. With a limit, the order decides which properties you get. The default order shuffles between pages, so the Actor fills the gaps with price-ordered passes when needed.",
            "default": "popularity"
          },
          "starRatings": {
            "title": "Star ratings",
            "type": "array",
            "description": "Only these star classes, one per line, for example 4 and 5. Accepts 1 to 5. Empty = all classes, including unrated properties.",
            "items": {
              "type": "string"
            }
          },
          "minReviewScore": {
            "title": "Minimum guest rating",
            "enum": [
              "any",
              "6",
              "7",
              "8",
              "9"
            ],
            "type": "string",
            "description": "Only properties with at least this guest rating: Pleasant 6+, Good 7+, Very good 8+ or Wonderful 9+. Default 'Any'.",
            "default": "any"
          },
          "freeCancellationOnly": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Only properties offering a room with free cancellation for your dates (Booking.com filter fc=2). Off by default.",
            "default": false
          },
          "breakfastIncluded": {
            "title": "Breakfast included only",
            "type": "boolean",
            "description": "Only properties offering a room with breakfast included (Booking.com meal plan filter). Off by default.",
            "default": false
          },
          "hotelsOnly": {
            "title": "Hotels only",
            "type": "boolean",
            "description": "Only properties of type hotel: apartments, hostels, guest houses and homes are left out. Off by default.",
            "default": false
          },
          "rawFilters": {
            "title": "Extra Booking.com filters (advanced)",
            "type": "string",
            "description": "Advanced. The 'nflt' value copied from a Booking.com search link, for example ht_id=201;distance=1000 or popular_activities=55, to use any filter the site has. Separate filters with semicolons. Combined with the filters above."
          },
          "hotelUrls": {
            "title": "Hotel links",
            "type": "array",
            "description": "Booking.com hotel links, one per line, for example https://www.booking.com/hotel/pt/name.html. Each hotel returns its guest reviews (score, title, liked and disliked text, traveler type, room, stay date, country), filtered by the options below. Each review is charged as one 'Review delivered' event. Also accepts 'startUrls' and 'urls'.",
            "items": {
              "type": "string"
            }
          },
          "maxReviews": {
            "title": "Max reviews per hotel",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum reviews per hotel, for example 100 (default) or 5000. Every review Booking.com shows can be reached, 25 per request. You pay per review delivered. 'maxReviewsPerHotel' also works.",
            "default": 50
          },
          "reviewsSortBy": {
            "title": "Reviews order",
            "enum": [
              "NEWEST_FIRST",
              "MOST_RELEVANT",
              "OLDEST_FIRST",
              "SCORE_DESC",
              "SCORE_ASC"
            ],
            "type": "string",
            "description": "Order of the reviews: Newest first (default), Most relevant, Oldest first, Highest score first or Lowest score first. With a limit it decides which reviews you get, for example Lowest score first plus 50 returns the 50 worst reviews.",
            "default": "NEWEST_FIRST"
          },
          "reviewLanguages": {
            "title": "Review languages",
            "type": "array",
            "description": "Only reviews written in these languages, as two-letter codes, one per line, for example en and pt. Empty = all languages.",
            "items": {
              "type": "string"
            }
          },
          "travelerType": {
            "title": "Traveler type",
            "enum": [
              "ALL",
              "FAMILIES",
              "COUPLES",
              "GROUP_OF_FRIENDS",
              "SOLO_TRAVELLERS",
              "BUSINESS_TRAVELLERS"
            ],
            "type": "string",
            "description": "Only reviews from this kind of traveler: families, couples, groups of friends, solo travelers or business travelers. Default 'All'.",
            "default": "ALL"
          },
          "reviewsPublishedAfter": {
            "title": "Reviews published after",
            "type": "string",
            "description": "Only reviews posted on or after this date, in YYYY-MM-DD format, for example 2026-01-01. Useful in scheduled runs to fetch only recent reviews. Empty = all dates."
          },
          "compareWithPreviousRun": {
            "title": "Compare prices with the previous run",
            "type": "boolean",
            "description": "Keeps the last price of every hotel in a key-value store on your account ('booking-scraper-price-history', one record per search: destination, dates, guests, rooms, currency, sort and filters) and adds to each row: previousPrice, priceChange, priceChangePct, isNew, isNewLowest (lowest price ever seen), lowestSeenPrice, firstSeenAt and previousSeenAt. On the first run everything is new. Save the input as a Task with fixed dates and schedule it daily to get a price monitor.",
            "default": false
          },
          "onlyChanged": {
            "title": "Deliver only new items and price changes",
            "type": "boolean",
            "description": "With 'Compare prices with the previous run' on: rows whose price did not move since the previous run are not saved and not charged, and the maximum still counts the hotels checked, so a daily run costs the same and you pay only for the rows you get. A search where nothing changed returns one free row with errorCode NO_PRICE_CHANGES.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy (datacenter) is the default and recommended. When Booking.com keeps blocking a session, the Actor switches to Apify residential proxies on its own, with no extra charge. Change it only to use your own proxies.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}