{
  "openapi": "3.0.1",
  "info": {
    "title": "Expedia Hotels Scraper",
    "description": "Scrape Expedia.com hotel search results by destination + dates (or a Hotel-Search URL): name, nightly price, total, star class, guest rating, review count, location, image, deal badges, and property URL. Filters for star, guest rating, and price. PPE. MCP-ready.",
    "version": "1.0",
    "x-build-id": "VLULhoVGx4bO442us"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~expedia-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-expedia-hotels-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/khadinakbar~expedia-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-expedia-hotels-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/khadinakbar~expedia-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-expedia-hotels-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": {
          "destination": {
            "title": "Destination",
            "type": "string",
            "description": "Place to search hotels in, as you would type it on Expedia (e.g. 'New York, New York', 'Paris, France', 'Maldives'). City, region, neighborhood, or landmark all work. Leave empty if you instead provide 'startUrls'. This is NOT an Expedia URL — paste full Hotel-Search URLs into 'startUrls'."
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Check-in date in YYYY-MM-DD format (e.g. '2026-07-15'). Defaults to 14 days from today when omitted. Must be today or later. Ignored when you supply Hotel-Search 'startUrls' that already contain dates."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "Check-out date in YYYY-MM-DD format (e.g. '2026-07-17'). Defaults to 16 days from today (a 2-night stay) when omitted. Must be after 'checkIn'. Ignored when you supply Hotel-Search 'startUrls' that already contain dates."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 14,
            "type": "integer",
            "description": "Number of adult guests for pricing (e.g. 2). Defaults to 2. Range 1-14. This affects the per-night price Expedia returns.",
            "default": 2
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Number of rooms to price (e.g. 1). Defaults to 1. Range 1-8. Most hotel-search use cases want 1.",
            "default": 1
          },
          "startUrls": {
            "title": "Expedia Hotel-Search URLs (optional)",
            "type": "array",
            "description": "Full Expedia Hotel-Search result URLs to scrape directly, e.g. 'https://www.expedia.com/Hotel-Search?destination=Tokyo&startDate=2026-07-15&endDate=2026-07-17'. Use this instead of 'destination' when you have already built a filtered search on Expedia. Single hotel-information (detail) pages are NOT supported — this actor scrapes search result pages only.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max hotels",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of hotels to return across all result pages (e.g. 50). Defaults to 50. The actor auto-paginates until it reaches this cap. Each returned hotel is one billed event.",
            "default": 50
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "recommended",
              "priceLowToHigh",
              "starRating",
              "guestRating",
              "distance"
            ],
            "type": "string",
            "description": "Result ordering Expedia applies before scraping (e.g. 'recommended'). Defaults to 'recommended'. Use 'priceLowToHigh' for budget research, 'guestRating' for quality. Ignored when 'startUrls' already encode a sort.",
            "default": "recommended"
          },
          "minStarRating": {
            "title": "Minimum star rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Drop hotels below this property star class, 0-5 (e.g. 4 keeps only 4 and 5-star). Leave empty for no star filter. Hotels with an unknown star class are dropped when this is set. Filtered-out hotels are NOT billed."
          },
          "minGuestRating": {
            "title": "Minimum guest rating",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Drop hotels whose guest rating is below this value on Expedia's 0-10 scale (e.g. 8 keeps 'Very good' and above). Leave empty for no guest-rating filter. Hotels with no rating yet are dropped when this is set. Filtered-out hotels are NOT billed."
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Drop hotels priced below this nightly amount in the selected currency (e.g. 50). Leave empty for no minimum. Compared against the lead per-night price Expedia shows. Filtered-out hotels are NOT billed."
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Drop hotels priced above this nightly amount in the selected currency (e.g. 300). Leave empty for no maximum. Compared against the lead per-night price Expedia shows. Filtered-out hotels are NOT billed."
          },
          "freeCancellationOnly": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "When true, keep only hotels whose card advertises free cancellation or a fully refundable rate. Defaults to false (keep all). This reads the card's badges/messages, not a guaranteed booking term. Filtered-out hotels are NOT billed.",
            "default": false
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO currency code label applied to the output records (e.g. 'USD'). Defaults to 'USD'. Expedia.com prices are typically shown in USD; this field labels the output, it does not re-quote prices. Use the matching code if you scrape a localized Expedia Hotel-Search URL.",
            "default": "USD"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. RESIDENTIAL proxies are strongly recommended — Expedia's Akamai Bot Manager blocks datacenter IPs. The actor automatically prefers Apify residential when your account has it and falls back to Apify datacenter US when it does not, so the default works on any plan (datacenter runs are likely to be blocked and will honest-fail with $0 charged). Override only for a specific proxy requirement.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}