
Waze Traffic Scraper
scrape.ly/store/cornerledger/waze-scraperTravelAutomotive
1 monthly user

Scrape public hotel reviews from Expedia and Hotels.com: rating, text, date, stay length, liked and disliked topics, owner responses and photos, plus hotel rating, category scores and address. No login.
Pull public guest reviews from any Expedia or Hotels.com hotel page in minutes. Each row carries the rating, review text, date, stay length, liked and disliked topics, the owner's response and guest photos, plus the hotel's overall score, category ratings and address. No login, no cookies, no setup.
41308) into Hotel URLs or property IDs.| Field | Description |
|---|---|
startUrls | Expedia or Hotels.com hotel URLs, or numeric property IDs |
maxReviewsPerHotel | Reviews to save per hotel (default 20) |
sortBy | newest, relevant, highest, lowest |
reviewsFrom / reviewsTo | Date window (YYYY-MM-DD; "from" also accepts e.g. 30 days) |
minRating / maxRating | Rating bounds on the 1–10 scale |
searchKeyword | Only reviews that mention this word |
language | Review language code, e.g. en, de, fr |
onlyWithText | Skip rating-only reviews |
includeOwnerResponses / includeReviewPhotos | Optional parts of each row |
{
"startUrls": [
"https://www.expedia.com/Las-Vegas-Hotels-Excalibur-Hotel-Casino.h41308.Hotel-Information",
"https://www.hotels.com/ho108900/"
],
"maxReviewsPerHotel": 100,
"sortBy": "newest",
"reviewsFrom": "2026-01-01",
"maxRating": 4
}
| Field | Description |
|---|---|
reviewId | Review ID |
platform | expedia or hotels.com (from your input URL) |
hotelId, hotelName, hotelUrl | The hotel |
rating, ratingLabel | Guest rating (1–10) and its label |
title, text | Review title and text |
reviewDate | Date posted (YYYY-MM-DD) |
authorName, language | Reviewer first name and review locale |
stayDuration, nightsStayed, stayMonth | Stay length and month |
liked, disliked | Topics the guest liked or disliked |
verified, helpfulVotes, photos | Verified-stay flag, helpful votes, guest photo URLs |
ownerResponse, ownerResponseAuthor, ownerResponseDate | Management response |
hotelRating, hotelReviewCount, hotelStarRating | Hotel-level scores |
hotelCategoryRatings, hotelRatingDistribution | Category scores and rating histogram |
hotelAddress, hotelCity, hotelCountryCode, hotelLatitude, hotelLongitude | Location |
{
"reviewId": "6ad135e8252f4d39204aaf2a",
"platform": "expedia",
"hotelId": "41308",
"hotelName": "Excalibur Hotel & Casino",
"rating": 10,
"ratingLabel": "Excellent",
"title": null,
"text": "When we got there we had trouble with the keys a very nice lady housekeeper helped us and made sure our room was a place like home",
"reviewDate": "2026-10-15",
"authorName": "Jane",
"language": "en_US",
"stayDuration": "Stayed 3 nights in Oct 2026",
"nightsStayed": 3,
"stayMonth": "2026-10",
"liked": ["Cleanliness", "Staff & service", "Amenities", "Property conditions & facilities"],
"disliked": [],
"verified": true,
"helpfulVotes": 0,
"photos": [],
"ownerResponse": null,
"hotelRating": 8,
"hotelRatingLabel": "Very Good",
"hotelReviewCount": 46406,
"hotelStarRating": 3.5,
"hotelCategoryRatings": {"Cleanliness": 8.2, "Amenities": 7.6, "Staff & service": 8.2, "Property conditions & facilities": 7.8},
"hotelRatingDistribution": [{"rating": 10, "label": "Excellent", "count": 22032, "percent": 47}],
"hotelAddress": "3850 Las Vegas Blvd S, Las Vegas, NV, 89109",
"hotelLatitude": 36.099213,
"hotelLongitude": -115.1731
}
Hotels that could not be scraped are never saved as error rows. They are listed in the run's OUTPUT record (key-value store) as failedInputs (input and reason), and the run's status message names them. If Expedia answers a hotel without its reviews (a temporary block), the actor asks again on new browser sessions before giving up.
You pay $2.00 per 1,000 reviews saved, plus the platform usage of the run (compute and the hosted browser session, typically about one cent per run). Example: 1,000 reviews from one hotel cost about $2.00 in review fees plus roughly $0.02 of usage. Rows that fail are never charged.
Is it legal? The actor reads only public reviews that anyone can see on Expedia and Hotels.com without logging in. Check the site's terms and your local rules (including privacy law for reviewer names) before you use the data.
Do I need an account, cookies or a proxy? No. The actor manages the connection itself.
How many reviews can I get? Up to every public review of a hotel; large hotels have tens of thousands. Set the per-hotel limit to what you need.
Why is a field empty? Many guests leave a rating without text or title, and only some reviews have photos or owner responses. Those fields are null or empty lists.
Are Expedia and Hotels.com reviews different? Both brands show the same pool of verified Expedia Group reviews for a property, so the same hotel returns the same reviews from either link.
Can I schedule it or use the API? Yes. Schedule daily runs with a "Reviews from" date such as 2 days, or start runs through the API and fetch the dataset.
travelerTypes is usually empty, and the site ignores traveler-type filtering.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayRequiredHotel URLs or property IDs
Expedia hotel pages (any Expedia country site, e.g. https://www.expedia.com/Las-Vegas-Hotels-Excalibur-Hotel-Casino.h41308.Hotel-Information), Hotels.com pages (new h123.Hotel-Information links and legacy ho123456 links), or bare numeric property IDs such as 41308.
maxReviewsPerHotelintegerOptionaldefault 20Maximum reviews per hotel
Stop after this many saved reviews for each hotel. The cap applies after the filters below.
Sort order, a date window, rating bounds, a keyword and the review language.
sortByenumOptionaldefault "newest"Sort reviews by
Order in which reviews are read. With Newest first, a 'Reviews from' date stops the run at the first older review.
reviewsFromstringOptionalReviews from
Keep reviews posted on or after this date. Use YYYY-MM-DD or a relative value such as 30 days.
reviewsTostringOptionalReviews to
Keep reviews posted on or before this date (YYYY-MM-DD).
minRatingintegerOptionalMinimum rating
Keep reviews rated at least this much on the 1 to 10 scale.
maxRatingintegerOptionalMaximum rating
Keep reviews rated at most this much on the 1 to 10 scale (e.g. 4 for negative reviews only).
searchKeywordstringOptionalKeyword
Only reviews that mention this word or phrase (the site's own review search), e.g. breakfast or parking.
languagestringOptionalReview language
Keep only reviews written in this language, as a code such as en, de, fr or ja. Leave empty for all languages.
onlyWithTextbooleanOptionaldefault falseOnly reviews with text
Skip rating-only reviews that have no written text.
Optional parts of each review row.
includeOwnerResponsesbooleanOptionaldefault trueInclude owner responses
Add the property's management response (text, author and date) to each review.
includeReviewPhotosbooleanOptionaldefault trueInclude review photos
Add the URLs of photos guests attached to their review.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| reviewId | string | null | Review ID |
| platform | string | null | expedia or hotels.com |
| hotelId | string | null | Expedia Group property ID |
| hotelName | string | null | Hotel name |
| hotelUrl | string | null | Hotel URL from the input |
| rating | number | null | Guest rating on the 1 to 10 scale |
| title | string | null | Review title |
| text | string | null | Review text |
| reviewDate | string | null | Date the review was posted (YYYY-MM-DD) |
| authorName | string | null | Reviewer first name |
| stayDuration | string | null | Stay length and month as shown on the site |
| language | string | null | Review locale, e.g. en_US |
| liked | array | null | Topics the guest liked |
| disliked | array | null | Topics the guest disliked |
| ownerResponse | string | null | Management response text |
| hotelRating | number | null | Hotel average guest rating |
| hotelReviewCount | number | null | Total reviews of the hotel |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Review | One saved guest review | $0.002 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('roamandroof/expedia-reviews-scraper').call({
"startUrls": [
"https://www.expedia.com/Las-Vegas-Hotels-Excalibur-Hotel-Casino.h41308.Hotel-Information"
],
"maxReviewsPerHotel": 20
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run roamandroof/expedia-reviews-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=roamandroof/expedia-reviews-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Hotel reviews with photos and owner responses.
Highest-rated written reviews first.
Latest guest reviews from Expedia.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.