# Trip.com & Ctrip Hotel Reviews Scraper (`sian.agency/ctrip-trip-hotel-reviews-scraper`) Actor

Trip.com & Ctrip hotel reviews scraper — pull guest reviews with overall + sub-ratings, review text, check-in dates, travel type, photos and hotel replies. Search by city or hotel URL. Structured JSON/CSV for analytics and AI.

- **URL**: https://apify.com/sian.agency/ctrip-trip-hotel-reviews-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Travel, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.25 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Trip.com & Ctrip Hotel Reviews Scraper — Hotels, Ratings & Guest Feedback 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Taobao Tmall Product Scraper](https://img.shields.io/badge/Store-Taobao%20Tmall%20Scraper-FF4F00)](https://apify.com/sian.agency/taobao-tmall-product-scraper?fpr=sian) [![Weibo Scraper](https://img.shields.io/badge/Store-Weibo%20Scraper-E6162D)](https://apify.com/sian.agency/weibo-scraper?fpr=sian) [![Xiaohongshu RedNote Scraper](https://img.shields.io/badge/Store-Xiaohongshu%20Scraper-FF2442)](https://apify.com/sian.agency/xiaohongshu-rednote-scraper?fpr=sian)

#### 🎉 Scrape guest reviews from Asia's largest OTA — ratings, sub-scores, photos & hotel replies in one run

##### Built for hotel marketers, revenue managers and China-travel researchers who need structured review data fast

***

### 🔎 What is the Trip.com & Ctrip Hotel Reviews Scraper — and when should you use it?

The **Trip.com & Ctrip Hotel Reviews Scraper** turns hotel reviews and city hotel records from Trip.com into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** guest ratings, review text, photos, check-in dates and hotel replies. City discovery supplies hotel IDs, names, scores and locations for a follow-up review run.

**Use something else when:** you need flight fares or room bookings. This actor returns hotel review and discovery records. It does not book rooms or collect flight fares.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/ctrip-trip-hotel-reviews-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want Trip.com hotel reviews and city hotel discovery records using the Apify Actor `sian.agency/ctrip-trip-hotel-reviews-scraper`.

Use it when I need: guest ratings, review text, photos, check-in dates and hotel replies. City discovery supplies hotel IDs, names, scores and locations for a follow-up review run.

Don't use it when: This actor returns hotel review and discovery records. It does not book rooms or collect flight fares.

How to call it: choose hotelReviews with hotelUrlOrId for a single hotel, or cityHotels with cityName. Set maxPages to bound review pagination and maxHotels to bound city discovery. Enable scrapeReviewsForCityHotels to fetch reviews for discovered hotels.

Start with this input:
{
  "operation": "hotelReviews",
  "hotelUrlOrId": "702258",
  "maxPages": 1
}

