Export public Expedia hotel reviews for reputation monitoring, guest-experience analysis, competitor research, and review archives. Supply Expedia property IDs or hotel URLs and receive one structured review per dataset row.
Input example
{
"propertyIds": ["905202"],
"maxReviewsPerHotel": 20,
"sortBy": "NEWEST_TO_OLDEST",
"includeRatingsOnly": true
}
Output example
{
"hotelId": "905202",
"propertyUrl": "https://www.expedia.com/h905202.Hotel-Information",
"reviewId": "example-review-id",
"rating": 10,
"ratingLabel": "Exceptional",
"superlative": "Wonderful stay",
"title": "Wonderful stay",
"text": "Friendly staff and a convenient location.",
"locale": "en_US",
"author": "Expedia guest",
"submissionDate": "Jul 30, 2026",
"stayDate": "July 2026",
"stayDetails": "Stayed 2 nights",
"travelerType": "Couple",
"travelers": ["Couple"],
"brandType": "EXPEDIA",
"verifiedStay": true,
"themes": [],
"photos": [],
"managementResponses": [],
"propertyReviewSource": {},
"reviewRegion": {},
"sourceUrl": "https://www.expedia.com/h905202.Hotel-Information",
"scrapedAt": "2026-08-04T12:00:00.000Z",
"pageIndex": 0,
"position": 1
}
Optional fields are omitted when Expedia does not provide them, especially for ratings-only reviews.
Who is it for?
- Hotel reputation teams tracking recurring guest feedback.
- Travel analysts comparing ratings and themes across properties.
- Guest-experience teams exporting management responses and stay context.
- Data teams feeding public review archives, dashboards, and alerts.
Input settings
| Field | Type | Description |
|---|---|---|
propertyIds |
string[] | Numeric Expedia hotel property IDs. |
startUrls |
URL[] | Expedia hotel URLs containing .h<property ID>. |
maxReviewsPerHotel |
integer | Maximum unique reviews per property. |
pageSize |
integer | Reviews requested per page (1–50). |
sortBy |
string | Relevance, newest, highest rating, or lowest rating. |
includeRatingsOnly |
boolean | Include reviews with a rating but no written text. |
travelerType |
string | Optional Expedia traveler filter. |
search |
string | Optional public review-text search. |
locale |
string | Locale for Expedia-provided labels and dates. |
maxRuntimeSecs |
integer | Shared runtime budget with cleanup reserve. |
Input recipes
Two hotels, newest reviews
{"propertyIds":["905202","10966026"],"maxReviewsPerHotel":50,"sortBy":"NEWEST_TO_OLDEST"}
URL input with written reviews only
{"startUrls":[{"url":"https://www.expedia.com/Prague-Hotels-Golden-Well-Hotel.h905202.Hotel-Information"}],"maxReviewsPerHotel":20,"includeRatingsOnly":false}
Tips and limits
- Start with 20 reviews to verify the property and output shape.
- Use numeric property IDs for the most stable input.
- Ratings-only reviews can omit title and text.
- Public reviews can be edited or removed upstream.
- Large exports stop within the configured runtime budget and preserve completed pages.
- A
SUMMARYkey-value-store record reports saved rows and any property-level failures.
API usage
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~expedia-reviews-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"propertyIds":["905202"],"maxReviewsPerHotel":20}'
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/expedia-reviews-scraper').call({
propertyIds: ['905202'], maxReviewsPerHotel: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/expedia-reviews-scraper').call(
run_input={'propertyIds': ['905202'], 'maxReviewsPerHotel': 20}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
MCP and AI agents
Add Apify MCP to Claude Code:
claude mcp add apify --transport http "https://mcp.apify.com/?tools=fetch_cat/expedia-reviews-scraper"
Equivalent MCP configuration:
{"mcpServers":{"apify":{"type":"http","url":"https://mcp.apify.com/?tools=fetch_cat/expedia-reviews-scraper"}}}
Example prompts:
- “Export the 20 newest reviews for Expedia property 905202.”
- “Compare the latest 50 public reviews for properties 905202 and 10966026.”
Review the dataset before using guest content in automated decisions.
Support
Open an issue from the Actor's Apify Console page with the property ID, sanitized input, run ID, and expected behavior. Do not include account credentials or private guest data.