Expedia Hotels Scraper avatar

Expedia Hotels Scraper

Pricing

from $4.00 / 1,000 hotel scrapeds

Go to Apify Store
Expedia Hotels Scraper

Expedia Hotels Scraper

Scrape Expedia.com hotel search results by destination and dates or a Hotel-Search URL, with name, nightly price, total, star class, guest rating, review count, location, image, deal badges and property URL. Filter by stars, guest rating and price.

Pricing

from $4.00 / 1,000 hotel scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

11 days ago

Last modified

Share

What is Expedia Hotels Scraper?

Expedia Hotels Scraper extracts Expedia.com hotel search results for a destination and dates, or for a Hotel-Search URL you already built, and returns one dataset row per hotel. Each row has the hotel name, nightly price, total stay price, strikethrough price, star class, guest rating and label, review count, neighborhood, coordinates, lead image, free-cancellation flag, result position and property URL. Travel analysts, revenue managers, travel-tech builders and AI travel assistants use it to compare rates and quality across a city for specific dates, with filters for stars, guest rating, price and free cancellation.

Best fit for this Actor

  • Designed for search-result pages. Use it when the question is "which hotels show up for this place and these dates, and at what price".
  • Two ways to start. Give a destination with checkIn and checkOut, or paste full Expedia Hotel-Search URLs in startUrls.
  • Filters before billing. minStarRating, minGuestRating, minPrice, maxPrice and freeCancellationOnly drop hotels before they are saved, and filtered hotels add no events.
  • Automatic paging. The Actor pages through results until it reaches maxResults, and dedupes hotels by ID.
  • Cross-site price checks. When you want the same city priced on another site, then run Hotels.com Scraper with the same destination and dates and compare by hotel name.
  • Guest feedback next. For reviews on the hotels you shortlisted, continue with Tripadvisor Reviews Scraper.

What people and AI agents ask this Actor to do

Find 4-star-plus hotels in Paris for next weekend under $300 a night. List the cheapest hotels in Tokyo for these dates. Which Barcelona hotels near the center offer free cancellation?

RequestInput to send
A city for two nights{"destination": "New York, New York", "checkIn": "2026-11-12", "checkOut": "2026-11-14"}
Quality and budget filters{"destination": "Paris, France", "minStarRating": 4, "maxPrice": 300}
Budget-first ordering{"destination": "Tokyo, Japan", "sortBy": "priceLowToHigh", "maxResults": 30}
Flexible bookings only{"destination": "Barcelona, Spain", "freeCancellationOnly": true}
A search you built on Expedia{"startUrls": ["https://www.expedia.com/Hotel-Search?destination=Tokyo&startDate=2026-11-12&endDate=2026-11-14"]}

Workflow example: weekly rate monitoring for a hotel group

A revenue manager starts with the group's home city as destination, a fixed two-night window, minStarRating set to 4 and maxResults at 100. The dataset returns each competing hotel's pricePerNight, totalPrice, guestRating, reviewCount and position. The manager exports the rows to the pricing sheet, compares the group's own properties with the competitive set, and schedules the same input weekly so rate changes by hotelId show up between exports.

How to scrape Expedia hotels

  1. Type a Destination the way you would on Expedia, and set Check-in and Check-out dates (they default to a two-night stay two weeks out).
  2. Set guests, rooms, Max results and any filters.
  3. Click Start, then export the dataset or read it through the API.

Input