Ask me which hotel or city to cover and how many review pages to collect, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Collect the first page of guest reviews for hotel 702258.*
- *Find hotels in Beijing with their ratings and locations.*
- *Compare recent guest comments and hotel replies for a property.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/ctrip-trip-hotel-reviews-scraper.md](https://apify.com/sian.agency/ctrip-trip-hotel-reviews-scraper.md).

### 📋 Overview

**Trip.com & Ctrip Hotel Reviews Scraper** pulls guest reviews from any Trip.com / Ctrip hotel — by hotel URL, hotel ID, or automatic city discovery — and returns clean, analysis-ready rows. No login, no API key, no browser overhead.

**Why professionals choose us:**

- ✅ **Every review, richly structured**: overall rating + 4 sub-ratings (location, facility, service, room), review text, language, travel type, check-in date, photos
- ⚡ **Fastest architecture in the niche**: direct API calls — 10 reviews per request, no headless browser, no wasted compute
- 🎯 **City → hotels → reviews in one run**: paste a city name, discover hotels with scores & review counts, optionally pull every review automatically
- 💬 **Owner replies included**: hotel management responses and reply dates on every review that has one
- 👤 **Reviewer enrichment**: reviewer region, Trip.com member level (Diamond…), review-expert grade and lifetime review count
- 💰 **Pay-per-review pricing** — you're only charged for successful rows, never for errors

***

### ✨ Features

- 🏨 **Hotel Reviews by URL or ID** — paste any Trip.com hotel URL (`https://us.trip.com/hotels/detail/?hotelId=702258`) or just the ID
- 🔎 **City Hotel Discovery** — type `Beijing`, `Tokyo`, `Barcelona` or `香港` and get the city's top 5 hotels with score, review count and location
- 💬 **Bulk mode** — discover a city's hotels AND scrape reviews for each in a single run
- ⭐ **Sub-rating breakdown** — location / facility / service / room scores per review
- 🖼️ **Review photos** — full-resolution image URLs per review
- 🌐 **Language control** — English or Chinese output labels; per-review language tag always included
- 📄 **Deep pagination** — up to 100 pages (~1,000 reviews) per hotel
- 🧾 **Room-type context** — which room the guest booked, when available
- 📊 **Hotel aggregates** — property-level score & total review count stamped on every row
- 🤖 **API-first** — call from Node, Python, cURL, n8n, Zapier or Make

***

### 🎬 Quick Start

Open the actor, choose an operation, run. That's it.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~ctrip-trip-hotel-reviews-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"hotelReviews","hotelUrlOrId":"https://us.trip.com/hotels/detail/?hotelId=702258","maxPages":3}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick your entry point

Have a hotel URL or ID? Use **Hotel Reviews**. Only know the city? Use **City Hotels**.

#### Step 2: Configure

Set `maxPages` (10 reviews per page). For city mode, optionally enable review scraping for every discovered hotel.

#### Step 3: Run & export

Get clean JSON/CSV/Excel from the Apify dataset.

**That's it! In under a minute, you'll have:**

- Review text with ratings and sub-scores
- Reviewer profiles (region, level, grade)
- Owner replies and photo URLs

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| operation | select | Yes | `hotelReviews` or `cityHotels` |
| hotelUrlOrId | string | for hotelReviews | Trip.com hotel URL or numeric hotel ID |
| cityName | string | for cityHotels | City name, English or Chinese |
| scrapeReviewsForCityHotels | boolean | No | Also scrape reviews for each discovered hotel |
| maxHotels | integer | No | Max hotels per city (1-25, default 10). Trip.com shows up to 5 per city |
| maxPages | integer | No | Review pages per hotel (1-100, default 5; 10 reviews/page) |
| language | select | No | `en-US` (default) or `zh-CN` output labels |

**Example — single hotel:**

```json
{
  "operation": "hotelReviews",
  "hotelUrlOrId": "https://us.trip.com/hotels/detail/?hotelId=702258",
  "maxPages": 5
}
```

**Example — city discovery + reviews:**

```json
{
  "operation": "cityHotels",
  "cityName": "Beijing",
  "scrapeReviewsForCityHotels": true,
  "maxHotels": 10,
  "maxPages": 3
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **25+ fields** per review row:

| Field | Type | Description |
|-------|------|-------------|
| reviewId | string | Unique review ID |
| hotelId / hotelName | string | Hotel identifiers |
| rating | number | Overall score (0-10) |
| ratingLocation/Facility/Service/Room | number | Sub-scores |
| content | string | Full review text |
| language | string | Review language tag |
| travelType | string | Family, Business, Solo… |
| checkinDate / createdDate | string | Stay & review dates |
| thumbnail | string | First review photo (preview) |
| imageUrls | array | Review photo URLs |
| ownerReply / ownerReplyDate | string | Hotel management response |
| reviewerName / reviewerRegion | string | Reviewer profile |
| reviewerLevel / reviewerGrade | string | Diamond, Review Expert… |
| hotelScore / hotelReviewCount | number/integer | Property aggregates |

**Example:**

```json
{
  "status": "success",
  "platform": "tripcom",
  "reviewId": "2091351994",
  "hotelId": "702258",
  "rating": 10,
  "ratingText": "Outstanding",
  "content": "Good location if you want to go to the Central Phuket. Room is spacious and clean…",
  "language": "en",
  "travelType": "Family",
  "checkinDate": "2026-09-01 00:00:00",
  "createdDate": "2026-09-04 16:59:27",
  "reviewerName": "BeccaSavingMemories",
  "reviewerRegion": "Malaysia",
  "reviewerLevel": "Diamond",
  "hotelName": "Dara Hotel",
  "hotelScore": 8.8,
  "hotelReviewCount": 1896,
  "ownerReply": null
}
```

***

### 💼 Use Cases & Examples

#### 1. Competitive Benchmarking

**A revenue manager at a Bangkok resort** tracks competitor guest scores weekly. **Input:** 5 rival hotel IDs. **Output:** sub-rating deltas (service 8.9 vs our 9.2). **Use:** target service training where the gap closes revenue.

#### 2. Guest Sentiment Mining

**A data analyst at a hotel group** exports 10,000 multilingual reviews for NLP. **Input:** city mode, reviews on. **Output:** tagged corpus with language + travel type. **Use:** topic modeling on complaints by segment.

#### 3. China Market Entry Research

**A Western brand entering China** studies which properties guests praise in Shanghai. **Input:** `Shanghai`, discovery only. **Output:** ranked hotels with scores and locations. **Use:** shortlist partnership targets.

#### 4. Reputation Monitoring

**A small chain's GM** runs monthly for their 3 properties. **Input:** 3 hotel IDs. **Output:** new reviews with owner-reply status. **Use:** catch unanswered negatives within days, not quarters.

#### 5. LLM Training & RAG

**An AI team** builds a hospitality sentiment model. **Input:** bulk hotel IDs. **Output:** rating + text + metadata pairs. **Use:** fine-tuning or grounding a guest-experience copilot.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/ctrip-trip-hotel-reviews-scraper').call({
  operation: 'hotelReviews',
  hotelUrlOrId: '702258',
  maxPages: 5,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/ctrip-trip-hotel-reviews-scraper').call(
    run_input={'operation': 'cityHotels', 'cityName': 'Beijing',
               'scrapeReviewsForCityHotels': True, 'maxPages': 2}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~ctrip-trip-hotel-reviews-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"hotelReviews","hotelUrlOrId":"702258","maxPages":2}'
```

#### Automation Workflows (n8n / Zapier / Make)

1. **Trigger**: schedule (weekly) or webhook
2. **HTTP Request**: call the actor API with your hotel list
3. **Process**: filter rows by rating < 7
4. **Action**: Slack alert / sheet append / dashboard update

***

### 📊 Performance & Pricing

#### Try it now

Every run starts cheap and scales with volume — you pay only for successful rows, never for errors.

#### Pay-per-result

- **$0.003 per review** (Bronze) — volume discounts apply automatically on higher plans
- **$0.002 per discovered hotel** in city mode
- Errors are never charged

💰 **In-pack pricing with the niche's top actors — with a faster architecture and richer rows.**

🔗 [View current pricing](https://apify.com/sian.agency/ctrip-trip-hotel-reviews-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many reviews can I scrape?**
A: Up to 100 pages (~1,000 reviews) per hotel per run, and unlimited hotels via repeat runs.

**Q: Trip.com or Ctrip — which one does this cover?**
A: Both — they share one inventory system. Any hotel visible on trip.com works, including China domestic properties.

**Q: Do I need a login or API key?**
A: No. Everything runs on Apify's infrastructure with rotating residential proxies built in.

**Q: What languages are the reviews in?**
A: Whatever guests wrote — each row carries a `language` tag. Set output labels to English or Chinese.

**Q: What output formats are available?**
A: JSON, CSV, Excel — export directly from the Apify dataset.

**Q: Is this legal?**
A: We only extract publicly visible reviews. See our [legal section](#-is-it-legal-to-scrape-data).

**Q: How fast is it?**
A: ~10 reviews per request with polite pacing — a 500-review hotel takes under 2 minutes.

***

### 🐛 Troubleshooting

**"No reviews found for this hotel ID"**

- The ID may be from a property not bookable on the international site. Open the hotel page on us.trip.com to confirm it exists there, then copy the ID from the URL.

**City returned no hotels**

- Type the city as you would in Trip.com's search box, in English (`Beijing`, not `Peking`) or Chinese (`北京`).

**Run failed with a blocking message**

- The data source occasionally throttles. Retry in a few minutes — retries are automatic within a run.

***

### ⚠️ Trademark Disclaimer

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Trip.com Group or Ctrip. Trip.com® and Ctrip® are trademarks of their respective owners, referenced under nominative fair use to describe the data source.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/ctrip-trip-hotel-reviews-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

🎯 **PICK ONE OPERATION PER RUN.** Each run produces one clean dataset matching the chosen mode.

- **🏨 Hotel Reviews** — all guest reviews for one hotel, by hotel URL or ID (paginated, ~10 reviews/page, with owner replies and photos)
- **🔎 City Hotels** — discover hotels in a city by name (e.g. `Beijing`) with score/review-count/location, then scrape their reviews

💡 **TIP:** Run City Hotels first to get hotelIds, then run Hotel Reviews per hotel.

## `hotelUrlOrId` (type: `string`):

🏨 **Required for `Hotel Reviews`.**

Paste any Trip.com / Ctrip hotel detail URL or just the numeric hotel ID:

- `https://us.trip.com/hotels/detail/?hotelId=702258`
- `702258`

The ID is extracted automatically from either form.

⚠️ **Ignored** for City Hotels.

## `cityName` (type: `string`):

🏙️ **Required for `City Hotels`.**

Any city you could type into Trip.com's search box, in English or Chinese: `Beijing`, `Tokyo`, `Barcelona`, `香港`.

The actor looks the city up the way the site does, then fetches its top hotels with guest score, review count and location. Turn on review scraping to also pull each hotel's reviews.

⚠️ **Ignored** for Hotel Reviews.

## `scrapeReviewsForCityHotels` (type: `boolean`):

💬 **For `City Hotels` only.** After discovering hotels, also pull guest reviews for each one (up to `maxPages` review pages per hotel).

Off = discovery only (hotel rows are cheaper). On = discovery + full reviews.

## `maxHotels` (type: `integer`):

🏨 **For `City Hotels`.** Most hotels to return per city. Trip.com shows its top 5 hotels for a city here, so anything above 5 still returns 5.

## `maxPages` (type: `integer`):

📄 **Applies to review fetching** (Hotel Reviews, or City Hotels with review scraping on).

\~10 reviews per page.

💡 Start with 1-3 pages to preview before scaling.

⚠️ Hard cap: 100 pages (= ~1,000 reviews) per hotel.

## `language` (type: `string`):

🌐 Request locale used upstream. `en-US` returns English text, translated review labels and English city names. `zh-CN` returns Chinese.

## Actor input object example

```json
{
  "operation": "hotelReviews",
  "hotelUrlOrId": "https://us.trip.com/hotels/detail/?hotelId=702258",
  "cityName": "Beijing",
  "scrapeReviewsForCityHotels": false,
  "maxHotels": 10,
  "maxPages": 5,
  "language": "en-US"
}
```

# Actor output Schema

## `hotelRecords` (type: `string`):

Hotel reviews or hotel discovery rows — one flat row per review/hotel with curated camelCase aliases.

## `report` (type: `string`):

HTML report with run status, success/error row counts, success rate, pages fetched, duration, and the inputs used — written even on fatal crash.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "hotelUrlOrId": "https://us.trip.com/hotels/detail/?hotelId=702258",
    "cityName": "Beijing"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/ctrip-trip-hotel-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "hotelUrlOrId": "https://us.trip.com/hotels/detail/?hotelId=702258",
    "cityName": "Beijing",
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/ctrip-trip-hotel-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "hotelUrlOrId": "https://us.trip.com/hotels/detail/?hotelId=702258",
  "cityName": "Beijing"
}' |
apify call sian.agency/ctrip-trip-hotel-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/ctrip-trip-hotel-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1Kv0ymJZRUuWaQ5K6/builds/EMsDITpRNcm1y6MQL/openapi.json
