{
  "openapi": "3.0.1",
  "info": {
    "title": "Expedia Room Rates Scraper",
    "description": "Scrape every room Expedia and Hotels.com are selling for a hotel and your dates. Just add property IDs or hotel links and get room name, size, nightly price, stay total with taxes, board, cancellation terms and payment policy. $3.50 per 1,000 priced hotel-stays.",
    "version": "1.0",
    "x-build-id": "83OKrqKWTXMJ4fLh7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/boncross~expedia-room-rates/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-boncross-expedia-room-rates",
        "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-room-rates/runs": {
      "post": {
        "operationId": "runs-sync-boncross-expedia-room-rates",
        "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-room-rates/run-sync": {
      "post": {
        "operationId": "run-sync-boncross-expedia-room-rates",
        "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"
                }
              }
            }
          },
          "site": {
            "title": "Site",
            "enum": [
              "expedia",
              "hotels"
            ],
            "type": "string",
            "description": "Which site to read. Links you paste already name their own site, so this only applies to bare property IDs. Hotels.com is read on the United States site only.",
            "default": "expedia"
          },
          "maxItems": {
            "title": "Maximum hotel-stays for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many hotel-stays, across every hotel and date. A hotel-stay is one hotel for one date range, with all its rates. 0 means no limit.",
            "default": 0
          },
          "maxRows": {
            "title": "Maximum rows for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many rows. The last hotel-stay is cut to fit, keeping its cheapest rates. Price-calendar rows count too. 0 means no limit.",
            "default": 0
          },
          "maxRatePlansPerStay": {
            "title": "Maximum rates per hotel and stay",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only the cheapest N rates for each hotel and stay. A large hotel can offer 60 or more. 0 means keep all of them.",
            "default": 0
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Check-in date as YYYY-MM-DD, for example 2026-11-10."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "Check-out date as YYYY-MM-DD, for example 2026-11-12."
          },
          "checkInDaysAhead": {
            "title": "Or: days ahead to check in",
            "minimum": 0,
            "type": "integer",
            "description": "Used only when no check-in date is given. The stay starts this many days from the day the run starts, which keeps a scheduled run pointed at a moving window.",
            "default": 30
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of the stay when the dates are computed from \"days ahead\" rather than given.",
            "default": 1
          },
          "stays": {
            "title": "Extra stays",
            "type": "array",
            "description": "More date ranges to price, one per line as CHECKIN_CHECKOUT, for example 2026-11-10_2026-11-12. Each one is fetched for every hotel.",
            "items": {
              "type": "string"
            }
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 14,
            "type": "integer",
            "description": "Number of adults in the room.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One age per child, in years. Leave empty for an adults-only stay.",
            "items": {
              "type": "string"
            }
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many rooms to price, each with the same guests. The nightly rate stays per room and the stay total covers them all, which is how the site quotes a multi-room booking.",
            "default": 1
          },
          "freeCancellationOnly": {
            "title": "Refundable rates only",
            "type": "boolean",
            "description": "Keep only rates the site states can be cancelled.",
            "default": false
          },
          "mealIncludedOnly": {
            "title": "Rates including a meal only",
            "type": "boolean",
            "description": "Keep only rates that include breakfast or another meal.",
            "default": false
          },
          "maxPricePerNight": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "number",
            "description": "Drop rates above this nightly price, in the currency you chose. 0 means no limit.",
            "default": 0
          },
          "includeUnavailable": {
            "title": "Include sold-out stays",
            "type": "boolean",
            "description": "Write a row for a hotel and stay with nothing for sale, so a schedule can see that it was checked.",
            "default": false
          },
          "priceCalendar": {
            "title": "Include a price calendar",
            "type": "boolean",
            "description": "Add one row per date with the nightly price for every date the hotel is bookable (around 217 dates, roughly eight months ahead) on top of the rate grid for your own dates.",
            "default": false
          },
          "calendarDaysMax": {
            "title": "Maximum calendar dates per hotel",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only the first N calendar dates for each hotel. 0 means keep all of them.",
            "default": 0
          },
          "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, which is what decides the currency: each one quotes its own money and will not quote another's. Auto follows each pasted link's own site, so an expedia.se link is quoted in SEK, and a bare property ID uses the US site, in USD. Some markets quote a nightly rate that already includes tax and others add it on top, so a nightly price is only comparable within one market: compare on the stay total.",
            "default": "auto"
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Three-letter currency code, default USD. Only currencies the chosen region offers are accepted: 11 regions offer a choice, the rest quote one currency only. Anything else is ignored and the region's own currency is used, which the rows report. Clear it for the region's own currency.",
            "default": "USD"
          },
          "language": {
            "title": "Label language",
            "enum": [
              "english",
              "site-default"
            ],
            "type": "string",
            "description": "Language of the room names, board and cancellation wording. Prices are unaffected; they always follow the market. With the market's own language the room size, occupancy and bed columns can come back empty, so English is recommended.",
            "default": "english"
          },
          "priceStoreName": {
            "title": "Price memory store",
            "type": "string",
            "description": "Name of a storage area to remember the cheapest price for each hotel and stay. Leave empty to remember nothing."
          },
          "onlyNewOrChanged": {
            "title": "Only changed prices",
            "type": "boolean",
            "description": "Skip a hotel and stay whose cheapest price is the same as last run. Needs a price 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 hotel-stays 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}