· 13 min read
Expedia Hotels Scraper: 17 Data Fields, Up to 500 Free Results/Month
Each record carries 17 output fields, including the nightly price, total price with taxes, guest ratings, and specific property badges like VIP Access. This Actor scrapes hotel listings from Expedia search results for any destination. You can get up to 500 results a month on Apify's free plan, making it easy to try out. The Actor is for users who need to compare hotel pricing and availability for specific dates and locations. It is not for users seeking raw availability data or private rates that require an authenticated session.
Try it: open Expedia Hotels Scraper on Apify, sign in on the free plan and run the prefilled example.
Can you try Expedia Hotels Scraper before paying?
Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.01 per result, that covers up to 500 results of Expedia Hotels Scraper a month, before run-start charges and platform usage.
The example request further down caps maxItems at 5, so a first run returns at most 5 results and costs at most $0.05 in result charges. That is enough to see the real shape of the data before deciding anything.
Expedia Hotels Scraper was last updated on 2026-04-19. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 674,790 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.
What does it cost to run Expedia Hotels Scraper?
Each result costs $0.01 on Apify's free plan, which is $10.00 per 1,000 results. Starting a run is charged separately at $0.05 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.01 | $10.00 |
| BRONZE | $0.00833 | $8.33 |
| SILVER | $0.00667 | $6.67 |
| GOLD | $0.005 | $5.00 |
| PLATINUM | $0.005 | $5.00 |
| DIAMOND | $0.005 | $5.00 |
The maxItems control impacts your bill as result charges apply to every hotel written to the dataset. To test this Actor without significant cost, use the example input which caps results, costing up to $0.05 in result charges on the free plan. This allows verification of your setup before running larger batches.
How do you run Expedia Hotels Scraper from the API?
The schema marks 3 of its 7 controls as required: destination, checkIn, checkOut. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~expedia-hotels-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"destination":"New York","checkIn":"2026-06-01","checkOut":"2026-06-03","adults":2,"rooms":1,"maxItems":5,"proxy":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"destination": "New York",
"checkIn": "2026-06-01",
"checkOut": "2026-06-03",
"adults": 2,
"rooms": 1,
"maxItems": 5,
"proxy": {
"useApifyProxy": True,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}
run = client.actor("crawlerbros~expedia-hotels-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"destination": "New York",
"checkIn": "2026-06-01",
"checkOut": "2026-06-03",
"adults": 2,
"rooms": 1,
"maxItems": 5,
"proxy": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}
const run = await client.actor('crawlerbros~expedia-hotels-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which Expedia Hotels Scraper inputs matter, and which can you skip?
The destination, checkIn, and checkOut controls are required and must be set to trigger a valid search. Most practitioners should leave the adults and rooms counts at their defaults of 2 and 1 respectively, adjusting them only when specific group pricing or room configurations are needed.
destination(string): The destination city or area to search for hotels (e.g., 'New York', 'London', 'Tokyo, Japan').checkIn(string): Check-in date in YYYY-MM-DD format (e.g., '2026-06-01').checkOut(string): Check-out date in YYYY-MM-DD format (e.g., '2026-06-03').adults(integer): Number of adult guests. Affects pricing and room availability. Default:2.rooms(integer): Number of rooms needed. Default:1.maxItems(integer): Maximum number of hotel listings to scrape from search results. Default:20.proxy(object): Required - Expedia blocks datacenter IPs. Use residential proxy for reliable results.
What does Expedia Hotels Scraper return?
The returned records are useful for comparing market rates and amenity badges across different neighborhoods in a city. They do not contain individual room-level details or granular price breakdowns for every specific room type available at the hotel.
hotelId: string - Unique Expedia hotel identifiername: string - Hotel nameurl: string - Direct link to the hotel page on Expediaprice: string - Nightly price as displayed (e.g., "$671 nightly")totalPrice: string - Total price with taxes and fees (e.g., "$1,639 total")rating: string - Guest rating out of 10 (e.g., "9.2")ratingText: string - Rating descriptor (e.g., "Wonderful", "Excellent")reviewCount: string - Total number of guest reviewsneighborhood: string - Hotel neighborhood or area (e.g., "Theater District")description: string - Short description or tagline from the listingimageUrl: string - URL of the hotel's main listing imagebadges: array - Special offers and badges (e.g., "VIP Access", "Breakfast included")destination: string - The search destination usedcheckIn: string - Check-in date used for the searchcheckOut: string - Check-out date used for the searchsearchUrl: string - Full Expedia search URL usedscrapedAt: string - ISO 8601 timestamp of when the data was scraped
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Expedia Hotels Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Set the destination control with a specific city name like 'Paris, France' to ensure geographical accuracy for your initial search.
- Input your travel window into the checkIn and checkOut fields using the required YYYY-MM-DD format, for example, '2026-06-01' and '2026-06-03'.
- Configure the proxy input to use residential proxies, which are recommended for reliable results when dealing with Expedia.
- Set the maxItems limit to a low number such as 10 for your initial run to verify the output format and content without incurring high costs.
- Review the hotelId and name fields in the resulting dataset to ensure the scraper is targeting the correct property types for your destination.
- Check the price and totalPrice fields to confirm that currency symbols and tax inclusions match your regional requirements.
- Validate that the searchUrl field correctly reflects your input parameters before scaling up to larger hotel counts and scheduled runs.
- Confirm that the rating and reviewCount fields are populated for your selected destination and that values are within expected ranges.
How do you apply it? Three worked playbooks
These are Expedia Hotels Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Travel planning
Outcome: Travel planning -- Compare hotel prices, ratings, and locations before booking your trip
Configure: Set destination to 'Tokyo, Japan', checkIn to '2026-10-10', and checkOut to '2026-10-15'. You may also set adults or rooms to reflect your travel party size.
Working method: Run the scraper for a single destination and use the rating and neighborhood fields to filter for top-rated properties in preferred districts. Examine the price and totalPrice fields to compare costs.
Deliverable: A spreadsheet comparing hotel names, nightly prices, and guest ratings for a specific vacation window, helping you make booking decisions.
Stop condition: The run yields fewer than 5 results for a major metropolitan area, indicating a potential issue with the destination or dates.
Use case 2: Price monitoring
Outcome: Price monitoring -- Track hotel price changes across dates and destinations over time
Configure: Set destination to 'New York', maxItems to 20, and vary checkIn and checkOut across multiple scheduled runs for future dates.
Working method: Execute the scraper weekly or monthly for the same destination and dates, then compare the price and totalPrice fields against previous runs to observe fluctuations. Store results with the scrapedAt timestamp.
Deliverable: A time-series dataset showing price fluctuations for specific hotelId identifiers over time, useful for identifying trends.
Stop condition: The searchUrl returns an error page, indicating the selected dates are no longer available or the search parameters are invalid.
Use case 3: Market research
Outcome: Market research -- Analyze hotel pricing trends and competitive positioning in specific markets
Configure: Set destination to 'London, UK', maxItems to 50, and adults to 2. Leave checkIn and checkOut to default or choose a broad range.
Working method: Collect a broad set of results across an entire city or region to analyze the distribution of price versus reviewCount. Examine description and badges to understand competitive positioning.
Deliverable: A comprehensive JSON file containing property descriptions, badges, and neighborhood data for a competitive market analysis report.
Stop condition: The scraped output contains a high percentage of empty price or rating fields, suggesting incomplete data for analysis.
What breaks, and how do you design around it?
If you hit a limit on the number of hotels returned per search, which typically yields 20 to 50 hotels, consider narrowing your destination string to specific neighborhoods or breaking a broad search into multiple smaller ones. When encountering blocks, ensure you are utilizing residential proxies as Expedia frequently restricts datacenter IP ranges.
When should you not use Expedia Hotels Scraper?
Do not use this scraper if your primary goal is to compare rates across multiple booking platforms simultaneously; for that, the Trivago Hotel Scraper provides a better aggregated view. If your research focuses exclusively on residential vacation rentals rather than hotels, the Vrbo Vacation Rentals will yield more relevant property types. For those requiring deep historical business data, including phone numbers and coordinates that go beyond simple booking details, the Bing Maps Business Listings Scraper is a more appropriate choice. If you require official API access for a production booking engine, you should contact Expedia Group directly rather than relying on a web scraper.
What should you check before trusting the output?
- Verify that the hotelId is unique across the dataset to ensure no duplicate listings were captured during pagination.
- Check for empty strings in the rating and neighborhood fields, which occurs when Expedia does not display these on a specific hotel card.
- Ensure the checkIn and checkOut values in the output match your initial input to confirm the scraper stayed on the requested dates.
- Monitor the price field for 'nightly' suffixes to ensure the parser correctly captured the rate text from the search results.
- Confirm that imageUrl contains a valid image link to ensure property images were successfully extracted.
None of this proves a record is correct. It gives a scheduled Expedia Hotels Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the free-plan price for 1,000 results?
On Apify's free plan, 1,000 results cost $10.00. Each individual result written to your dataset is charged at $0.01. Apify also bills platform usage for each run, and a run-start charge applies every time a run starts, whether or not it returns results.
How many hotels can I expect from a single run?
Expedia loads hotels 3-10 at a time. Depending on the density of the destination and your maxItems setting, you will typically receive between 20 and 50 hotel records per search. The scraper scrolls to load more results up to your maxItems limit.
Why are some fields like neighborhood or description empty?
Not every listing on Expedia displays a neighborhood or a short description in the search results. When this data is missing from the page, the scraper returns an empty string for those fields to maintain the record structure without including null values.
What proxy should I use for best results?
Residential proxies are recommended because Expedia frequently blocks datacenter IP ranges. While the scraper may work without a proxy from a residential IP, using residential proxies will provide more reliable results.
Do I need to provide my Expedia login?
No login credentials are required. This Actor scrapes public search result pages that are accessible to any guest user, ensuring your account details are never needed for data collection.
Where to go next
When you are ready to run it, open Expedia Hotels Scraper on Apify; the free plan covers up to 500 results a month.
Start with the Expedia Hotels Scraper Actor page for the current input schema, pricing tier, and run history.
If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:
- Review scrapers covers 182 Actors in this family.
Other Actors we maintain for related data:
- Kayak Flights, Hotels & Deals Scraper: Scrape flight deals, hotel prices, and explore cheap destinations from Kayak.
- Trivago Hotel Scraper: Scrape hotel listings, prices, ratings, and deals from Trivago.
- Trip.com Hotels Scraper: Scrape hotel listings from Trip.com.
- Booking.com Hotel Scraper: Comprehensive scraper for Booking.com hotel listings.
- Bing Maps Business Listings Scraper: Scrape business listings from Bing Maps.
- Squaremouth Travel Insurance Quote Comparison Scraper: Get a live, side-by-side comparison of travel insurance plans from Squaremouth for any trip - destination, dates, traveler ages, and trip cost.
- Vrbo Vacation Rentals: Scrape Vrbo vacation-rental listings by destination and dates.
- Intrepid Travel Package Tour Scraper: Scrape small-group package tours from intrepidtravel.com - browse by destination/region or trip style/theme (wildlife, cycling, family, walking, expeditions...), filter by duration/price/travel style, and get full tour detail with itinerary, inclusions, and reviews.
Related guides:
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-25.
Actor last updated by its maintainers on 2026-04-19.
Run outcome figures cover the 30 day public window ending 2026-09-25.
Featured actors
Expedia Hotels Scraper
Scrape hotel listings from Expedia search results. Extract hotel names, prices, ratings, reviews, neighborhoods, descriptions and images for any destination and travel dates.
Run on Apify ↗