# Expedia & Hotels.com Scraper: Hotel Prices and Reviews

> Expedia and Hotels.com scraper: get hotels with prices for your dates, ratings, addresses, coordinates and guest reviews from a place or IDs. No login.

URL: https://cliqtomedia.com/actors/expedia-hotels-scraper/

Category: Real estate, travel & cars · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto

Enter a place and dates, or exact hotels. You get one row per hotel with the price the site shows for those dates. It can also save guest reviews and watch price changes.

## How to use it: 3 steps

1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `search` in What to do. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

This Actor reads public hotel lists and hotel pages on Expedia and Hotels.com. It returns hotels with prices for your dates, ratings, addresses, coordinates and guest reviews.

- `search` finds hotels in a place.
- `hotels` reads exact hotels by ID or link.
- `reviews` collects guest reviews for exact hotels.
- `monitor` saves only hotels that are new or whose price changed since the last run.

### Good for

- Compare hotel prices in a city for chosen dates.
- Compare one hotel's price across many dates.
- Export guest reviews of your own hotel or of competitors.
- Get a signal when a hotel price changes.

## Price

Prices will be shown after release.

## Questions

### Do I need an account or a login?

No. The tool reads public pages only. You need an Apify account.

### Are Expedia and Hotels.com prices the same?

Not always. Run both and compare price by hotelId.

### Which prices do I get?

The prices a visitor who is not signed in sees. Member and app prices are not included.

### Can I get more than 500 hotels in a city?

Not in one place search. Split the city into areas in `destinations`, or use filters such as `stars`.

### What happens if a place or hotel does not exist?

A hotel ID that does not exist gives a free `not_found` row and status `NOT_FOUND`. For a place name, the site usually picks its nearest match, so check `matchedPlace`.

### How fresh are the prices?

Each row has `fetchedAt`. The price is what the site showed at that time. The Actor does not promise that the price stays the same or that you can book it.

## Data fields

- `type` (string): hotel, review, market_summary or not_found. Use this column to tell rows apart.
- `hotelId` (string): The hotel number on Expedia and Hotels.com.
- `name` (string): Hotel name as published.
- `stars` (number): Star rating; null when the site shows none.
- `rating` (number): Guest rating out of 10 on a hotel row, or the guest's score on a review row; null when none is shown.
- `ratingLabel` (string): The word for the rating, such as Wonderful.
- `reviewsCount` (integer): Number of guest reviews; null when not shown, 0 only when the site shows 0.
- `price` (number): Total for the stay as the site displays it; null when no total is shown. No conversion.
- `pricePerNight` (number): Price per night when the site displays it.
- `strikeoutPrice` (number): Old crossed-out price when the site shows one.
- `priceText` (string): The price lines exactly as displayed.
- `priceIncludesTaxes` (boolean): true when a price line mentions taxes; null when the site does not say.
- `currency` (string): Currency actually shown by the site for this price.
- `address` (string): Street address.
- `city` (string): City.
- `region` (string): State or province.
- `postalCode` (string): Postal code.
- `countryCode` (string): Country code.
- `lat` (number): Latitude; null when the site has no coordinates.
- `lng` (number): Longitude; null when the site has no coordinates.
- `amenities` (array/string): Main amenities as listed. Empty when none are listed.
- `url` (string): Public hotel page, with the dates when known.
- `image` (string): Main image link.
- `neighborhood` (string): Area shown on the search card.
- `badges` (array/string): Labels shown on the search card, such as VIP Access.
- `change` (string): Monitor mode: new, priceUp, priceDown, priceAppeared or priceGone.
- `previousPrice` (number): Monitor mode: the price from the previous run.
- `site` (string): expedia or hotels.
- `host` (string): Regional site that was read.
- `destination` (string): Place as you typed it.
- `matchedPlace` (string): Place the site really searched for this row. Empty when the row came from a hotel ID or the site did not report a place.
- `regionId` (string): Region number you gave, or the number the site reports for the searched place.
- `checkIn` (string): Check-in date of this price.
- `checkOut` (string): Check-out date of this price.
- `adults` (integer): Adults per room used for the price.
- `rooms` (integer): Rooms used for the price.
- `roomOffers` (array/string): Paid option: rooms with their rate plans.
- `policies` (array/string): Paid option: hotel policies.
- `images` (array/string): Paid option: image links.
- `ratingBreakdown` (object/string): Paid option: counts per score and scores per category.

