# Trip Hotels Reviews Scraper (`stealth_mode/trip-hotels-reviews-scraper`) Actor

Scrape verified guest reviews from Trip.com hotel pages — including ratings, room types, travel purpose, images, and translated content. Perfect for hospitality analysts, OTA researchers, and reputation management teams needing structured review data.

- **URL**: https://apify.com/stealth\_mode/trip-hotels-reviews-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Trip.com Hotel Reviews Scraper: Extract Guest Reviews at Scale
---

### What Is Trip.com?

Trip.com is one of the world's largest online travel platforms, offering hotel bookings across hundreds of thousands of properties globally. Its review system aggregates verified post-stay feedback with rich metadata — ratings, room types, travel context, and media. Collecting this data manually is impractical at scale. The **Trip.com Hotel Reviews Scraper** automates extraction, turning review pages into structured, analysis-ready datasets.

---

### Overview

The **Trip.com Reviews Scraper** targets hotel detail pages and extracts all available guest reviews, including multilingual content, media attachments, and granular rating breakdowns. It is built for:

- **Hospitality analysts** benchmarking guest sentiment across properties
- **OTA researchers** studying review patterns by travel type or room category
- **Reputation management teams** monitoring feedback trends over time
- **Data scientists** building NLP datasets from multilingual hotel reviews

The scraper handles translated reviews, supports bulk URL input, and gracefully skips failed URLs to keep large runs stable.

---

### Input Format

