Trip.com Reviews Scraper avatar

Trip.com Reviews Scraper

Pricing

from $0.49 / 1,000 results

Go to Apify Store
Trip.com Reviews Scraper

Trip.com Reviews Scraper

Extracts the aggregate rating and latest guest reviews for any hotel listed on Trip.com by hotel review-page URL.

Pricing

from $0.49 / 1,000 results

Rating

0.0

(0)

Developer

Ibnu Adzim

Ibnu Adzim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Extracts the aggregate rating and latest guest reviews for any hotel listed on Trip.com — just give it the hotel's review-page URL.

Why use this actor

  • No account, no login, no API key — works on public hotel pages only.
  • Returns the hotel's aggregate rating (score, best-possible score, total review count) plus the platform's most recent guest reviews, each with rating, full text, reviewer name, and publish date.
  • Every hotel you submit gets at least one output row — including a clear diagnostic reason on the rare rows that couldn't be fetched, so nothing silently disappears from your results.

How it works

  1. You give the actor one or more Trip.com hotel review-page URLs.
  2. For each hotel, it reads the rating and reviews directly out of the page's own structured data — no separate API call, no pagination to manage.
  3. Results are streamed to your dataset as they finish.
  4. You export the finished dataset as JSON, CSV, or Excel straight from the Apify Console.

Input

{
"hotelUrls": [
"https://us.trip.com/hotels/singapore-hotel-detail-995074/hotel-royal-singapore/review.html"
],
"maxConcurrency": 5
}
FieldTypeDescription
hotelUrlsarray of stringsTrip.com hotel review page URLs — look for the "Reviews" tab/link on a hotel's page; the URL ends in /review.html.
maxConcurrencyintegerHow many hotels to process at the same time. Default 5.
proxyConfigurationobjectOptional. Not required — no bot-mitigation was found on this page tier.

Output

Each hotel produces one summary row plus one review row per guest review. Real examples from a live run:

Summary row (recordType: "SUMMARY"):

{
"_input": "https://us.trip.com/hotels/singapore-hotel-detail-995074/hotel-royal-singapore/review.html",
"_source": "S1-review-page-jsonld",
"_scrapedAt": "2026-08-10T12:50:00Z",
"recordType": "SUMMARY",
"hotelUrl": "https://us.trip.com/hotels/singapore-hotel-detail-995074/hotel-royal-singapore/review.html",
"name": "Hotel Royal Singapore",
"aggregateRating": { "ratingValue": 8.4, "ratingCount": 1582, "bestRating": 10, "worstRating": 0 },
"_reviewsInDataset": 15,
"_reviewsTotalOnPlatform": 1582,
"_note": "Trip.com's review page publishes only its 15 most recent reviews as structured data; 1582 exist on the platform in total."
}

Review row (recordType: "REVIEW"):

{
"_input": "https://us.trip.com/hotels/singapore-hotel-detail-995074/hotel-royal-singapore/review.html",
"_source": "S1-review-page-jsonld",
"_scrapedAt": "2026-08-10T12:50:00Z",
"recordType": "REVIEW",
"hotelName": "Hotel Royal Singapore",
"reviewRating": { "ratingValue": 10, "bestRating": 10, "worstRating": "0" },
"reviewBody": "Bday staycation love staying at the hotel thank you enjoying the place with my friends thank you tripe.com",
"author": { "name": "Phoebe Baita" },
"datePublished": "2026-08-10 18:08:23"
}

When a hotel can't be found or the input isn't a Trip.com URL, the actor still emits one row for that input with a clear reason:

{
"_input": "https://us.trip.com/hotels/singapore-hotel-detail-999999999999/nonexistent-hotel/review.html",
"_source": "none",
"_scrapedAt": "2026-08-10T12:50:00Z",
"recordType": "ERROR",
"_error": "not_found",
"_errorDetail": "No Hotel structured data on ... -- likely a removed/invalid hotel ID."
}
FieldTypeDescription
_inputstringThe hotel URL you submitted.
_sourcestringWhich internal strategy produced this row. "none" on a failed row.
_scrapedAtstringUTC timestamp of when this row was produced.
recordTypestring"SUMMARY", "REVIEW", or "ERROR".
_reviewsInDataset / _reviewsTotalOnPlatform / _notePresent on a SUMMARY row only when the platform has more reviews than are published in this dataset — see Notes / limits below.
_errorstringPresent only on rows that couldn't be fetched, e.g. not_found, invalid_input.
_errorDetailstringHuman-readable detail for the error, present only alongside _error.
(all other fields)On a successful row, every field Trip.com's own structured data provides is passed through unchanged.

Notes / limits

  • Reviews are a snapshot, not full history. Trip.com's review pages publish only their 15 most recent reviews as structured data (confirmed across hotels with 470 to 1,582 total reviews) — there is no pagination available for this data source. aggregateRating.ratingCount always reflects the true total; the review rows in this dataset are the latest slice of it, flagged explicitly on the SUMMARY row whenever the total exceeds what's included.
  • Make sure you're using the hotel's review page (/review.html), not its general detail page — the detail-page URL format doesn't carry review data.

Other actors in this collection

ActorWhat it returns
Agoda Reviews ScraperGuest reviews for hotels listed on Agoda.com
GetYourGuide Reviews ScraperGuest reviews for tours/activities listed on GetYourGuide
Booking.com Reviews ScraperGuest reviews for hotels listed on Booking.com
Orbitz Hotel Reviews ScraperGuest reviews for hotels listed on Orbitz.com