Expedia Reviews Scraper, Fast Lightweight
Pricing
from $1.00 / 1,000 results
Expedia Reviews Scraper, Fast Lightweight
Scrape hotel reviews from Expedia by URL or hotel ID. Extract ratings, review text, traveler type, guest experience score, owner replies, and more. Filter by keyword or traveler type. Fast and reliable β no Expedia API needed.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Vladimir Efimenco
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
Expedia Reviews Scraper | Fast, Lightweight
This Expedia Reviews Scraper pulls hotel reviews directly from Expedia's internal GraphQL API, no browser involved. Returns full review text, ratings, traveler type, guest experience score, and owner replies for any hotel listed on Expedia.
β‘ Why this Expedia Reviews Scraper
- No browser session required. Most Expedia review scrapers launch a headless browser just to render the page before they can read anything. This one talks to the same GraphQL API that Expedia's own app uses, so there's nothing to render and nothing to wait on.
- Full review content, not a snapshot. Each review comes with the title, full text, numeric rating, rating label, traveler type, publish date, and whether the stay was verified.
- Hotel-level stats included. Guest rating, total number of ratings, and guest experience score are attached to every review from that listing.
- Sort and filter built in. Sort by most recent, most relevant, or rating (high to low or low to high), filter by traveler type, and search by keyword, either through Expedia's own filter or checked locally against the review text.
- Batch scraping. Feed in multiple hotel URLs or IDs and they run concurrently in the same job.
- Proxies included. No need to bring your own, residential and datacenter proxies are already wired in.
- Fast. Pure HTTP requests to Expedia's API, no page load, no rendering delay.
π― Who uses this Expedia Reviews Scraper
- Hospitality market researchers tracking guest sentiment, rating trends, or traveler type breakdowns (business, couples, families, solo) across hotels or regions.
- Competitor benchmarking teams comparing guest ratings and experience scores across properties in the same market.
- Reputation management agencies monitoring new reviews and owner replies for a portfolio of hotel clients.
- Sentiment analysis and NLP teams feeding review text into models, pre-filtered by keyword or rating.
- Developers building travel or hospitality dashboards who need structured Expedia review data without maintaining their own scraper.
π§Ύ What you get, per review
- Review content: title, text, rating (numeric and label), review date, locale
- Traveler info: reviewer name, traveler type, verified stay flag
- Owner reply: reply title and text, if the property responded
- What guests liked and disliked, where Expedia surfaces it separately
- Hotel-wide stats: guest rating, total ratings count, guest experience score
- Keyword match: whether the search query matched this review
π How keyword search works
The search field works the same way as Expedia's own review search box.
searchIsLocalFilterunchecked (default): the keyword is sent to Expedia as a server-side filter. Only matching reviews come back, and each one is markedis_keyword_match: true.searchIsLocalFilterchecked: the keyword is not sent to Expedia. Every review is fetched regardless, and each one is checked locally against the title and text, withis_keyword_matchshowing the result.
Use the checked option when you want the complete review set but still need to flag which reviews mention your keyword.
π§ Input options
| Field | Description |
|---|---|
listingUrls | One or more Expedia hotel URLs, or plain numeric hotel IDs |
maxResults | Max reviews to collect per listing. Leave empty to collect all available |
sortBy | Sort order: most recent, most relevant, rating high to low, rating low to high |
travelerType | Filter by traveler type: business, couples, families, families with young children, groups, solo, travelers with pets |
search | Keyword to search for in reviews |
searchIsLocalFilter | If checked, search tags reviews locally instead of filtering them via Expedia |
π Data Fields
π Review Details
| Field | Description |
|---|---|
review_id | Unique ID of the review |
rating_number / rating_value / rating_text | Reviewer's overall rating, as a number, value, and text label |
review_title / review_text | Review title and body text |
review_date | Date the review was published |
review_locale | Language the review was written in |
what_liked / what_disliked | What the guest liked and disliked, if Expedia surfaces it |
review_images | Image URLs with caption text, if any |
π€ Reviewer
| Field | Description |
|---|---|
reviewer_name | Name of the reviewer |
review_is_verified | Whether the stay is marked verified |
travel_type | Business, couples, family, friends, solo, etc. |
π’ Owner & Listing
| Field | Description |
|---|---|
review_reply_title / review_reply_text | Property owner's reply, if any |
listing_name / listing_type | Name and type of the hotel |
reviews_overall_stats | Guest rating, total ratings, guest experience score |
β Matching
| Field | Description |
|---|---|
query_keyword | The search keyword provided in actor input, if any |
is_keyword_match | True if the query matched this review, either checked locally or because Expedia's own filter already applied it |
π Example output
[{"listing_name": "ibis Praha Mala Strana","listing_type": "Hotel","reviews_overall_stats": {"guest_rating": 8.6,"total_ratings": 789,"guest_experience_score": 8.4},"review_id": "67ec19ad15d5c874a2ad47b5","rating_number": 10,"rating_value": "10/10","rating_text": "Excellent","review_locale": null,"review_title": "","review_text": "Good option for cheap accommodation if you are looking to avoid shared rooms. Ibis is always one of my go to's when i am specifically looking for a basic but comfortable and cheap private room.","what_liked": "Liked: cleanliness, staff & service, property conditions & facilities","what_disliked": null,"review_date": "Apr 1, 2025","review_reply_title": null,"review_reply_text": null,"review_images": [],"reviewer_name": "Roy","review_is_verified": true,"travel_type": "Traveled with partner","query_keyword": null,"is_keyword_match": false},{"listing_name": "ibis Praha Mala Strana","listing_type": "Hotel","reviews_overall_stats": {"guest_rating": 8.6,"total_ratings": 789,"guest_experience_score": 8.4},"review_id": "68a7af5a4b7654488031b2a2","rating_number": 8,"rating_value": "8/10","rating_text": "Good","review_locale": "de_DE","review_title": "","review_text": "Itβs in the centrum all shops available supermarket etc.","what_liked": "Liked: cleanliness, staff & service","what_disliked": null,"review_date": "Aug 21, 2025","review_reply_title": "Response from ibis team on Aug 27, 2025","review_reply_text": "Dear Guest,\n\nThank you for your feedback. We appreciate your insights and strive to enhance our guests' experiences.\n\nWarm regards,\nibis Praha Mala Strana","review_images": [],"reviewer_name": "Rosemary","review_is_verified": true,"travel_type": "Traveled with family and young children","query_keyword": null,"is_keyword_match": false},{"listing_name": "ibis Praha Mala Strana","listing_type": "Hotel","reviews_overall_stats": {"guest_rating": 8.6,"total_ratings": 789,"guest_experience_score": 8.4},"review_id": "68ae39df794d9610b2c357f0","rating_number": 10,"rating_value": "10/10","rating_text": "Excellent","review_locale": null,"review_title": "","review_text": "Just off a busy major street. Trams, buses, and shopping center (including an Albert supermarket) just a block away, as well as fast food options.\nThe room was clean, modern, and perfect for a short stay. Shower was excellent, bed was extra firm. A/C and a window that opens. Would definitely stay there again.","what_liked": "Liked: cleanliness, staff & service, property conditions & facilities","what_disliked": null,"review_date": "Aug 26, 2025","review_reply_title": "Response from ibis team on Aug 27, 2025","review_reply_text": "Dear Guest,\n\nThank you for your feedback. We appreciate your insights and strive to enhance our guests' experiences.\n\nWarm regards,\nibis Praha Mala Strana","review_images": [{"url": "https://a.travel-assets.com/ugc/hotel-reviews/54ffeeeb-15db-4f8e-a99a-45b3e4e5fa36-1756249104053.jpg","image_text": "Unless you need a fridge or microwave, this room fill the needs."}],"reviewer_name": "Daniel","review_is_verified": true,"travel_type": "Solo traveler","query_keyword": null,"is_keyword_match": false}]
π Running the actor
Via Apify Console
Open the actor page, fill in the input form, and click Start.
Via Apify API: Python
import requestsAPIFY_TOKEN = "your_apify_token"ACTOR_ID = "mof1re~expedia-reviews-scraper"run_input = {"listingUrls": [{"url": "https://www.expedia.com/Prague-Hotels-Hotel-Krystal.h10966026.Hotel-Information"}],"maxResults": 200,"sortBy": "most_recent","travelerType": "","search": "","searchIsLocalFilter": False}response = requests.post(f"https://api.apify.com/v2/acts/{ACTOR_ID}/run-sync-get-dataset-items",params={"token": APIFY_TOKEN},json=run_input,)reviews = response.json()print(f"Fetched {len(reviews)} reviews")
Via Apify API: Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'your_apify_token' });const input = {listingUrls: [{ url: 'https://www.expedia.com/Prague-Hotels-Hotel-Krystal.h10966026.Hotel-Information' }],maxResults: 200,sortBy: 'most_recent',travelerType: '',search: '',searchIsLocalFilter: false,};const run = await client.actor('mof1re/expedia-reviews-scraper').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Fetched ${items.length} reviews`);
Example input JSON
{"listingUrls": [{ "url": "https://www.expedia.com/Prague-Hotels-Hotel-Krystal.h10966026.Hotel-Information" },{ "url": "190551" }],"maxResults": 200,"sortBy": "rating_high","travelerType": "couples","search": "clean","searchIsLocalFilter": false}
β FAQ
How is this different from other Expedia review scrapers? Most run a full browser to load the page before pulling reviews. This one calls Expedia's GraphQL API directly and supports sorting, traveler type filtering, and dual-mode keyword search together, in one input.
Does this scraper need an account or API key? No. It extracts publicly available review data.
Can I pass a hotel ID instead of a URL? Yes. Drop the numeric Expedia hotel ID straight into listingUrls and it works the same as a full URL.
Can I filter reviews by traveler type? Yes. Set travelerType to business, couples, families, families with young children, groups, solo, or travelers with pets.
Do I need my own proxies? No. Proxies are built into the actor.
Is this legal? Can I scrape publicly available reviews? This tool extracts publicly available review data. You're responsible for complying with the target site's terms of service and applicable data protection laws for your use case.
π³ Pricing
Pay-per-result. You're charged for reviews actually delivered, not for pages fetched or requests made.
β οΈ Notes
- Free-tier accounts are capped at a small sample size per run, and to a single listing per run. Upgrade to a paid Apify plan for full volume and batch scraping.
- Data reflects what's publicly listed on expedia.com at the time of the run; the source updates continuously.
π See also
Need reviews from another platform? Check out: