Hotels.com Reviews Scraper - Guest Feedback & Sentiment
Pricing
from $2.15 / 1,000 results
Hotels.com Reviews Scraper - Guest Feedback & Sentiment
Extract hotel reviews from Hotels.com with ratings, sentiment analysis, travel companion data, reviewer info, photos & responses. Includes reviewText, reviewRating (1-10), sentiments (liked/disliked), traveledWith field, reviewDate, authorName, tripType, and managementResponse. Date filtering.
Pricing
from $2.15 / 1,000 results
Rating
5.0
(6)
Developer

Muhamed Didovic
Actor stats
0
Bookmarked
9
Total users
7
Monthly active users
5 days ago
Last modified
Categories
Share
Hotels.com Reviews Scraper - Extract Guest Feedback & Sentiment Data
Unlock the Full Power of Hotels.com Review Data - The only scraper you need to track, analyze, and understand hotel reviews on Hotels.com with enterprise-grade reliability and precision. Whether you're monitoring customer sentiment, tracking hotel performance, conducting hospitality research, or building review datasets, our scraper delivers comprehensive, real-time insights while saving you time and resources.
"From guest feedback to sentiment analysis, we turn Hotels.com review data into actionable business intelligence."
Overview
The Hotels.com Reviews Scraper is your go-to tool for extracting hotel review data from Hotels.com using their official GraphQL API. Ideal for hotel managers, hospitality analysts, reputation management teams, market researchers, and data scientists, it extracts detailed review information including ratings, guest feedback, sentiment analysis, travel companion data, and reviewer demographics. With easy setup and multiple export formats (JSON, CSV), it's perfect for anyone looking to gather comprehensive hotel review data from Hotels.com.
What does Hotels.com Reviews Scraper do?
The Hotels.com Reviews Scraper is a powerful tool that enables you to:
Comprehensive Review Data Collection
- Guest Reviews
- Extract complete review text, titles, and ratings (1-10 scale)
- Scrape reviewer names and demographics
- Gather travel companion information (business, family, partner, group, solo)
- Capture trip details (stay duration, travel dates)
- Download review photos submitted by guests
- Extract management responses to reviews
- Sentiment Analysis Data
- Automatic sentiment categorization (liked/disliked aspects)
- Extract specific feedback on cleanliness, staff & service, amenities, property conditions, room comfort
- Identify positive and negative sentiment patterns
- Analyze guest satisfaction metrics
- Track sentiment trends over time
Advanced Scraping Capabilities
- Pagination Handling: Automatically navigates through all review pages (25 reviews per page)
- Date Filtering: Filter reviews by date range using the
reviewsFromparameter to scrape only recent reviews - Duplicate Detection: Smart duplicate detection prevents re-scraping the same reviews
- Efficient Processing: Stops pagination early when date filters indicate no more relevant data
- Multi-locale Support: Handles different locales and site IDs (US, UK, Greece, etc.)
- GraphQL API Integration: Uses Hotels.com's official GraphQL API for reliable data extraction
Flexible Scraping Options
- Hotel Detail Pages: Extract reviews from any Hotels.com hotel page
- US Site:
https://www.hotels.com/ho434012/hotel-anastassiou-kastoria-ellada/?locale=en_US&siteid=300000001 - UK Site:
https://www.hotels.com/ho123456/hotel-name/?locale=en_GB&siteid=300000008 - Greek Site:
https://el.hotels.com/ho434012/hotel-name/?locale=el_GR&siteid=300000021
- US Site:
- Date-Filtered Scraping: Scrape only reviews from specific dates forward
- Recent Reviews: Add
reviewsFrom: "2025-01-01"to get only 2025 reviews - Time-based Analysis: Track review trends month-by-month or quarter-by-quarter
- Recent Reviews: Add
This tool is ideal for:
- Hotel reputation management and monitoring
- Competitive intelligence and benchmarking against competitors
- Guest sentiment analysis and service improvement insights
- Market research for hospitality industry trends
- Review aggregation for data analytics and machine learning
- Monitoring competitor performance and customer satisfaction
- Building comprehensive review databases for business intelligence
Features
- Comprehensive Review Extraction: Detailed guest reviews, ratings, sentiments, photos, and management responses
- Multiple Data Points:
- Review Content: Full review text, titles, and numeric ratings (1-10 scale)
- Reviewer Information: Guest names, travel types, trip duration, and travel companion details
- Sentiment Data: Liked/disliked aspects with automatic categorization
- Media: Guest-uploaded photos and images from reviews
- Advanced Filtering:
- Date Range Filtering: Use
reviewsFromparameter to scrape only recent reviews - Smart Pagination: Automatically stops when reaching date cutoff or no more reviews
- Duplicate Prevention: Built-in duplicate detection across pagination
- Date Range Filtering: Use
- Flexible Input: Supports Hotels.com URLs with various locales:
- US, UK, Greek, and other regional Hotels.com sites
- Automatic locale and site ID detection from URLs
- Automatic Pagination: Handles multi-page review results automatically (25 reviews per page)
- Efficient Processing: Concurrent scraping with configurable concurrency settings
- Reliable Performance: GraphQL API integration with built-in retry mechanisms and proxy support
- Structured Data Export: Download review data in JSON or CSV format for analysis
Supported Data Types
The Hotels.com Reviews Scraper extracts comprehensive review data from Hotels.com hotel pages:
-
Guest Reviews - Complete review information with all available data
- Example:
https://www.hotels.com/ho434012/hotel-anastassiou-kastoria-ellada/?locale=en_US&siteid=300000001 - Fields:
reviewText,reviewTitle,reviewRating,reviewDate,authorName,sentiments, etc.
- Example:
-
Sentiment Analysis - Automatic categorization of guest feedback
- Liked Aspects:
"Liked: cleanliness, staff & service, room comfort" - Disliked Aspects:
"Disliked: amenities, property conditions & facilities" - Sentiment Labels: Extracted from the GraphQL API's sentiment analysis
- Liked Aspects:
-
Travel Companion Data - Information about who the guest traveled with
- Examples:
"Traveled with family","Business traveler, traveled with partner","Traveled with group" - Fields:
traveledWith,tripType
- Examples:
-
Review Media - Guest-uploaded photos and images
- Photo URLs: High-resolution images from guest reviews
- Management Responses: Hotel responses to guest feedback
- Fields:
photos[],managementResponse
Each review includes comprehensive metadata including hotel information, scraping timestamps, pagination data, and provider details, all fully documented in the Output Fields section below.
Quick Start
- Sign up for Apify: Create your free account at apify.com.
- Find the Scraper: Search for "Hotels.com Reviews Scraper" in the Apify Store.
- Configure Input: Add Hotels.com hotel URLs to the
startUrlsarray. - Run the Scraper: Execute the scraper on the Apify platform.
- Data Collection: The scraper will output all hotel review data in JSON or CSV format.
Input Configuration
Here's an example of how to set up the input for the Hotels.com Reviews Scraper:
{"startUrls": ["https://www.hotels.com/ho434012/hotel-anastassiou-kastoria-ellada/?locale=en_US&siteid=300000001","https://www.hotels.com/ho123456/another-hotel-name/?locale=en_US&siteid=300000001","https://el.hotels.com/ho789012/greek-hotel/?locale=el_GR&siteid=300000021"],"reviewsFrom": "2024-01-01","maxItems": 1000,"maxConcurrency": 10,"minConcurrency": 1,"maxRequestRetries": 100,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Input Fields Explanation
startUrls: Array of Hotels.com hotel URLs to scrape reviews from:- US Hotel:
"https://www.hotels.com/ho434012/hotel-name/?locale=en_US&siteid=300000001" - UK Hotel:
"https://www.hotels.com/ho123456/hotel-name/?locale=en_GB&siteid=300000008" - Greek Hotel:
"https://el.hotels.com/ho789012/hotel-name/?locale=el_GR&siteid=300000021" - Note: The scraper automatically extracts hotel ID, locale, and site ID from URLs
- US Hotel:
reviewsFrom(Optional): Filter reviews by date (format: "YYYY-MM-DD"):- Example:
"2024-01-01"- Only scrape reviews from January 1, 2024 onwards - Smart pagination: Automatically stops when reaching older reviews (since reviews are in chronological order)
- Leave empty to scrape all reviews regardless of date
- Example:
maxItems: Maximum number of reviews to scrape (default: 1000).maxConcurrency: Maximum number of pages processed simultaneously (default: 10).minConcurrency: Minimum number of pages processed simultaneously (default: 1).maxRequestRetries: Number of retries for failed requests (default: 100).proxy: Proxy configuration object for enhanced scraping reliability:useApifyProxy: Set totrueto use Apify's proxy serviceapifyProxyGroups: Array of proxy groups (e.g.,["RESIDENTIAL"]for residential IPs)
Date Filtering
The reviewsFrom parameter allows you to filter reviews by date, scraping only reviews from a specific date forward. This is particularly useful for:
- Monitoring recent guest feedback and sentiment changes
- Tracking review trends over specific time periods
- Reducing API calls and scraping time by focusing on recent reviews
- Building time-series datasets for trend analysis
How Date Filtering Works
- Set the Date: Add
reviewsFrom: "2024-01-01"to your input configuration - Automatic Filtering: The scraper filters reviews based on their
reviewDatefield - Smart Pagination: Hotels.com returns reviews in reverse chronological order (newest first)
- Early Stopping: When the scraper encounters a full page of reviews older than
reviewsFrom, it stops pagination automatically - Efficiency: This saves API calls and processing time since there's no need to check older pages
Example Use Cases
- Recent Reviews Only:
"reviewsFrom": "2025-01-01"- Get only 2025 reviews - Quarterly Analysis:
"reviewsFrom": "2024-10-01"- Q4 2024 reviews - Monthly Monitoring: Run monthly with
reviewsFromset to first day of current month - Year-over-Year Comparison: Run separate scrapes for different year ranges
Output Structure
The scraper provides comprehensive hotel review data from Hotels.com. The output includes complete review text, ratings, reviewer information, sentiment analysis, travel companion data, photos, and management responses. Here's a breakdown of the main components:
Sample JSON Output
{"placeName": "Hotel Anastassiou Kastoria Ellada","placeAddress": "","provider": "hotels","hotelId": "434012","hotelUrl": "https://www.hotels.com/ho434012/hotel-anastassiou-kastoria-ellada/?locale=en_US&siteid=300000001","reviewId": "67bf52814570c67eb5d18a8b","reviewText": "Nice simple stay.","reviewTitle": "","reviewDate": "2025-03-12T23:00:00.000Z","reviewRating": 8,"rating": "8/10 Very good","authorName": "Jeffrey","reviewerName": "Jeffrey","tripType": "Stayed 1 night in Feb 2025","traveledWith": "Business traveler, traveled with family","sentiments": ["Liked: cleanliness, staff & service"],"photos": [],"page": 0,"scrapedAt": "2026-02-06T07:04:46.691Z"}
Output Fields Explanation
The scraper returns a comprehensive dataset for each hotel review. Below is a detailed explanation of all fields in the JSON output.
Hotel Identification
placeName(String): The hotel name extracted and formatted from the URL (e.g., "Hotel Anastassiou Kastoria Ellada").placeAddress(String): Hotel address. Currently empty as it's not available in the reviews API response.provider(String): Data source identifier, always "hotels" for Hotels.com.hotelId(String): Unique hotel identifier extracted from the URL (e.g., "434012" from/ho434012/).hotelUrl(String): Complete Hotels.com URL for the hotel property page.
Review Identification
reviewId(String): Unique identifier for the review assigned by Hotels.com (e.g., "67bf52814570c67eb5d18a8b").page(Number): Pagination page number where this review was found (0-indexed, e.g., 0 for first page, 1 for second page).
Review Content
reviewText(String): The main body text of the guest review. This is the detailed feedback written by the guest.reviewTitle(String): Optional title or headline for the review. May be empty if the guest didn't provide a title.
Rating Information
reviewRating(Number): Numeric rating value extracted from the rating string (1-10 scale). Example:8from "8/10 Very good".rating(String): Full rating string as displayed on Hotels.com, including the descriptive text (e.g., "8/10 Very good", "10/10 Exceptional", "4/10 Fair").
Reviewer Information
authorName(String): The name of the guest who wrote the review. May be a real name or "Verified traveler" for anonymous reviews.reviewerName(String): Duplicate ofauthorNamefield maintained for compatibility.
Travel Details
reviewDate(String): ISO 8601 timestamp of when the review was posted (e.g., "2025-03-12T23:00:00.000Z").tripType(String): Description of the stay duration and timing (e.g., "Stayed 1 night in Feb 2025", "Stayed 3 nights in Jul 2025").traveledWith(String|null): Information about the guest's travel companion(s):- Examples: "Business traveler, traveled with family", "Traveled with partner", "Traveled with group"
nullif the information is not available- Extracted from
supportingMessagesusing regex pattern matching for "traveled with" or "travelled with"
Sentiment Analysis
sentiments(Array of Strings): Hotels.com's automatic sentiment categorization of the review:- Positive feedback:
"Liked: cleanliness, staff & service, property conditions & facilities, room comfort" - Negative feedback:
"Disliked: amenities, property conditions & facilities" - May be an empty array if no sentiment data is available
- Multiple sentiment strings can be present in the array
- Positive feedback:
Review Media
photos(Array of Strings): URLs of photos uploaded by the guest with their review:- High-resolution image URLs hosted on Hotels.com CDN
- Example:
["https://a.travel-assets.com/ugc/hotel-reviews/s1155-pd9012fd0-original.jpg"] - Empty array if the review has no photos
Hotel Response
managementResponse(String|undefined): The hotel management's official response to the review:- Contains the full text of the hotel's reply to guest feedback
undefinedif the hotel hasn't responded to the review
Metadata
scrapedAt(String): ISO 8601 timestamp of when the data was scraped (e.g., "2026-02-06T07:04:46.691Z").
Field Details and Examples
placeName
Automatically extracted from the hotel URL path and formatted for readability:
- URL:
/ho434012/hotel-anastassiou-kastoria-ellada/ - Result:
"Hotel Anastassiou Kastoria Ellada"
reviewRating vs rating
reviewRating: Numeric value only (1-10) →8rating: Full descriptive string →"8/10 Very good"
traveledWith Field
Captures who the guest traveled with, providing valuable demographic insights:
- Business + Family:
"Business traveler, traveled with family" - Couples:
"Traveled with partner" - Families:
"Traveled with family" - Groups:
"Traveled with group" - Solo:
"Business traveler"(without additional travel companions) - Not specified:
null
This field is particularly useful for:
- Analyzing review sentiment by traveler type
- Understanding target demographics
- Tailoring hotel services to guest types
- Identifying patterns in feedback by travel companion
sentiments Array
Provides pre-categorized feedback in these aspects:
- cleanliness: Room and property cleanliness
- staff & service: Employee interactions and service quality
- amenities: Hotel facilities and features
- property conditions & facilities: Building maintenance and infrastructure
- room comfort: Bed quality, temperature control, noise levels
Example with multiple sentiments:
"sentiments": ["Liked: cleanliness, staff & service, room comfort","Disliked: amenities"]
photos Array
Guest-uploaded images provide visual feedback:
- Empty array: No photos uploaded with review
- With photos: Array of CDN URLs to high-resolution images
- Useful for: Visual sentiment analysis, property condition verification, identifying recurring issues
Use Cases by Field
Reputation Management
Monitor these fields: reviewRating, sentiments, reviewText, reviewDate
Competitor Analysis
Compare: reviewRating, sentiments, traveledWith across properties
Service Improvement
Analyze: sentiments, reviewText, managementResponse patterns
Demographic Insights
Study: traveledWith, tripType, authorName distributions
Time-Series Analysis
Track: reviewDate, reviewRating, sentiments over time periods
Response Rate Monitoring
Calculate: Percentage of reviews with managementResponse present
Technical Notes
- Pagination: Reviews are returned 25 per page (
pagefield tracks this) - Chronological Order: Reviews are in reverse chronological order (newest first)
- Duplicate Prevention: Built-in deduplication using
reviewId - Date Filtering:
reviewsFromparameter filters onreviewDatefield - Locale Support: Works with any Hotels.com locale (en_US, en_GB, el_GR, etc.)
- GraphQL API: Data comes from Hotels.com's official ProductReviewsList operation
- Null Handling: Fields like
traveledWithandmanagementResponsemay benull/undefined
Troubleshooting
Common Issues
No reviews returned
- Check if the hotel URL is correct and hotel ID is valid
- Verify the hotel has reviews on Hotels.com
- Check if locale and site ID match the URL
Pagination stops early
- This is expected behavior when using
reviewsFromdate filtering - Check logs to see if date cutoff was reached
- Verify review dates in output match expectations
Rate limiting errors
- Reduce
maxConcurrencyto 1-3 - Ensure you're using residential proxies
- Add delays between requests if needed
Missing fields in output
- Some fields like
traveledWithorphotosmay be null/empty - This is normal - not all reviews have all data
- Check the actual Hotels.com page to verify data availability
Roadmap
Future enhancements being considered:
- Hotel details extraction (not just reviews)
- Price tracking features
- Availability checking
- Multi-hotel comparison reports
- Sentiment scoring algorithms
- Review photo downloading
- Translation services integration
Explore More Scrapers
If you found this Apify Smartbuyglasses Scraper useful, be sure to check out our other powerful scrapers and actors at memo23's Apify profile. We offer a wide range of tools to enhance your web scraping and automation needs across various platforms and use cases.
Support
- For issues or feature requests, please use the Issues section of this actor.
- If you need customization or have questions, feel free to contact the author:
- Author's website: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
Additional Services
- Request customization or whole dataset: muhamed.didovic@gmail.com
- If you need anything else scraped, or this actor customized, email: muhamed.didovic@gmail.com
- For API services of this scraper (no Apify fee, just usage fee for the API), contact: muhamed.didovic@gmail.com
- Email: muhamed.didovic@gmail.com