Expedia Reviews Scraper ✈️ Hotel Ratings, Text & Sentiment
Pricing
from $0.002 / review
Expedia Reviews Scraper ✈️ Hotel Ratings, Text & Sentiment
Scrape Expedia hotel reviews at scale - guest ratings, full review text, sub-ratings, stay dates, traveler type, language & owner responses, plus LLM-ready markdown. Also accepts Hotels.com, Travelocity, Orbitz, Wotif, CheapTickets & ebookers URLs. Filter by date/rating; export JSON/CSV.
Pricing
from $0.002 / review
Rating
5.0
(3)
Developer
Factden
Maintained by CommunityActor stats
4
Bookmarked
8
Total users
6
Monthly active users
20 minutes ago
Last modified
Categories
Share
Expedia Reviews Scraper
Scrape Expedia hotel reviews at scale - guest ratings, full review text, category sub-ratings, stay dates, traveler type, language, and hotel owner responses - plus a per-review LLM-ready markdown block. Paste one or more Expedia hotel URLs and export clean JSON, CSV, Excel, or via API. No login, no Expedia API key.
One actor, all seven Expedia Group sites - Expedia, Hotels.com, Travelocity, Orbitz, Wotif, CheapTickets & ebookers. Paste any of their hotel URLs and get the same fields, same output schema. A single actor replaces seven separate scrapers.
Runs on the Apify platform, so you get scheduling, a REST API, webhooks & integrations, proxy rotation, and run monitoring out of the box - plus incremental / since-date runs so you only pull what's new.

Supported sites - all 7 Expedia Group brands in one actor
This actor covers every Expedia Group hotel brand from one input. They share Expedia's backend, so the same property resolves across brands and the output schema is identical no matter which brand URL you paste:
| Brand | Example hotel URL to paste |
|---|---|
| Expedia | https://www.expedia.com/Las-Vegas-Hotels-Bellagio.h140596.Hotel-Information |
| Hotels.com | https://www.hotels.com/ho119566/ |
| Travelocity | https://www.travelocity.com/...h140596.Hotel-Information |
| Orbitz | https://www.orbitz.com/...h140596.Hotel-Information |
| Wotif | https://www.wotif.com/...h140596.Hotel-Information |
| CheapTickets | https://www.cheaptickets.com/...h140596.Hotel-Information |
| ebookers | https://www.ebookers.com/...h140596.Hotel-Information |
Hotels.com /ho<id>/ links are resolved automatically to the global property. Mix brands freely in one run,
and use the Review sources filter to keep only certain brands' reviews (or leave it empty for the
cross-brand union).
What does Expedia Reviews Scraper do?
It extracts every public guest review for any Expedia Group hotel you point it at, and returns a clean, structured record per review - the overall /10 rating, the written review text, category sub-ratings (cleanliness, service, room comfort, hotel condition, amenities, eco-friendliness), stay dates, traveler type, language, review photos, and any hotel owner response. Alongside the reviews it returns a hotel aggregate: average rating, recency-weighted rating, total review count, the full 1-5 rating distribution, and per-language / per-traveler-type counts.
Why use Expedia Reviews Scraper?
- Reputation & sentiment analysis - track guest sentiment for your own or competitor hotels over time; every review carries structured sub-ratings and a sentiment-ready text block.
- Competitor benchmarking - pull rating distributions, category sub-scores and review volume per property to see exactly where a competitor wins or loses.
- Market research - analyze traveler types, languages, and what guests praise or complain about across a whole market or brand.
- AI / RAG pipelines - every review ships with a self-contained
markdownContentblock ready for vector-DB ingestion, so you can build a hotel-reviews chatbot or summarizer without any post-processing. - Hospitality tooling - power owner-response tracking, guest-experience dashboards, or review-response SLAs.
How to use Expedia Reviews Scraper
- Open a hotel's page on Expedia (or any of the six other brands above) and copy the URL - it contains a
.h<number>.segment, e.g..../Las-Vegas-Hotels-Bellagio.h140596.Hotel-Information. - Paste one or more such URLs (any Expedia Group site) or bare property IDs into Hotel URLs.
- (Optional) Set Max reviews per hotel, a date range, a rating range, a sort order, or Review sources.
- Click Start, then download the results as JSON, CSV, Excel, or pull them from the API.

Input
| Field | Description |
|---|---|
Hotel URLs or property IDs (hotelUrls) | Hotel-page URLs from any of the 7 brands (each with a .h<id>. segment), Hotels.com /ho<id>/ URLs, or bare property IDs (140596). One per line. |
Max reviews per hotel (maxReviewsPerHotel) | Cap per hotel (default 200). |
Sort reviews by (sortBy) | newest (default), oldest, highestRating, lowestRating. Reviews are fetched newest-first; highest/lowest reorder the retrieved set. |
From / To date (fromDate / toDate) | Keep only reviews in a YYYY-MM-DD range - ideal for incremental / since-date monitoring. |
Min / Max rating (minRating / maxRating) | Keep only reviews within a 1-5 rating range (input scale is 1-5). |
Review sources (reviewSources) | Which Expedia Group brands' reviews to return. Empty = all (cross-brand union); one = that brand only; several = that subset. |
Proxy (proxyConfiguration) | Datacenter is enough; use residential for very large runs. |
Example input
{"hotelUrls": ["https://www.expedia.com/Las-Vegas-Hotels-The-Venetian-Resort-Las-Vegas.h1443.Hotel-Information","140596","https://www.hotels.com/ho115902/","https://www.travelocity.com/Las-Vegas-Hotels-Caesars-Palace.h41245.Hotel-Information","https://www.orbitz.com/Las-Vegas-Hotels-The-Palazzo.h1769973.Hotel-Information"],"maxReviewsPerHotel": 50,"sortBy": "newest","fromDate": "2026-01-01","minRating": 1,"maxRating": 5,"reviewSources": []}
This example mixes an Expedia URL, a bare property ID, and Hotels.com, Travelocity and Orbitz URLs -
five different hotels across four brands - to show that any Expedia Group input is accepted. When you pass a bare
ID, hotelName comes back null (the name is read from a URL's descriptor slug, which an ID doesn't have).
Output
The actor writes to two datasets:
- Reviews (the default dataset) - one row per guest review, with the hotel context
(
hotelId/hotelName/hotelUrl/source) merged onto every row. - Hotels - one row per hotel with the aggregate: average rating, recency-weighted rating, total review count, rating distribution, category sub-ratings, coordinates and how many reviews were extracted.
The Output tab shows the Reviews dataset by default, plus an AI ingest view (the LLM-ready
markdownContent column) and the Hotels dataset. You can download any of them in JSON, HTML, CSV, or
Excel, or fetch them from the API (the reviews dataset also exposes ?view=aiIngest).
Hotels dataset - one row per hotel with the full aggregate:

AI ingest view - the self-contained, LLM-ready markdown for each review:

