Expedia Hotels Scraper
Pricing
Pay per usage
Expedia Hotels Scraper
Extract hotel data from Expedia instantly. Scrape prices, reviews, ratings, availability & amenities across destinations. Perfect for travel research, price monitoring & market analysis. Get structured hotel information for comparison & analytics. No coding required.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Shahid Irfan
Actor stats
0
Bookmarked
7
Total users
5
Monthly active users
6 days ago
Last modified
Categories
Share
Expedia Hotels Listings Scraper
Extract structured Expedia hotel listing data from Hotel-Search result pages. Collect prices, ratings, property links, listing metadata, and search context for analysis, monitoring, and travel intelligence workflows.
Features
- Hotel listings extraction - Capture Expedia search-result cards with core property metadata.
- Rich pricing details - Collect nightly, total, and strikeout prices when available.
- Rating and review context - Include stars, guest score, and review counts.
- Clean output records - Automatically omit empty values instead of storing null fields.
- Duplicate-safe collection - Save each hotel once per run using hotel ID deduplication.
Use Cases
Price Monitoring
Track hotel prices across destinations and travel windows to identify spikes, drops, and seasonal movement.
Market Comparison
Benchmark competing properties in the same region by rating, review volume, and price visibility.
Travel Dataset Building
Generate structured hotel datasets for BI dashboards, forecasting, and internal travel tools.
Offer Intelligence
Analyze member-price indicators, strikeout price patterns, and cancellation signals at listing level.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | String | Yes | Expedia London Hotel-Search URL | Expedia Hotel-Search or Expedia destination URL. The actor normalizes pasted URLs, strips junk, and auto-fills common missing search params such as dates, adults, and sort. |
results_wanted | Integer | No | 20 | Maximum number of listings to save. |
max_pages | Integer | No | 8 | Maximum result-load rounds to attempt. |
proxyConfiguration | Object | No | Residential Apify Proxy | Proxy settings for stable extraction. |
Output Data
Each dataset item can contain:
| Field | Type | Description |
|---|---|---|
hotel_id | String | Expedia hotel ID |
hotel_name | String | Property name from search card |
city | String | City or area label |
star_rating | Number | Official hotel star rating |
guest_rating | Number | Guest score shown in listing card |
guest_rating_out_of_five | Number | Guest score in 5-point representation |
review_count | Integer | Number of guest reviews |
review_label | String | Rating label such as "Very Good" |
nightly_price | String | Nightly price text |
total_price | String | Total stay price text |
strikeout_price | String | Previous price text when present |
taxes_and_fees_note | String | Taxes and fees message |
free_cancellation | Boolean | Free cancellation signal when available |
member_price_available | Boolean | Member price indicator |
vacation_rental | Boolean | Vacation rental marker |
image_url | String | Primary listing image URL |
property_url | String | Expedia hotel detail URL |
region_id | String | Search region ID |
region_name | String | Search region name |
check_in | String | Check-in date |
check_out | String | Check-out date |
adults | Integer | Adults in room 1 |
children | Array | Child ages in room 1 |
sort | String | Sort mode used in request |
search_id | String | Expedia search identifier |
source_url | String | Source endpoint URL |
operation_name | String | Listing operation name |
scraped_at | String | ISO timestamp of capture |
Usage Examples
Basic Run
{"startUrl": "https://www.expedia.com/Hotel-Search?regionId=6139104&destination=London%2C%20United%20Kingdom%20%28LON-All%20Airports%29","results_wanted": 20,"max_pages": 8}
Messy URL Recovery
{"startUrl": "<https://www.expedia.com/Hotel-Search?destination=London%2C%20United%20Kingdom%20%28LON-All%20Airports%29®ionId=6139104&sort=RECOMMENDED>","results_wanted": 40,"max_pages": 10}
The actor removes wrapper characters, preserves the Expedia destination, and injects fresh future dates and sane occupancy defaults when they are missing or stale.
Proxy-Optimized Run
{"startUrl": "https://www.expedia.com/Hotel-Search?regionId=6139104&destination=London%2C%20United%20Kingdom%20%28LON-All%20Airports%29","results_wanted": 30,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Sample Output
{"hotel_id": "5173526","hotel_name": "Point A London Kings Cross - St Pancras","city": "London","star_rating": 2.5,"guest_rating": 8.4,"guest_rating_out_of_five": 4.2,"review_count": 2888,"review_label": "Very Good","nightly_price": "$101 nightly","total_price": "$121","strikeout_price": "$135","taxes_and_fees_note": "Total with taxes and fees","free_cancellation": false,"member_price_available": true,"vacation_rental": false,"image_url": "https://images.trvl-media.com/lodging/6000000/5180000/5173600/5173526/24292dd5.jpg?impolicy=resizecrop&ra=fit&rw=455&rh=455","property_url": "https://www.expedia.com/London-Hotels-Point-A-Hotel-London-Kings-Cross-St-Pancras.h5173526.Hotel-Information?...","region_id": "6139104","region_name": "London, United Kingdom (LON-All Airports)","check_in": "2026-04-19","check_out": "2026-04-20","adults": 2,"children": [],"sort": "RECOMMENDED","search_id": "5546132f-1251-4ae8-b52a-9ad927c5ee32","source_url": "https://www.expedia.com/graphql","operation_name": "PropertyListingQuery","scraped_at": "2026-04-06T13:32:11.102Z"}
Tips For Best Results
Start With Default Volume
- Use
results_wanted: 20first to validate destination and timing. - Increase volume only after verifying stable output.
Use Expedia URLs Only
- Provide an Expedia Hotel-Search URL or an Expedia destination page URL.
- The actor repairs missing dates, adults, sort, and common query noise automatically.
Use Residential Proxies
- Residential routing improves reliability on protected travel pages.
- Keep request volume moderate when collecting large destination sets.
Keep Dates Valid
- If pasted dates are missing or already in the past, the actor shifts them to a safe future stay automatically.
- If only one date is usable, checkout is healed to the next day.
Expect Field Variance
- Not every listing exposes every field.
- Empty/null fields are removed automatically from dataset records.
Integrations
- Google Sheets - Export pricing and rating snapshots for analysts.
- Airtable - Build searchable destination and hotel tracking tables.
- Looker Studio - Visualize market trends across city/date combinations.
- Webhooks - Trigger downstream enrichment or alerting pipelines.
Export Formats
- JSON - Best for APIs and programmatic pipelines.
- CSV - Best for spreadsheet workflows.
- Excel - Best for reporting teams.
- XML - Best for legacy integrations.
Frequently Asked Questions
Why are some fields missing in certain records?
Listings do not always expose the same details. The actor keeps only non-empty values.
Can I scrape multiple destinations?
Yes. Run one job per destination URL or schedule separate runs with different input payloads.
How many listings can I collect?
It depends on destination inventory and load depth. Increase max_pages and results_wanted as needed.
Why does proxy matter?
Some Expedia result pages apply request-rate controls. Residential proxies improve run stability.
Does the actor remove duplicates?
Yes. Duplicate listing cards are filtered by hotel ID.
What happens if my URL is incomplete?
The actor normalizes Expedia URLs, strips wrapper characters and common tracking junk, and retries with a refreshed session when Expedia rejects the first bootstrap attempt.
Support
For issues or feature requests, use Apify Console support channels.
Resources
Legal Notice
This actor is designed for legitimate data collection and analysis workflows. You are responsible for complying with website terms, applicable laws, and responsible data usage practices.