{
  "openapi": "3.0.1",
  "info": {
    "title": "Expedia Scraper [$2/1K] | Hotel Reviews",
    "description": "Collect Expedia and Hotels.com hotel reviews by property URL or city search. Get ratings, full review text, authors, stay details, photos and responses, with optional property data and room rates.",
    "version": "0.2",
    "x-build-id": "kxDhu8X04fr5cBB7N"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ahmed_jasarevic~expedia-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ahmed_jasarevic-expedia-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/ahmed_jasarevic~expedia-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-ahmed_jasarevic-expedia-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/ahmed_jasarevic~expedia-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-ahmed_jasarevic-expedia-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 URLs",
            "type": "array",
            "description": "Expedia or Hotels.com hotel URLs. Regional Expedia sites are supported. Leave empty and use searchLocations instead.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchLocations": {
            "title": "Search by location",
            "type": "array",
            "description": "Search for hotels by city or region. Use the check-in and check-out fields below.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Default check-in date for search locations (YYYY-MM-DD). Can be overridden per location."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "Default check-out date for search locations (YYYY-MM-DD). Can be overridden per location."
          },
          "searchSort": {
            "title": "Search sort order",
            "enum": [
              "RECOMMENDED",
              "PRICE_LOW_TO_HIGH",
              "PRICE_HIGH_TO_LOW",
              "GUEST_RATING",
              "STAR_RATING_HIGH_TO_LOW"
            ],
            "type": "string",
            "description": "How to sort hotel search results.",
            "default": "RECOMMENDED"
          },
          "searchAmenities": {
            "title": "Amenity filters",
            "type": "array",
            "description": "Filter search results by amenities. Common values: pool, gym, hot_tub, spa, parking, free_parking, pet_friendly, restaurant, breakfast, wifi, airport_shuttle, kitchen, indoor_pool.",
            "items": {
              "type": "string"
            }
          },
          "minStars": {
            "title": "Minimum star rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Minimum hotel star class (1-5). Set 0 to disable.",
            "default": 0
          },
          "minRating": {
            "title": "Minimum guest rating",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Minimum guest rating out of 10 (e.g. 7.0). Set 0 to disable.",
            "default": 0
          },
          "excludeVacationRentals": {
            "title": "Exclude vacation rentals",
            "type": "boolean",
            "description": "Filter out Vrbo/Airbnb-style vacation rentals from search results.",
            "default": true
          },
          "maxResults": {
            "title": "Max results per location",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum hotel results per search location.",
            "default": 10
          },
          "maxItems": {
            "title": "Max reviews per URL",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum review rows per hotel URL. A run with N URLs returns up to maxItems x N rows.",
            "default": 20
          },
          "reviewsFrom": {
            "title": "Only reviews from date",
            "type": "string",
            "description": "Only include reviews on or after this date (YYYY-MM-DD). Leave empty for all reviews."
          },
          "sortBy": {
            "title": "Review sort order",
            "enum": [
              "newest",
              "highest",
              "lowest",
              "mostHelpful"
            ],
            "type": "string",
            "description": "Review order. Newest is the default and works best with date filters.",
            "default": "newest"
          },
          "includeReviewPhotos": {
            "title": "Include review photos",
            "type": "boolean",
            "description": "Keep review photo URLs in every row.",
            "default": true
          },
          "includeOwnerResponses": {
            "title": "Include management responses",
            "type": "boolean",
            "description": "Keep management replies in every row.",
            "default": true
          },
          "includeRoomRates": {
            "title": "Include room rates",
            "type": "boolean",
            "description": "Add room types, prices and availability.",
            "default": false
          },
          "includeHotelInfo": {
            "title": "Include hotel info lookup",
            "type": "boolean",
            "description": "Add hotel name and overall rating when available.",
            "default": false
          },
          "includePropertyDetails": {
            "title": "Include property details block",
            "type": "boolean",
            "description": "Add address, coordinates, description, amenities, highlights, languages and photo gallery.",
            "default": false
          },
          "includeCategoryRatings": {
            "title": "Include 5-category ratings",
            "type": "boolean",
            "description": "Add per-category guest ratings and the overall property rating. Requires property details.",
            "default": false
          },
          "includeRatingDistribution": {
            "title": "Include rating distribution",
            "type": "boolean",
            "description": "Add the review count and percentage for each rating band. Requires property details.",
            "default": false
          },
          "includePropertyImages": {
            "title": "Include property photo gallery",
            "type": "boolean",
            "description": "Attach the property photo gallery to every row. Enabled by default when property details are on.",
            "default": false
          },
          "maxPropertyImages": {
            "title": "Max property images",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of gallery photos to collect per property.",
            "default": 200
          },
          "skipReviews": {
            "title": "Skip reviews (hotel info only)",
            "type": "boolean",
            "description": "Return one hotel summary row instead of review rows. Add room rates for availability data.",
            "default": false
          },
          "roomsCheckIn": {
            "title": "Room rates check-in",
            "type": "string",
            "description": "Check-in date for room availability queries (YYYY-MM-DD). Defaults to today."
          },
          "roomsCheckOut": {
            "title": "Room rates check-out",
            "type": "string",
            "description": "Check-out date for room availability queries (YYYY-MM-DD). Defaults to tomorrow."
          },
          "roomsAdults": {
            "title": "Room rates adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of adults for room availability queries.",
            "default": 2
          },
          "roomsRegion": {
            "title": "Room rates region (country code)",
            "type": "string",
            "description": "ISO country code used for room pricing, such as US, DE or SG. Defaults to the hotel market."
          },
          "roomsLanguage": {
            "title": "Room rates language",
            "type": "string",
            "description": "Locale for room pricing, such as en_US. Defaults to the hotel locale."
          },
          "requestDelayMs": {
            "title": "Delay between review pages (ms)",
            "minimum": 0,
            "maximum": 30000,
            "type": "integer",
            "description": "Pause between review pages in milliseconds. 2500 ms is a safe default; lower only if the source responds reliably.",
            "default": 2500
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many properties to process in parallel. Keep at 1-2 to avoid throttling.",
            "default": 2
          },
          "maxRequestRetries": {
            "title": "Max retries per request",
            "minimum": 1,
            "type": "integer",
            "description": "How many times to retry a review page before moving on.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional Apify proxy configuration for the run.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}