## Input settings

- `mode` (string): Search finds hotels for places. Hotels reads exact hotels by ID or link. Reviews collects guest reviews for exact hotels. Monitor watches the top of the list and saves only hotels new to it and price changes since the previous run.
- `site` (string): Which site to read. Both show the same hotels with their own prices.
- `destination` (string): City, area or landmark, as you would type it on the site. Example: Lisbon. If the site does not know the words, it picks its nearest match. The matchedPlace field shows what it searched.
- `destinations` (array): Several places in one run, up to 50. Each place is read for each set of dates.
- `regionIds` (array): Exact region numbers from the regionId part of a search link, up to 50. Use them when a place name is ambiguous.
- `hotelIds` (array): Exact hotel numbers, up to 1000. Example: 7369640. On Expedia the number is in the link as h7369640. On Hotels.com it is the expediaPropertyId part of the link.
- `startUrls` (array): Hotel pages or Hotel-Search pages of the chosen website, up to 1000. The Actor reads the hotel, place, dates and adults from each link and does not open the link itself.
- `checkIn` (string): A date like 2026-12-20, or a date relative to today like 30 days. Empty means 30 days from today.
- `checkOut` (string): Must be after check-in, 30 nights at most. Empty means one night.
- `stays` (array): Extra date pairs to compare prices across dates, up to 30.
- `adults` (integer): Adults in each room.
- `childrenAges` (array): One age from 0 to 17 per child, up to 6 children. Prices depend on the ages.
- `rooms` (integer): Rooms for the stay. All rooms have the same guests.
- `currency` (string): The Actor reads the regional site that shows this currency, so prices are the ones that site displays. Nothing is converted.
- `maxItems` (integer): The most hotels to save for each place and set of dates. 0 means all the site shows, about 500 per place. With hotel IDs or links it counts all of them together for each set of dates, and IDs past the limit are not read or charged. Set it to at least the number of IDs. In Monitor mode this is how many hotels from the top of the list to watch.
- `maxReviews` (integer): The most guest reviews to save for each hotel, up to 2000. Empty means none in search and hotels modes, and 100 in reviews mode.
- `sortBy` (string): The order the site lists hotels in, which decides who makes it into a limited result.
- `stars` (array): Keep only hotels with these star ratings.
- `amenities` (array): Keep only hotels that have all of these.
- `propertyTypes` (array): Keep only these kinds of property.
- `hotelName` (string): The site's own property name search within the place.
- `freeCancellation` (boolean): Keep only stays that the site lists with free cancellation.
- `breakfastIncluded` (boolean): Keep only stays that the site lists with breakfast included.
- `payLater` (boolean): Keep only stays that can be paid for later.
- `minPrice` (number): Applied by the Actor to at most 1000 scanned hotels per place. Hotels without a price are dropped.

## Step by step on Apify

1. Open the Input tab. Keep Expedia in Website (box 1), or choose Hotels.com.
2. Keep Lisbon in Destination (box 2), or type your place.
3. Open How much to collect (box 3) if you want to change the limit or the dates.
4. Click Start.
5. Open the Output tab and check the Hotels view (box 5).

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Compare hotel prices in a city | `destination`, `checkIn`, `checkOut` | Hotel row | `name`, `price`, `rating`, `url` | CSV export, spreadsheet |
| Compare prices across dates | `hotelIds`, `stays` | One hotel row per date pair | `hotelId`, `checkIn`, `checkOut`, `price` | API, your own database |
| Read guest reviews | `mode` = `reviews`, `hotelIds` | Review row | `rating`, `text`, `date` | CSV export, text analysis |
| Watch price changes | `mode` = `monitor`, `destination` | Changed hotel row | `change`, `previousPrice`, `price` | Schedule, Slack or Notion summary |
| See where a hotel stands in its market | `marketSummary`, `subjectHotel` | Market summary row | `medianPricePerNight`, `subjectPricePercentile` | Report, spreadsheet |

