{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Reviews Scraper",
    "description": "[💰 $1.3 / 1K] Extract guest reviews from any Booking.com property — full text, scores, languages, room types, stay dates, and partner replies. Pipe in URLs or pass the output of our Booking.com Scraper directly.",
    "version": "1.1",
    "x-build-id": "GiwzqrjJUY3zqZP3q"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~booking-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-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/solidcode~booking-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-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/solidcode~booking-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-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": "Booking.com Property URLs",
            "type": "array",
            "description": "Booking.com hotel page URLs to scrape reviews from. Paste raw URLs (e.g. 'https://www.booking.com/hotel/fr/le-meurice.en-gb.html') OR feed in the output dataset of our Booking.com Scraper directly — rows that contain a 'url' field will be picked up automatically. One review per dataset row.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxReviewsPerProperty": {
            "title": "Max Reviews Per Property",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on reviews collected per property. The cap applies to each property separately, so 10 property URLs at 1,000 can return 10,000 rows. Set to 0 for all available reviews — popular hotels can have several thousand. Pricing is per review row, so this is your main cost control."
          },
          "sortBy": {
            "title": "Sort Order",
            "enum": [
              "relevant",
              "newest",
              "oldest",
              "score_desc",
              "score_asc"
            ],
            "type": "string",
            "description": "How Booking.com should order reviews before we collect them. Affects which reviews you get first when 'Max Reviews Per Property' is set. 'Most relevant' is Booking.com's own ranking and it is centred on the property's overall guest rating, so a capped run returns reviews clustered around that rating and can leave out the very highest and very lowest scores completely. Measured at a 300-review cap: 'Most relevant' returned only 3 of the 10 possible scores on Atlantis The Palm (8, 9, 10), Park Plaza Westminster Bridge (7, 8, 9) and Excalibur Las Vegas (7, 8, 9), while 'Newest first' on the same three properties at the same cap returned all 10 scores. Choose 'Newest first' or 'Oldest first' when you need a representative cross-section for score histograms or sentiment analysis, or set the cap to 0 to collect every review."
          },
          "scoreFilter": {
            "title": "Review Score",
            "enum": [
              "all",
              "wonderful",
              "good",
              "okay",
              "poor",
              "very_poor"
            ],
            "type": "string",
            "description": "Only collect reviews in this Booking.com score bucket. Guests rate a stay with a whole number from 1 to 10, so the buckets do not overlap: Good returns 7s and 8s, Wonderful returns 9s and 10s. Leave on 'All' to collect every review."
          },
          "languages": {
            "title": "Review Languages",
            "uniqueItems": true,
            "type": "array",
            "description": "Only collect reviews written in these languages. Multi-select. Empty = all languages. Regional variants come with the language you pick: English also returns US English, Portuguese also returns Brazilian Portuguese, Spanish also returns Latin-American and Mexican Spanish, and Chinese also returns Traditional Chinese. Those rows carry Booking.com's own variant code in the 'language' column ('xu', 'xb', 'xa', 'xm', 'xt') rather than the plain two-letter code.",
            "items": {
              "type": "string",
              "enum": [
                "en",
                "de",
                "fr",
                "es",
                "it",
                "nl",
                "pt",
                "pl",
                "ru",
                "ja",
                "ko",
                "zh",
                "ar",
                "tr",
                "sv",
                "no",
                "da",
                "fi",
                "cs",
                "hu",
                "ro",
                "el",
                "he",
                "th",
                "vi",
                "id"
              ],
              "enumTitles": [
                "English",
                "German",
                "French",
                "Spanish",
                "Italian",
                "Dutch",
                "Portuguese",
                "Polish",
                "Russian",
                "Japanese",
                "Korean",
                "Chinese",
                "Arabic",
                "Turkish",
                "Swedish",
                "Norwegian",
                "Danish",
                "Finnish",
                "Czech",
                "Hungarian",
                "Romanian",
                "Greek",
                "Hebrew",
                "Thai",
                "Vietnamese",
                "Indonesian"
              ]
            }
          },
          "customerType": {
            "title": "Traveler Type",
            "enum": [
              "all",
              "families",
              "couples",
              "solo",
              "groups",
              "business"
            ],
            "type": "string",
            "description": "Only collect reviews from this traveler segment, using Booking.com's own filter. 'All' returns every traveler type. Note that 'Business travelers' filters on the purpose of the trip, while the 'customerType' column on each row reports the guest group Booking.com recorded — families, couples, solo or groups. Business-trip reviews therefore come back labelled with a guest group, never with 'business'."
          },
          "timeOfYear": {
            "title": "Review Season",
            "enum": [
              "all",
              "mar_may",
              "jun_aug",
              "sep_nov",
              "dec_feb"
            ],
            "type": "string",
            "description": "Only collect reviews posted in this part of the year. Booking.com's seasonal filter keys on the date the review was written, not on the dates of the stay — guests usually post within a few weeks of checking out, so a summer window can include a stay that ended in late spring. Useful when comparing summer vs. winter feedback."
          },
          "includeReplies": {
            "title": "Include Hotel Replies",
            "type": "boolean",
            "description": "Include the property's official reply to each review when available. Adds 'partnerReplyText' to each row at no extra cost. The companion 'partnerReplyDate' column is read from the same reply record, but Booking.com leaves that timestamp empty on every review we have seen, so expect it to be blank."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}