# Expedia Scraper (`fingolfin/expedia-scraper`) Actor

Scrape Expedia hotels, property details, guest reviews, and car rentals. Get prices, ratings, filters, and availability — structured and ready to use Expedia API . For Flights RESTapi visit here https://rapidapi.com/matepapava123/api/expedia-data1

- **URL**: https://apify.com/fingolfin/expedia-scraper.md
- **Developed by:** [Mate Papava](https://apify.com/fingolfin) (community)
- **Categories:** Automation, Developer tools, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Expedia Hotels & Cars Scraper

Scrape live data from Expedia — hotel listings, full property details, guest reviews, car rental offers, and detailed car offer breakdowns.

Each actor run executes **one scrape type** with its own set of parameters. Results are pushed to the Apify dataset, with one item per hotel/review/car offer.

---

### Scrape Types

| scrapeType | What it does |
|---|---|
| `HOTEL_SEARCH` | Find hotels at a destination with filters |
| `HOTEL_DETAILS` | Full property info, photos, amenities, rooms & rates |
| `HOTEL_REVIEWS` | Guest reviews with keyword search and pagination |
| `CAR_SEARCH` | Find rental cars between pickup and dropoff locations |
| `CAR_DETAILS` | Full offer details: price breakdown, pickup address, cancellation policy |

> **Flights not included.**
> For flight search data, use the full Expedia API on RapidAPI:
> **[Expedia Travel API on RapidAPI](https://rapidapi.com/matepapava123/api/expedia-data1)**

---

### Usage

#### 1. HOTEL_SEARCH

Find hotels at a destination.

**How to find `regionId`:** Run the actor once with any `regionId` to see results, or use the `/suggest` endpoint on the RapidAPI to look up a region by name.

**Recommended workflow:**
1. Run without `hotelFilters` to see the `available_filters` item in the output.
2. Copy values from `available_filters` into `hotelFilters` and rerun.

**Input:**
```json
{
  "scrapeType": "HOTEL_SEARCH",
  "regionId": "2114",
  "checkIn": "2026-08-15",
  "checkOut": "2026-08-20",
  "adults": 2,
  "currency": "USD",
  "maxResults": 50
}
````

**With filters:**

```json
{
  "scrapeType": "HOTEL_SEARCH",
  "regionId": "2114",
  "checkIn": "2026-08-15",
  "checkOut": "2026-08-20",
  "currency": "EUR",
  "maxResults": 25,
  "hotelFilters": {
    "sort": "PRICE_LOW_TO_HIGH",
    "star_ratings": [4, 5],
    "price_max": 300,
    "amenities": ["WIFI", "POOL"],
    "property_types": ["HOTEL"],
    "payment_type": "FREE_CANCELLATION"
  }
}
```

**Output (per hotel):**

```json
{
  "scrape_type": "HOTEL_SEARCH",
  "property_id": "16786",
  "name": "Paris Marriott Champs Elysees Hotel",
  "star_rating": 5,
  "guest_rating": "8.6",
  "price_per_night": "€662",
  "neighborhood": "8th Arrondissement",
  "image_url": "https://...",
  "...full LodgingCard fields..."
}
```

**Final metadata item:**

```json
{
  "scrape_type": "HOTEL_SEARCH",
  "is_metadata": true,
  "total_results": 423,
  "pushed": 50,
  "available_filters": {
    "star_ratings": [3, 4, 5],
    "price_range": { "min": 45, "max": 850 },
    "amenities": ["POOL", "WIFI", "PARKING", "GYM", "SPA"],
    "neighborhoods": [{ "id": "8th", "name": "8th Arrondissement" }],
    "sort_options": ["RECOMMENDED", "PRICE_LOW_TO_HIGH", "PRICE_HIGH_TO_LOW", "DISTANCE", "GUEST_RATING"]
  }
}
```

***

#### 2. HOTEL\_DETAILS

Get full property details for a specific hotel. Use a `property_id` from a HOTEL\_SEARCH result.

**Input:**

```json
{
  "scrapeType": "HOTEL_DETAILS",
  "propertyId": "16786",
  "checkIn": "2026-08-15",
  "checkOut": "2026-08-20",
  "currency": "USD"
}
```

**Output (single item):**

```json
{
  "scrape_type": "HOTEL_DETAILS",
  "property_id": "16786",
  "check_in": "2026-08-15",
  "check_out": "2026-08-20",
  "property_info": {
    "name": "...",
    "starRating": 5,
    "address": "...",
    "amenities": [...],
    "photos": [...],
    "location": { "nearby": [...] },
    "policies": { "checkInTime": "15:00", "checkOutTime": "12:00" }
  },
  "rooms_and_rates": [
    {
      "roomName": "Deluxe King Room",
      "price": "€662",
      "cancellationPolicy": "Free cancellation until Aug 14",
      "inclusions": ["WiFi", "Breakfast"]
    }
  ]
}
```

***

#### 3. HOTEL\_REVIEWS

Get guest reviews for a hotel property.

**Input:**

```json
{
  "scrapeType": "HOTEL_REVIEWS",
  "propertyId": "16786",
  "page": 0,
  "pageSize": 20
}
```

**With filters:**

```json
{
  "scrapeType": "HOTEL_REVIEWS",
  "propertyId": "16786",
  "page": 0,
  "pageSize": 10,
  "travelerType": "COUPLE",
  "searchTerm": "breakfast",
  "sortBy": ""
}
```

**Output (per review):**

```json
{
  "scrape_type": "HOTEL_REVIEWS",
  "property_id": "16786",
  "reviewer": "John D.",
  "rating": 8.0,
  "title": "Great location",
  "text": "The hotel was perfectly situated...",
  "traveler_type": "COUPLE",
  "date": "June 2026",
  "positive": "Location, staff, room size",
  "negative": "Breakfast was overpriced"
}
```

***

#### 4. CAR\_SEARCH

Find rental cars between two locations.

**Recommended workflow:**

1. Run without `carFilters` to get `available_filters` in the output.
2. Add filter values from the output and rerun.

**Input:**

```json
{
  "scrapeType": "CAR_SEARCH",
  "pickupSearchTerm": "New York, New York, United States of America",
  "pickupDatetime": { "day": 15, "month": 8, "year": 2026, "hour": 10, "minute": 0 },
  "dropoffSearchTerm": "New York, New York, United States of America",
  "dropoffDatetime": { "day": 20, "month": 8, "year": 2026, "hour": 10, "minute": 0 },
  "currency": "USD",
  "maxResults": 30
}
```

**With filters:**

```json
{
  "scrapeType": "CAR_SEARCH",
  "pickupSearchTerm": "JFK Airport, New York",
  "pickupDatetime": { "day": 15, "month": 8, "year": 2026, "hour": 10, "minute": 0 },
  "dropoffSearchTerm": "JFK Airport, New York",
  "dropoffDatetime": { "day": 20, "month": 8, "year": 2026, "hour": 10, "minute": 0 },
  "currency": "USD",
  "carFilters": {
    "sort": "TOTAL_PRICE_LOW_TO_HIGH",
    "car_types": ["midsize", "compact"],
    "price_range": "75-100",
    "specs": ["AUTO_TRANSMISSION"]
  }
}
```

**Output (per car offer):**

```json
{
  "scrape_type": "CAR_SEARCH",
  "vehicle_category": "SUV",
  "vehicle_description": "Jeep Grand Cherokee or similar",
  "vendor": "Hertz",
  "price_daily": "$275.99",
  "price_total": "$333.60",
  "car_offer_token": "AQh3XDzUb4Y...",
  "features": ["Automatic", "5 seats", "Air conditioning", "Unlimited mileage"],
  "pickup_location": "JFK Airport Terminal 4",
  "dropoff_location": "JFK Airport Terminal 4",
  "...full CarOfferCard fields..."
}
```

**Final metadata item:**

```json
{
  "scrape_type": "CAR_SEARCH",
  "is_metadata": true,
  "pushed": 30,
  "available_filters": {
    "car_types": ["economy", "compact", "midsize", "fullsize", "suv"],
    "vendors": [{ "code": "ZE", "name": "Hertz" }, { "code": "ZI", "name": "Avis" }],
    "price_brackets": ["0-75", "75-100", "100-200", "200-300"],
    "capacity_options": ["TWO_TO_FIVE", "SIX_OR_MORE"],
    "sort_options": ["RECOMMENDED", "TOTAL_PRICE_LOW_TO_HIGH", "DISTANCE"]
  }
}
```

***

#### 5. CAR\_DETAILS

Get full details for a specific car offer. Use the `car_offer_token` from a CAR\_SEARCH result (found at `detailsContext.carOfferToken` in each car item).

**Input:**

```json
{
  "scrapeType": "CAR_DETAILS",
  "carOfferToken": "AQh3XDzUb4Yaw4cMGaeYnjj7avjCnI7in9MF41jMKsvokMLK...",
  "currency": "USD"
}
```

**Output (single item):**

```json
{
  "scrape_type": "CAR_DETAILS",
  "car_offer_token": "AQh3...",
  "vehicle": {
    "category": "SUV",
    "description": "Jeep Grand Cherokee or similar",
    "features": ["Automatic transmission", "Air conditioning", "GPS"],
    "image_url": "https://..."
  },
  "price_breakdown": {
    "daily_rate": "$275.99",
    "total": "$333.60",
    "components": [
      { "title": "Base Rate", "items": [{ "text": "5 days x $55.00", "value": "$275.00" }] },
      { "title": "Taxes & Fees", "items": [{ "text": "Airport surcharge", "value": "$58.60" }] }
    ]
  },
  "pickup": {
    "name": "Hertz — JFK Airport",
    "address": "Terminal 4, JFK International Airport",
    "hours": "Mon-Sun 06:00-23:00"
  },
  "dropoff": {
    "name": "Hertz — JFK Airport",
    "address": "Terminal 4, JFK International Airport",
    "hours": "Mon-Sun 06:00-23:00"
  },
  "cancellation_policy": "Free cancellation before pickup",
  "inclusions": ["Unlimited mileage", "CDW insurance"],
  "vendor_review": { "rating": "8.2", "superlative": "Very Good", "count": 3847 }
}
```

***

### Currency

| Currency | Expedia Domain |
|---|---|
| `USD` (default) | www.expedia.com |
| `EUR` | euro.expedia.net |
| `GBP` | www.expedia.co.uk |

***

### Output Views in Apify Console

The dataset schema defines 5 views — one per scrape type. Switch between views in the Output tab:

- **Hotel Search Results** — property\_id, name, stars, price, rating, neighborhood, image
- **Hotel Details** — property\_id, name, stars, address, amenities, rooms\_and\_rates
- **Hotel Reviews** — reviewer, rating, title, text, traveler\_type, date
- **Car Search Results** — category, description, vendor, daily rate, total, token
- **Car Offer Details** — token, vehicle, price\_breakdown, pickup, dropoff, cancellation

***

### Notes

- Car search results include `car_offer_token` in `detailsContext.carOfferToken`. Use this with `CAR_DETAILS` for full details.
- For hotel search, the final dataset item always has `is_metadata: true` and contains `available_filters`.
- Car availability is geo-restricted; the actor automatically retries with `euro.expedia.net` if the primary domain returns no results.
- Increase `maxResults` for larger datasets (each additional result costs compute time).

# Actor input Schema

## `scrapeType` (type: `string`):

What to scrape. Each type has its own dedicated section below — fill in only the section that matches your choice.

## `locationSearch` (type: `string`):

Destination name to search for. Returns matching locations with regionId, coordinates, and type. Use the regionId from results in Hotel Search. Used for scrapeType: LOCATION\_SEARCH.

## `locationLimit` (type: `integer`):

Maximum number of location suggestions to return. Used for scrapeType: LOCATION\_SEARCH.

## `regionId` (type: `string`):

Expedia region ID for the destination. Get this by running scrapeType: LOCATION\_SEARCH first with a destination name. Required for scrapeType: HOTEL\_SEARCH.

## `checkIn` (type: `string`):

Check-in date in YYYY-MM-DD format. Used for scrapeType: HOTEL\_SEARCH, HOTEL\_DETAILS.

## `checkOut` (type: `string`):

Check-out date in YYYY-MM-DD format. Used for scrapeType: HOTEL\_SEARCH, HOTEL\_DETAILS.

## `adults` (type: `integer`):

Number of adult guests. Affects hotel availability and pricing. Used for scrapeType: HOTEL\_SEARCH.

## `childrenAges` (type: `array`):

Ages of children travelling. Leave empty for no children. Each number is a child's age in years (0–17). Used for scrapeType: HOTEL\_SEARCH.

## `maxResults` (type: `integer`):

Maximum number of hotel results to return. Lower values run faster and cost less. Used for scrapeType: HOTEL\_SEARCH, CAR\_SEARCH.

## `hotelFilters` (type: `object`):

Filter hotel search results. Leave as {} to return all. Run without filters first to see available\_filters in the output. Used for scrapeType: HOTEL\_SEARCH.

Valid values:
• sort: RECOMMENDED | PRICE\_LOW\_TO\_HIGH | PRICE\_HIGH\_TO\_LOW | DISTANCE | GUEST\_RATING
• star\_ratings: \[1] \[2] \[3] \[4] \[5] or any combination
• price\_min / price\_max: integer (per night, in selected currency)
• guest\_rating\_min: 60 | 70 | 80 | 90
• amenities: POOL | WIFI | PARKING | PET\_FRIENDLY | GYM | KITCHEN | SPA | BREAKFAST\_INCLUDED
• property\_types: HOTEL | APARTMENT | HOSTEL | RESORT | VACATION\_RENTAL
• meal\_plans: BREAKFAST\_INCLUDED | ALL\_INCLUSIVE | FULL\_BOARD | HALF\_BOARD
• payment\_type: PAY\_LATER | FREE\_CANCELLATION

## `propertyId` (type: `string`):

Expedia property ID. You can find this in Hotel Search results under the 'property\_id' field. Required for scrapeType: HOTEL\_DETAILS, HOTEL\_REVIEWS.

## `currency` (type: `string`):

Currency for prices. USD uses www.expedia.com, EUR uses euro.expedia.net, GBP uses www.expedia.co.uk. Used for scrapeType: HOTEL\_SEARCH, HOTEL\_DETAILS, CAR\_SEARCH, CAR\_DETAILS.

## `page` (type: `integer`):

Page index for reviews pagination. 0 = first page. Used for scrapeType: HOTEL\_REVIEWS.

## `pageSize` (type: `integer`):

Number of reviews to fetch per page. Maximum 50. Used for scrapeType: HOTEL\_REVIEWS.

## `sortBy` (type: `string`):

Sort order for reviews. Leave empty for most relevant. Use values returned in filter\_options of a previous reviews call. Used for scrapeType: HOTEL\_REVIEWS.

## `searchTerm` (type: `string`):

Keyword to search within reviews. Example: 'breakfast', 'pool', 'noise'. Used for scrapeType: HOTEL\_REVIEWS.

## `travelerType` (type: `string`):

Filter reviews by traveler type. Used for scrapeType: HOTEL\_REVIEWS.

## `pickupSearchTerm` (type: `string`):

Pickup location name for car rental. The actor resolves this to an Expedia location automatically. Required for scrapeType: CAR\_SEARCH.

## `pickupDatetime` (type: `object`):

Pickup date and time. Fields: day (1–31), month (1–12), year (4 digits), hour (0–23, 24-hour — 10=10AM, 14=2PM), minute (0 or 30). Required for scrapeType: CAR\_SEARCH.

## `dropoffSearchTerm` (type: `string`):

Drop-off location name. Can be the same as pickup for same-location returns. Required for scrapeType: CAR\_SEARCH.

## `dropoffDatetime` (type: `object`):

Drop-off date and time. Fields: day (1–31), month (1–12), year (4 digits), hour (0–23, 24-hour clock), minute (0 or 30). Must be after pickupDatetime. Required for scrapeType: CAR\_SEARCH.

## `transferMode` (type: `string`):

RENTAL for standard self-drive car rental. AIRPORT\_TRANSFER for private chauffeur service between airport and hotel. Used for scrapeType: CAR\_SEARCH.

## `carFilters` (type: `object`):

Filter car search results. Leave as {} to return all. Run without filters first to see available\_filters in the output. Used for scrapeType: CAR\_SEARCH.

Valid values:
• sort: RECOMMENDED | TOTAL\_PRICE\_LOW\_TO\_HIGH | DISTANCE | TRAVELER\_RATING\_LOW\_TO\_HIGH
• car\_types: economy | compact | midsize | standard | fullsize | premium | luxury | minivan | suv | van | convertible
• vendors: ZE (Hertz) | ZI (Avis) | ZL (National) | AL (Alamo) | ET (Enterprise) | SX (Sixt)
• price\_range: "0-75" | "75-100" | "100-200" | "200-300" | "300-400" | "400-500"
• capacity: TWO\_TO\_FIVE | SIX\_OR\_MORE
• specs: AUTO\_TRANSMISSION | UNLIMITED\_MILEAGE | ALL\_WHEEL\_DRIVE\_AND\_4X4
• radius\_km: integer (default 10)

## `carOfferToken` (type: `string`):

Car offer token from a CAR\_SEARCH result. Found at detailsContext.carOfferToken in each car result. Required for scrapeType: CAR\_DETAILS.

## Actor input object example

```json
{
  "scrapeType": "LOCATION_SEARCH",
  "locationSearch": "Paris, France",
  "locationLimit": 5,
  "regionId": "2734",
  "checkIn": "2026-08-15",
  "checkOut": "2026-08-20",
  "adults": 2,
  "childrenAges": [
    5,
    10
  ],
  "maxResults": 50,
  "hotelFilters": {
    "sort": "PRICE_LOW_TO_HIGH",
    "star_ratings": [
      4,
      5
    ],
    "price_max": 300,
    "guest_rating_min": 70,
    "amenities": [
      "WIFI",
      "POOL"
    ],
    "property_types": [
      "HOTEL"
    ],
    "payment_type": "FREE_CANCELLATION"
  },
  "propertyId": "16786",
  "currency": "USD",
  "page": 0,
  "pageSize": 10,
  "sortBy": "",
  "searchTerm": "",
  "travelerType": "",
  "pickupSearchTerm": "New York, New York, United States of America",
  "pickupDatetime": {
    "day": 15,
    "month": 8,
    "year": 2026,
    "hour": 10,
    "minute": 0
  },
  "dropoffSearchTerm": "New York, New York, United States of America",
  "dropoffDatetime": {
    "day": 20,
    "month": 8,
    "year": 2026,
    "hour": 10,
    "minute": 0
  },
  "transferMode": "RENTAL",
  "carFilters": {
    "sort": "TOTAL_PRICE_LOW_TO_HIGH",
    "car_types": [
      "midsize",
      "compact"
    ],
    "vendors": [
      "ZE",
      "ZI"
    ],
    "price_range": "75-100",
    "capacity": "TWO_TO_FIVE",
    "specs": [
      "AUTO_TRANSMISSION"
    ]
  },
  "carOfferToken": "AQh3XDzUb4Yaw4cMGaeYnjj7avjCnI7in9MF41jMKsvokMLK..."
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped results — hotel listings, car offers, reviews, or location suggestions depending on scrapeType.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locationSearch": "Paris, France",
    "regionId": "2734",
    "checkIn": "2026-08-15",
    "checkOut": "2026-08-20",
    "childrenAges": [],
    "hotelFilters": {
        "sort": "RECOMMENDED",
        "star_ratings": [
            4,
            5
        ],
        "price_min": 50,
        "price_max": 300,
        "guest_rating_min": 70,
        "amenities": [
            "WIFI",
            "POOL"
        ],
        "property_types": [
            "HOTEL"
        ],
        "meal_plans": [],
        "payment_type": "FREE_CANCELLATION"
    },
    "propertyId": "16786",
    "pickupSearchTerm": "New York, New York, United States of America",
    "pickupDatetime": {
        "day": 15,
        "month": 8,
        "year": 2026,
        "hour": 10,
        "minute": 0
    },
    "dropoffSearchTerm": "New York, New York, United States of America",
    "dropoffDatetime": {
        "day": 20,
        "month": 8,
        "year": 2026,
        "hour": 10,
        "minute": 0
    },
    "carFilters": {
        "sort": "RECOMMENDED",
        "car_types": [
            "midsize",
            "compact"
        ],
        "vendors": [
            "ZE",
            "ZI"
        ],
        "price_range": "75-100",
        "capacity": "TWO_TO_FIVE",
        "specs": [
            "AUTO_TRANSMISSION"
        ],
        "radius_km": 10
    },
    "carOfferToken": "AQh3XDzUb4Yaw4cMGaeYnjj7avjCnI7in9MF41jMKsvokMLK..."
};

// Run the Actor and wait for it to finish
const run = await client.actor("fingolfin/expedia-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "locationSearch": "Paris, France",
    "regionId": "2734",
    "checkIn": "2026-08-15",
    "checkOut": "2026-08-20",
    "childrenAges": [],
    "hotelFilters": {
        "sort": "RECOMMENDED",
        "star_ratings": [
            4,
            5,
        ],
        "price_min": 50,
        "price_max": 300,
        "guest_rating_min": 70,
        "amenities": [
            "WIFI",
            "POOL",
        ],
        "property_types": ["HOTEL"],
        "meal_plans": [],
        "payment_type": "FREE_CANCELLATION",
    },
    "propertyId": "16786",
    "pickupSearchTerm": "New York, New York, United States of America",
    "pickupDatetime": {
        "day": 15,
        "month": 8,
        "year": 2026,
        "hour": 10,
        "minute": 0,
    },
    "dropoffSearchTerm": "New York, New York, United States of America",
    "dropoffDatetime": {
        "day": 20,
        "month": 8,
        "year": 2026,
        "hour": 10,
        "minute": 0,
    },
    "carFilters": {
        "sort": "RECOMMENDED",
        "car_types": [
            "midsize",
            "compact",
        ],
        "vendors": [
            "ZE",
            "ZI",
        ],
        "price_range": "75-100",
        "capacity": "TWO_TO_FIVE",
        "specs": ["AUTO_TRANSMISSION"],
        "radius_km": 10,
    },
    "carOfferToken": "AQh3XDzUb4Yaw4cMGaeYnjj7avjCnI7in9MF41jMKsvokMLK...",
}

# Run the Actor and wait for it to finish
run = client.actor("fingolfin/expedia-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locationSearch": "Paris, France",
  "regionId": "2734",
  "checkIn": "2026-08-15",
  "checkOut": "2026-08-20",
  "childrenAges": [],
  "hotelFilters": {
    "sort": "RECOMMENDED",
    "star_ratings": [
      4,
      5
    ],
    "price_min": 50,
    "price_max": 300,
    "guest_rating_min": 70,
    "amenities": [
      "WIFI",
      "POOL"
    ],
    "property_types": [
      "HOTEL"
    ],
    "meal_plans": [],
    "payment_type": "FREE_CANCELLATION"
  },
  "propertyId": "16786",
  "pickupSearchTerm": "New York, New York, United States of America",
  "pickupDatetime": {
    "day": 15,
    "month": 8,
    "year": 2026,
    "hour": 10,
    "minute": 0
  },
  "dropoffSearchTerm": "New York, New York, United States of America",
  "dropoffDatetime": {
    "day": 20,
    "month": 8,
    "year": 2026,
    "hour": 10,
    "minute": 0
  },
  "carFilters": {
    "sort": "RECOMMENDED",
    "car_types": [
      "midsize",
      "compact"
    ],
    "vendors": [
      "ZE",
      "ZI"
    ],
    "price_range": "75-100",
    "capacity": "TWO_TO_FIVE",
    "specs": [
      "AUTO_TRANSMISSION"
    ],
    "radius_km": 10
  },
  "carOfferToken": "AQh3XDzUb4Yaw4cMGaeYnjj7avjCnI7in9MF41jMKsvokMLK..."
}' |
apify call fingolfin/expedia-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fingolfin/expedia-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Expedia Scraper",
        "description": "Scrape Expedia hotels, property details, guest reviews, and car rentals. Get prices, ratings, filters, and availability — structured and ready to use Expedia API . For Flights RESTapi visit here https://rapidapi.com/matepapava123/api/expedia-data1",
        "version": "1.0",
        "x-build-id": "rEidko4svbHdax89A"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fingolfin~expedia-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fingolfin-expedia-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/fingolfin~expedia-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fingolfin-expedia-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/fingolfin~expedia-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fingolfin-expedia-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",
                "required": [
                    "scrapeType"
                ],
                "properties": {
                    "scrapeType": {
                        "title": "Scrape Type",
                        "enum": [
                            "LOCATION_SEARCH",
                            "HOTEL_SEARCH",
                            "HOTEL_DETAILS",
                            "HOTEL_REVIEWS",
                            "CAR_SEARCH",
                            "CAR_DETAILS"
                        ],
                        "type": "string",
                        "description": "What to scrape. Each type has its own dedicated section below — fill in only the section that matches your choice.",
                        "default": "LOCATION_SEARCH"
                    },
                    "locationSearch": {
                        "title": "Location Query",
                        "type": "string",
                        "description": "Destination name to search for. Returns matching locations with regionId, coordinates, and type. Use the regionId from results in Hotel Search. Used for scrapeType: LOCATION_SEARCH."
                    },
                    "locationLimit": {
                        "title": "Max Suggestions",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of location suggestions to return. Used for scrapeType: LOCATION_SEARCH.",
                        "default": 5
                    },
                    "regionId": {
                        "title": "Region ID",
                        "type": "string",
                        "description": "Expedia region ID for the destination. Get this by running scrapeType: LOCATION_SEARCH first with a destination name. Required for scrapeType: HOTEL_SEARCH."
                    },
                    "checkIn": {
                        "title": "Check-In Date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Check-in date in YYYY-MM-DD format. Used for scrapeType: HOTEL_SEARCH, HOTEL_DETAILS."
                    },
                    "checkOut": {
                        "title": "Check-Out Date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Check-out date in YYYY-MM-DD format. Used for scrapeType: HOTEL_SEARCH, HOTEL_DETAILS."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of adult guests. Affects hotel availability and pricing. Used for scrapeType: HOTEL_SEARCH.",
                        "default": 2
                    },
                    "childrenAges": {
                        "title": "Children Ages",
                        "type": "array",
                        "description": "Ages of children travelling. Leave empty for no children. Each number is a child's age in years (0–17). Used for scrapeType: HOTEL_SEARCH.",
                        "default": []
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of hotel results to return. Lower values run faster and cost less. Used for scrapeType: HOTEL_SEARCH, CAR_SEARCH.",
                        "default": 50
                    },
                    "hotelFilters": {
                        "title": "Hotel Filters (optional)",
                        "type": "object",
                        "description": "Filter hotel search results. Leave as {} to return all. Run without filters first to see available_filters in the output. Used for scrapeType: HOTEL_SEARCH.\n\nValid values:\n• sort: RECOMMENDED | PRICE_LOW_TO_HIGH | PRICE_HIGH_TO_LOW | DISTANCE | GUEST_RATING\n• star_ratings: [1] [2] [3] [4] [5] or any combination\n• price_min / price_max: integer (per night, in selected currency)\n• guest_rating_min: 60 | 70 | 80 | 90\n• amenities: POOL | WIFI | PARKING | PET_FRIENDLY | GYM | KITCHEN | SPA | BREAKFAST_INCLUDED\n• property_types: HOTEL | APARTMENT | HOSTEL | RESORT | VACATION_RENTAL\n• meal_plans: BREAKFAST_INCLUDED | ALL_INCLUSIVE | FULL_BOARD | HALF_BOARD\n• payment_type: PAY_LATER | FREE_CANCELLATION"
                    },
                    "propertyId": {
                        "title": "Property ID",
                        "type": "string",
                        "description": "Expedia property ID. You can find this in Hotel Search results under the 'property_id' field. Required for scrapeType: HOTEL_DETAILS, HOTEL_REVIEWS."
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP"
                        ],
                        "type": "string",
                        "description": "Currency for prices. USD uses www.expedia.com, EUR uses euro.expedia.net, GBP uses www.expedia.co.uk. Used for scrapeType: HOTEL_SEARCH, HOTEL_DETAILS, CAR_SEARCH, CAR_DETAILS.",
                        "default": "USD"
                    },
                    "page": {
                        "title": "Page (0-based)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Page index for reviews pagination. 0 = first page. Used for scrapeType: HOTEL_REVIEWS.",
                        "default": 0
                    },
                    "pageSize": {
                        "title": "Reviews Per Page",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Number of reviews to fetch per page. Maximum 50. Used for scrapeType: HOTEL_REVIEWS.",
                        "default": 10
                    },
                    "sortBy": {
                        "title": "Sort Reviews By",
                        "type": "string",
                        "description": "Sort order for reviews. Leave empty for most relevant. Use values returned in filter_options of a previous reviews call. Used for scrapeType: HOTEL_REVIEWS.",
                        "default": ""
                    },
                    "searchTerm": {
                        "title": "Review Search Term",
                        "type": "string",
                        "description": "Keyword to search within reviews. Example: 'breakfast', 'pool', 'noise'. Used for scrapeType: HOTEL_REVIEWS.",
                        "default": ""
                    },
                    "travelerType": {
                        "title": "Traveler Type Filter",
                        "enum": [
                            "",
                            "COUPLE",
                            "FAMILY",
                            "BUSINESS",
                            "SOLO",
                            "FRIENDS"
                        ],
                        "type": "string",
                        "description": "Filter reviews by traveler type. Used for scrapeType: HOTEL_REVIEWS.",
                        "default": ""
                    },
                    "pickupSearchTerm": {
                        "title": "Pickup Location",
                        "type": "string",
                        "description": "Pickup location name for car rental. The actor resolves this to an Expedia location automatically. Required for scrapeType: CAR_SEARCH."
                    },
                    "pickupDatetime": {
                        "title": "Pickup Date & Time",
                        "type": "object",
                        "description": "Pickup date and time. Fields: day (1–31), month (1–12), year (4 digits), hour (0–23, 24-hour — 10=10AM, 14=2PM), minute (0 or 30). Required for scrapeType: CAR_SEARCH."
                    },
                    "dropoffSearchTerm": {
                        "title": "Drop-off Location",
                        "type": "string",
                        "description": "Drop-off location name. Can be the same as pickup for same-location returns. Required for scrapeType: CAR_SEARCH."
                    },
                    "dropoffDatetime": {
                        "title": "Drop-off Date & Time",
                        "type": "object",
                        "description": "Drop-off date and time. Fields: day (1–31), month (1–12), year (4 digits), hour (0–23, 24-hour clock), minute (0 or 30). Must be after pickupDatetime. Required for scrapeType: CAR_SEARCH."
                    },
                    "transferMode": {
                        "title": "Transfer Mode",
                        "enum": [
                            "RENTAL",
                            "AIRPORT_TRANSFER"
                        ],
                        "type": "string",
                        "description": "RENTAL for standard self-drive car rental. AIRPORT_TRANSFER for private chauffeur service between airport and hotel. Used for scrapeType: CAR_SEARCH.",
                        "default": "RENTAL"
                    },
                    "carFilters": {
                        "title": "Car Filters (optional)",
                        "type": "object",
                        "description": "Filter car search results. Leave as {} to return all. Run without filters first to see available_filters in the output. Used for scrapeType: CAR_SEARCH.\n\nValid values:\n• sort: RECOMMENDED | TOTAL_PRICE_LOW_TO_HIGH | DISTANCE | TRAVELER_RATING_LOW_TO_HIGH\n• car_types: economy | compact | midsize | standard | fullsize | premium | luxury | minivan | suv | van | convertible\n• vendors: ZE (Hertz) | ZI (Avis) | ZL (National) | AL (Alamo) | ET (Enterprise) | SX (Sixt)\n• price_range: \"0-75\" | \"75-100\" | \"100-200\" | \"200-300\" | \"300-400\" | \"400-500\"\n• capacity: TWO_TO_FIVE | SIX_OR_MORE\n• specs: AUTO_TRANSMISSION | UNLIMITED_MILEAGE | ALL_WHEEL_DRIVE_AND_4X4\n• radius_km: integer (default 10)"
                    },
                    "carOfferToken": {
                        "title": "Car Offer Token",
                        "type": "string",
                        "description": "Car offer token from a CAR_SEARCH result. Found at detailsContext.carOfferToken in each car result. Required for scrapeType: CAR_DETAILS."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