Here is a real review row from a run on the Bellagio (Las Vegas):
{"hotelId": 140596,"hotelName": "Bellagio","hotelUrl": "https://www.expedia.com/Las-Vegas-Hotels-Bellagio.h140596.Hotel-Information","source": "expedia","reviewId": "6a5163ef5acf8d54499c0073","submittedAt": "2026-07-10T21:29:04Z","overallRating": 10,"ratingLabel": "Exceptional","reviewText": "Great as usual!","subRatings": ["Cleanliness: 10", "Service: 10", "Hotel condition: 8", "Amenities: 10"],"verified": true,"reviewerName": "Alexey","reviewerLocation": null,"checkInDate": "2026-07-05T00:00:00Z","checkOutDate": "2026-07-10T00:00:00Z","travelCompanions": ["Family"],"travelerCategories": ["Families"],"language": "en","isMachineTranslated": false,"helpfulVotes": 0,"imagesCount": 0,"reviewPhotos": [],"ownerResponse": null,"roomTypeId": "314062401","isAnonymous": false,"brandType": "Expedia","markdownContent": "# Bellagio review (Expedia)\n\n**Rating:** 10/10 ★★★★★\n**Travelling as:** Family\n**Sub-ratings:** Cleanliness: 10; Service: 10; Hotel condition: 8; Amenities: 10\n\n## Review\nGreat as usual!"}
...and the matching hotel row from the Hotels dataset:
{"hotelId": 140596,"hotelName": "Bellagio","hotelUrl": "https://www.expedia.com/Las-Vegas-Hotels-Bellagio.h140596.Hotel-Information","source": "expedia","brandName": "MGM","structureType": "hotels","latitude": 36.112488,"longitude": -115.17673,"avgOverallRating": 8.83,"halfLifeRating": 9.02,"totalReviewCount": 14700,"ratingDistribution": { "1": 523, "2": 512, "3": 1228, "4": 2529, "5": 9908 },"hotelSubRatings": ["Cleanliness: 9.23", "Service & staff: 8.88", "Room comfort: 9.03","Hotel condition: 9.05", "Amenities: 8.88", "Eco-friendliness: 8.54"],"reviewsExtracted": 50,"extractedAt": "2026-07-11T05:31:08Z"}
Ratings are on the /10 scale to match Expedia's public display (the source stores /5; we present ×2).
Data fields
Reviews dataset - one row per review. Every row also carries the hotel context hotelId, hotelName,
hotelUrl and source so it stands alone.
| Field | Description |
|---|---|
overallRating, ratingLabel | Per-review score (/10) + label ("Exceptional", "Fair"…). |
reviewText, verified | Full written review + verified-stay flag. |
subRatings | Per-review category scores (cleanliness, service, amenities…). |
submittedAt, checkInDate, checkOutDate | Submission + stay dates. |
travelCompanions, travelerCategories, language, isMachineTranslated | Trip context + language. |
reviewPhotos, helpfulVotes, ownerResponse | Guest photos (URLs), helpful votes, hotel owner reply {text,date,responder}. |
brandType | The brand this individual review was posted on (shown as the Review source column) - may differ from the hotel-level source, which reflects the input URL/ID. |
markdownContent | Self-contained LLM-ready markdown block for RAG / vector-DB ingestion. |
Hotels dataset - one row per hotel.
| Field | Description |
|---|---|
hotelId, hotelName, hotelUrl, source | Property id (from the URL), name (from the URL slug), source URL, Expedia Group brand. |
brandName, structureType, latitude, longitude | Hotel chain, property type, coordinates. |
avgOverallRating, halfLifeRating | Average and recency-weighted rating (/10). |
totalReviewCount, ratingDistribution | Total reviews available and their source 1-5 star breakdown. |
hotelSubRatings, categoryCounts, languageCounts | Aggregate category scores (/10), traveler-type counts, per-language counts. |
reviewsExtracted, extractedAt | How many reviews this run pulled, and when. |
Run it via the API
Run the actor programmatically and get the reviews back in one call:
curl -X POST "https://api.apify.com/v2/acts/factden~expedia-hotel-reviews-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"hotelUrls":["https://www.expedia.com/Las-Vegas-Hotels-Bellagio.h140596.Hotel-Information"],"maxReviewsPerHotel":50}'
The response is the default (reviews) dataset - one row per review. Append ?view=aiIngest for the LLM-ready
markdown columns. The run's Hotels dataset (per-hotel aggregate) is available from the run's list of
datasets in the Console or via the API.
Integrations & export
Download as JSON, CSV, Excel, or XML, or push results straight into Google Sheets, Make, Zapier, n8n, a webhook, or your own app via the Apify API. AI agents can call this actor through the Apify MCP server, so assistants like Claude, ChatGPT and LangChain can pull Expedia reviews on demand. Schedule the actor to run hourly or daily for continuous, incremental review monitoring.
How much does it cost to scrape Expedia reviews?
This actor uses pay-per-event pricing with no start fee - you pay only for the reviews you actually get, and nothing if a run returns zero reviews:
| Plan | Price per 1,000 reviews |
|---|---|
| Free | $2.50 |
| Bronze | $2.30 |
| Silver | $2.15 |
| Gold+ | $2.00 |
Examples: 500 reviews ≈ $1.25 (Free) · 5,000 reviews ≈ $12.50 (Free) / $10.00 (Gold). Lower Max reviews per hotel to cap spend, and your first runs are covered by Apify's free tier. Unlike many alternatives, there is no per-run start fee - you are never charged just for launching a run.
Tips & advanced options
- Reviews are fetched newest-first, so a tight From date plus a low Max reviews per hotel is the cheapest way to monitor only what's new (schedule it daily for incremental review tracking).
- Feed many hotels in one run - the actor deduplicates repeated URLs automatically.
- For very large properties (thousands of reviews) the hotel's reviews may be split across a few dataset items to keep each item a manageable size; the Hotels view still summarizes each property in one row.
- Use Review sources to compare the same hotel's reviews across Expedia vs Hotels.com vs Travelocity.
Related FactDen scrapers
Building a review-intelligence pipeline? Pair this with other FactDen actors on the Apify Store:
- G2 Reviews Scraper - B2B software reviews, ratings & battlecards.
- Indeed Jobs Scraper - job listings & company data.
- Trip.com & Ctrip Reviews Scraper - hotel reviews across Trip.com / Ctrip.
- Hotels.com Reviews Scraper - hotel ratings, review text & sentiment.
FAQ, disclaimers & support
- Which sites does it support? All seven Expedia Group brands - Expedia, Hotels.com, Travelocity,
Orbitz, Wotif, CheapTickets and ebookers. Paste any brand's hotel URL directly (Hotels.com
/ho<id>/URLs are resolved automatically). Use Review sources to pick which brands' reviews to return. - Is scraping Expedia reviews legal? This actor collects only publicly available review content and does not touch private or account data. You are responsible for complying with Expedia's Terms of Service and applicable laws (including data-protection rules like GDPR) when using the data. See Apify's guide, is web scraping legal?, for background.
- Do I need an Expedia account or API key? No.
- Can I use it via the Apify API or an MCP server? Yes - run it through the Apify REST API (see the example above) or connect it to an AI agent via the Apify MCP server, so assistants like Claude or ChatGPT can fetch Expedia reviews on demand.
- How many reviews can I get per hotel? As many as the hotel has - set Max reviews per hotel to cap it;
totalReviewCounttells you how many exist in total. - How fresh is the data? Reviews are fetched live and newest-first, so you always get the latest ones first.
- Can I get reviews in other languages? Yes - reviews are returned in their original language with a
languagecode and anisMachineTranslatedflag; the hotel aggregate includes per-language counts. - A hotel returned fewer reviews than expected. Your date/rating/source filters, or Max reviews per
hotel, may be limiting the result;
totalReviewCountshows how many exist in total. - Can I schedule it or get only new reviews? Yes - schedule the actor and set a From date to pull only reviews since your last run.
- Found a bug or need a field we don't return? Open the Issues tab on this actor's Apify page.
Changelog
- 2026-07 - Output split into dedicated Reviews and Hotels datasets (previously a single dataset with views), matching the other FactDen review scrapers.
- Initial release - All 7 Expedia Group brands in one actor; per-review LLM-ready markdown; incremental since-date runs; JSON/CSV/Excel export and full REST API.
⭐ Find this useful? Bookmark the actor and leave a review on its Apify Store page - it helps other travelers and hotel teams find it, and tells us which features to build next.