{
  "openapi": "3.0.1",
  "info": {
    "title": "Expedia Reviews Scraper",
    "description": "Scrape Expedia guest reviews for any hotel, including hotels given as Hotels.com links. Just add property IDs or hotel links and get the score out of 10, the guest's name, the full written review, trip type and any photos. Sort, filter and search within the text. $0.60 per 1,000 reviews.",
    "version": "1.0",
    "x-build-id": "K6hWkKm9PHU6MXeNd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/boncross~expedia-reviews/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-boncross-expedia-reviews",
        "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/boncross~expedia-reviews/runs": {
      "post": {
        "operationId": "runs-sync-boncross-expedia-reviews",
        "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/boncross~expedia-reviews/run-sync": {
      "post": {
        "operationId": "run-sync-boncross-expedia-reviews",
        "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": {
          "hotels": {
            "title": "Hotels",
            "type": "array",
            "description": "Property IDs or hotel page links. A link looks like https://www.expedia.com/Santorini-Hotels-Ira-Hotel-Spa.h6116875.Hotel-Information: paste the whole link or just the number after the h.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Hotel page links, pasted or bulk-loaded from a file or Google Sheet. Use this instead of the list above when you have many.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Maximum rows for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "Stop once this many rows have been returned, across every hotel. 0 means no limit.",
            "default": 0
          },
          "maxReviewsPerHotel": {
            "title": "Maximum reviews per hotel",
            "minimum": 1,
            "type": "integer",
            "description": "How many reviews to return for each hotel. They arrive ten at a time.",
            "default": 100
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "RECOMMENDED",
              "NEWEST_TO_OLDEST",
              "HIGHEST_TO_LOWEST_RATED",
              "LOWEST_TO_HIGHEST_RATED"
            ],
            "type": "string",
            "description": "The order reviews come back in: the site's own most-relevant order, newest first, or by score. Newest first is the one to use with Only new reviews.",
            "default": "RECOMMENDED"
          },
          "searchTerm": {
            "title": "Search within reviews",
            "type": "string",
            "description": "Return only reviews mentioning this word, for example breakfast. Leave empty for all of them."
          },
          "travellerType": {
            "title": "Traveller type",
            "enum": [
              "BUSINESS",
              "COUPLES",
              "FAMILIES",
              "FAMILIES_WITH_YOUNG_CHILDREN",
              "GROUPS",
              "SOLO",
              "WITH_PETS"
            ],
            "type": "string",
            "description": "Only reviews from this kind of trip, as Expedia's own traveller-type filter."
          },
          "minRating": {
            "title": "Minimum score",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Drop reviews scored below this, out of 10. 0 means no limit.",
            "default": 0
          },
          "maxRating": {
            "title": "Maximum rating",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Drop reviews rated above this, out of 10. 0 means no limit. Use it with the minimum to read one band, or alone to read the complaints.",
            "default": 0
          },
          "withPhotosOnly": {
            "title": "Reviews with photos only",
            "type": "boolean",
            "description": "Keep only reviews the guest attached a photo to. Expedia filters these itself, so a photo-only run is as quick as any other.",
            "default": false
          },
          "includeSummary": {
            "title": "Include the guest review summary",
            "type": "boolean",
            "description": "Add one extra row per hotel holding the site's own themed summary of its reviews: what guests liked, each point with the number of reviews behind it. Off by default: the site does not return it to every requester, and when it returns nothing the row is simply absent and nothing is charged.",
            "default": false
          },
          "includeOverview": {
            "title": "Include the rating breakdown",
            "type": "boolean",
            "description": "Add one row per hotel with the overall score, the total number of verified reviews, and the score for each category such as cleanliness, amenities and service.",
            "default": true
          },
          "market": {
            "title": "Market",
            "enum": [
              "auto",
              "ar",
              "au",
              "be",
              "br",
              "ca",
              "cl",
              "co",
              "cr",
              "dk",
              "de",
              "eg",
              "es",
              "fr",
              "in",
              "id",
              "ie",
              "it",
              "my",
              "mx",
              "nl",
              "nz",
              "no",
              "pe",
              "ph",
              "eu",
              "ch",
              "sg",
              "fi",
              "se",
              "ae",
              "uk",
              "us",
              "vn",
              "at",
              "sa",
              "th",
              "tw",
              "jp",
              "hk",
              "kr"
            ],
            "type": "string",
            "description": "Which country's site to read. The links in every row point at it and the review dates are written its way; the reviews themselves were the same set, in the same order, on the Japanese and French sites measured. Auto follows each pasted link's own site, and a bare property ID uses the US site. Property IDs are the same in every market.",
            "default": "auto"
          },
          "language": {
            "title": "Label language",
            "enum": [
              "english",
              "site-default"
            ],
            "type": "string",
            "description": "Language of the site's own wording on a review: the date as written and the heading of the hotel's reply. Review text is always as the guest wrote it, and the score wording and trip type stay in English. English is recommended: in the market's own language the name of whoever replied for the hotel cannot be read and comes back empty. The date is read either way.",
            "default": "english"
          },
          "dedupStoreName": {
            "title": "Memory store",
            "type": "string",
            "description": "Name of a storage area to remember the reviews already returned. Leave empty to remember nothing."
          },
          "onlyNew": {
            "title": "Only new reviews",
            "type": "boolean",
            "description": "Return only reviews that no earlier run returned. Needs a memory store.",
            "default": false
          },
          "delayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "Pause after each request, per parallel lane. 0 runs at full speed; raise it only to make a large run gentler. Values above 2000 are treated as 2000.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many hotels are fetched at once. Higher is faster; the default suits almost every run.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}