## Tips

- The sites show about 500 hotels per place and dates. Split a city into areas for more.
- Use monitor mode to save only new hotels or hotels with a changed price.
- Run both sites and compare price by hotelId. Do not assume they match.

## Limits



- The sites show about 500 hotels per place and set of dates. Use smaller areas or several places to get more.
- `maxReviews` is at most 2000 per hotel. `stays` is at most 30 pairs. `destinations` and `regionIds` are at most 50 each.
- Prices are what the site shows to a visitor who is not signed in, in the United States. Member and app prices are not included. Taxes are as displayed.
- The Actor does not convert currency. It supports USD, GBP, EUR, CAD and AUD.
- It does not return hotel descriptions, spoken languages, amenities by category, the guest's name on a review, contact details, flights, cars or Vrbo listings. It does not book.
- Sites can change. If a hotel has no price for your dates, `price` is `null` and the hotel is still saved.

## Sample result

```json
{
  "type": "hotel",
  "hotelId": "7369640",
  "name": "Meliá Lisboa Aeroporto",
  "stars": 4,
  "rating": 9.2,
  "ratingLabel": "Wonderful",
  "reviewsCount": 3098,
  "price": 191,
  "pricePerNight": 171,
  "strikeoutPrice": null,
  "priceText": "$191 · $171 nightly · $191 total · Total with taxes and fees",
  "priceIncludesTaxes": true,
  "currency": "USD",
  "address": "Aeroporto Internacional de Lisboa, Rua C, Lisbon, 1700-008",
  "city": "Lisbon",
  "region": null,
  "postalCode": "1700-008",
  "countryCode": "PRT",
  "lat": 38.770382,
  "lng": -9.125218,
  "amenities": ["Pool", "Spa", "Free WiFi"],
  "url": "https://www.expedia.com/Lisbon-District-Hotels-Melia-Lisboa-Aeroporto.h7369640.Hotel-Information?chkin=2026-12-05&chkout=2026-12-06",
  "image": "https://images.trvl-media.com/lodging/8000000/7370000/7369700/7369640/b05af088.jpg?impolicy=resizecrop&ra=fit&rw=455&rh=455",
  "neighborhood": "Olivais",
  "badges": [],
  "site": "expedia",
  "host": "www.expedia.com",
  "destination": "Lisbon",
  "matchedPlace": "Lisbon, Lisbon District, Portugal",
  "regionId": "2080",
  "checkIn": "2026-12-05",
  "checkOut": "2026-12-06",
  "adults": 2,
  "rooms": 1,
  "source": "Expedia",
  "fetchedAt": "2026-11-05T05:25:37.426Z"
}
```

## Similar tools

- [Google Flights Scraper - Prices & Times, No Login](https://cliqtomedia.com/actors/google-flights-scraper/)
- [OpenStreetMap POI Extractor: Cafes, Shops, Hotels by City](https://cliqtomedia.com/actors/openstreetmap-poi-extractor/)
- [99acres & MagicBricks India Property Scraper - No Login](https://cliqtomedia.com/actors/india-property-listings/)
- [Airbnb Scraper: Listings, Prices, Calendar - No Login](https://cliqtomedia.com/actors/airbnb-scraper/)
- [Booking.com Scraper: Hotels, Prices, Reviews, No Login](https://cliqtomedia.com/actors/booking-scraper/)
- [Events Scraper: Eventbrite, Meetup & Luma — No Login](https://cliqtomedia.com/actors/events-aggregator/)
