# Expedia Reviews Scraper (`automation-lab/expedia-reviews-scraper`) Actor

Export public Expedia hotel reviews with ratings, guest comments, stay details, photos, helpful votes, and management replies. Filter by traveler type, keyword, rating, locale, or sort order.

- **URL**: https://apify.com/automation-lab/expedia-reviews-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 83.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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.

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 Reviews Scraper

Export public Expedia hotel reviews as clean JSON, CSV, Excel, XML, or RSS data.

Provide Expedia property URLs or numeric hotel IDs and receive one row per guest review.

The scraper captures the review text, rating, reviewer, stay context, traveler type, liked and disliked themes, photos, helpful votes, management reply, and hotel-level rating context.

It uses Expedia's structured review surface over HTTP, so it does not launch a heavy browser for every page.

### What does Expedia Reviews Scraper do?

Expedia Reviews Scraper turns public hotel review pages into analysis-ready records.

Use it to:

- 🏨 Export reviews from one hotel or a portfolio of Expedia properties.
- ⭐ Track aggregate ratings and category scores alongside each review.
- 💬 Collect full guest comments and property-management responses.
- 🔎 Search reviews for topics such as breakfast, cleanliness, noise, or service.
- 👥 Focus on couples, solo travelers, business travelers, families, groups, or pet travelers.
- 📅 Sort recent reviews first for scheduled reputation monitoring.
- 📊 Send structured rows to dashboards, sentiment models, spreadsheets, and databases.

The Actor reads public reviews only. It does not access reservations, traveler accounts, private inventory, or Expedia Partner Central.

### Who is it for?

#### Hotel groups and operators

Monitor fresh feedback across multiple properties without copying reviews by hand.

#### Reputation-management agencies

Build recurring client reports from review text, ratings, and management-response coverage.

#### Hospitality analysts

Compare guest experience signals, category scores, and traveler segments across competitors.

#### Data and AI teams

Feed typed review records into sentiment analysis, topic classification, retrieval, or alerting workflows.

#### Travel product teams

Prototype review-search, hotel-comparison, and guest-experience features with exportable public data.

### Why use this Expedia review extractor?

- ⚡ **HTTP-based extraction** avoids full browser rendering.
- 🔁 **Pagination** supports historical exports as well as small monitoring runs.
- 🧭 **Two input routes** accept full Expedia URLs and numeric property IDs.
- 🛡️ **Bounded retries** rotate throttled residential sessions instead of silently returning empty data.
- ✅ **Fail-closed validation** rejects non-Expedia URLs and malformed IDs.
- 🧹 **Deduplication** uses Expedia review IDs.
- 🎯 **Server-side filters** support keyword, traveler type, and Expedia sort order.
- 📦 **Flat fields** work well in CSV, Google Sheets, BI tools, and databases.

### What Expedia review data can I extract?

| Field | Description |
|---|---|
| `propertyId` | Expedia numeric property ID |
| `propertyName` | Name derived from a standard Expedia URL slug |
| `propertyUrl` | Canonical input or generated Expedia property URL |
| `aggregateRating` | Hotel's aggregate guest score out of 10 |
| `totalReviews` | Expedia aggregate review count |
| `cleanlinessRating` | Cleanliness category score |
| `staffServiceRating` | Staff and service category score |
| `amenitiesRating` | Amenities category score |
| `propertyConditionRating` | Property condition and facilities score |
| `reviewId` | Expedia review identifier |
| `rating` | Numeric review score out of 10 |
| `ratingLabel` | Expedia label such as Excellent or Good |
| `title` | Review title when present |
| `text` | Full public review body |
| `locale` | Review locale reported by Expedia |
| `reviewDate` | Public review date |
| `helpfulVotes` | Helpful-vote count when exposed |
| `liked` | Expedia's positive review themes |
| `disliked` | Expedia's negative review themes |
| `reviewerName` | Public reviewer attribution |
| `travelerType` | Public traveler segment when exposed |
| `stayDetails` | Public stay context, such as month and nights |
| `verifiedStay` | Whether Expedia marks the review verified |
| `photoUrls` | Public review photo URLs |
| `managementReplyText` | Property-management response |
| `scrapedAt` | UTC extraction timestamp |

