{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Reviews Scraper: Hotel Guest Reviews",
    "description": "Get the guest reviews of any Booking.com hotel: score, title, liked and disliked text, reviewer country and type of trip, room, dates of stay and the hotel reply. Sort and filter by score, language, guest type or words. Plain HTTP, no browser. Not affiliated with Booking.com.",
    "version": "0.1",
    "x-build-id": "ghTLpg2TUxOH8MNEc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/aleksandrbooking~booking-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-aleksandrbooking-booking-reviews-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/aleksandrbooking~booking-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-aleksandrbooking-booking-reviews-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/aleksandrbooking~booking-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-aleksandrbooking-booking-reviews-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": "Hotel links",
            "type": "array",
            "description": "Links of Booking.com hotel pages, like https://www.booking.com/hotel/ge/radisson-blu-batumi.html. Any language version and any extra parameters work; one hotel is read once however many links name it. Add \"userData\" to a link to get it back on every review of that hotel under \"customData\". Booking.com does not put the hotel number in a link, so a link is looked up by name: about 7 in 10 are found. A link that is not found is listed in FAILED_HOTELS and is not charged; use \"Hotel numbers\" for those.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "hotelIds": {
            "title": "Hotel numbers",
            "type": "array",
            "description": "Booking.com's own numbers of hotels, like 320991: the \"hotelId\" column of the Booking.com Scraper Actor's output. A number is exact and needs no lookup, so use it when you have it. Can be combined with links.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "destinations": {
            "title": "Places",
            "type": "array",
            "description": "A city, region, district, landmark, airport or country: the Actor reads the reviews of the hotels Booking.com lists for it, no hotel links needed. Type a name such as \"Batumi\" or \"Lisbon, Portugal\", or paste the link of a Booking.com search results page. Booking.com lists the hotels that have a room for tomorrow, up to about a thousand per place. Every review carries the place in \"customData.destination\". Can be combined with links and numbers.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxHotelsPerDestination": {
            "title": "Hotels per place",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many hotels to read for each place, in the order chosen below. Hotels that have no reviews are left out and do not count. A thousand hotels is about what one Booking.com search reaches.",
            "default": 10
          },
          "hotelSort": {
            "title": "Which hotels of a place",
            "enum": [
              "popularity",
              "most_reviewed",
              "top_rated"
            ],
            "type": "string",
            "description": "Which hotels of a place you get when you ask for fewer than the place has: Booking.com's own ranking, the hotels with the most reviews (the whole list that one Booking.com search reaches is read to find them), or Booking.com's best-score order.",
            "default": "popularity"
          },
          "maxReviewsPerHotel": {
            "title": "Maximum reviews per hotel",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "The most reviews to collect for each hotel. One row is one billable review. Booking.com lists reviews of the last three years only. With the filters below, the limit counts the reviews that pass them.",
            "default": 100
          },
          "sortReviewsBy": {
            "title": "Sort reviews by",
            "enum": [
              "f_relevance",
              "f_recent_desc",
              "f_recent_asc",
              "f_score_desc",
              "f_score_asc"
            ],
            "type": "string",
            "description": "The order of Booking.com's own review list. With a limit below the number of reviews, this decides which reviews you get.",
            "default": "f_relevance"
          },
          "cutoffDate": {
            "title": "Only reviews since",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Keep reviews written on or after this day: a date like 2026-01-01, or a period back from today such as \"30 days\", \"6 months\", \"1 year\". With \"Newest first\" the Actor stops at the first older review, so a daily run for the last day costs one request."
          },
          "reviewScores": {
            "title": "Review scores",
            "type": "array",
            "description": "Only reviews in these score bands, as Booking.com groups them. Each band is read separately, so a narrow band is cheap even for a hotel with thousands of reviews.",
            "items": {
              "type": "string",
              "enum": [
                "ALL",
                "review_adj_superb",
                "review_adj_good",
                "review_adj_average_passable",
                "review_adj_poor"
              ],
              "enumTitles": [
                "All",
                "Superb: 9+",
                "Good: 7-9",
                "Passable: 5-7",
                "Poor: 3-5"
              ]
            },
            "default": [
              "ALL"
            ]
          },
          "reviewLanguages": {
            "title": "Review languages",
            "type": "array",
            "description": "Only reviews written in these languages, as codes: en, de, fr, es, it, ru, tr, ar, he, zh. Empty means all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "guestTypes": {
            "title": "Guest types",
            "type": "array",
            "description": "Only reviews from these kinds of trips. Empty means all.",
            "items": {
              "type": "string",
              "enum": [
                "COUPLES",
                "FAMILIES",
                "GROUP_OF_FRIENDS",
                "SOLO_TRAVELLERS",
                "BUSINESS_TRAVELLERS"
              ],
              "enumTitles": [
                "Couples",
                "Families",
                "Groups of friends",
                "Solo travellers",
                "Business travellers"
              ]
            },
            "default": []
          },
          "searchText": {
            "title": "Reviews that mention",
            "type": "string",
            "description": "Only reviews whose text contains this word or phrase, for example \"breakfast\" or \"noise\". Booking.com does the search; empty means no text filter."
          },
          "skipReviewsWithoutText": {
            "title": "Skip reviews without text",
            "type": "boolean",
            "description": "A part of Booking.com reviews are only a score with the stay details. They are delivered by default, and counted in the hotel's review total. Turn this on to get written reviews only; skipped reviews are not charged.",
            "default": false
          },
          "concurrency": {
            "title": "Requests in parallel",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many requests run at the same time, across all hotels. The default reads on the order of a hundred reviews a second.",
            "default": 6
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify datacenter proxies are the default and what this Actor is priced on. Apify residential groups are not available here; a run that asks for one is refused in the first seconds, before any review is charged. For your own proxies choose Custom proxies and supply them.",
            "default": {
              "useApifyProxy": true
            }
          },
          "dryRun": {
            "title": "Dry run (owner only)",
            "type": "boolean",
            "description": "Produce data without charging events. Honored only for runs started by the Actor owner; ignored for everyone else.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}