```json
{
  "urls": [
    "https://www.trip.com/hotels/detail/?cityId=58&hotelId=426551&checkIn=2026-05-23&checkOut=2026-05-24&adult=2&children=0&curr=USD&locale=en-XX"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Field | Type | Description |
|---|---|---|
| `urls` | `array` | Hotel detail page URLs from Trip.com. Add one per line or use Bulk Edit. Each URL should point to a specific hotel detail page (including `hotelId` and date parameters). Multiple hotels can be added as separate entries. |
| `max_items_per_url` | `integer` | Maximum number of reviews to collect per URL. Default: `20`. Set higher (e.g., `200`) for comprehensive review collection on popular properties. |
| `ignore_url_failures` | `boolean` | If `true`, the scraper continues running when a URL fails instead of stopping the entire run. Recommended for bulk jobs. Default: `true`. |

> **Tip:** The hotel detail URL contains key parameters like `cityId`, `hotelId`, `checkIn`, and `checkOut`. The `hotelId` is the critical identifier — date parameters may affect availability display but the scraper targets review data regardless.

***

### Output Format

**Sample output**

```json
{
  "id": 1945384397,
  "useful_count": 0,
  "source": 1,
  "language": "zh",
  "translated_content": "Overall, it exceeded my expectations. For a price of 600+ in this location, it's quite good, especially since it includes breakfast and afternoon tea. This Ctrip voucher deal offered incredible value for money. It was Mother's Day on the day of check-in, and although there wasn't any special gesture, the sweet young lady at the front desk seemed to have upgraded my room. It was on a high floor and very quiet, with a spacious room and a large bed. The pillows were also very comfortable – excellent! 👌\n\nFirst, the positives: The location is superb, the room is spacious and comfortable, and the afternoon tea is better than breakfast. Plus, the 30th floor was a pleasant surprise with drinks, coffee, and toys. Both adults and children were thrilled! On the first day, a toy lost a leg, and on the second day, we found that the hotel had replaced it with a new one – truly fantastic! 👍\n\nNow, for the negatives: The breakfast really isn't worth it; I'd rather book a room-only rate and eat out, perhaps at Sister Hua. The restaurant seriously needs an overhaul, especially since it's on the first floor and the lighting isn't great, which spoiled the breakfast experience. Also, the TV in the room was exceptionally dim. With my aging eyes, I could barely see the screen, and I couldn't figure out how to adjust the brightness, so I barely watched it.\n\nOverall, the value for money is good, and the service is also quite decent. Keep up the good work!",
  "can_mark_useful": true,
  "check_in_date": "2026-05-01 00:00:00",
  "content": "整體超預期，這個地段600+的價位算不錯了，另外還含早含下午茶，攜程這波團券性價比拉滿。入住當天是母親節，雖然沒啥表示但酒店前台小美女貌似給升級了房間，樓層高挺安靜，房間和床都挺大，枕頭也挺舒服，不錯👌\n先説滿意的：地理位置優越、房間寬敞舒適、下午茶比早餐好。另外30樓有驚喜，飲品咖啡和玩具，大人小孩子開心極了，第一天玩了一個玩具少了一條腿，第二天就發現酒店給換了個新的，真棒👍。\n再説不好的：早餐真的算了不吃也罷，不如凈價訂房出去吃個華姐。餐廳真該整一下了，因為在一樓光線也不行，吃個早餐影響心情。還有就是房間的電視特別暗，我這老眼昏花，基本看不清屏幕，也不知道怎麼能調亮色，所以基本沒看了。\n總體來説性價比可以，服務也還不錯，繼續保持！",
  "create_date": "2026-05-12 15:54:35",
  "image_list": [
    "https://ak-d.tripcdn.com/images/0236612000sgdh9s685A5_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0236w12000sgdhlbe4C7F_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0235q12000sgdgzjr55D5_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0231l12000sgdhlbg0BCE_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0233u12000sgdhmsv2BA7_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0235m12000sgdhmsxF67B_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0230r12000sgdh5d81CBC_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0235312000sgdh1og5788_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0231s12000sgdh9shFF0E_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0233b12000sgdi1ts152B_R_150_150_R5_Q70_D.png",
    "https://ak-d.tripcdn.com/images/0236v12000sgdi1tw8102_R_150_150_R5_Q70_D.png"
  ],
  "rating": 9.5,
  "rating_max": 10,
  "comment_level": "Amazing",
  "room_type_name": "City View Room (High Floor With Panoramic Views + Breakfast & Hong Kong-Style Afternoon Tea + Unlimited High-Speed 5G Wi-Fi)",
  "travel_type": 30,
  "travel_type_text": "Family",
  "translate_from_real_review": "Translation provided by AI",
  "feedback_list": [
    {
      "content": "感謝閣下入住及對我們的讚許。期待再次為閣下服務！「讓客人享受舒適的入住體驗」是我們的宗旨，歡迎客人住宿期間遇上問題，隨時與我們客服/或大堂經理聯絡",
      "translate_content": "Thank you for your stay and for your kind words. We look forward to serving you again! Our mission is to provide our guests with a comfortable stay. Please feel free to contact our customer service or lobby manager if you encounter any problems during your stay.",
      "language": "zh",
      "type": 3,
      "create_date": "2026-05-12 00:00:00"
    }
  ],
  "user_info": {
    "head_picture_url": "https://ak-d.tripcdn.com/images/27c0812000na9jbqk7A54_C_130_130_Q70.jpg",
    "comment_count": 12,
    "nick_name": "V‍i‍c‍k‍i‍ ‍y‍u‍e‍n‍g",
    "avatar_bg_color": "#966A00",
    "avator_letter": "V",
    "level_info": {
      "cur_level_code": "30",
      "cur_level_name": "钻石贵宾",
      "reward_list": [
        {
          "reward_i_d": "1",
          "category_name": "免费早餐",
          "total_used_count": 2,
          "float_icon_url": "https://pages.c-ctrip.com/wireless-app/imgs/member_rights/hotel_breakfast.png"
        },
        {
          "reward_i_d": "2",
          "category_name": "免费取消",
          "total_used_count": 2,
          "float_icon_url": "https://pages.c-ctrip.com/wireless-app/imgs/member_rights/hotel_cancel.png"
        },
        {
          "reward_i_d": "3",
          "category_name": "延迟退房",
          "total_used_count": 2,
          "float_icon_url": "https://pages.c-ctrip.com/wireless-app/imgs/member_rights/hotel_delay.png"
        },
        {
          "reward_i_d": "4",
          "category_name": "房型升级",
          "total_used_count": 2,
          "float_icon_url": "https://pages.c-ctrip.com/wireless-app/imgs/member_rights/hotel_update.png"
        }
      ],
      "discount": 0.85,
      "level_type": "CTRIP"
    },
    "region_name": "",
    "region_code": ""
  },
  "video_list": [],
  "rating_info": {
    "comment_level": "Amazing",
    "rating_all": "9.5",
    "rating_max": 10
  },
  "feedback_security_key": "PLVZdvPtIWPPXH0ACUr9MlTcCG8KQYN2NYzbdaWrneAHR6WKZjgqKg==_review_1945384397",
  "from_url": "https://www.trip.com/hotels/detail/?cityId=58&hotelId=426551&checkIn=2026-05-23&checkOut=2026-05-24&adult=2&children=0&subStamp=400&crn=1&ages=&travelpurpose=0&curr=VND&link=title&hoteluniquekey=H4sIAAAAAAAA_-PawcTFJMEkxMTBKLWWiWN2w-cXLI5vAnfItQq3OHgCqdeBG9ocAngKGUAgocqhkRHM8ilymMQ4nZETKL9Dbt0UB0Gw6JSJDkpOHLf3LXESUJSYfnPhcyYFRk2wzIRSB0MYw2K3hCPMEE8YI4iFY_mhwCgWjilLXZXEOfr_7bYQaGCUWPtpyWpGBUaLveJBDFEMSvIKLBDzHIKh5gEZFs84gbpnzhaKYnBi5Wi82880g3F7i9RGxjQQeBbisIOR6QTjg1kzGBcwzWlg28UEUXSIiYXj4RPhU0wMl5gYbjExPALyD9xNfsXE8IkJ7IxfUIVNzAxdzAyTmMHKZzGDVS1iZpDiTUtKTjJPskw2NTJPNFYQ0ri9-8gFNiOlSYxMERGnGKUMzc0tTQ3MTI2MTIxM9IwsjCyDXILSU13c0q2YpRjdPBiD2CwsXU1cDaO0uJg9vF0Ej6gen3vp4Gt7KeYwPxdFjpw8f_bnBvZaIDlDmFwSa2qebkRERrdoAWMXI4cAowdjBGMF4ytGkJ4fIH8DAI0Icq7TAQAA&subChannel=&masterhotelid_tracelogid=fbcb7b9c527a3&NewTaxDescForAmountshowtype0=T&detailFilters=17%7C1%7E17%7E1*80%7C0%7C1%7E80%7E0&hotelType=normal&display=exavg&barcurr=USD&locale=en-XX&isRightClick=T"
}
```

Each review is returned as a structured record with the following fields:

#### Review Identity & Source

| Field | Meaning |
|---|---|
| `ID` | Unique identifier for the review record |
| `Source` | Platform or channel the review originated from (e.g., Trip.com, partner OTA) |
| `Language` | Language code of the original review content |
| `Feedback Security Key` | Internal key used to validate review authenticity |

#### Review Content

| Field | Meaning |
|---|---|
| `Content` | Original full text of the guest review |
| `Translated Content` | Machine-translated version of the review (if original is non-English) |
| `Translate From Real Review` | Boolean indicating whether the translation is sourced from the actual review text |
| `Comment Level` | Categorization of review depth or quality tier |

#### Ratings

| Field | Meaning |
|---|---|
| `Rating` | Numeric score given by the reviewer |
| `Rating Max` | Maximum possible score (used to normalize the rating, typically 5 or 10) |
| `Rating Info` | Breakdown of sub-ratings (e.g., cleanliness, service, location, facilities) |

#### Stay Context

| Field | Meaning |
|---|---|
| `Check In Date` | Date the reviewer checked in |
| `Room Type Name` | The room category the guest stayed in (e.g., Deluxe King, Standard Twin) |
| `Travel Type` | Numeric code for travel purpose (e.g., business, leisure, family) |
| `Travel Type Text` | Human-readable label for the travel type |

#### Engagement & Interaction

| Field | Meaning |
|---|---|
| `Useful Count` | Number of times other users marked the review as helpful |
| `Can Mark Useful` | Boolean indicating whether the current session can upvote this review |
| `Feedback List` | Hotel management responses or follow-up comments on the review |

#### Dates

| Field | Meaning |
|---|---|
| `Create Date` | Timestamp when the review was submitted |

#### Media

| Field | Meaning |
|---|---|
| `Image List` | Array of image URLs attached to the review |
| `Video List` | Array of video URLs attached to the review |

#### User

| Field | Meaning |
|---|---|
| `User Info` | Reviewer profile metadata (display name, membership level, review count, avatar — subject to Trip.com's data availability) |

***

### How to Use

1. **Get hotel URLs** — Open any hotel on Trip.com and copy the full detail page URL (ensure it contains `hotelId`).
2. **Paste into `urls`** — Add one or more URLs to the array. Use Bulk Edit for large lists.
3. **Set review limit** — Adjust `max_items_per_url` based on how many reviews per hotel you need. For full coverage on popular properties, set to `200` or higher.
4. **Enable fault tolerance** — Keep `ignore_url_failures: true` for multi-hotel runs.
5. **Run and export** — Download results as JSON or CSV for analysis.

**Common issues:**

- URLs without a valid `hotelId` parameter will likely return no reviews.
- Highly parameterized URLs (with `hoteluniquekey`) are valid inputs — the scraper parses the underlying hotel ID automatically.

***

### Use Cases & Business Value

- **Sentiment analysis:** Feed `Content` and `Rating` fields into NLP pipelines to measure guest satisfaction by property or region
- **Competitive benchmarking:** Compare ratings and feedback themes across competitor hotels in the same city
- **Multilingual research:** Use `Translated Content` to normalize reviews across languages for global datasets
- **Media collection:** Aggregate `Image List` and `Video List` for visual content analysis or training datasets
- **Review authenticity research:** Leverage `Source`, `Feedback Security Key`, and `User Info` to study review patterns

***

### Conclusion

The **Trip.com Hotel Reviews Scraper** delivers one of the richest review datasets available in the hospitality space — covering everything from raw guest text to media, ratings breakdowns, and travel context. Whether you're building a sentiment dashboard or benchmarking property performance, this scraper provides the structured foundation you need.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the hotels details urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.trip.com/hotels/detail/?cityId=58&hotelId=426551&checkIn=2026-05-23&checkOut=2026-05-24&adult=2&children=0&subStamp=400&crn=1&ages=&travelpurpose=0&curr=VND&link=title&hoteluniquekey=H4sIAAAAAAAA_-PawcTFJMEkxMTBKLWWiWN2w-cXLI5vAnfItQq3OHgCqdeBG9ocAngKGUAgocqhkRHM8ilymMQ4nZETKL9Dbt0UB0Gw6JSJDkpOHLf3LXESUJSYfnPhcyYFRk2wzIRSB0MYw2K3hCPMEE8YI4iFY_mhwCgWjilLXZXEOfr_7bYQaGCUWPtpyWpGBUaLveJBDFEMSvIKLBDzHIKh5gEZFs84gbpnzhaKYnBi5Wi82880g3F7i9RGxjQQeBbisIOR6QTjg1kzGBcwzWlg28UEUXSIiYXj4RPhU0wMl5gYbjExPALyD9xNfsXE8IkJ7IxfUIVNzAxdzAyTmMHKZzGDVS1iZpDiTUtKTjJPskw2NTJPNFYQ0ri9-8gFNiOlSYxMERGnGKUMzc0tTQ3MTI2MTIxM9IwsjCyDXILSU13c0q2YpRjdPBiD2CwsXU1cDaO0uJg9vF0Ej6gen3vp4Gt7KeYwPxdFjpw8f_bnBvZaIDlDmFwSa2qebkRERrdoAWMXI4cAowdjBGMF4ytGkJ4fIH8DAI0Icq7TAQAA&subChannel=&masterhotelid_tracelogid=fbcb7b9c527a3&NewTaxDescForAmountshowtype0=T&detailFilters=17%7C1%7E17%7E1*80%7C0%7C1%7E80%7E0&hotelType=normal&display=exavg&barcurr=USD&locale=en-XX&isRightClick=T"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.trip.com/hotels/detail/?cityId=58&hotelId=426551&checkIn=2026-05-23&checkOut=2026-05-24&adult=2&children=0&subStamp=400&crn=1&ages=&travelpurpose=0&curr=VND&link=title&hoteluniquekey=H4sIAAAAAAAA_-PawcTFJMEkxMTBKLWWiWN2w-cXLI5vAnfItQq3OHgCqdeBG9ocAngKGUAgocqhkRHM8ilymMQ4nZETKL9Dbt0UB0Gw6JSJDkpOHLf3LXESUJSYfnPhcyYFRk2wzIRSB0MYw2K3hCPMEE8YI4iFY_mhwCgWjilLXZXEOfr_7bYQaGCUWPtpyWpGBUaLveJBDFEMSvIKLBDzHIKh5gEZFs84gbpnzhaKYnBi5Wi82880g3F7i9RGxjQQeBbisIOR6QTjg1kzGBcwzWlg28UEUXSIiYXj4RPhU0wMl5gYbjExPALyD9xNfsXE8IkJ7IxfUIVNzAxdzAyTmMHKZzGDVS1iZpDiTUtKTjJPskw2NTJPNFYQ0ri9-8gFNiOlSYxMERGnGKUMzc0tTQ3MTI2MTIxM9IwsjCyDXILSU13c0q2YpRjdPBiD2CwsXU1cDaO0uJg9vF0Ej6gen3vp4Gt7KeYwPxdFjpw8f_bnBvZaIDlDmFwSa2qebkRERrdoAWMXI4cAowdjBGMF4ytGkJ4fIH8DAI0Icq7TAQAA&subChannel=&masterhotelid_tracelogid=fbcb7b9c527a3&NewTaxDescForAmountshowtype0=T&detailFilters=17%7C1%7E17%7E1*80%7C0%7C1%7E80%7E0&hotelType=normal&display=exavg&barcurr=USD&locale=en-XX&isRightClick=T"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/trip-hotels-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 = {
    "urls": ["https://www.trip.com/hotels/detail/?cityId=58&hotelId=426551&checkIn=2026-05-23&checkOut=2026-05-24&adult=2&children=0&subStamp=400&crn=1&ages=&travelpurpose=0&curr=VND&link=title&hoteluniquekey=H4sIAAAAAAAA_-PawcTFJMEkxMTBKLWWiWN2w-cXLI5vAnfItQq3OHgCqdeBG9ocAngKGUAgocqhkRHM8ilymMQ4nZETKL9Dbt0UB0Gw6JSJDkpOHLf3LXESUJSYfnPhcyYFRk2wzIRSB0MYw2K3hCPMEE8YI4iFY_mhwCgWjilLXZXEOfr_7bYQaGCUWPtpyWpGBUaLveJBDFEMSvIKLBDzHIKh5gEZFs84gbpnzhaKYnBi5Wi82880g3F7i9RGxjQQeBbisIOR6QTjg1kzGBcwzWlg28UEUXSIiYXj4RPhU0wMl5gYbjExPALyD9xNfsXE8IkJ7IxfUIVNzAxdzAyTmMHKZzGDVS1iZpDiTUtKTjJPskw2NTJPNFYQ0ri9-8gFNiOlSYxMERGnGKUMzc0tTQ3MTI2MTIxM9IwsjCyDXILSU13c0q2YpRjdPBiD2CwsXU1cDaO0uJg9vF0Ej6gen3vp4Gt7KeYwPxdFjpw8f_bnBvZaIDlDmFwSa2qebkRERrdoAWMXI4cAowdjBGMF4ytGkJ4fIH8DAI0Icq7TAQAA&subChannel=&masterhotelid_tracelogid=fbcb7b9c527a3&NewTaxDescForAmountshowtype0=T&detailFilters=17%7C1%7E17%7E1*80%7C0%7C1%7E80%7E0&hotelType=normal&display=exavg&barcurr=USD&locale=en-XX&isRightClick=T"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

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

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.trip.com/hotels/detail/?cityId=58&hotelId=426551&checkIn=2026-05-23&checkOut=2026-05-24&adult=2&children=0&subStamp=400&crn=1&ages=&travelpurpose=0&curr=VND&link=title&hoteluniquekey=H4sIAAAAAAAA_-PawcTFJMEkxMTBKLWWiWN2w-cXLI5vAnfItQq3OHgCqdeBG9ocAngKGUAgocqhkRHM8ilymMQ4nZETKL9Dbt0UB0Gw6JSJDkpOHLf3LXESUJSYfnPhcyYFRk2wzIRSB0MYw2K3hCPMEE8YI4iFY_mhwCgWjilLXZXEOfr_7bYQaGCUWPtpyWpGBUaLveJBDFEMSvIKLBDzHIKh5gEZFs84gbpnzhaKYnBi5Wi82880g3F7i9RGxjQQeBbisIOR6QTjg1kzGBcwzWlg28UEUXSIiYXj4RPhU0wMl5gYbjExPALyD9xNfsXE8IkJ7IxfUIVNzAxdzAyTmMHKZzGDVS1iZpDiTUtKTjJPskw2NTJPNFYQ0ri9-8gFNiOlSYxMERGnGKUMzc0tTQ3MTI2MTIxM9IwsjCyDXILSU13c0q2YpRjdPBiD2CwsXU1cDaO0uJg9vF0Ej6gen3vp4Gt7KeYwPxdFjpw8f_bnBvZaIDlDmFwSa2qebkRERrdoAWMXI4cAowdjBGMF4ytGkJ4fIH8DAI0Icq7TAQAA&subChannel=&masterhotelid_tracelogid=fbcb7b9c527a3&NewTaxDescForAmountshowtype0=T&detailFilters=17%7C1%7E17%7E1*80%7C0%7C1%7E80%7E0&hotelType=normal&display=exavg&barcurr=USD&locale=en-XX&isRightClick=T"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/trip-hotels-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/trip-hotels-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Trip Hotels Reviews Scraper",
        "description": "Scrape verified guest reviews from Trip.com hotel pages — including ratings, room types, travel purpose, images, and translated content. Perfect for hospitality analysts, OTA researchers, and reputation management teams needing structured review data.",
        "version": "0.0",
        "x-build-id": "NjSl6NHIaUblKxgfS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~trip-hotels-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-trip-hotels-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~trip-hotels-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-trip-hotels-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~trip-hotels-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-trip-hotels-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the hotels details urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the hotels details urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
