Expedia Review Scraper⭐️ avatar

Expedia Review Scraper⭐️

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Expedia Review Scraper⭐️

Expedia Review Scraper⭐️

Expedia review scraper for guest reviews, ratings, sentiment, and author details. Search by hotel URL, hotel name, or destination - no API needed. Get review text, dates, liked/disliked themes, and photos other Expedia scrapers miss, for any hotel worldwide.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

MrDoe

MrDoe

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Expedia Review Scraper

Extract guest reviews from Expedia.com hotel pages — review text, ratings, author, stay dates, and sentiment — for any hotel, in bulk. Pair it with the Expedia Hotel Scraper for rooms and pricing.

What does Expedia Review Scraper do?

Paste one or more Expedia hotel URLs (or an Expedia share link) and get back individual review records — one row per review — for your chosen dates. You can also pull reviews for every hotel matching a destination in one run, or just type a hotel's name if you don't have its URL — the Actor finds that exact property and pulls its reviews the same way. If the name doesn't match anything closely enough, nothing is scraped and the run explains why instead of pulling reviews for the wrong hotel; a close-but-imperfect match still gets used, flagged on every output row.

Key features

FeatureDescription
One row per reviewReview ID, title, text, rating, date, author
URL modeAccepts specific hotel URLs, so you only pay for the hotels you care about
Deeplink supportExpedia share links (expe.onelink.me and similar) are auto-resolved to the canonical hotel URL
Destination modePull reviews across every hotel matching a city, capped by maxItems
Find by hotel nameType a hotel's name instead of hunting for its URL; low-confidence matches are flagged, not silently guessed
SentimentLiked/disliked theme lists extracted from each review
Per-hotel capmaxReviewsPerHotel controls cost on high-volume properties

What data can you extract?

  • Review ID, title, text
  • Rating value (0–10) and label
  • Author name
  • Review and stay date
  • Sentiment: liked and disliked lists
  • Guest photo URLs
  • Linked hotel ID, URL, overall rating, and category ratings (Cleanliness, Service, etc.)

How to use Expedia Review Scraper

Reviews for a specific hotel

{
"mode": "url",
"startUrls": [{ "url": "https://www.expedia.com/Example-City-Hotels-Sample-Hotel.h11111.Hotel-Information" }],
"checkIn": "2026-09-10",
"checkOut": "2026-09-13",
"maxReviewsPerHotel": 100,
"maxItems": 100
}

Reviews for several hotels

{
"mode": "url",
"startUrls": [
{ "url": "https://www.expedia.com/Example-City-Hotels-Sample-Hotel.h11111.Hotel-Information" },
{ "url": "https://www.expedia.com/Example-City-Hotels-Another-Sample.h22222.Hotel-Information" }
],
"maxReviewsPerHotel": 50
}

Find a hotel by name (no URL needed)

{
"mode": "hotelName",
"hotelName": "Hilton Garden Inn Dubai Mall Of The Emirates",
"destination": "Dubai",
"maxReviewsPerHotel": 50,
"maxItems": 50
}

destination is optional here — add it when the hotel name alone could match more than one property (e.g. a hotel chain with several locations). If nothing matches closely enough, the run finishes with zero records and a message explaining why, rather than pulling reviews for an unrelated hotel; a close-but-imperfect match is still used, with the assumption noted in extra.hotelNameMatch on every returned row.

Share links generated by the Expedia mobile app's "Share" button, as well as marketing and social deeplinks, are accepted as-is. The Actor follows the redirect, identifies the hotel, and extracts its reviews like any other URL.

{
"mode": "url",
"startUrls": [{ "url": "https://expe.onelink.me/hnLd/9o2lnq8o" }]
}

Supported deeplink hosts: expe.onelink.me (primary), expe.app.link, trip.expedia.com. Only Expedia hotel deeplinks are handled.

Reviews across a destination

{
"mode": "search",
"destination": "New York",
"maxReviewsPerHotel": 50,
"maxItems": 500
}