### How to scrape Expedia hotel reviews

1. Open the Actor input page.
2. Paste one or more Expedia hotel URLs in **Expedia property URLs**.
3. Alternatively, add numeric IDs in **Numeric Expedia property IDs**.
4. Set a small **Maximum reviews** value for your first run.
5. Choose the review order and optional traveler, keyword, or rating filters.
6. Click **Start**.
7. Open the dataset to preview or export the review rows.
8. Save the task and add a schedule if you need ongoing monitoring.

A working first input is prefilled, so you can test the main workflow without finding a property first.

### Input parameters

#### Expedia property URLs

Use public URLs containing an `h` followed by the numeric property ID.

```text
https://www.expedia.com/Bangkok-Hotels-Admiral-Suites.h911663.Hotel-Information
````

Non-Expedia URLs are rejected rather than treated as equivalent hotel pages.

#### Numeric Expedia property IDs

Pass IDs such as `911663` when another system already stores Expedia identifiers.

#### Maximum reviews

`maxReviews` is a global cap across all supplied properties.

The allowed range is 1 to 5,000.

#### Sort order

Choose most relevant, most recent, highest rated, or lowest rated.

#### Traveler type

Choose all travelers, couples, solo travelers, business travelers, families, families with small children, groups, or travelers with pets.

#### Keyword

Enter a public review search term such as `breakfast` or `service`.

#### Rating range

Use `minRating` and `maxRating` on Expedia's 10-point scale.

Unparseable ratings never pass an active rating boundary.

#### Locale

Use Expedia locale format such as `en_US`, `en_GB`, or `de_DE`.

### Input example

```json
{
  "listingUrls": [
    "https://www.expedia.com/Bangkok-Hotels-Admiral-Suites.h911663.Hotel-Information"
  ],
  "maxReviews": 10,
  "sort": "MOST_RECENT",
  "travelerType": "all",
  "keyword": "service",
  "minRating": 6,
  "maxRating": 10,
  "locale": "en_US"
}
```

You can combine `listingUrls` and `propertyIds`; duplicate property IDs are processed once.

### Output example

```json
{
  "propertyId": "911663",
  "propertyName": "Admiral Suites",
  "propertyType": "Hotel",
  "propertyUrl": "https://www.expedia.com/Bangkok-Hotels-Admiral-Suites.h911663.Hotel-Information",
  "aggregateRating": 8,
  "totalReviews": 631,
  "cleanlinessRating": 8.2,
  "staffServiceRating": 8.4,
  "reviewId": "69cdd48775e1c415f0bc8fec",
  "rating": 10,
  "ratingLabel": "Excellent",
  "title": null,
  "text": "Clean hotel staff friendly and welcoming",
  "locale": "en_CA",
  "reviewDate": "Apr 7, 2026",
  "helpfulVotes": 0,
  "liked": "Cleanliness, staff & service, amenities, property conditions & facilities",
  "disliked": null,
  "reviewerName": "eugenio",
  "stayDetails": "Stayed 3 nights in Mar 2026",
  "verifiedStay": true,
  "photoUrls": [],
  "managementReplyTitle": "Response from Rachaya P. on Apr 7, 2026",
  "managementReplyText": "Dear Valued guest, thank you so much...",
  "scrapedAt": "2026-07-20T00:00:00.000Z"
}
```

Empty optional values are returned as `null`; photos are always an array.

### How much does it cost to scrape Expedia reviews?

The Actor uses pay-per-event pricing.

A run has a small start event and a per-review event, with lower review prices on higher Apify plans.

The current configuration starts at **$0.002 per run** and **$0.0027146 per review on the Bronze tier** before tier discounts.

For example, 100 saved reviews on Bronze are approximately $0.27346 at the configured event prices.

Residential proxy traffic and platform resources are handled by the Actor; you do not need a separate Expedia API subscription.

Check the pricing tab before a large run because Store pricing can change over time.

### Scheduling a hotel review monitor

Create a saved task with `MOST_RECENT` sorting and a modest review limit.

Run it daily or weekly with an Apify schedule.

Use `reviewId` as the idempotency key in your destination system.

A downstream automation can ignore IDs it has already processed and alert only on new reviews.

For portfolio monitoring, place several Expedia URLs in one task or create one task per client/property.

### Tips for reliable results

- Start with 5–10 reviews while validating a property ID.
- Keep the default residential proxy unless you have tested an alternative.
- Prefer `MOST_RECENT` for monitoring and `MOST_RELEVANT` for discovery.
- Use one keyword at a time because Expedia applies the search term to public review content.
- Use rating boundaries for analysis, not to compensate for an invalid property.
- Schedule conservative runs rather than repeatedly starting many concurrent tasks.
- Preserve `reviewId` when loading results into a warehouse.
- Numeric-ID input cannot always provide a friendly `propertyName`; supply the normal Expedia URL when the name is important.

### Export formats

Every run writes to the default Apify dataset.

Export formats include:

- JSON
- JSONL
- CSV
- Excel
- XML
- RSS

The flat schema avoids nested objects in spreadsheets. Photo URLs remain an array in JSON and are serialized by tabular exports.

### Integrations

#### Google Sheets reputation tracker

Use the Google Sheets integration to append review rows, then create pivots by property, date, rating, or keyword.

#### Slack or email alerts

Connect a scheduled task to Make, Zapier, or an Apify webhook. Trigger alerts for low ratings or missing management replies.

#### Sentiment and topic analysis

Send `text`, `liked`, and `disliked` to an NLP model. Group results by property and traveler segment.

#### Data warehouse pipeline

Load JSONL into BigQuery, Snowflake, Redshift, or PostgreSQL. Upsert on `reviewId`.

#### Hospitality dashboard

Combine aggregate scores with review-level trends in Looker Studio, Power BI, Tableau, or Metabase.

### Use Expedia Reviews Scraper with the API

Replace `APIFY_TOKEN` with your Apify API token.

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/expedia-reviews-scraper').call({
  propertyIds: ['911663'],
  maxReviews: 10,
  sort: 'MOST_RECENT',
  travelerType: 'all',
  locale: 'en_US'
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/expedia-reviews-scraper').call(run_input={
    'propertyIds': ['911663'],
    'maxReviews': 10,
    'sort': 'MOST_RECENT',
    'travelerType': 'all',
    'locale': 'en_US',
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~expedia-reviews-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"propertyIds":["911663"],"maxReviews":10,"sort":"MOST_RECENT","travelerType":"all","locale":"en_US"}'
```

