Booking.com Hotel Scraper
Pricing
from $2.00 / 1,000 hotel scrapeds
Booking.com Hotel Scraper
Scrape Booking.com hotel prices, availability, ratings, rooms, policies, facilities, photos, and review summaries. Export CSV, JSON, Excel, or use the API.
Booking.com Hotel Scraper
Pricing
from $2.00 / 1,000 hotel scrapeds
Scrape Booking.com hotel prices, availability, ratings, rooms, policies, facilities, photos, and review summaries. Export CSV, JSON, Excel, or use the API.
You can access the Booking.com Hotel Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.3", "x-build-id": "t6djiPVTSt3CrGehz" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/fetch_cat~booking-com-hotels-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-fetch_cat-booking-com-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/fetch_cat~booking-com-hotels-scraper/runs": { "post": { "operationId": "runs-sync-fetch_cat-booking-com-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/fetch_cat~booking-com-hotels-scraper/run-sync": { "post": { "operationId": "run-sync-fetch_cat-booking-com-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": "One city, region, landmark, or hotel search phrase. Supply destination, destinations, or hotelUrls; at least one target is required at runtime, and these modes may be combined (25 targets total). Lisbon is a form prefill, not an API default. For multiple searches, use destinations." }, "hotelUrls": { "title": "Direct Booking.com hotel URLs", "maxItems": 25, "type": "array", "description": "Optional Booking.com /hotel/{country}/{slug}.html URLs, using HTTP or HTTPS without credentials or a port. Each URL is resolved from its hotel-name slug and returns at most one stable-ID match; renamed properties or access challenges can prevent a match. Supply these, destination, or destinations.", "items": { "type": "string" } }, "checkIn": { "title": "Check-in date", "type": "string", "description": "Check-in in YYYY-MM-DD. Supply both dates or neither." }, "checkOut": { "title": "Check-out date", "type": "string", "description": "Check-out in YYYY-MM-DD. Supply both dates or neither." }, "adults": { "title": "Adults", "minimum": 1, "maximum": 30, "type": "integer", "description": "Adult guests used for availability and price context.", "default": 2 }, "maxHotelsPerRun": { "title": "Hotels per run (saved and charged cap)", "minimum": 1, "maximum": 100, "type": "integer", "description": "Hard cap across every destination and hotel URL in this run. A hotel-scraped charge occurs only when that base row is saved.", "default": 10 }, "destinations": { "title": "Destinations", "maxItems": 25, "type": "array", "description": "Optional list of destination searches. Each entry has its own maxHotelsPerSearch cap.", "items": { "type": "string" } }, "checkInOffsetDays": { "title": "Check-in offset days", "minimum": 0, "maximum": 365, "type": "integer", "description": "Resolve check-in this many days after the current UTC date during input initialization. Use together with stayNights instead of checkIn/checkOut. Cannot be combined with fixed dates." }, "stayNights": { "title": "Stay length in nights", "minimum": 1, "maximum": 30, "type": "integer", "description": "Resolve check-out from the relative check-in date. Use together with checkInOffsetDays instead of fixed dates." }, "children": { "title": "Children", "minimum": 0, "maximum": 10, "type": "integer", "description": "Number of children. Must equal the number of entries in childrenAges.", "default": 0 }, "childrenAges": { "title": "Children ages", "maxItems": 10, "type": "array", "description": "One age from 0 to 17 for every child, for example [4, 9].", "items": { "type": "integer", "minimum": 0, "maximum": 17 }, "default": [] }, "rooms": { "title": "Rooms", "minimum": 1, "maximum": 10, "type": "integer", "description": "Rooms used for availability and price context.", "default": 1 }, "currency": { "title": "Requested currency", "type": "string", "description": "Three-letter requested currency. The returned currency is recorded separately in every row.", "default": "USD" }, "language": { "title": "Requested language/locale", "type": "string", "description": "Booking.com language parameter, for example en-us or de-de. Provenance records the applied value.", "default": "en-us" }, "proxyConfiguration": { "title": "Advanced connection settings", "type": "object", "description": "On Apify, omission uses the existing residential route; omission in local development uses direct access. No default or prefill is injected here. Explicit proxyConfiguration takes precedence: useApifyProxy:false selects direct access; useApifyProxy:true selects managed access with optional nonempty apifyProxyGroups and uppercase two-letter apifyProxyCountry; proxyUrls selects a customer HTTP/HTTPS pool. Do not combine a customer pool with managed fields, or direct opt-out with managed groups/country. Invalid or unsupported settings reject before target work; selected-route failure never enables another pool or paid fallback. Managed access uses countryCode only when apifyProxyCountry is absent. Access and costs depend on the selected service; no route guarantees success. Never post proxy URLs or credentials in issues." }, "countryCode": { "title": "Residential proxy country code", "type": "string", "description": "Optional two-letter country code for the omitted residential route on Apify, or managed access when proxyConfiguration.apifyProxyCountry is absent. Explicit direct access and customer proxy pools ignore this value. It does not guarantee target access." }, "propertyTypes": { "title": "Property types", "uniqueItems": true, "type": "array", "description": "Optional property categories. Multiple values are combined as alternatives.", "items": { "type": "string", "enum": [ "HOTEL", "APARTMENT", "VACATION_HOME", "CONDO_HOTEL", "BED_AND_BREAKFAST", "GUESTHOUSE", "HOSTEL", "LODGE", "HOMESTAY", "CAMPGROUND", "BOAT", "VILLA" ], "enumTitles": [ "Hotels", "Apartments", "Vacation homes", "Condo hotels", "Bed and breakfasts", "Guesthouses", "Hostels", "Lodges", "Homestays", "Campgrounds", "Boats", "Villas" ] } }, "minReviewScore": { "title": "Minimum review score", "minimum": 6, "maximum": 9, "type": "integer", "description": "Optional minimum guest review score." }, "starRatings": { "title": "Star ratings", "uniqueItems": true, "type": "array", "description": "Optional exact property star ratings as integers from 1 to 5, for example [4, 5]. Multiple values are combined as alternatives.", "items": { "type": "integer", "minimum": 1, "maximum": 5 } }, "freeCancellationOnly": { "title": "Free cancellation only", "type": "boolean", "description": "Keep only listings currently exposing a free-cancellation option for the requested stay context.", "default": false }, "minPricePerNight": { "title": "Minimum displayed price per night", "minimum": 0, "type": "number", "description": "Optional lower bound in the requested/returned currency. Calculated from the displayed stay total divided by nights; requires dates." }, "maxPricePerNight": { "title": "Maximum displayed price per night", "minimum": 0, "type": "number", "description": "Optional upper bound in the requested/returned currency. Calculated from the displayed stay total divided by nights; requires dates." }, "sortBy": { "title": "Sort results", "enum": [ "RECOMMENDED", "PRICE_ASC", "TOP_REVIEWED", "STARS_DESC", "STARS_ASC" ], "type": "string", "description": "Requests Booking.com ordering: RECOMMENDED uses its default; PRICE_ASC requests price; TOP_REVIEWED requests review score and price; STARS_DESC/STARS_ASC request descending/ascending stars. The requested sorter is recorded in provenance; results are not independently re-sorted, and the upstream service may vary its order. Default RECOMMENDED.", "default": "RECOMMENDED" }, "maxCandidatesPerSearch": { "title": "Candidates evaluated per destination", "minimum": 1, "maximum": 500, "type": "integer", "description": "Maximum unpaid candidate rows inspected per destination while applying filters. This must be at least maxHotelsPerSearch and does not change the saved/charged cap.", "default": 100 }, "maxHotelsPerSearch": { "title": "Hotels per destination search", "minimum": 1, "maximum": 100, "type": "integer", "description": "Maximum rows from each destination target. Direct hotel URL targets can return at most one row each.", "default": 10 }, "enrichRooms": { "title": "Rooms and offers", "type": "boolean", "description": "Fetch room configurations and matched offers independently for each hotel.", "default": false }, "enrichPolicies": { "title": "Policies", "type": "boolean", "description": "Fetch cancellation, prepayment, pet, and meal-plan signals independently.", "default": false }, "enrichFacilities": { "title": "Facility highlights", "type": "boolean", "description": "Fetch facility/USP highlights independently.", "default": false }, "enrichPhotos": { "title": "Photos", "type": "boolean", "description": "Fetch the available hotel photo set independently.", "default": false }, "enrichReviews": { "title": "Review details", "type": "boolean", "description": "Fetch score labels, secondary scores, and available review summary metadata independently. This does not return individual guest review text.", "default": false }, "maxItems": { "title": "Deprecated maximum hotels", "minimum": 1, "maximum": 100, "type": "integer", "description": "Legacy alias that sets both saved-row limits. Do not combine it with maxHotelsPerSearch or maxHotelsPerRun, including values inserted by a form. Omission defaults each saved-row limit to 10; form prefills suggest 5." }, "includeDetails": { "title": "Deprecated: enable all enrichments", "type": "boolean", "description": "Legacy switch that enables every enrichment unless an individual enrichment flag overrides it." } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Booking.com Hotel Scraper from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: