Expedia Reviews Scraper

Export public Expedia hotel reviews, ratings, authors, dates, traveler details, photos, and management responses with reliable pagination.

Data fields

FieldTypeDescription
hotelIdstringValue exported as hotelId.
propertyUrlstringValue exported as propertyUrl.
reviewIdstringValue exported as reviewId.
ratingnumber | nullValue exported as rating.
ratingLabelstring | nullValue exported as ratingLabel.
superlativestring | nullValue exported as superlative.
titlestring | nullValue exported as title.
textstring | nullValue exported as text.

Input preview

propertyIdsExpedia property IDs
startUrlsExpedia hotel URLs
maxReviewsPerHotelMaximum reviews per hotel
pageSizeReviews per request
sortBySort reviews
includeRatingsOnlyInclude ratings-only reviews

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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 SUMMARY key-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.

Common questions

Questions and answers reused from the canonical actor README.

Can I scrape several hotels in one run?

Yes. Add multiple IDs or URLs. A failure for one property does not discard already saved reviews from other properties.

Why is review text missing?

Expedia permits ratings-only reviews. Set includeRatingsOnly to false when you need written reviews only.

Does this require an Expedia login or cookies?

No. It exports review records available on public Expedia property surfaces.

Is it legal to scrape Expedia reviews?

You are responsible for your use case, applicable laws, Expedia terms, and personal-data obligations. Collect only what you need and avoid republishing personal content without a lawful basis.