Poll the returned run ID, then read its default dataset.

### Connect through Apify MCP

Use the Actor from Claude Code, Claude Desktop, Cursor, VS Code, or another MCP client.

#### Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/expedia-reviews-scraper"
```

#### Claude Desktop, Cursor, or VS Code

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/expedia-reviews-scraper"
    }
  }
}
```

Example prompts:

- “Export the 20 newest reviews for Expedia property 911663.”
- “Find recent service-related reviews and summarize recurring complaints.”
- “Compare rating themes across these three Expedia hotel URLs.”
- “Save low-rated reviews and management replies as a CSV.”

### Error handling

The Actor rejects malformed property IDs, unsupported hosts, invalid locales, and inverted rating ranges before scraping.

Expedia can throttle proxy exits. The Actor rotates bounded residential sessions and reuses a successful session for pagination.

If every session is blocked, the run fails with a clear error rather than succeeding with an empty dataset.

A valid property with no reviews matching strict filters also fails instead of presenting an empty extraction as success.

### Troubleshooting

#### Why did my Expedia URL fail validation?

Confirm that the URL is an Expedia domain and contains a numeric `h` property segment, for example `.h911663.Hotel-Information`.

Short links and search-result URLs are not property pages. Open the hotel detail page and copy its final URL.

#### Why is `propertyName` empty?

