Trip.com & Ctrip Reviews Scraper - Hotel Ratings & Text
Pricing
from $1.50 / 1,000 results
Trip.com & Ctrip Reviews Scraper - Hotel Ratings & Text
Scrape Trip.com and Ctrip hotel reviews worldwide. Extract guest ratings, full review text with AI translations, category scores, traveler type, room booked, reviewer photos and videos, plus hotel rating summary and AI overview by hotel URL or ID. Export JSON, CSV, Excel.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
18 hours ago
Last modified
Categories
Features
Share
Trip.com & Ctrip Reviews Scraper — Hotel Ratings, AI Translations, Category Scores & Photos
The most complete Trip.com and Ctrip hotel-review extractor on Apify. This Trip.com scraper extracts real guest feedback, numerical ratings, and customer sentiment from Trip.com and Ctrip (携程) — Asia's premier online travel booking platform and flagship brand of Trip.com Group. Retrieve complete review content, AI translations, 0–10 satisfaction scores, per-review category ratings, traveler categories, room types booked, traveler photos and videos, and property-level rating distributions. Export cleanly to JSON, CSV, Excel, or API.
Designed specifically for hotel revenue managers, hospitality reputation consultants, OTA market researchers, travel sentiment analysts, data teams training NLP engines, and travel tech aggregators requiring reliable, structured Trip.com and Ctrip guest feedback at scale.
⚡ At a glance
| Feature | Specification |
|---|---|
| Data source | Trip.com & Ctrip official guest review network |
| Output formats | JSON, CSV, Excel (XLSX), XML, RSS, HTML table |
| Pagination model | Cursor-based deep pagination (50 reviews/page, unlocks 1,000+ per property) |
| Multilingual AI translation | Built-in (translates Chinese, Japanese, Korean, Thai, Russian into target locale) |
| Media extraction | High-resolution reviewer photos + user video attachments |
| Sub-category scores | Location, facilities, service, room comfort & cleanliness |
| Traveler segmentation | Solo, Couple, Family, Friends, Business traveler tags |
| Rate limits / Proxies | Apify Proxy integration supported (datacenter or residential) |
| Typical throughput | ~150–300 reviews per second |
| Authentication required | None (public endpoint data extraction) |
🔎 Why scrape Trip.com & Ctrip?
Trip.com and Ctrip share an interconnected global review database, creating the single largest repository of verified hotel reviews in the Asia-Pacific region and a rapidly growing footprint in the Americas and Europe. Major properties routinely carry 1,000 to 25,000+ guest reviews. Each review includes rich metadata: sub-ratings for specific amenities, traveling companion context, room names, reviewer loyalty tiers, and translated commentary.
Extracting this data manually is impossible at scale. Feedback is paginated behind dynamic requests, Asian-language characters require robust encoding and translation, and reviewer media links are deeply nested. This Trip.com reviews scraper resolves all hurdles into normalized, deduplicated tabular datasets.
Strategic Use Cases & Business Value
-
🏨 Hospitality Reputation & Brand Monitoring: Hotels and hospitality management groups use this scraper to track customer perceptions daily. Identifying negative sentiment shifts early—such as repeated complaints about noisy air conditioning or sluggish Wi-Fi—enables immediate remediation before guest satisfaction scores drop permanently on major OTAs.
-
📊 Competitive Benchmarking & Pricing Strategy: Compare competitor hotel performance across your specific geographic cluster. Evaluate how rival properties score on cleanliness, staff friendliness, and breakfast quality compared to room rates, identifying market opportunities to adjust seasonal rates or upsell premium rooms.
-
🌏 Cross-Border Asian Tourism Intelligence: For hoteliers catering to international travelers from China, Japan, South Korea, Thailand, and Singapore, understanding cross-cultural preferences is paramount. The actor's built-in translation engine allows Western hospitality operators to analyze authentic Asian feedback without language barriers.
-
💬 Voice-of-Customer (VoC) Pipelines & NLP: Feed native and translated review feedback directly into large language models (LLMs) and sentiment analysis classifiers. Categorize guest sentiment across hundreds of individual property dimensions (e.g., bedding comfort, pool cleanliness, breakfast variety) to build automated executive reporting dashboards.
-
🤖 Multilingual Training Datasets for Machine Learning: Data science teams utilize the dual-language output (original text alongside localized machine translations) paired with numerical ratings (0–10) to train and evaluate aspect-based sentiment analysis (ABSA) and recommendation models.
-
📈 Travel Analytics, Seasonality & Occupancy Forecasting: Track historical review volumes and traveler composition (business versus leisure, family versus solo) across different calendar quarters. Correlate booking seasonality with local events and holidays to forecast occupancy demand.
✨ Features & Capabilities
- ✅ Unified Trip.com + Ctrip Coverage: Extracts reviews shared across both Trip.com international portals and Ctrip domestic platforms from any regional property page.
- ✅ Unlocked 1,000+ Deep Pagination: Seamlessly navigates beyond basic limits to fetch hundreds or thousands of historical reviews per hotel without artificial truncation.
- ✅ Native AI Translation: Provides original review text (
content) alongside an AI-translated version (translatedContent) in your specified language. - ✅ Granular Category Sub-Scores: Extracts individual scores for location, facilities, service, and room quality alongside the overall rating.
- ✅ Comprehensive Reviewer Metadata: Captures reviewer nickname, home region, reviewer grade/title, review count, and helpful vote counts.
- ✅ Booking & Stay Context: Retrieves exact room type booked, traveler category (Business, Couple, Family, Friends, Solo), and check-in dates.
- ✅ High-Resolution Photo & Video Links: Collects full-size media URLs uploaded by guests with media counters.
- ✅ Property-Level Score Breakdown: Optionally attaches aggregate hotel scores, total review volumes, positive/negative distributions, and AI summary conclusions to each record.
- ✅ Zero-Config Default Run: Runs smoothly out-of-the-box with prefilled defaults or empty input to demonstrate instant output.
- ✅ Flexible Export Options: Streamline integrations via CSV, Excel, NDJSON, or JSON formats ready for analytical workflows.
📥 Input Parameters
The scraper accepts the following configuration parameters. All fields are optional and configured with sensible defaults for immediate execution:
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | Array | ["https://www.trip.com/hotels/bangkok-hotel-detail-1735479/"] | List of Trip.com or Ctrip hotel URLs to scrape. |
hotelIds | Array | [] | Numeric hotel IDs (e.g. 1735479) extracted from hotel URLs. |
locale | String | "en-US" | Target locale interface language for review translations. |
reviewLanguage | String | "all" | Filter reviews by original language (all, en, zh, ja, ko, th, de, fr, es, ru). |
travelType | String | "all" | Filter reviews by traveler type (all, business, couple, family, friends, solo). |
maxReviewsPerHotel | Integer | 0 | Max reviews per hotel. Set to 0 for unlimited (deep historical scrape). Prefill 50. |
includeHotelInfo | Boolean | true | When true, attaches hotel-level aggregate ratings, sentiment distributions, and AI conclusions. |
proxyConfiguration | Object | {"useApifyProxy": true} | Apify Proxy configuration for high-throughput pagination. |
📤 Output Data Fields
Every record pushed to the dataset represents an individual guest review with complete stay details and hotel metadata:
👤 Reviewer & Rating Data
| Field | Type | Coverage | Description |
|---|---|---|---|
reviewId | String | 🟢 High | Unique identifier for the individual guest review. |
hotelId | String | 🟢 High | Numeric Trip.com property identifier. |
hotelName | String | 🟢 High | Full hotel title (e.g., Grande Centre Point Hotel Terminal 21). |
userName | String | 🟢 High | Reviewer nickname or anonymized guest display handle. |
userRegion | String | 🟡 Conditional | Country or home region specified on the reviewer's profile. |
userGrade | String | 🟡 Conditional | Reviewer status badge (e.g., Review Specialist, Level 5 Contributor). |
userReviewCount | String | 🟡 Conditional | Total lifetime reviews authored by the reviewer. |
rating | String | 🟢 High | Primary guest score on a 0–10 scale (or 1–5 equivalent converted). |
ratingLocation | String | 🟡 Conditional | Sub-score for hotel neighborhood and transit convenience. |
ratingFacility | String | 🟡 Conditional | Sub-score for on-site amenities, pool, gym, and elevator facilities. |
ratingService | String | 🟡 Conditional | Sub-score for front desk, housekeeping, and concierge hospitality. |
ratingRoom | String | 🟡 Conditional | Sub-score for room spaciousness, bed comfort, and acoustic isolation. |
recommend | String | 🟢 High | Boolean flag (true/false) indicating if the guest recommends this stay. |
📝 Review Content & Media
| Field | Type | Coverage | Description |
|---|---|---|---|
content | String | 🟢 High | Full unedited review text in the original language posted. |
translatedContent | String | 🟡 Conditional | AI-translated review text in the requested locale language. |
language | String | 🟢 High | ISO language code of the original review (e.g., zh, en, ko). |
travelType | String | 🟡 Conditional | Guest travel category (Solo traveler, Couples, Family, Business). |
roomName | String | 🟡 Conditional | Exact room name booked by the reviewer (e.g., Deluxe King Room with City View). |
createDate | String | 🟢 High | Submission date of the review. |
checkinDate | String | 🟡 Conditional | Month and year of guest check-in. |
usefulCount | String | 🟢 High | Number of other travelers who marked this review helpful. |
imageCount | String | 🟢 High | Number of photos uploaded by the guest. |
images | String | 🟡 Conditional | Pipe-separated list (|) of absolute reviewer photo URLs. |
videoCount | String | 🟢 High | Count of attached user review video clips. |
🏨 Hotel Aggregates & Sentiment
| Field | Type | Coverage | Description |
|---|---|---|---|
hotelScore | String | 🟢 High | Overall property average score (0–10). |
scoreLocation | String | 🟡 Conditional | Aggregate property location index. |
scoreFacility | String | 🟡 Conditional | Aggregate property facility rating index. |
scoreService | String | 🟡 Conditional | Aggregate property staff service index. |
scoreCleanliness | String | 🟡 Conditional | Aggregate property hygiene and housekeeping index. |
hotelTotalReviews | String | 🟢 High | Total all-time reviews recorded for the property. |
positiveReviews | String | 🟡 Conditional | Count of reviews tagged as positive sentiment. |
negativeReviews | String | 🟡 Conditional | Count of reviews tagged as critical or negative sentiment. |
withMediaReviews | String | 🟡 Conditional | Count of reviews containing user photos or video clips. |
aiSummary | String | 🟡 Conditional | Algorithmic summary synthesized from recent guest feedback. |
hotelUrl | String | 🟢 High | Canonical Trip.com hotel web address. |
scrapedAt | String | 🟢 High | UTC ISO timestamp when the review record was retrieved. |
💻 Sample Output Record
{"reviewId": "784912048","hotelId": "1735479","hotelName": "Grande Centre Point Hotel Terminal 21","userName": "GlobetrotterAsia","userRegion": "Singapore","userGrade": "Review Specialist","userReviewCount": "48","rating": "9.6","ratingLocation": "10","ratingFacility": "9","ratingService": "10","ratingRoom": "9.5","recommend": "true","content": "酒店位置无敌,直接连通BTS和Terminal 21商场。前台服务热情周到,房间宽敞干净,早餐种类非常丰富,无边际泳池景观很棒!下次来曼谷还会入住。","translatedContent": "The hotel location is unbeatable, directly connected to BTS and Terminal 21 shopping mall. Front desk service was welcoming and thorough, room was spacious and clean, breakfast variety was outstanding, and infinity pool view was amazing! Will definitely stay here again next time in Bangkok.","language": "zh","travelType": "Couples","roomName": "Deluxe Premium King Room","createDate": "2026-10-18 14:22:10","checkinDate": "2026-10","usefulCount": "12","imageCount": "4","images": "https://ak-d.tripcdn.com/images/hotel/review/img_01.jpg | https://ak-d.tripcdn.com/images/hotel/review/img_02.jpg","videoCount": "0","hotelScore": "9.4","scoreLocation": "9.8","scoreFacility": "9.3","scoreService": "9.5","scoreRoom": "9.4","scoreCleanliness": "9.6","hotelTotalReviews": "14280","positiveReviews": "13650","negativeReviews": "210","withMediaReviews": "3420","aiSummary": "Guests consistently praise the direct BTS station connection, superb infinity pool, polite staff hospitality, and comfortable luxury beds.","hotelUrl": "https://www.trip.com/hotels/bangkok-hotel-detail-1735479/","scrapedAt": "2026-11-10T14:15:30.000Z"}
🛠️ Step-by-Step API Integration
You can trigger and integrate the Trip.com Reviews Scraper programmatically in Python, Node.js, or cURL.
Python Example
from apify_client import ApifyClient# Initialize the Apify client with your API tokenclient = ApifyClient("YOUR_APIFY_TOKEN")# Prepare actor inputrun_input = {"startUrls": ["https://www.trip.com/hotels/bangkok-hotel-detail-1735479/"],"maxReviewsPerHotel": 100,"reviewLanguage": "all","travelType": "all","includeHotelInfo": True,}# Run the actor and wait for it to finishrun = client.actor("haketa/trip-com-reviews-scraper").call(run_input=run_input)# Fetch results from the run's default datasetfor item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"[{item.get('rating')}/10] {item.get('userName')}: {item.get('content')[:60]}...")
Node.js Example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: 'YOUR_APIFY_TOKEN',});const runInput = {startUrls: ['https://www.trip.com/hotels/bangkok-hotel-detail-1735479/'],maxReviewsPerHotel: 100,locale: 'en-US',};const run = await client.actor('haketa/trip-com-reviews-scraper').call(runInput);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Retrieved ${items.length} reviews.`);items.forEach(review => {console.log(`${review.userName} (${review.travelType}): ${review.rating} / 10`);});
cURL Execution
curl "https://api.apify.com/v2/acts/haketa~trip-com-reviews-scraper/runs?token=YOUR_APIFY_TOKEN" \-X POST \-H "Content-Type: application/json" \-d '{"startUrls": ["https://www.trip.com/hotels/bangkok-hotel-detail-1735479/"],"maxReviewsPerHotel": 50}'
📊 Complete Field Definitions & Extraction Rules
Understanding the nuances of review fields helps downstream data pipelines process customer sentiment effectively:
-
rating(Overall Satisfaction Score): Trip.com uses a native 1–5 or 1–10 scale depending on regional display. This scraper standardizes all ratings to a clean decimal string (e.g.,"9.6","10","8.4"), matching the official hotel score scale. -
ratingLocation,ratingFacility,ratingService,ratingRoom: Individual sub-ratings given by reviewers for specific stay aspects. When a reviewer leaves overall feedback without scoring specific aspects, these fields gracefully fall back to empty strings rather than misleading zeroes. -
travelType(Traveler Segments): Categorizes guests into standardized personas:Solo traveler: Single business or leisure guest.Couples: Romantic getaways and duo travel.Family: Family vacations with children or multi-generational groups.Friends: Group trips and friend vacations.Business: Corporate bookings and conference attendees.
-
images&videoCount: High-resolution image URLs are sanitized to strip thumbnail resize parameters, giving you access to the highest available resolution uploaded by the user. URLs are pipe-separated (|) for direct import into spreadsheets or cloud storage download scripts. -
hotelScore& Aspect Summaries: Attached property-level metadata provides instant context. TheaiSummaryfield reflects Trip.com's synthesized conclusion across thousands of historical guest opinions (e.g. highlighting exceptional breakfast, proximity to public transit, or modern fitness centers).
🔄 Supported Export Formats & Automated Pipelines
Apify provides native export endpoints and integrations for every dataset produced by this actor:
| Destination | Integration Method | Common Application |
|---|---|---|
| JSON / NDJSON | REST API direct fetch | Programmatic ingestion into data lakes, Elasticsearch, or MongoDB |
| CSV / Excel | One-click Console download | Spreadsheet analysis, Tableau, or Power BI reporting |
| Google Sheets | Apify Google Sheets integration | Real-time shared reputation dashboards for hotel managers |
| Webhook / Make / Zapier | On run completion trigger | Instant Slack alerts for critical low-rating reviews |
| PostgreSQL / Snowflake | Airbyte / Singer connectors | Long-term historical trend warehousing and sentiment modeling |
💡 Troubleshooting & Best Practices
- Zero Reviews Returned for a Given URL:
Verify that the URL links to a hotel detail page (e.g.,
https://www.trip.com/hotels/...-hotel-detail-1735479/). If a hotel is brand new or recently onboarded to Trip.com, it may not have any public reviews yet. - Handling Multi-Language Properties:
If you only want native English reviews, set
reviewLanguage: "en". However, leavingreviewLanguage: "all"is strongly recommended because the actor automatically provides thetranslatedContentfield, ensuring you capture maximum guest volume without missing non-English sentiment. - Scaling Up to Thousands of Reviews:
When extracting reviews for huge resort complexes (5,000+ reviews), set
maxReviewsPerHotel: 0and ensure your Apify run timeout is set appropriately (e.g., 600–1200 seconds).
-
Unlocking 1,000+ Reviews: Set
maxReviewsPerHotel: 0to enable full pagination. The scraper automatically walks through 50-item pages until the entire historical review archive is exhausted. -
Language-Specific Inbound Analysis: If analyzing Japanese or Korean tourist expectations for European properties, set
reviewLanguage: "ja"orreviewLanguage: "ko". The actor filters target reviews directly at the request level, saving bandwidth and processing time while still providing English translations. -
Multi-Property Benchmarking: Submit an array of hotel URLs in
startUrls. The scraper processes properties sequentially with intelligent delay jitter to maintain persistent session stability. -
Fast Validation & Monitoring Runs: For regular daily or weekly heartbeat runs, use
maxReviewsPerHotel: 50or100to capture only newly posted guest entries in seconds. -
Proxy Optimization: Apify Proxy is enabled by default. Datacenter proxies offer exceptional speed and throughput for Trip.com's endpoints, providing cost efficiency at scale.
❓ Frequently Asked Questions (FAQ)
Can I scrape Ctrip hotel URLs directly? Yes. Ctrip and Trip.com operate on the same unified hotel review infrastructure. You can provide standard Trip.com or Ctrip hotel URLs and the actor will extract reviews seamlessly.
How does AI translation work?
Trip.com generates real-time translations for foreign-language reviews. The actor extracts both the untouched raw native review text (content) and the AI-translated text (translatedContent) aligned with your chosen locale setting.
Is authentication or login required? No login, credentials, or cookies are required. All scraped data is publicly visible feedback on Trip.com's public hotel listings.
How fast is the scraper? Because the actor interacts directly with high-performance JSON endpoints, a typical run fetches 50 reviews in under 1 second. Scraping 1,000 reviews generally completes in under 15–20 seconds.
Can I export the dataset to Google Sheets, CSV, or an external database? Yes. Every Apify Actor run provides direct export endpoints for JSON, CSV, and XLSX. You can also automate data ingestion using Apify webhooks, Zapier, Make.com, n8n, or direct REST API calls.
How does deduplication work?
The scraper tracks review identifiers (reviewId) in memory per target property. Even if network latency causes retried page responses, duplicate reviews are automatically eliminated before pushing to the Apify dataset.
What happens if a hotel has no reviews? If a newly listed property has zero reviews or is temporarily delisted, the actor logs a clear informational note and proceeds cleanly to the next property in your input list without crashing.
Can I run this scraper on a recurring schedule? Yes. Through Apify's scheduling feature, you can trigger runs daily, weekly, or monthly to keep your reputation monitoring database continuously synchronized.
🔗 Related Travel & Hospitality Scrapers
Expand your travel intelligence coverage with complementary scrapers:
- Trustpilot Reviews Scraper — Extract customer trust scores, ratings, and feedback for global travel agencies.
- Klook Reviews Scraper — Gather ratings, tour reviews, and experience feedback across Asia-Pacific attractions.
- Despegar Reviews Scraper — Scrape Latin American hotel ratings, packages, and guest testimonials.
- Google Maps Scraper — Extract business details, contact information, and coordinates worldwide.
- Turo Scraper — Peer-to-peer car sharing prices, ratings, and vehicle availability.
📋 Changelog
- v1.2 (2026-11)
- Unlocked unlimited 1,000+ deep review pagination by removing artificial page caps.
- Standardized zero-config demo execution with fast 50-review prefill (< 20s run time).
- Enhanced field normalization for sub-ratings, user grade tiers, and localized translations.
- Streamlined retry resiliency against transient proxy network disconnections.
- v1.1 (2026-09)
- Added AI translation capture for multi-lingual hotel reviews.
- Implemented aspect summary extraction and category rating distributions.
- v1.0 (2026-08)
- Initial public release supporting Trip.com and Ctrip hotel review extraction with photo/video links.