Trip.com Reviews Scraper
Pricing
from $0.35 / 1,000 review saveds
Trip.com Reviews Scraper
Export bounded public Trip.com and Ctrip hotel review snapshots with ratings, guest text, stay details, replies, media URLs, and completeness warnings.
Pricing
from $0.35 / 1,000 review saveds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Export bounded public Trip.com and Ctrip hotel review snapshots with ratings, guest text, stay details, owner replies, public media URLs, and explicit completeness warnings.
The Actor accepts hotel URLs or IDs and writes one paid dataset row per saved review. It is designed for small, permissioned public-page snapshots—not complete historical pagination.
What does this Actor do?
- Input: Up to 100 public hotel URLs or numeric hotel IDs.
- Output: Review text, scores, stay and reviewer context, replies, media signals, source links, and snapshot completeness fields.
- Public-page limit: Trip.com normally embeds only a bounded newest-review page.
maxReviewsPerHotellimits that page; it does not unlock older pages. - Diagnostics:
RUN_SUMMARYrecords every hotel outcome.RUN_CHECKPOINTpreserves pending hotels before the safe deadline. - Access: No login, cookies, CAPTCHA handling, automatic proxy escalation, or private account data.
Use cases
- Export a small, permissioned hotel-review snapshot for service-quality analysis.
- Monitor newly embedded reviews with
sortBy: "newest"and asinceDatecutoff. - Add public rating, stay, reply, and media context to an authorized hotel dataset.
Ready-to-run examples
Each input example below is a tested public task that you can duplicate, adjust, and run with your own Apify account.
| Example | What it demonstrates |
|---|---|
| Lowest-rated Trip.com reviews | One hotel ID, 10 rows, ratingLow, and a compact review-only snapshot. |
| Trip.com hotel reviews by ID | One hotel ID, 10 recommended rows, and hotel summary fields. |
| Trip.com hotel reviews by URL | One public hotel URL, 10 newest rows, summary fields, and public image URLs when available. |
For interrupted multi-hotel work, rerun from the same key-value store with resumeFromCheckpoint: true. Only use resume after a prior attempt wrote pending targets to RUN_CHECKPOINT.
Output fields
| Data group | Fields |
|---|---|
| Hotel identity | hotelId, hotelName, hotelUrl, sourceDomain |
| Review | reviewId, reviewText, translatedReviewText, reviewDate, language |
| Scores | rating, ratingScale, ratingText, subRatings, helpfulVotes |
| Stay | stayDate, travelType, roomType |
| Reviewer | reviewerName, reviewerCountry, reviewerLevel, reviewerContributionCount |
| Hotel reply | ownerResponseText, ownerResponseDate |
| Media | imageUrls, videoUrls |
| Provenance | sourceUrl, scrapedAt, pageNumber, sortBy |
| Completeness | reviewsAvailable, reviewsExtracted, hasMoreReviews, warnings |
Optional public fields are returned as null or an empty array. The Actor does not invent missing reviewer, stay, translation, reply, or media values.
Example output
{"hotelId": "129054778","hotelName": "KOKO HOTEL Tokyo Nishikasai","hotelUrl": "https://www.trip.com/hotels/tokyo-hotel-detail-129054778/koko-hotel-tokyo-nishikasai/","sourceDomain": "www.trip.com","reviewId": "2022013946","reviewText": "A public guest review...","translatedReviewText": null,"rating": 10,"ratingScale": 10,"ratingText": "Outstanding","subRatings": { "cleanliness": 10, "service": 9.5 },"reviewDate": "2026-07-15","stayDate": "2026-07-01","travelType": "Business traveler","roomType": "Standard Twin Room","reviewerName": "Guest User","reviewerCountry": "United States","reviewerLevel": null,"reviewerContributionCount": 4,"ownerResponseText": null,"ownerResponseDate": null,"imageUrls": [],"videoUrls": [],"helpfulVotes": 2,"scrapedAt": "2026-07-20T00:00:00.000Z","sourceUrl": "https://www.trip.com/hotels/tokyo-hotel-detail-129054778/koko-hotel-tokyo-nishikasai/","pageNumber": 1,"sortBy": "newest","reviewsAvailable": 922,"reviewsExtracted": 10,"hasMoreReviews": true,"warnings": ["Trip.com reports 922 reviews, but this public page exposed 15; output is a bounded page snapshot, not complete history."]}
Input settings
| Setting | JSON key | Default | Description |
|---|---|---|---|
| Hotel URLs | hotelUrls | None | Public HTTPS Trip.com/Ctrip hotel URLs containing a numeric hotel ID. |
| Hotel IDs | hotelIds | None | Numeric hotel IDs with at least five digits. |
| Maximum reviews | maxReviewsPerHotel | 20 | Saves at most this many rows from each bounded public-page snapshot. Range: 1–1,000. |
| Sort | sortBy | recommended | Client-side order: recommended, newest, ratingHigh, or ratingLow. |
| Since date | sinceDate | None | Keeps embedded reviews on or after a valid YYYY-MM-DD date. |
| Include hotel summary | includeHotelSummary | true | Includes the public hotel name on review rows. Stable IDs and diagnostics remain present. |
| Include media URLs | includeImages | true | Includes public image and video URLs when present. No files are downloaded. |
| Locale | locale | en-US,en;q=0.9 | Accept-Language value used for the public page request. |
| Currency | currency | USD | Compatibility field retained for existing workflows; review extraction does not depend on price currency. |
| Proxy configuration | proxyConfiguration | Disabled | Optional user-configured route. No proxy escalation occurs automatically. |
| Resume checkpoint | resumeFromCheckpoint | false | Reads pending hotels from RUN_CHECKPOINT in the same key-value store. |
| Work time | maxRuntimeSecs | 270 | Actor work budget from 31–270 seconds; at least 30 seconds remain for persistence and cleanup. |
At least one hotel URL or ID is required unless resumeFromCheckpoint is enabled. Missing input fails before the start charge or any network request.
Run outcomes and completeness
The dataset contains paid review rows only. Hotel-level errors and legitimate empty outcomes stay in the unpaid RUN_SUMMARY record.
- Confirmed empty: Trip.com reports zero reviews. The hotel can finish with no rows and a successful summary.
- Filtered empty: The public page exposed reviews, but none matched
sinceDate. - Incomplete snapshot:
hasMoreReviewsis true andwarningsexplains the gap between the aggregate count and embedded rows. - Unexpected empty: Trip.com reports reviews but exposes no recognized rows. That hotel is marked failed instead of silently succeeding.
- Partial run: Valid hotels retain their paid rows when another hotel fails.
- Deadline stop: Pending hotels and saved review keys are written to
RUN_CHECKPOINTfor idempotent resume. - Charge-limit stop: Only rows accepted by the paid dataset operation count as saved. Remaining work is checkpointed when
maxTotalChargeUsdis reached.
Pricing
This Actor uses pay-per-event pricing. The start event is charged once after validation; the item event is coupled to each successfully persisted review row. Error and status diagnostics are not dataset rows and are not item-charged.
| Apify plan context | Start per run | Per saved review | Per 1,000 saved reviews |
|---|---|---|---|
| Free | $0.005 | $0.000575 | $0.575 |
| Starter / Bronze | $0.005 | $0.000500 | $0.500 |
| Scale / Silver | $0.005 | $0.000425 | $0.425 |
| Business / Gold | $0.005 | $0.000350 | $0.350 |
| Platinum | $0.005 | $0.000275 | $0.275 |
| Diamond | $0.005 | $0.000275 | $0.275 |
The live Store pricing table controls the final charge shown before a run. This documentation reflects the active prices checked on July 20, 2026.
Tips for reliable snapshots
- Start with one known public hotel and 5–10 reviews.
- Use
sortBy: "newest"withsinceDatefor repeat monitoring. - Deduplicate appended snapshots downstream on
hotelIdplusreviewId. - Inspect
hasMoreReviewsandwarnings; never treat the dataset as complete review history when the public page exposes only a subset. - If a page returns an access challenge, retry later with a smaller workload. The Actor does not solve CAPTCHAs or escalate routes automatically.
Limits and responsible use
- This release supports the public server-rendered first-page snapshot only. It does not claim historical pagination.
- Trip.com/Ctrip can change page content, omit optional fields, return regional variants, or temporarily challenge requests.
- Hotel IDs and public payload availability vary between Trip.com and Ctrip surfaces. Check
RUN_SUMMARYfor each hotel outcome. - The Actor does not use login sessions, private APIs, partner credentials, cookies, or account-only data.
- Trip.com’s current terms restrict commercial use of Website content without a licence. Use this Actor only when you have permission or another lawful basis covering your collection, export, retention, and commercial use. Public visibility alone is not permission.
- Review text is user-generated. Minimize retained personal data and use human review for consequential decisions.
API usage
Node.js:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("fetch_cat/trip-com-reviews-scraper").call({hotelIds: ["129054778"],maxReviewsPerHotel: 10,sortBy: "newest"});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("fetch_cat/trip-com-reviews-scraper").call(run_input={"hotelIds": ["129054778"],"maxReviewsPerHotel": 10,"sortBy": "newest",})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
cURL:
curl -X POST \"https://api.apify.com/v2/acts/fetch_cat~trip-com-reviews-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"hotelIds":["129054778"],"maxReviewsPerHotel":10,"sortBy":"newest"}'
Use with MCP and AI agents
Use the official Apify MCP server with a focused single-Actor URL:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=fetch_cat/trip-com-reviews-scraper"
Claude Desktop, Cursor, or VS Code configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/trip-com-reviews-scraper"}}}
Example prompts:
- “Export the newest 10 public reviews for hotel ID 129054778 and include completeness warnings.”
- “Compare the lowest-rating rows in these permissioned Trip.com hotel snapshots.”
- “Show which hotels returned incomplete snapshots by checking
hasMoreReviews.”
Schedule hotel review monitoring
Run a small input daily or weekly with sortBy: "newest". Append each dataset to long-term storage and compare stable reviewId values. Use a webhook to notify your workflow when a new review meets your own score or text criteria.
FAQ
Does the Actor return every historical Trip.com review?
No. It returns the bounded review rows exposed in the public server-rendered page. reviewsAvailable, reviewsExtracted, hasMoreReviews, and warnings make that distinction explicit.
Does it require login, cookies, or a Trip.com API key?
No. It supports anonymous public hotel pages only.
Can I use a proxy?
You can explicitly provide an Apify proxy configuration when your permission and use case allow it. Direct access is the default, and the Actor never switches routes automatically.
Why did a hotel return no paid rows?
Open RUN_SUMMARY. It distinguishes confirmed zero reviews, date-filtered empty results, removed URLs, access errors, malformed responses, and changed public-page shapes.
Can I export CSV, Excel, JSON, XML, RSS, or use an API?
Yes. Apify datasets support those exports and programmatic access.
Is commercial use permitted?
Trip.com’s current terms say Website content cannot be used commercially without a licence. Obtain appropriate permission and assess applicable privacy, copyright, and database rules before commercial use.
Related Actors
- Trip.com Hotels Scraper — collect public hotel listing records before a permissioned review workflow.
- Agoda Reviews Scraper — export public Agoda guest-review data.
- Booking Reviews Scraper — collect public Booking.com review records.
- Google Maps Reviews Scraper — export public place-review data.
- Trustpilot Reviews Scraper — collect public business-review records.
Support
If a run fails or the output looks wrong, open an issue or report a bug from the Actor page. Include:
- the Apify run ID or run URL;
- the input JSON;
- the expected output;
- the actual output or
RUN_SUMMARYerror; - one reproducible public URL that you are permitted to test.