Expedia Reviews Scraper avatar

Expedia Reviews Scraper

Pricing

from $0.02 / 1,000 review saveds

Go to Apify Store
Expedia Reviews Scraper

Expedia Reviews Scraper

Export public Expedia hotel reviews, ratings, guest text, dates, photos and management responses for hospitality research.

Pricing

from $0.02 / 1,000 review saveds

Rating

0.0

(0)

Developer

Fetch Cat

Fetch Cat

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

2 hours ago

Last modified

Categories

Share

Export public Expedia hotel reviews from property IDs or hotel URLs into a structured dataset for hospitality research, reputation analysis and review archives. Each row contains a review's available rating, guest text, author attribution, submission date, photos and management responses; some reviews contain only a rating.

Quick start

Enter one or more Expedia property IDs or hotel URLs, set a small review limit and start the Actor. Open the dataset to inspect results, then export CSV, Excel or JSON.

{
"propertyIds": ["905202"],
"maxReviewsPerHotel": 20,
"sortBy": "NEWEST_TO_OLDEST",
"includeRatingsOnly": true
}

At least one propertyIds or startUrls entry is needed. Reviews and fields depend on what Expedia returns; access restrictions can prevent extraction. No Expedia login or cookies are required.

Ready-to-run examples

Choose a small, preconfigured public example:

Output example

Illustrative shape only, not an extracted guest review. Missing scalar fields are generally null, missing collections are empty arrays, and an unavailable submission date is an empty string.

{
"hotelId": "905202",
"propertyUrl": "https://www.expedia.com/h905202.Hotel-Information",
"reviewId": "illustrative-review-id",
"rating": 8,
"ratingLabel": "8/10",
"superlative": null,
"title": null,
"text": null,
"locale": "en_US",
"author": "Anonymous",
"submissionDate": "",
"stayDate": null,
"stayDetails": null,
"travelerType": null,
"travelers": [],
"brandType": "EXPEDIA",
"verifiedStay": null,
"themes": [],
"photos": [],
"managementResponses": [],
"propertyReviewSource": null,
"reviewRegion": null,
"sourceUrl": "https://www.expedia.com/h905202.Hotel-Information",
"scrapedAt": "2026-10-24T12:00:00.000Z",
"pageIndex": 0,
"position": 1
}

Who is it for?

  • Hotel reputation teams: review recurring guest feedback and available management responses.
  • Travel analysts: compare ratings and comments across selected properties.
  • Data teams: build review archives using review IDs and collection timestamps.

Input settings

Both target lists are combined when supplied together. Detailed behavior and limitations are in each field's input-form help.

SettingAPI keyPurpose
Expedia property IDspropertyIdsNumeric hotel IDs.
Expedia hotel URLsstartUrlsHotel-Information or Hotel-Reviews URLs containing .h<ID>.
Maximum reviews per hotelmaxReviewsPerHotelPer-property limit; form default 20. Set explicitly for bounded API calls.
Sort reviewssortByRequest newest, relevance, highest or lowest rating order.
Include ratings-only reviewsincludeRatingsOnlyInclude entries without written text; default true.
Review text searchsearchOptional Expedia text filter.
Reviews per requestpageSizeRequest size, from 1 to 50.
Traveler typetravelerTypeOptional Expedia filter value.
Expedia localelocaleLocalized labels and dates; default en_US.
Runtime budgetmaxRuntimeSecsShared time budget in seconds.

Output fields

FieldsMeaning
hotelId, propertyUrl, reviewIdProperty identity, page and review identifier.
rating, ratingLabel, superlativeAvailable numeric score and Expedia labels.
title, text, localePublic review content; title/text can be null.
author, submissionDateAuthor attribution (Anonymous when unavailable) and localized submitted date, not a normalized ISO date.
travelers, brandTypeAvailable traveler labels and source brand.
themes, photos, managementResponsesAvailable theme, media and reply collections; empty arrays when absent.
stayDate, stayDetails, travelerType, verifiedStayReserved fields currently returned as null; not populated by this export.
propertyReviewSource, reviewRegionReserved source/region metadata currently returned as null.
sourceUrl, scrapedAtInput provenance and collection timestamp.
pageIndex, positionZero-based page index and one-based source position, not a guarantee of complete coverage.

Pricing and limits

This Actor uses pay-per-event pricing: start is charged once after input validation, and item is charged per review saved to the dataset. A started run can incur the start charge even if no reviews are saved. See the live Pricing tab for current rates and discounts.

  • Start with 20 reviews per property. The per-property review limit and runtime budget bound the requested work.
  • Filters and sort order depend on Expedia's response. Reviews can be edited, removed or unavailable; no complete historical archive is guaranteed.
  • Completed empty extraction can return an empty dataset. A run with property failures and no saved reviews fails; saved output from completed pages/properties is preserved in mixed runs.
  • Check the SUMMARY key-value-store record for saved, targets, failures and partial before treating a run as complete.
  • The Actor is not affiliated with Expedia and does not retrieve private account data.

API usage

Use fetch_cat/expedia-reviews-scraper with a bounded input. The cURL request starts an asynchronous run; use its returned default dataset ID to retrieve saved reviews after completion.

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~expedia-reviews-scraper/runs" \
-H "Authorization: Bearer $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

Client list methods return a page of dataset items; paginate for larger exports.

MCP and AI agents

Use the official Apify MCP server setup guide. The general server at https://mcp.apify.com can discover and run Actors; the focused URL https://mcp.apify.com?tools=fetch_cat/expedia-reviews-scraper selects this Actor. Configure authentication as described in the guide.

Example request: “Export up to 20 newest reviews for Expedia property 905202 using propertyIds and maxReviewsPerHotel, then summarize the available review text.” Retrieve the dataset, check SUMMARY, and account for nullable fields before analysis. This uses Apify's server, not a separate Expedia-specific MCP service.

FAQ

Can I export Expedia reviews to CSV or Excel?

Yes. Run a bounded export, then use the dataset's export options for CSV, Excel or JSON, or retrieve results through the API.

Is this an Expedia reviews API?

It provides an Apify API workflow for public review exports. It is not an official Expedia API, and upstream availability can change.

Can I compare several hotels?

Yes. Supply multiple IDs or URLs. maxReviewsPerHotel applies to each property, and both target lists are processed when supplied together.

Why are some fields empty?

Ratings-only entries may have no written content. Missing collections are empty arrays, many scalars are null, and reserved stay/verification/source fields are not populated. Request includeRatingsOnly: false to ask Expedia for written reviews only.

What if the run saves no reviews?

Check SUMMARY and the run status. A completed request with no reviews is different from a failed request or restricted target. Confirm the property ID and filters; do not interpret inaccessibility alone as proof that the hotel or its reviews were deleted.

Support and feedback

For custom additions or integrations, email hello@fetchcat.dev.

Found an error or have a feature request? Open an issue with the run ID, a non-sensitive input example and what you expected.

Made with care for curious people, AI agents and the possibilities in data. ♥