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

6

Total users

3

Monthly active users

12 days ago

Last modified

Categories

Security

Limited permissions

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.

Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.

Ready-to-run examples

Choose a public example to see its settings before starting a run:

What you get

One row per saved public review, with its hotel and review identifiers, available rating, text, author attribution and submission date. Optional photos and management responses can be included when Expedia supplies them. Ratings-only rows can lack written text, and reserved stay-related fields remain null.

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.

How you can use the data

  • Review a small property-feedback sample. Use property 905202 with an explicit per-hotel cap. Keep hotelId, reviewId, rating, text and scrapedAt together before analyzing recurring themes in your own reporting.
  • Read guest feedback alongside available replies. Inspect managementResponses with the source review text and property link. Missing replies are empty collections, and ratings-only rows do not supply guest comments to summarize.
  • Compare selected hotels downstream. Export a bounded sample for each known property and retain the same requested sort and filter settings. Review available ratings and text without treating the sample as a complete history or guaranteeing Expedia's returned order.
  • Build a dated review archive in your own system. Preserve review identifiers and collection timestamps when joining later exports. submissionDate is localized source text rather than a normalized ISO date, and reserved stay or verified-stay fields cannot establish guest verification.

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.

Example inputs

Use the Quick start input as a small first run. Adjust the fields described above for your own data.

Output data

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
}

More 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.

Download your results

Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.

See Apify's download and export guide for the available formats and field options.

Pricing

Pay-per-event pricing uses a start event once after input validation and an item event 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.

Tips for best results

  • Set a small per-property cap explicitly. Keep the shared runtime budget in mind when supplying several hotels.
  • Check text availability before summarizing feedback. Ratings-only reviews can have null title or text fields.
  • Keep source dates and capture times separate. Use the collection timestamp for your own exports and inspect localized submission dates before date analysis.
  • Read the summary before calling an export complete. Check SUMMARY.saved, targets, failures and partial for missing or interrupted work.
  • Retain property and review identifiers in comparisons. Match separate exports in your own system rather than expecting a built-in historical archive.

Limits and caveats

Review filters and requested sort order depend on Expedia's response. Reviews can be edited, removed or unavailable, with no complete historical archive or guaranteed requested order. Optional text, photos and replies can be absent, and some entries contain only a rating.

A completed empty extraction can return an empty dataset. A run with property failures and no saved reviews fails. Saved output from completed pages or properties remains available in mixed runs. Inspect the SUMMARY key-value record before treating the run as complete.

Submission dates are localized source strings, not normalized ISO dates. Reserved stay date, stay details, traveler type, verified-stay and source/region fields remain null as documented in Output data.

The Actor reads public review information without Expedia login or cookies and does not retrieve private account data. Access restrictions can prevent extraction. This independent tool is not affiliated with Expedia.

Automation and integrations

Save your settings for next time

Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.

Run on a schedule

Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.

Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.

Send results to your other tools

Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.

For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.

API usage

Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.

The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.

For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.

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' \
--data @- <<'JSON'
{
"propertyIds": [
"905202"
],
"maxReviewsPerHotel": 20,
"sortBy": "NEWEST_TO_OLDEST",
"includeRatingsOnly": true
}
JSON

Node.js

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,
"sortBy": "NEWEST_TO_OLDEST",
"includeRatingsOnly": true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

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, 'sortBy': 'NEWEST_TO_OLDEST', 'includeRatingsOnly': True})
print(client.dataset(run['defaultDatasetId']).list_items().items)

MCP and AI agents notes

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.

MCP and AI agents

You can ask your AI assistant to collect data with Expedia Reviews Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.

Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.

Easier setup with an Apify plugin

If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.

Use Apify AI in Console

Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Expedia Reviews Scraper. You can describe the data you want and ask questions about the results.

Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.

Choose your assistant

Connect just this scraper

To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/expedia-reviews-scraper"
}
}
}

Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.

Use Apify's general server

Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Expedia Reviews Scraper by Fetch Cat, or give it the identifier fetch_cat/expedia-reviews-scraper.

Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.

Example requests

  • “Use Fetch Cat’s Expedia Reviews Scraper to collect up to 5 reviews for property 905202, requesting newest-first order. Show available ratings, guest text and source links, while keeping ratings-only entries distinct.”
  • “Collect at most 5 reviews per hotel for the 2 Expedia hotel URLs I provide. Include available management responses and review identifiers so I can review feedback themes in my own report.”
  • “Retrieve up to 5 reviews from my supplied Expedia property ID. Keep collection times and localized submission dates separate, and explain partial or failed-property outcomes before I add the records to my archive.”

Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.

Pay with x402

If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.

Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.

Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.

Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.

Other ways for agents to pay

Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.

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 URL, a non-sensitive input example and what you expected.

Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.

Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.

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