ID-only input does not contain a human-readable name, and the review operation does not always return one. Use the standard Expedia hotel URL when you need a friendly name.

#### Why did a filtered run return no rows?

The traveler, keyword, and rating filters may have removed every public review. Test the property with `travelerType: all`, no keyword, and no rating boundaries.

#### Why can a run take longer than expected?

Expedia throttles some residential exits. The Actor may rotate sessions before finding one accepted by the public review endpoint.

### Is it legal to scrape Expedia reviews?

This Actor extracts information displayed publicly without logging into an Expedia account.

Public availability does not remove your responsibilities.

You should:

- follow applicable laws and regulations;
- respect privacy and data-protection requirements;
- avoid republishing personal data without a lawful purpose;
- comply with contracts and website terms that apply to you;
- use conservative schedules and output limits;
- obtain legal advice for regulated or high-risk use cases.

The Actor is a data-extraction tool, not legal advice.

### FAQ

#### Does this require an Expedia API key?

No. The Actor uses Expedia's public web review data and Apify proxy infrastructure.

#### Does it require an Expedia login?

No. V1 does not access traveler or partner accounts.

#### Can it scrape several hotels?

Yes. Add multiple URLs and/or IDs. `maxReviews` applies across the complete run.

#### Can it return every historical review?

It paginates until the output cap or Expedia's available pages end. Set a larger cap for backfills and estimate cost first.

#### Can I filter reviews by date?

V1 offers Expedia sort order, keyword, traveler type, and rating boundaries. Use `MOST_RECENT` and stop downstream when dates pass your cutoff.

#### Are ratings numbers or strings?

`rating` and aggregate category scores are numbers. `ratingLabel` preserves Expedia's descriptive text.

#### Are management responses included?

Yes, when Expedia publicly exposes a response for that review.

#### Does it scrape Hotels.com too?

No. V1 is Expedia-only. Hotels.com URLs fail scope validation.

### Related travel scrapers

Build broader travel intelligence workflows with other Automation Lab Actors:

- [Booking Scraper](https://apify.com/automation-lab/booking-scraper)
- [Tripadvisor Scraper](https://apify.com/automation-lab/tripadvisor-scraper)
- [Google Maps Scraper](https://apify.com/automation-lab/google-maps-scraper)

Use source-specific IDs and deduplication rules when combining datasets from different travel platforms.

### Support

If a valid Expedia property stops returning reviews, open an issue from the Actor page.

Include:

- the Expedia property URL or ID;
- the run URL;
- the relevant filter settings;
- whether the property visibly has public reviews.

Do not include booking references, account credentials, or private traveler information.

# Actor input Schema

## `listingUrls` (type: `array`):

Paste Expedia hotel pages containing an h-property ID. You can combine URLs with numeric IDs below.

## `propertyIds` (type: `array`):

Add IDs such as 911663 when you do not have full URLs.

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

Stop after saving this many reviews across all properties.

## `sort` (type: `string`):

Choose Expedia's review sorting order.

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

Return reviews from one Expedia traveler segment.

## `keyword` (type: `string`):

Search Expedia review text for a term such as breakfast, noise, or service.

## `minRating` (type: `number`):

Keep reviews at or above this score on Expedia's 10-point scale.

## `maxRating` (type: `number`):

Keep reviews at or below this score on Expedia's 10-point scale.

## `locale` (type: `string`):

Use Expedia locale format, for example en\_US, en\_GB, or de\_DE.

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

Residential proxy is selected by default because Expedia throttles datacenter traffic.

## Actor input object example

```json
{
  "listingUrls": [
    "https://www.expedia.com/Bangkok-Hotels-Admiral-Suites.h911663.Hotel-Information"
  ],
  "propertyIds": [],
  "maxReviews": 5,
  "sort": "MOST_RELEVANT",
  "travelerType": "all",
  "keyword": "",
  "locale": "en_US",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Open the structured Expedia reviews collected by this run.

# 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 = {
    "listingUrls": [
        "https://www.expedia.com/Bangkok-Hotels-Admiral-Suites.h911663.Hotel-Information"
    ],
    "propertyIds": [],
    "maxReviews": 5,
    "sort": "MOST_RELEVANT",
    "travelerType": "all",
    "keyword": "",
    "locale": "en_US",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/expedia-reviews-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 = {
    "listingUrls": ["https://www.expedia.com/Bangkok-Hotels-Admiral-Suites.h911663.Hotel-Information"],
    "propertyIds": [],
    "maxReviews": 5,
    "sort": "MOST_RELEVANT",
    "travelerType": "all",
    "keyword": "",
    "locale": "en_US",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/expedia-reviews-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 '{
  "listingUrls": [
    "https://www.expedia.com/Bangkok-Hotels-Admiral-Suites.h911663.Hotel-Information"
  ],
  "propertyIds": [],
  "maxReviews": 5,
  "sort": "MOST_RELEVANT",
  "travelerType": "all",
  "keyword": "",
  "locale": "en_US",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call automation-lab/expedia-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Expedia Reviews Scraper",
        "description": "Export public Expedia hotel reviews with ratings, guest comments, stay details, photos, helpful votes, and management replies. Filter by traveler type, keyword, rating, locale, or sort order.",
        "version": "0.1",
        "x-build-id": "bvTZqcSmRRMmCLjSf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~expedia-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-expedia-reviews-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/automation-lab~expedia-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-expedia-reviews-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/automation-lab~expedia-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-expedia-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "listingUrls": {
                        "title": "🏨 Expedia property URLs",
                        "type": "array",
                        "description": "Paste Expedia hotel pages containing an h-property ID. You can combine URLs with numeric IDs below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "propertyIds": {
                        "title": "Numeric Expedia property IDs",
                        "type": "array",
                        "description": "Add IDs such as 911663 when you do not have full URLs.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxReviews": {
                        "title": "Maximum reviews",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Stop after saving this many reviews across all properties.",
                        "default": 10
                    },
                    "sort": {
                        "title": "Review order",
                        "enum": [
                            "MOST_RELEVANT",
                            "MOST_RECENT",
                            "HIGHEST_RATED",
                            "LOWEST_RATED"
                        ],
                        "type": "string",
                        "description": "Choose Expedia's review sorting order.",
                        "default": "MOST_RELEVANT"
                    },
                    "travelerType": {
                        "title": "Traveler type",
                        "enum": [
                            "all",
                            "couples",
                            "solo_travelers",
                            "business_travelers",
                            "families",
                            "families_with_small_children",
                            "groups",
                            "travelers_with_pets"
                        ],
                        "type": "string",
                        "description": "Return reviews from one Expedia traveler segment.",
                        "default": "all"
                    },
                    "keyword": {
                        "title": "Review keyword",
                        "type": "string",
                        "description": "Search Expedia review text for a term such as breakfast, noise, or service.",
                        "default": ""
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "number",
                        "description": "Keep reviews at or above this score on Expedia's 10-point scale."
                    },
                    "maxRating": {
                        "title": "Maximum rating",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "number",
                        "description": "Keep reviews at or below this score on Expedia's 10-point scale."
                    },
                    "locale": {
                        "title": "🌐 Expedia locale",
                        "pattern": "^[a-z]{2}_[A-Z]{2}$",
                        "type": "string",
                        "description": "Use Expedia locale format, for example en_US, en_GB, or de_DE.",
                        "default": "en_US"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Residential proxy is selected by default because Expedia throttles datacenter traffic.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