{
"destination": "New York, New York",
"checkIn": "2026-11-12",
"checkOut": "2026-11-14",
"adults": 2,
"rooms": 1,
"maxResults": 50,
"sortBy": "recommended",
"minStarRating": 3,
"currency": "USD",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
FieldTypeWhat it controls
destinationstringCity, region, neighborhood or landmark, as typed on Expedia.
checkIn, checkOutstringStay dates in YYYY-MM-DD. Default two nights starting 14 days from today.
adults, roomsintegerGuests (1 to 14) and rooms (1 to 8). Defaults 2 and 1.
startUrlsarrayFull Expedia Hotel-Search URLs, used instead of destination.
maxResultsintegerHotels to return across pages, 1 to 1000. Default 50.
sortBystringrecommended, priceLowToHigh, starRating, guestRating or distance.
minStarRatingintegerKeep hotels at this star class or higher, 0 to 5.
minGuestRatingintegerKeep hotels at this guest score or higher, on the 0 to 10 scale.
minPrice, maxPriceintegerNightly price range in the selected currency.
freeCancellationOnlybooleanKeep hotels whose card advertises free cancellation or a fully refundable rate.
currencystringCurrency label for output prices. Default USD.
proxyConfigurationobjectApify Proxy. Residential is preset and recommended for Expedia.

Output

FieldWhat it contains
recordType, hotelId, positionRecord type, Expedia property ID and rank across pages
name, propertyUrl, imageHotel name, Expedia property link and lead photo
pricePerNight, totalPrice, strikethroughPriceLead nightly price, stay total and was-price when a deal shows
priceLabel, currencyPrice as displayed, and the currency label
starRating, guestRating, guestRatingLabel, reviewCountStar class, guest score, its word label and review count
neighborhood, latitude, longitudeArea name and map coordinates when shown
freeCancellationtrue when the card advertises free cancellation or a refundable rate
searchQuery, scrapedAtThe destination searched, and collection time

Example record shape (illustrative values):

{
"recordType": "hotel",
"hotelId": "1234567",
"name": "Example Midtown Hotel",
"propertyUrl": "https://www.expedia.com/New-York-Hotels-Example-Midtown-Hotel.h1234567.Hotel-Information",
"image": "https://images.trvl-media.com/lodging/2000000/1230000/1234500/1234567/example.jpg",
"starRating": 4,
"guestRating": 8.6,
"guestRatingLabel": "Excellent",
"reviewCount": 1842,
"pricePerNight": 219,
"strikethroughPrice": 259,
"totalPrice": 492,
"priceLabel": "$219",
"currency": "USD",
"neighborhood": "Midtown",
"latitude": 40.7549,
"longitude": -73.984,
"freeCancellation": true,
"position": 3,
"searchQuery": "New York, New York",
"scrapedAt": "2026-10-01T12:00:00.000Z"
}

When a request returns no hotels, the dataset holds one free diagnostic row with hotelId set to diagnostic and a _warnings note, so scripts and agents can tell it apart from a hotel record at a glance.

Pricing

This Actor uses Pay per event plus Apify platform usage. Two events apply: Actor start once per run, and Hotel scraped once per hotel row returned. Hotels removed by your filters and the diagnostic row add no hotel events. For example, a city search with maxResults set to 50 creates up to 50 Hotel scraped events plus one Actor start event, plus the platform usage for the run, including residential proxy traffic. The live Pricing tab on this page shows the current event prices.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~expedia-hotels-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"destination": "Paris, France", "checkIn": "2026-11-12", "checkOut": "2026-11-14", "maxResults": 20, "minStarRating": 4}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("khadinakbar/expedia-hotels-scraper").call(run_input={
"destination": "Barcelona, Spain",
"checkIn": "2026-11-12",
"checkOut": "2026-11-15",
"sortBy": "priceLowToHigh",
"maxResults": 25,
})
for hotel in client.dataset(run["defaultDatasetId"]).iterate_items():
print(hotel.get("name"), hotel.get("pricePerNight"), hotel.get("guestRating"))

Use with AI agents through Apify MCP

Connect this Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP, then ask:

Find up to 20 hotels in Lisbon, Portugal for November 12 to 14 with at least 4 stars and a guest rating of 8 or higher. Sort by nightly price and give me name, price per night, total, rating and the Expedia link.

Agent checklist:

  1. Set destination, both dates and maxResults; the cap sets the cost ceiling.
  2. Add filters such as minStarRating, minGuestRating or maxPrice so only matching hotels are billed.
  3. Read rows with get-dataset-items, keep rows where recordType is hotel and hotelId is a property ID, and cite propertyUrl.
  4. Read _warnings on a diagnostic row and suggest a fresh run with Residential proxy.

Best results

Starting situationHelpful actionExpected outcome
Any Expedia runKeep the preset Residential proxySteady access to result pages
Budget researchUse sortBy: "priceLowToHigh" with maxPriceLowest-priced hotels first
Quality shortlistSet minStarRating and minGuestRatingOnly hotels that meet both bars
A complex search with Expedia filtersBuild it on Expedia and paste the URL in startUrlsExactly the search you configured
Rate trackingSchedule fixed dates and compare pricePerNight by hotelIdA price history per property
Flexible travel plansSet freeCancellationOnly to trueHotels advertising free cancellation

Builder's note

I built this for rate comparison, so each row is one hotel with both the nightly and total price for the exact dates you asked about. I learned that filters matter most when they run before billing, which is why star, rating, price and cancellation filters drop hotels before anything is saved. My goal was a dataset that is easy to diff week over week, which is why every row carries its hotelId and position.

FAQ

Which Expedia site does it read?

Expedia.com search results, priced as Expedia.com shows them. currency labels the output.

Can I get a single hotel's reviews?

This Actor reads search result pages. For reviews, pass the hotel names to Tripadvisor Reviews Scraper.

Are hotels charged twice across pages?

No. Hotels are deduplicated by hotelId, so each property is one event.

What does a diagnostic row mean?

The request returned no hotels. It is free, and its _warnings note explains the next step.

Responsible use

This Actor collects publicly available hotel search data from Expedia.com. Use it in line with Expedia's terms of use and applicable laws, including data-protection rules such as the GDPR and CCPA, and respect intellectual-property rights in photos and descriptions. Expedia is a trademark of its owner, and this independent Actor is not affiliated with or endorsed by Expedia Group.