Trip.com Reviews Scraper avatar

Trip.com Reviews Scraper

Pricing

from $0.35 / 1,000 review saveds

Go to Apify Store
Trip.com Reviews Scraper

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

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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. maxReviewsPerHotel limits that page; it does not unlock older pages.
  • Diagnostics: RUN_SUMMARY records every hotel outcome. RUN_CHECKPOINT preserves 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 a sinceDate cutoff.
  • 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.

ExampleWhat it demonstrates
Lowest-rated Trip.com reviewsOne hotel ID, 10 rows, ratingLow, and a compact review-only snapshot.
Trip.com hotel reviews by IDOne hotel ID, 10 recommended rows, and hotel summary fields.
Trip.com hotel reviews by URLOne 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 groupFields
Hotel identityhotelId, hotelName, hotelUrl, sourceDomain
ReviewreviewId, reviewText, translatedReviewText, reviewDate, language
Scoresrating, ratingScale, ratingText, subRatings, helpfulVotes
StaystayDate, travelType, roomType
ReviewerreviewerName, reviewerCountry, reviewerLevel, reviewerContributionCount
Hotel replyownerResponseText, ownerResponseDate
MediaimageUrls, videoUrls
ProvenancesourceUrl, scrapedAt, pageNumber, sortBy
CompletenessreviewsAvailable, 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

SettingJSON keyDefaultDescription
Hotel URLshotelUrlsNonePublic HTTPS Trip.com/Ctrip hotel URLs containing a numeric hotel ID.
Hotel IDshotelIdsNoneNumeric hotel IDs with at least five digits.
Maximum reviewsmaxReviewsPerHotel20Saves at most this many rows from each bounded public-page snapshot. Range: 1–1,000.
SortsortByrecommendedClient-side order: recommended, newest, ratingHigh, or ratingLow.
Since datesinceDateNoneKeeps embedded reviews on or after a valid YYYY-MM-DD date.
Include hotel summaryincludeHotelSummarytrueIncludes the public hotel name on review rows. Stable IDs and diagnostics remain present.
Include media URLsincludeImagestrueIncludes public image and video URLs when present. No files are downloaded.
Localelocaleen-US,en;q=0.9Accept-Language value used for the public page request.
CurrencycurrencyUSDCompatibility field retained for existing workflows; review extraction does not depend on price currency.
Proxy configurationproxyConfigurationDisabledOptional user-configured route. No proxy escalation occurs automatically.
Resume checkpointresumeFromCheckpointfalseReads pending hotels from RUN_CHECKPOINT in the same key-value store.
Work timemaxRuntimeSecs270Actor 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: hasMoreReviews is true and warnings explains 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_CHECKPOINT for idempotent resume.
  • Charge-limit stop: Only rows accepted by the paid dataset operation count as saved. Remaining work is checkpointed when maxTotalChargeUsd is 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 contextStart per runPer saved reviewPer 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" with sinceDate for repeat monitoring.
  • Deduplicate appended snapshots downstream on hotelId plus reviewId.
  • Inspect hasMoreReviews and warnings; 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_SUMMARY for 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 os
from apify_client import ApifyClient
client = 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().items
print(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.

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_SUMMARY error;
  • one reproducible public URL that you are permitted to test.