Expedia Hotel Search Scraper
Pricing
from $1.99 / 1,000 results
Expedia Hotel Search Scraper
Scrapes hotel search results from Expedia.com. Extracts name, price, rating, stars, location, amenities, and more.
Pricing
from $1.99 / 1,000 results
Rating
0.0
(0)
Developer
ScrapeAI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
High-performance, production-grade Expedia Hotel Search Scraper built on Apify SDK and Playwright. Extracts live, dynamic hotel listings and deep property details with rich pricing, guest ratings, star classifications, addresses, coordinates, room types, policies, amenities, and high-resolution photo galleries.
π Key Capabilities
- π Multi-Layer Live Extraction Pipeline:
- Layer 1: Live Network API Interception β Intercepts and queries live Expedia / Hotels.com Autosuggest & Lodging Network APIs dynamically based on user input.
- Layer 2: Network & GraphQL Interception β Intercepts live
LodgingSearchQuery,PropertySearchQuery, and REST payloads asynchronously. - Layer 3: Embedded State & JSON-LD β Extracts pre-rendered
__NEXT_DATA__,__APOLLO_STATE__, and Schema.orgHotelJSON-LD structures. - Layer 4: Resilient Multi-Pattern DOM UI Scraping β Full coverage of modern card layouts, badges, and responsive UI components.
- π― Strict Pagination & Execution Limit Control:
- Dynamically enforces user-defined
maxItemslimits with hard stop conditions. - Progressive infinite scroll and dynamic DOM height hydration.
- Automatic detection and triggering of "Show more results" AJAX pagination.
- Dynamically enforces user-defined
- π‘οΈ Anti-Bot & Verification Bypass:
- Built-in DataDome interactive slider solving with human-like mouse trajectory emulation.
- Browser fingerprint randomization with realistic viewport, user-agent, and header rotation.
- Native support for Apify Residential and custom proxy configurations.
- π Zero-Null Data Enrichment:
- Normalizes and enriches missing fields from fallback layers to ensure the richest live output.
π₯ Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
destination | String | β Yes | "New York City" | City, region, landmark, or hotel name to search. |
checkIn | String | No | β | Check-in date in YYYY-MM-DD format. |
checkOut | String | No | β | Check-out date in YYYY-MM-DD format. |
adults | Integer | No | 2 | Number of adult guests (1β8). |
rooms | Integer | No | 1 | Number of rooms (1β8). |
sortBy | String | No | "recommended" | Sort order: recommended, price_low_to_high, price_high_to_low, star_rating_desc, review_score_desc. |
maxItems | Integer | No | 25 | Maximum number of hotel listings to extract (1β300). |
scrapeDetails | Boolean | No | false | When true, opens each hotel page in parallel to extract detailed descriptions, room categories, check-in/out times, and full photo galleries. |
proxyConfiguration | Object | No | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} | Proxy settings. Residential proxies are strongly recommended. |
Example Input (INPUT.json)
{"destination": "Paris","checkIn": "2026-09-10","checkOut": "2026-09-15","adults": 2,"rooms": 1,"sortBy": "recommended","maxItems": 50,"scrapeDetails": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
π€ Output Format
Each hotel is saved directly to the default Apify Dataset as a clean, structured JSON record.
Example Output Record
{"rank": 1,"hotelId": "6206679","name": "Hotel Le Meurice Dorchester Collection","stars": 5,"rating": 9.4,"ratingText": "Exceptional","reviewCount": "2,847 reviews","price": "$620 nightly","pricePerNight": "$620","totalPrice": "$3,100 total","originalPrice": "$780","discount": "20% off","currency": "USD","neighborhood": "1st arrondissement","address": "228 Rue de Rivoli, Paris, 75001","distanceFromCenter": "0.2 km from city center","latitude": 48.8651,"longitude": 2.3297,"badge": "VIP Access","freeCancellation": true,"freeCancellationDate": "Free cancellation before Sep 8","breakfastIncluded": true,"reserveNowPayLater": true,"amenities": ["Free WiFi","Spa and wellness center","Michelin-star Restaurant","Fitness Center","Bar & Lounge","Pet friendly","Room service"],"thumbnail": "https://images.trvl-media.com/lodging/7000000/6200000/6206700/6206679/d1e2f3.jpg","images": ["https://images.trvl-media.com/lodging/7000000/6200000/6206700/6206679/d1e2f3.jpg","https://images.trvl-media.com/lodging/7000000/6200000/6206700/6206679/a4b5c6.jpg"],"url": "https://www.expedia.com/Paris-Hotels-Hotel-Le-Meurice.h6206679.Hotel-Information","description": "An iconic Parisian palace hotel blending 18th-century opulence with contemporary design.","checkInTime": "3:00 PM","checkOutTime": "12:00 PM","roomTypes": ["Classic Room","Deluxe Room with Tuileries Garden View","Prestige Suite"],"destination": "Paris","checkIn": "2026-09-10","checkOut": "2026-09-15","adults": 2,"rooms": 1,"sortBy": "recommended","scrapedAt": "2026-08-21T12:00:00.000Z"}
β‘ Local Development & Execution
-
Install Dependencies:
$npm install -
Run Locally:
$npm start -
Validate Dataset Schema:
$npm run validate-datasets
π Running on Apify
- Deploy or import this actor to your Apify account:
$apify push
- Configure search destination, dates, guests, and limit in the Apify Console.
- Enable Apify Residential Proxies for maximum reliability against bot detection.
- Click Start to run the Actor and download the dataset in JSON, CSV, Excel, or XML.