# 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

Download the OpenAPI definition: https://api.apify.com/v2/actors/CjYxXIHuISNK2fGsJ/builds/rEidko4svbHdax89A/openapi.json