Input parameters

ParameterTypeDefaultDescription
modestringurlurl, search, or hotelName
startUrlsobject[]Example hotelExpedia hotel URLs or deeplinks (URL mode)
destinationstringParisCity name (search mode); optional narrowing hint (hotelName mode)
hotelNamestringHotel name to look up (hotelName mode)
destinationIdstringOptional numeric region ID. Skips auto-resolution
checkInstringtomorrowYYYY-MM-DD or a relative offset like 1 day
checkOutstringday after tomorrowYYYY-MM-DD or a relative offset like 2 days
adultsinteger2Adult guests, 1 to 14
childrenstring[][]Ages of children, 0 to 17 (one entry per child)
roomsinteger1Rooms to book, 1 to 8
currencystringUSD3-letter ISO code
localestringen_USLanguage and region locale
maxItemsinteger5Hard cap on total review records
maxReviewsPerHotelinteger25Cap reviews per hotel
proxyConfigurationobjectApify ResidentialProxy configuration

Output example

{
"mode": "reviews",
"placeName": "Example Hotel Paris",
"hotelId": "11111",
"hotelUrl": "https://www.expedia.com/Example-City-Hotels-Sample-Hotel.h11111.Hotel-Information",
"hotelOverallRating": 9.2,
"hotelRatingLabel": "Wonderful",
"hotelTotalReviews": 1843,
"hotelCategoryRatings": {
"Cleanliness": 9.4,
"Service": 9.3
},
"locale": "en_US",
"provider": "expedia",
"reviewId": "abc123def456",
"reviewTitle": "Memorable stay",
"reviewText": "Beautiful hotel with great service and a convenient location.",
"reviewRating": 10,
"reviewRatingLabel": "Excellent",
"reviewDate": "Oct 14, 2025",
"stayDuration": "Stayed 3 nights in Oct 2025",
"authorName": "Sarah",
"sentiment": {
"liked": ["cleanliness", "staff and service", "location"],
"disliked": []
},
"photos": [],
"scrapedAt": "2026-04-18T07:30:00.000Z",
"extra": { "hotelNameMatch": null }
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel from the Apify Console or API.

extra.hotelNameMatch is only set (non-null) when the run used mode: "hotelName". It records what you typed, which hotel name it was matched to, a confidence score, and — when the match wasn't exact — a plain-language note explaining the assumption:

"hotelNameMatch": {
"query": "Hilton Garden Inn Dubai Mal",
"matchedName": "Hilton Garden Inn Dubai Mall Of The Emirates",
"score": 0.9,
"confident": false,
"note": "Hotel name \"Hilton Garden Inn Dubai Mal\" didn't match any hotel exactly (best match 90% confidence). Assumed you meant \"Hilton Garden Inn Dubai Mall Of The Emirates\" and scraped that hotel. If this is wrong, use a more exact name, add a destination to narrow the search, or use a direct hotel URL instead."
}

Tips

  • Use maxItems for total cost control and maxReviewsPerHotel to avoid one high-volume property eating your whole run.
  • Pasting a specific hotel URL is the fastest, cheapest way to get exactly the reviews you want — destination mode is for bulk collection across a city.
  • In hotelName mode, add destination whenever the hotel name alone could match a chain's multiple locations (e.g. "Hilton Downtown" exists in many cities) - it narrows the lookup instead of relying on the name alone.

FAQ & support

Is this legal? This Actor extracts publicly available information from Expedia.com pages that anyone can view in a browser. You are responsible for using the collected data in compliance with applicable laws and Expedia's terms of service.

I typed a hotel name and got zero results — why? The name didn't match any hotel closely enough for the Actor to be confident it's the right one, so it scraped nothing rather than guessing. Check the run log for the exact warning, try a more complete/exact name, add destination to narrow the search, or switch to a direct hotel URL if you have one.

Found a bug or have a feature request? Open an issue on the Actor's Issues tab, or reach out for a custom data extraction solution tailored to your needs.