Expedia Hotels Scraper
Pricing
from $4.00 / 1,000 hotel scrapeds
Expedia Hotels Scraper
Scrape Expedia.com hotel search results by destination + dates (or a Hotel-Search URL): name, nightly price, total, star class, guest rating, review count, location, image, deal badges, and property URL. Filters for star, guest rating, and price. PPE. MCP-ready.
Pricing
from $4.00 / 1,000 hotel scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Expedia.com hotel search results at scale. Give it a destination and dates (or a Hotel-Search URL) and get back clean, structured records for every hotel on the results pages — nightly price, total price, star class, guest rating, review count, location, image, deal badges, and the property URL.
Clears Expedia's anti-bot (PerimeterX + Akamai) with a stealth browser on residential proxies and reads the structured property-search data directly. MCP-ready for AI agents (Claude, ChatGPT, Gemini). Pay only for the hotels you keep.
What you get
| Field | Description |
|---|---|
name | Hotel name |
pricePerNight | Lead nightly price (number, in currency) |
strikethroughPrice | Was-price when a discount is shown |
totalPrice | Total stay price for the date range |
priceLabel | Price exactly as Expedia displays it (e.g. $199) |
currency | Currency code label (default USD) |
starRating | Property star class, 0–5 |
guestRating | Guest review score, 0–10 |
guestRatingLabel | Word score (e.g. Wonderful) |
reviewCount | Number of guest reviews |
neighborhood | Area / neighborhood when shown |
latitude, longitude | Map coordinates when present |
image | Lead photo URL |
freeCancellation | True when the card advertises free cancellation / fully refundable |
propertyUrl | Link to the hotel page on Expedia |
hotelId | Expedia property ID |
position | Result rank across the scraped pages |
searchQuery | The destination you searched |
scrapedAt | ISO 8601 timestamp |
When to use it
- Hotel price intelligence — track nightly rates across a city and date range.
- Travel market research — star/guest-rating distribution, review volume, neighborhood spread.
- Lead lists for travel tooling — feed an itinerary builder, comparison site, or AI travel agent.
- Revenue / competitive monitoring — watch how a property ranks and prices versus its set.
Not what you need? For a single hotel's full detail or its reviews, use a dedicated hotel-detail / reviews actor — this one scrapes search result pages.
Pricing
Pay-per-event (PPE):
| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Hotel scraped | $0.004 per hotel kept |
Hotels removed by your filters are not charged. A typical 50-hotel run costs about $0.20. Pay-per-usage (compute + proxy) is also available — pick whichever billing model suits your job size at run time.
Input
Minimal — just a destination:
{"destination": "New York, New York","checkIn": "2026-07-15","checkOut": "2026-07-17","adults": 2,"maxResults": 50}
Or scrape a search URL directly:
{"startUrls": ["https://www.expedia.com/Hotel-Search?destination=Tokyo&startDate=2026-07-15&endDate=2026-07-17"],"maxResults": 100}
Input fields
| Field | Type | Default | Notes |
|---|---|---|---|
destination | string | — | Place to search (city, region, landmark). |
checkIn / checkOut | string YYYY-MM-DD | +14 / +16 days | Stay window. Auto-defaulted when omitted. |
adults | integer | 2 | 1–14. Affects price. |
rooms | integer | 1 | 1–8. |
startUrls | array | — | Expedia Hotel-Search URLs (alternative to destination). |
maxResults | integer | 50 | Cap across all pages. |
sortBy | enum | recommended | priceLowToHigh, starRating, guestRating, distance. |
minStarRating | integer | — | 0–5 filter. |
minGuestRating | integer | — | 0–10 filter. |
minPrice / maxPrice | integer | — | Nightly-price filters. |
freeCancellationOnly | boolean | false | Keep only free-cancellation cards. |
currency | string | USD | Output label. |
proxyConfiguration | object | residential→datacenter | See proxies below. |
Proxies & reliability
Expedia is protected by Akamai Bot Manager, which gates on IP reputation. Residential proxies are required — datacenter IPs are blocked. The actor automatically prefers Apify Residential and falls back to Apify datacenter (US) when residential is unavailable on your plan.
If a run is blocked, the actor honest-fails: it returns a single diagnostic record with a clear status message and charges $0 — it never silently reports an empty success. Re-run, or run with residential proxies, to get data.
Output example
{"recordType": "hotel","hotelId": "12345","name": "The Manhattan Grand","pricePerNight": 219,"totalPrice": 438,"currency": "USD","starRating": 4,"guestRating": 8.6,"guestRatingLabel": "Wonderful","reviewCount": 1842,"neighborhood": "Midtown","freeCancellation": true,"propertyUrl": "https://www.expedia.com/h12345.Hotel-Information","image": "https://...jpg","position": 3,"searchQuery": "New York, New York","scrapedAt": "2026-06-21T00:00:00.000Z"}
Use with AI agents (MCP)
This actor is exposed through the Apify MCP server as apify--expedia-hotels-scraper. Agents call it with a destination + dates and receive structured hotel records — ideal for travel-planning and price-comparison assistants. Output is flat and token-efficient; nulls are explicit.
FAQ
How does it get past Expedia's anti-bot? A stealth browser clears Expedia's PerimeterX/Akamai challenge, then the actor captures the property-search GraphQL response for clean, structured data.
Why do I need residential proxies? Expedia's anti-bot blocks datacenter IPs. Residential (or mobile) IPs pass.
How many hotels per search? Expedia returns roughly 50 per result page; the actor paginates up to your maxResults.
Can I scrape a single hotel's reviews? Not with this actor — it scrapes search result pages. Use a dedicated reviews actor for that.
Is pagination charged twice? No. Hotels are de-duplicated by ID across pages; you're charged once per unique hotel kept.
What if a destination has no hotels? You get an empty dataset with a clear status message — and $0 in hotel charges.
Legal
This actor collects publicly available data from Expedia.com search result pages. Use it in compliance with Expedia's Terms of Use and all applicable laws (including data-protection regulations such as GDPR/CCPA). Do not use scraped data to infringe intellectual-property rights or for any unlawful purpose. You are responsible for how you use the output. This actor is not affiliated with, endorsed by, or sponsored by Expedia, Inc. or the Expedia Group.