# Expedia Hotels & Reviews Scraper - 30+ Global Sites (`clearpath/expedia-hotels-scraper-pro`) Actor

Scrape Expedia hotels by city: prices, guest ratings, star ratings, reviews, amenities, photos, and full address. Filter by date, price, and property name across 30+ regional sites. Export to JSON or CSV. Pay per result, no subscription.

- **URL**: https://apify.com/clearpath/expedia-hotels-scraper-pro.md
- **Developed by:** [ClearPath](https://apify.com/clearpath) (community)
- **Categories:** Lead generation, Travel, Automation
- **Stats:** 36 total users, 5 monthly users, 94.7% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 hotels

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 Scraper | Prices, Ratings, Reviews & Property Data

<blockquote style="border-left:4px solid #006D77;background:#EDF6F9;padding:12px 16px;margin:12px 0">
<span style="font-size:16px;font-weight:700;color:#1C1917">50+ fields per hotel, search any city:</span> <span style="font-size:15px;color:#57534E">prices, guest &amp; category ratings, AI review summary, rooms &amp; live rates, reviews, amenities, and photos.</span>
</blockquote>

![Expedia hotels scraper: address, prices, category ratings, AI review summary, rooms and rates, and reviews as structured JSON](https://iili.io/CalzYep.png)

#### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
clearpath/expedia-hotels-scraper-pro on Apify. Call: ApifyClient("TOKEN").actor("clearpath/expedia-hotels-scraper-pro").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: location (string, required), maxResults (integer, default 100), site (string, default "www.expedia.com"). Full actor spec (input schema with all params/enums/defaults, output dataset fields, README): GET https://api.apify.com/v2/acts/clearpath~expedia-hotels-scraper-pro/builds/default (Bearer TOKEN) returns inputSchema, actorDefinition.storages.dataset, readme. Pricing: pay-per-event, $2.99 per 1,000 fully-enriched hotels (guest rating, star rating, amenities, address, photos), plus $1.99 per 1,000 reviews when review scraping is enabled. Get token: https://console.apify.com/account/integrations
```

### Key Features

- **Search by city**: enter a location and get every hotel Expedia lists, no URLs required
- **50+ fields per hotel**: prices, guest rating, star rating, amenities, address, coordinates, photos, and description, always included
- **Guest reviews**: optional per-hotel reviews with sentiment, traveled-with, and management responses
- **30+ regional sites**: local pricing and currency across Expedia's country domains
- **Flexible search**: custom dates, multi-room and family setups, price and property-name filters

### Pricing: Pay Per Event (PPE)

**$2.99 per 1,000 hotels**, no subscription. Every hotel comes fully enriched (guest rating, star rating, amenities, address, photos). Reviews are billed only when you enable them.

| Event | Per hotel/review | Per 1,000 |
|-------|------------------|-----------|
| Hotel scraped (fully enriched) | $0.00299 | $2.99 |
| Review scraped | $0.00199 | $1.99 |

Example: 500 hotels with reviews off costs about $1.50. 100 hotels with 20 reviews each costs about $0.30 + $3.98 = $4.28.

### Quick Start

#### Basic Search

Search for hotels in a city with default settings (2 adults, 1 room):

```json
{
  "location": "Paris",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

#### Filter by Hotel Brand

Search for specific hotel chains or property names:

```json
{
  "location": "New York",
  "propertyName": "Marriot",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

**Tip:** Works with any brand name - "Hilton", "Hyatt", "Holiday Inn", "Best Western", etc.

#### Family Search with Children

Search for family accommodations:

```json
{
  "location": "Orlando",
  "rooms": [
    {
      "adults": 2,
      "children": [
        {"age": 5},
        {"age": 10}
      ]
    }
  ],
  "checkIn": "2025-06-15",
  "checkOut": "2025-06-22",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

#### Multi-Room Group Travel

Search for multiple rooms for group travel:

```json
{
  "location": "Las Vegas",
  "rooms": [
    {"adults": 2, "children": []},
    {"adults": 2, "children": [{"age": 8}]},
    {"adults": 1, "children": []}
  ],
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

#### Scraping Hotel Reviews & Property Details

Enable detailed review scraping and comprehensive property information:

```json
{
  "location": "Tokyo",
  "maxResults": 20,
  "scrapeReviews": true,
  "maxReviews": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

**Review Scraping Options:**

- **Disabled** (default): Omit `scrapeReviews` or set to `false` - no reviews are scraped
- **Limited reviews**: Set `scrapeReviews: true` and `maxReviews: 25` (default) - scrapes up to 25 reviews per hotel
- **All reviews**: Set `scrapeReviews: true` and `maxReviews: 0` (or `null`) - scrapes ALL available reviews per hotel

**Property Details:** Every hotel comes fully enriched, comprehensive property data (guest rating, star rating, exact address, coordinates, detailed amenities, nearby attractions, review summaries, and more) is always included.

⚠️ **Note**: Scraping all reviews increases runtime for hotels with thousands of reviews. The scraper can handle it though, no worries!

### Input Parameters

| Parameter | Type | Required | Description | Default |
|-----------|------|----------|-------------|---------|
| `location` | String | Yes | Destination to search (city, region, or landmark) | - |
| `checkIn` | Date | No | Check-in date (ISO format or datepicker) | 7 days from today |
| `checkOut` | Date | No | Check-out date (ISO format or datepicker) | 10 days from today |
| `rooms` | Array | No | Room configuration (see below) | `[{"adults": 2, "children": []}]` |
| `site` | String | No | Expedia regional site (e.g., "www.expedia.com") | "www.expedia.com" |
| `maxResults` | Integer | No | Maximum hotels to scrape (0 = unlimited) | 100 |
| `sortBy` | String | No | Sort results by price, rating, distance, etc. (see sorting options below) | "RECOMMENDED" |
| `propertyName` | String | No | Filter hotels by property name (e.g., "Marriot", "Hilton") | - |
| `scrapeReviews` | Boolean | No | Fetch detailed reviews for each hotel | false |
| `maxReviews` | Integer | No | Maximum reviews per hotel (0 or null = unlimited, only used if scrapeReviews is true) | 25 |
| `proxyConfiguration` | Object | Recommended | Proxy settings (residential proxy strongly recommended) | - |

### Rooms Configuration

The `rooms` parameter allows you to specify room configurations for your search. Each room can have multiple adults and children with specific ages.

#### Room Object Structure

```json
{
  "adults": 2,           // Number of adults (1-8)
  "children": [          // Array of children
    {"age": 5},          // Each child needs an age (0-17)
    {"age": 10}
  ]
}
```

#### Rules and Limits

- **Rooms**: 1-8 rooms per search
- **Adults**: 1-8 adults per room (required)
- **Children**: 0-6 children per room (optional)
- **Child ages**: 0-17 years old

#### Examples

##### Single Room (Default)

```json
{
  "rooms": [
    {"adults": 2, "children": []}
  ]
}
```

##### Family with Children

```json
{
  "rooms": [
    {
      "adults": 2,
      "children": [
        {"age": 5},
        {"age": 8},
        {"age": 12}
      ]
    }
  ]
}
```

##### Multi-Room Group

```json
{
  "rooms": [
    {"adults": 2, "children": []},
    {"adults": 2, "children": [{"age": 10}, {"age": 16}]},
    {"adults": 1, "children": [{"age": 3}]}
  ]
}
```

##### Large Group

```json
{
  "rooms": [
    {"adults": 2, "children": []},
    {"adults": 2, "children": []},
    {"adults": 2, "children": []},
    {"adults": 2, "children": []}
  ]
}
```

#### How Room Configuration Affects Results

- **Pricing**: Hotels show room-specific pricing based on occupancy
- **Availability**: Filters out hotels without enough available rooms
- **Room Types**: Results include appropriate room types for your party size
- **Children**: Some hotels offer free stays or discounts for children under certain ages

### Sorting Options

Control how hotel results are ordered using the `sortBy` parameter:

| Sort Option | Description | Best For |
|-------------|-------------|----------|
| `RECOMMENDED` | Expedia's algorithm (default) | General browsing, balanced results |
| `PRICE_LOW_TO_HIGH` | Cheapest first | Budget travelers, price comparison |
| `PRICE_HIGH_TO_LOW` | Most expensive first | Luxury travel, premium hotels |
| `DISTANCE` | Nearest properties first | Location-focused searches |
| `REVIEW` | Highest rated first | Quality-focused searches |
| `PROPERTY_CLASS` | Star rating (5→1 star) | Star rating focused searches |

**Example - Find cheapest hotels:**

```json
{
  "location": "Paris",
  "sortBy": "PRICE_LOW_TO_HIGH",
  "maxResults": 50
}
```

**Example - Best rated hotels:**

```json
{
  "location": "Tokyo",
  "sortBy": "REVIEW",
  "scrapeReviews": true,
  "maxReviews": 25
}
```

### Supported Expedia Sites

The actor supports 30+ regional Expedia sites:

- 🇺🇸 United States (USD) - www.expedia.com
- 🇬🇧 United Kingdom (GBP) - www.expedia.co.uk
- 🇩🇪 Germany (EUR) - www.expedia.de
- 🇫🇷 France (EUR) - www.expedia.fr
- 🇨🇦 Canada (CAD) - www.expedia.ca
- 🇦🇺 Australia (AUD) - www.expedia.com.au
- 🇲🇽 Mexico (MXN) - www.expedia.mx
- 🇯🇵 Japan (JPY) - www.expedia.co.jp
- ...and 20+ more regional sites

Each site returns results in local currency with region-specific inventory and pricing.

### Output Data

The actor returns comprehensive hotel data with the following structure:

#### Core Hotel Information

- **Basic details**: ID, name, URL, star rating
- **Pricing**: Current price, original price, nightly rate, deal badges
- **Ratings**: Overall score, review count, description (e.g., "Excellent")
- **Media**: Property images with descriptions
- **Policies**: Refund policies, booking conditions

#### Property Details (`propertyDetails` object)

Always included with every hotel:

- **Location**: Full address, coordinates (lat/long), parent region, map images
- **Amenities**: Top amenities, categorized facilities (Internet, Parking, Food & Drink, etc.)
- **Basic Info**: Property tagline, star rating, mandatory/optional fees
- **Description**: Property overview, editorial content about the area
- **Nearby Attractions**: Points of interest with walking/driving distances
- **Reviews Summary**: Overall scores, review highlights, cleanliness ratings

#### Reviews (`reviews` object)

When `scrapeReviews: true`, includes:

- **Summary**: Overall rating, total count, superlative (e.g., "Excellent")
- **Individual Reviews**: Rating, text, author, date, travel type, liked/disliked aspects, management responses, photos

#### Extra Hotel Details (on by default)

Included for every hotel unless you switch these add-ons off:

- **`category_ratings`**: rating breakdown by category (cleanliness, staff & service, amenities, property conditions) with an overall score and review count.
- **`ai_review_summary`**: an AI-written summary of guest reviews, grouped into highlight sections.
- **`gallery`**: the full photo gallery — every image with caption and thumbnail, plus category groups (Rooms, Bathroom, Dining, and more).
- **`property_content`**: about the property, policies (check-in/out, pets, payment types), important info (fees, "you need to know" notes), and the complete `amenities` list (every property and in-room amenity).

#### Rooms & Live Rates (`rooms` object, on by default)

Available room types for a sample stay, each with its features and live nightly rate plans (current total plus any strikethrough "was" price, how many rooms are left at that rate, and the payment terms).

### Complete Output Example

A real, fully-enriched hotel returned by the scraper (reviews and all add-ons on). Large arrays — the full photo gallery, every room type, all reviews — are shortened here with a `… +N more` marker; the actual dataset contains every item, nothing is dropped.

```json
{
  "id": "30039177",
  "name": "The Times Square EDITION",
  "url": "https://www.expedia.com/New-York-Hotels-The-Times-Square-EDITION.h30039177.Hotel-Informa…",
  "area": "Theater District",
  "distance_from_search": null,
  "primary_image_url": "https://a.travel-assets.com/media/meso_cm/PAPI/Images/lodging/31000000/30040000/30039200…",
  "rating": {
    "score": 9.2,
    "score_text": "9.2",
    "description": "Wonderful",
    "review_count": 1002,
    "review_count_text": ""
  },
  "price": {
    "current": 1306.0,
    "current_formatted": "$1,306",
    "original": null,
    "original_formatted": "",
    "savings": null,
    "nightly_rate": 1095.0,
    "nightly_rate_formatted": "$1,095 nightly",
    "price_messages": [
      "$1,095 nightly",
      "Total with taxes and fees"
    ],
    "currency": "USD",
    "total_qualifier": "Total with taxes and fees",
    "price_includes_taxes": true,
    "deal_badge": "",
    "deal_theme": "",
    "deal_icon": "",
    "duration": "for 1 night",
    "dates": "Jul 18 - Jul 19"
  },
  "amenities": [],
  "images": [
    {
      "url": "https://a.travel-assets.com/media/meso_cm/PAPI/Images/lodging/31000000/30040000/30039200…",
      "description": "A long dining table with chairs, surrounded by lush greenery and hanging lanterns, creat…"
    },
    {
      "url": "https://images.trvl-media.com/lodging/31000000/30040000/30039200/30039177/3d9fba87.jpg?i…",
      "description": "An indoor dining area with tables set for a meal, surrounded by lush greenery and decora…"
    },
    "… +1 more"
  ],
  "badges": {
    "sponsored": true,
    "media_badge": "Ad",
    "program_badge": "",
    "deal_badge": ""
  },
  "messages": [
    "Theater District"
  ],
  "star_rating": 5.0,
  "policies": [],
  "location": {
    "neighborhood_id": "6157019",
    "room_type_id": "216920195",
    "rate_plan_id": "266080300",
    "latitude": 40.712843,
    "longitude": -74.005966,
    "destination": "New York, New York, United States of America",
    "dest_type": "MARKET",
    "region_id": "2621",
    "search_rank": 1
  },
  "search_context": {
    "check_in": "2026-07-18",
    "check_out": "2026-07-19",
    "region_id": "2621",
    "adults": 2,
    "children_ages": []
  },
  "propertyDetails": {
    "basic_info": {
      "id": "30039177",
      "name": "The Times Square EDITION",
      "latin_alphabet_name": null,
      "phone": "",
      "tagline": null,
      "star_rating": 5.0,
      "property_type": null,
      "featured_messages": [],
      "fees": {
        "mandatory": [
          {
            "title": "Fees",
            "body": "You'll be asked to pay the following charges at the property. Fees may include applicabl…"
          }
        ],
        "optional": [
          {
            "title": "Optional extras",
            "body": "Pet fee: USD 250 per accommodation, per stay\nService animals are exempt from fees\nRollaw…"
          }
        ]
      }
    },
    "location": {
      "latitude": 40.75923,
      "longitude": -73.984097,
      "address": {
        "street": "701 7TH AVENUE",
        "additional": "",
        "city": "New York",
        "province": "NY",
        "postal_code": "10036",
        "country_code": "USA",
        "full_address": "701 7TH AVENUE, New York, NY, 10036"
      },
      "parent_region": "New York",
      "multi_city_region_id": "178293",
      "map_image": "https://maps.googleapis.com/maps/api/staticmap?size=375x250&zoom=13&markers=icon%3Ahttps…",
      "static_map_image": "https://maps.googleapis.com/maps/api/staticmap?size=600x120&zoom=13&markers=icon%3Ahttps…",
      "map_bounds": null,
      "map_markers": [
        {
          "id": "30039177",
          "name": "The Times Square EDITION",
          "position": {
            "latitude": 40.75923,
            "longitude": -73.984097
          },
          "status": "AVAILABLE",
          "type": "PROPERTY",
          "qualifiers": [
            "focal",
            "lob_hotels"
          ]
        }
      ]
    },
    "amenities": {
      "top": [
        "Pet friendly",
        "Free WiFi",
        "… +4 more"
      ],
      "highlights": [
        {
          "name": "Top family friendly amenities",
          "items": [
            "Extra beds/cribs"
          ]
        },
        {
          "name": "Popular amenities",
          "items": [
            "Pet friendly",
            "… +9 more"
          ]
        }
      ],
      "categories": [
        {
          "name": "Internet",
          "items": [
            "Available in all rooms: Free wired internet",
            "… +1 more"
          ]
        },
        {
          "name": "Parking and transportation",
          "items": [
            "No onsite parking available"
          ]
        },
        {
          "name": "Food and drink",
          "items": [
            "2 bars/lounges",
            "… +1 more"
          ]
        },
        {
          "name": "Restaurants on site",
          "items": [
            "Lobby Bar",
            "… +2 more"
          ]
        },
        {
          "name": "Things to do",
          "items": [
            "24-hour gym",
            "… +1 more"
          ]
        },
        {
          "name": "Family friendly",
          "items": [
            "In-room crib",
            "… +1 more"
          ]
        },
        "… +5 more"
      ]
    },
    "description": {
      "overview": "",
      "editorial": "Located in Manhattan, a neighborhood in New York, The Times Square EDITION is in a shopp…"
    },
    "nearby_pois": [
      {
        "name": "Times Square",
        "distance": "1 min walk",
        "category": "nearby",
        "image_url": "https://images.trvl-media.com/place/502080/ba1463c8-9bb1-4699-95b4-495107edd8f3.jpg",
        "description": "New York’s infamous neon wonderland is hustle and bustle at its best, and an essential s…",
        "place_id": "502080"
      },
      {
        "name": "Rockefeller Center",
        "distance": "2 min walk",
        "category": "nearby",
        "image_url": "https://images.trvl-media.com/place/502076/95920105-ade5-4842-982e-64df4898f074.jpg",
        "description": "One of Manhattan’s most iconic developments, this hub of business and entertainment was …",
        "place_id": "502076"
      },
      "… +13 more"
    ],
    "reviews_summary": {
      "overall_score": 9.2,
      "overall_score_text": "9.2",
      "overall_description": "Wonderful",
      "full_score_text": "9.2/10 Wonderful",
      "review_count": 1002,
      "highlight_message": "Guests rated this property 9.6/10 for cleanliness."
    },
    "cleanliness": {
      "protocols": []
    }
  },
  "reviews": {
    "summary": {
      "overallRating": null,
      "totalCount": 1002,
      "superlative": null
    },
    "items": [
      {
        "id": "6a259ebf59680126203b10d3",
        "title": null,
        "text": "The rooms was very clean!",
        "highlightedText": null,
        "originalLanguage": null,
        "rating": "10/10 Excellent",
        "ratingScore": 10,
        "ratingLabel": "Excellent",
        "author": "Katrina",
        "authorLocation": null,
        "date": "Jun 7, 2026",
        "stayDuration": "Stayed 1 night in May 2026",
        "traveledWith": [],
        "verified": true,
        "liked": [
          "Cleanliness",
          "staff & service",
          "… +2 more"
        ],
        "disliked": [],
        "managementResponse": {
          "text": "Thank you for your review! We’re happy to hear you enjoyed your stay at The Times Square…",
          "author": "EH",
          "respondedOn": "Jun 12, 2026",
          "header": "Response from EH on Jun 12, 2026"
        },
        "helpfulVotes": 0,
        "photos": []
      },
      "… +9 more"
    ],
    "pagination": {
      "fetched": 10,
      "total": 1002,
      "hasMore": true
    }
  },
  "category_ratings": {
    "overall": "9.2/10 Wonderful",
    "average_score": "9.2",
    "superlative": "Wonderful",
    "review_count": "1,002 reviews",
    "disclaimer": "All reviews shown are from real guest experiences. Only travelers who have booked a stay…",
    "categories": [
      {
        "label": "Cleanliness",
        "percentage": 96,
        "score": "9.6/10"
      },
      {
        "label": "Staff & service",
        "percentage": 94,
        "score": "9.4/10"
      },
      {
        "label": "Amenities",
        "percentage": 92,
        "score": "9.2/10"
      },
      {
        "label": "Property conditions & facilities",
        "percentage": 94,
        "score": "9.4/10"
      }
    ]
  },
  "ai_review_summary": {
    "disclaimer": "From real guest reviews summarized by AI.",
    "sections": [
      {
        "section_id": "ProductAmenitiesSection",
        "title": "What guests liked",
        "items": [
          {
            "text": "Breakfast was consistently described as delicious, fantastic, and excellent by multiple …",
            "subText": null
          }
        ]
      }
    ]
  },
  "gallery": {
    "images": [
      {
        "id": "722092802",
        "url": "https://images.trvl-media.com/lodging/31000000/30040000/30039200/30039177/338b255c.jpg?i…",
        "caption": "Restaurant, image",
        "thumbnail_url": "https://images.trvl-media.com/lodging/31000000/30040000/30039200/30039177/338b255c.jpg?i…",
        "aspect_ratio": null
      },
      {
        "id": "722092823",
        "url": "https://images.trvl-media.com/lodging/31000000/30040000/30039200/30039177/3d9fba87.jpg?i…",
        "caption": "Restaurant, image",
        "thumbnail_url": "https://images.trvl-media.com/lodging/31000000/30040000/30039200/30039177/3d9fba87.jpg?i…",
        "aspect_ratio": null
      },
      "… +66 more"
    ],
    "image_groups": [
      {
        "name": "Rooms",
        "image_ids": [
          "953918755",
          "953918752",
          "… +16 more"
        ]
      },
      {
        "name": "Bathroom",
        "image_ids": [
          "659572513",
          "859916499",
          "… +3 more"
        ]
      },
      "… +4 more"
    ]
  },
  "property_content": {
    "about": [
      "About this property",
      "The Times Square EDITION",
      "Luxury hotel near Times Square",
      "… +9 more"
    ],
    "policies": [
      "Policies",
      "Check-in",
      "Check-in start time: 4 PM; Check-in end time: midnight",
      "Late check-in subject to availability",
      "… +29 more"
    ],
    "important_info": [
      "Important information",
      "Fees",
      "<p>You'll be asked to pay the following charges at the property. Fees may include applic…",
      "<ul><li>Destination fee: USD 45.90 per accommodation, per night</li></ul>",
      "… +17 more"
    ],
    "amenities": [
      "Property amenities",
      "Internet",
      "… +95 more"
    ]
  },
  "rooms": {
    "sold_out": false,
    "rooms": [
      {
        "unit_id": "216920197",
        "name": "Deluxe Room, 1 King Bed",
        "sub_text": null,
        "description": null,
        "features": [
          "240 sq ft",
          "1 bedroom",
          "… +3 more"
        ],
        "amenities": [
          "Room amenities",
          "Accessibility",
          "… +53 more"
        ],
        "highlights": null,
        "photos": [
          "https://images.trvl-media.com/lodging/31000000/30040000/30039200/30039177/df194528.jpg?i…",
          "https://images.trvl-media.com/lodging/31000000/30040000/30039200/30039177/b2e0690d.jpg?i…",
          "… +3 more"
        ],
        "footer": "Cancellation options available",
        "booking_options": [
          {
            "group": "Cancellation policy",
            "choices": [
              {
                "label": "Non-Refundable",
                "price": "+ $0",
                "sub_text": null,
                "selected": true
              },
              {
                "label": "Fully refundable before Jul 31",
                "price": "+ $57",
                "sub_text": "Reserve now, pay later",
                "selected": false
              }
            ]
          },
          {
            "group": "Extras",
            "choices": [
              {
                "label": "No extras",
                "price": "+ $0",
                "sub_text": null,
                "selected": true
              },
              {
                "label": "Breakfast for 2",
                "price": "+ $46",
                "sub_text": null,
                "selected": false
              }
            ]
          }
        ],
        "rate_plans": [
          {
            "name": null,
            "description": null,
            "badge": null,
            "badge_theme": null,
            "nightly_price": "$446 nightly",
            "total_price": {
              "amount": 514.71,
              "formatted": "$515"
            },
            "was_price": null,
            "cancellation": null,
            "deposit": null,
            "fees": null,
            "payment_policy": null,
            "payment_note": "You will not be charged yet",
            "rooms_left": "We have 5 left",
            "no_credit_card": false,
            "room_type_id": null
          },
          {
            "name": null,
            "description": null,
            "badge": null,
            "badge_theme": null,
            "nightly_price": "$495 nightly",
            "total_price": {
              "amount": 571.5,
              "formatted": "$572"
            },
            "was_price": null,
            "cancellation": [
              "Fully refundable before Fri, Jul 31"
            ],
            "deposit": null,
            "fees": null,
            "payment_policy": [
              "Pay the total now",
              "You can use a valid Expedia coupon",
              "… +4 more"
            ],
            "payment_note": "You will not be charged yet",
            "rooms_left": "We have 5 left",
            "no_credit_card": false,
            "room_type_id": null
          },
          "… +3 more"
        ]
      },
      {
        "unit_id": "216920193",
        "name": "Deluxe Room, 1 King Bed, City View",
        "sub_text": null,
        "description": null,
        "features": [
          "City view",
          "240 sq ft",
          "… +4 more"
        ],
        "amenities": [
          "Room amenities",
          "Accessibility",
          "… +54 more"
        ],
        "highlights": null,
        "photos": [
          "https://images.trvl-media.com/lodging/31000000/30040000/30039200/30039177/24a85100.jpg?i…",
          "https://images.trvl-media.com/lodging/31000000/30040000/30039200/30039177/aa36787f.jpg?i…",
          "… +3 more"
        ],
        "footer": "Cancellation options available",
        "booking_options": [
          {
            "group": "Cancellation policy",
            "choices": [
              {
                "label": "Non-Refundable",
                "price": "+ $0",
                "sub_text": null,
                "selected": true
              },
              {
                "label": "Fully refundable before Jul 31",
                "price": "+ $61",
                "sub_text": "Reserve now, pay later",
                "selected": false
              }
            ]
          },
          {
            "group": "Extras",
            "choices": [
              {
                "label": "No extras",
                "price": "+ $0",
                "sub_text": null,
                "selected": true
              },
              {
                "label": "Breakfast for 2",
                "price": "+ $46",
                "sub_text": null,
                "selected": false
              }
            ]
          }
        ],
        "rate_plans": [
          {
            "name": null,
            "description": null,
            "badge": null,
            "badge_theme": null,
            "nightly_price": "$482 nightly",
            "total_price": {
              "amount": 556.02,
              "formatted": "$556"
            },
            "was_price": null,
            "cancellation": null,
            "deposit": null,
            "fees": null,
            "payment_policy": null,
            "payment_note": "You will not be charged yet",
            "rooms_left": "We have 5 left",
            "no_credit_card": false,
            "room_type_id": null
          },
          {
            "name": null,
            "description": null,
            "badge": null,
            "badge_theme": null,
            "nightly_price": "$535 nightly",
            "total_price": {
              "amount": 617.42,
              "formatted": "$617"
            },
            "was_price": null,
            "cancellation": [
              "Fully refundable before Fri, Jul 31"
            ],
            "deposit": null,
            "fees": null,
            "payment_policy": [
              "Pay the total now",
              "You can use a valid Expedia coupon",
              "… +4 more"
            ],
            "payment_note": "You will not be charged yet",
            "rooms_left": "We have 5 left",
            "no_credit_card": false,
            "room_type_id": null
          },
          "… +3 more"
        ]
      },
      "… +12 more"
    ]
  }
}
```

**What's in this record:**

- **Core**: name, URL, star + guest rating, live price (nightly plus the all-in total with taxes in `price_messages`), any property program badge (e.g. "VIP Access") in `badges`, and the `search_context` (dates/occupancy the price was quoted for)
- **`category_ratings`**: per-category scores (cleanliness, staff & service, amenities, property condition) plus overall
- **`ai_review_summary`**: AI-summarized guest highlights
- **`gallery`**: all 68 photos with captions and thumbnails, grouped by category
- **`property_content`**: about text, policies, fees, and the complete `amenities` list (97 property and in-room amenities)
- **`rooms`**: all 14 room types with live rate plans — nightly + total price, how many rooms are left at each rate, and payment terms
- **`propertyDetails`**: full address + coordinates, categorized amenities, 15 nearby points of interest, reviews summary, and map images (Google API keys stripped)
- **`reviews`**: individual guest reviews with ratings, text, and management responses, plus pagination (10 of 1,002 fetched here)

### Proxy Configuration

**⚠️ Residential proxy is STRONGLY RECOMMENDED**

Expedia has strict rate limiting and blocks datacenter IPs. Always use residential proxies:

```json
{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

Without residential proxy, you'll likely encounter HTTP 429 "Too Many Requests" errors.

### Common Use Cases

#### Price Comparison

```json
{
  "location": "New York",
  "checkIn": "2025-07-01",
  "checkOut": "2025-07-05",
  "sortBy": "PRICE_LOW_TO_HIGH",
  "maxResults": 200,
  "scrapeReviews": false
}
```

#### Family Vacation Planning

```json
{
  "location": "Disney World",
  "rooms": [
    {
      "adults": 2,
      "children": [{"age": 6}, {"age": 9}]
    }
  ],
  "sortBy": "REVIEW",
  "scrapeReviews": true
}
```

#### Group Event (Wedding, Conference)

```json
{
  "location": "Cabo San Lucas",
  "rooms": [
    {"adults": 2, "children": []},
    {"adults": 2, "children": []},
    {"adults": 2, "children": []},
    {"adults": 2, "children": []}
  ],
  "maxResults": 100
}
```

### Advanced Use Cases

#### Market Research & Competitive Analysis

Track hotel pricing trends, analyze competitor positioning, and monitor market dynamics:

```json
{
  "location": "Miami Beach",
  "checkIn": "2025-12-20",
  "checkOut": "2025-12-27",
  "maxResults": 0,
  "scrapeReviews": true,
  "maxReviews": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

**Use for:**

- Price monitoring: Track seasonal pricing patterns and dynamic pricing strategies
- Competitive benchmarking: Compare your hotel's pricing, ratings, and amenities against competitors
- Market analysis: Identify pricing gaps, popular amenities, and guest satisfaction trends
- Portfolio analysis: Monitor multiple properties across different markets
- Investment research: Evaluate hotel performance metrics before acquisition decisions

#### Travel Agency & Booking Platforms

Build automated hotel recommendation engines or comparison tools:

```json
{
  "location": "Barcelona",
  "rooms": [
    {"adults": 2, "children": [{"age": 8}]}
  ],
  "scrapeReviews": true,
  "maxReviews": 50,
  "maxResults": 200
}
```

**Use for:**

- Automated inventory updates for your booking platform
- Personalized hotel recommendations based on guest preferences
- Real-time price comparison across multiple OTAs
- Review aggregation for better decision-making tools

#### Data Analytics & Business Intelligence

Extract comprehensive datasets for analysis and visualization:

```json
{
  "location": "London",
  "site": "www.expedia.co.uk",
  "scrapeReviews": true,
  "maxReviews": 0,
  "maxResults": 0
}
```

**Use for:**

- Sentiment analysis on guest reviews
- Amenity correlation with pricing and ratings
- Geographic pricing analysis and heatmaps
- Seasonal demand forecasting

### Troubleshooting

#### HTTP 429 - Too Many Requests

**Symptoms:** Actor fails with "Request blocked by Expedia" or HTTP 429 error

**Causes:**

- No proxy configured
- Using datacenter proxy instead of residential
- Proxy IP already rate-limited

**Solutions:**

1. Enable residential proxy in input settings:
   ```json
   {
     "proxyConfiguration": {
       "useApifyProxy": true,
       "apifyProxyGroups": ["RESIDENTIAL"]
     }
   }
   ```
2. If using custom proxy, ensure it's residential-grade
3. The actor automatically retries with new IPs on 429 errors

***

#### No Results Found for Location

**Symptoms:** Actor fails with "No results found for location: \[your location]"

**Causes:**

- Typo in location name
- Location too specific or not recognized by Expedia
- Wrong regional site for the location

**Solutions:**

1. Try broader location names:
   - ✅ "Paris" instead of ❌ "Paris 16th Arrondissement"
   - ✅ "Los Angeles" instead of ❌ "West Hollywood, LA"
2. Use well-known landmarks: "Eiffel Tower", "Times Square", "Big Ben"
3. For international locations, use the appropriate regional site (e.g., use www.expedia.de for German cities)

***

#### Room Configuration Validation Errors

**Symptoms:** Actor fails with "Invalid rooms configuration" error

**Causes:**

- Invalid room parameters (0 adults, child age > 17, too many rooms)
- Incorrect JSON format

**Solutions:**

1. Validate room configuration:
   - Adults: 1-8 per room (required)
   - Children: 0-6 per room (optional)
   - Child ages: 0-17 years old
   - Max rooms: 8 per search
2. Example valid configuration:
   ```json
   {
     "rooms": [
       {"adults": 2, "children": [{"age": 5}, {"age": 10}]}
     ]
   }
   ```

***

### Technical Details

#### Data Quality

- Real-time pricing and availability
- Official hotel data and images
- Accurate ratings and reviews

### Support

- 📧 **Email**: max@mapa.slmail.me
- 📖 **Found a bug?**: Use the issues tab and describe your issue
- 🔧 **Feature Requests**: Contact via email or issues tab

### Legal Compliance

This Expedia scraper extracts publicly available hotels data. Users must comply with Expedia's terms of service and applicable data protection regulations for their intended use.

***

[🚀 **Start Extracting Expedia Hotels and reviews**](https://console.apify.com/actors/clearpath/expedia-hotels-scraper-pro)

# Actor input Schema

## `site` (type: `string`):

Select Expedia regional site (determines inventory, pricing, and currency)

## `location` (type: `string`):

Destination to search for hotels (e.g., Paris, New York, Tokyo, etc.)

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

Check-in date (optional - API uses default if omitted)

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

Check-out date (optional - API uses default if omitted)

## `numberOfAdults` (type: `integer`):

Number of adults per room (1-8). For children or multiple rooms, see 'Advanced Room Configuration' section below.

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

Maximum number of hotels to scrape (0 or empty = scrape all results)

## `rooms` (type: `array`):

Configure multiple rooms or add children with specific ages. If not specified, uses 'Number of Adults' field above.

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

How to sort hotel search results. Default is Expedia's recommended ranking algorithm.

## `propertyName` (type: `string`):

Filter hotels by property name (e.g., 'Marriot', 'Hilton', 'Hyatt'). Leave empty to show all hotels.

## `showAvailableOnly` (type: `boolean`):

Only show hotels with available rooms (filters out sold-out properties)

## `minPrice` (type: `integer`):

Minimum price per night in the selected site's currency (e.g., USD for www.expedia.com, EUR for www.expedia.fr). Leave empty for no minimum.

## `maxPrice` (type: `integer`):

Maximum price per night in the selected site's currency (e.g., USD for www.expedia.com, EUR for www.expedia.fr). Leave empty for no maximum.

## `scrapeReviews` (type: `boolean`):

Optional paid add-on. Fetch guest reviews for each hotel. Charged as a separate per-review event (see pricing).

## `maxReviews` (type: `integer`):

Maximum number of reviews to fetch per hotel (0 = fetch all reviews, default = 25)

## `includeDeepData` (type: `boolean`):

Optional add-on (on by default). Adds a category rating breakdown, an AI-written summary of guest reviews, the full photo gallery, and policies, fees & property information to each hotel.

## `includeRooms` (type: `boolean`):

Optional add-on (on by default). Adds available room types with their live nightly rates for a sample stay to each hotel.

## `proxyConfiguration` (type: `object`):

Select proxies for reliable access (Residential proxy strongly recommended to avoid rate limiting)

## Actor input object example

```json
{
  "site": "www.expedia.com",
  "location": "New York",
  "numberOfAdults": 2,
  "maxResults": 100,
  "sortBy": "RECOMMENDED",
  "propertyName": "Marriot",
  "showAvailableOnly": false,
  "scrapeReviews": false,
  "maxReviews": 25,
  "includeDeepData": true,
  "includeRooms": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `hotels` (type: `string`):

No description

# 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 = {
    "location": "New York",
    "numberOfAdults": 2,
    "maxResults": 100,
    "maxReviews": 25,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("clearpath/expedia-hotels-scraper-pro").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 = {
    "location": "New York",
    "numberOfAdults": 2,
    "maxResults": 100,
    "maxReviews": 25,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("clearpath/expedia-hotels-scraper-pro").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 '{
  "location": "New York",
  "numberOfAdults": 2,
  "maxResults": 100,
  "maxReviews": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call clearpath/expedia-hotels-scraper-pro --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/PkDuDXX8v3J6PhiXe/builds/66XXxqtnXYJK2qn8G/openapi.json
