# Trip.com Scraper - Hotels, Prices & Reviews (`scrapesage/trip-com-scraper`) Actor

Scrape Trip.com hotels with live room prices, star ratings, review scores & sub-ratings, amenities, photos, full address & geo, policies, AI review summaries and guest reviews (with English translations). Search any destination by name, city ID or URL. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapesage/trip-com-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Travel, E-commerce, Automation
- **Stats:** 1 total users, 0 monthly users, 97.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 hotel scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Scraper — Hotels, Prices & Reviews

Extract **complete Trip.com hotel data** for any destination — **live room prices** (with taxes and the crossed-out "was" price), **star class**, **review scores and sub-ratings**, the **full amenities list**, photos, **address + map coordinates + nearest transit**, every **hotel policy**, the **AI review summary**, and **guest reviews with English translations**. Search by destination name, city ID or URL.

No login, no cookies, no browser, no API key — fast JSON extraction with 99%+ reliability.

### Why this Trip.com scraper?

Most hotel scrapers give you a name, a star count and maybe a price. This actor pulls the **complete** record Trip.com renders for each property and ships the **richest dataset in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Live lowest room price + currency | ✅ | ✅ |
| Total price incl. taxes & fees + "was" price | ❌ | ✅ |
| Overall review score + review count | partial | ✅ |
| Sub-ratings (cleanliness, location, service, amenities) | ❌ | ✅ |
| Full amenities list (not just "wifi/pool") | ❌ | ✅ all + highlights |
| Address, zone, latitude/longitude, nearest transit | partial | ✅ |
| Hotel policies (check-in/out, children, pets, deposit, breakfast) | ❌ | ✅ |
| Comment-tag breakdown ("Delicious breakfast" ×21) | ❌ | ✅ |
| AI review summary by aspect | ❌ | ✅ |
| Guest reviews **with English translation** + sub-ratings + photos | ❌ | ✅ opt-in |
| Hotel's response to a review | ❌ | ✅ |
| Quality score (0–100) | ❌ | ✅ |

### Use cases

- **Travel & price intelligence** — track hotel prices, taxes, discounts and availability across cities and dates for revenue management, comparison sites and meta-search.
- **Market research** — benchmark a property against competitors by star class, review score, sub-ratings, amenities and price band in any market.
- **Review & reputation analytics** — pull guest reviews (with English translations), sub-ratings, comment tags and AI summaries to mine sentiment and service themes.
- **Travel content & aggregation** — feed booking sites, trip planners, newsletters and apps with structured, photo-rich hotel data for thousands of destinations.
- **Hospitality monitoring** — schedule recurring runs to watch a destination for newly listed hotels, price drops or rating changes.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Trip.com Scraper**, type a destination (e.g. `Tokyo`), pick your dates, and click **Start**.
3. Watch hotels and reviews stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "searchDestinations": ["Tokyo", "Singapore"],
    "checkInDate": "2026-09-10",
    "checkOutDate": "2026-09-12",
    "adults": 2,
    "rooms": 1,
    "maxHotelsPerSearch": 30,
    "maxHotels": 100,
    "minRating": 8,
    "includeHotelDetails": true,
    "includeReviews": true,
    "maxReviewsPerHotel": 10
}
```

- **searchDestinations** — destination names (`Tokyo`, `Singapore`, `New York`, `Dubai`, `London`, …). Popular destinations resolve automatically.
- **cityIds** — numeric Trip.com city IDs for any other destination. Read an ID from the hotels URL: `.../hotels/list?city=`**`73`**.
- **searchUrls** — paste Trip.com hotel **list** URLs (`https://us.trip.com/hotels/list?city=73`). Every hotel on the page is scraped.
- **hotelUrls / hotelIds** — scrape specific hotels (full detail + reviews) by detail URL or numeric hotel ID.
- **checkInDate / checkOutDate / adults / children / rooms** — used to price rooms (defaults to tomorrow, 2 adults, 1 room).
- **minRating / minReviews / starRatings / maxPrice** — filters applied to the rich record.
- **includeHotelDetails** *(default true)* — fetch each hotel's detail page for the full record (amenities, policies, address, AI review summary, sub-ratings).
- **includeReviews** *(default true)* — output guest reviews as separate records (rating, English translation, photos, hotel response).
- **monitorMode** — output only hotels that are **new** since the last run (for scheduled monitoring).

### Output

One record per hotel (`type: "hotel"`), plus optional guest-review records (`type: "review"`):

```json
{
    "type": "hotel",
    "hotelId": "3801236",
    "name": "Hotel Boss",
    "url": "https://us.trip.com/hotels/detail/?hotelId=3801236&cityId=73",
    "category": "Hotel",
    "starRating": 4,
    "reviewScore": 8.4,
    "reviewScoreDescription": "Very good",
    "reviewCount": 6861,
    "subRatings": { "Cleanliness": 8.5, "Amenities": 8, "Location": 8.8, "Service": 8.4 },
    "reviewHighlight": "The hotel features an outdoor swimming pool and a fitness center…",
    "lowestPrice": 92,
    "priceCurrency": "USD",
    "priceTotalWithTaxes": 100.12,
    "priceWasBefore": 110,
    "lowestRoomName": "Superior Twin Room",
    "city": "Singapore",
    "zone": "Kampong Glam",
    "address": "500 Jalan Sultan Road, 199020, Singapore",
    "latitude": 1.30541,
    "longitude": 103.8604,
    "nearestTransit": "1,200 ft from metro station (Lavender), approx. 6 mins on foot",
    "openYear": 2015,
    "description": "With a stay at Hotel Boss in Singapore (Kallang)…",
    "amenitiesHighlights": ["Outdoor swimming pool", "Gym", "Private parking"],
    "amenities": ["Outdoor swimming pool", "Gym", "Luggage storage", "Conference room", "..."],
    "amenitiesCount": 38,
    "policies": { "checkIn": "After 15:00 | Before 12:00", "children": "Children can stay…", "pets": "Pets are not allowed" },
    "reviewTags": [{ "name": "Convenient location", "count": 412 }],
    "aiReviewSummary": {
        "headline": "Ratings are higher than 80% of similar properties.",
        "aspects": [{ "aspect": "Service Quality", "summary": "Guests praised the attentive staff…", "basedOnReviews": 69, "positive": true }]
    },
    "images": ["https://ak-d.tripcdn.com/images/…"],
    "qualityScore": 84,
    "scrapedAt": "2026-06-17T01:43:55.515Z"
}
```

```json
{
    "type": "review",
    "hotelId": "3801236",
    "hotelName": "Hotel Boss",
    "rating": 9,
    "ratingMax": 10,
    "ratingDescription": "Great",
    "subRatings": { "Location": 10, "Amenities": 8, "Service": 10, "Cleanliness": 8 },
    "content": "Near Kampong Glam, convenient, near MRT and behind the bus stop. Great stay, cool aircon.",
    "contentEnglish": null,
    "language": "en",
    "roomName": "Superior Room With Balcony",
    "travelType": "Traveling with friends",
    "checkInDate": "2026-06-01",
    "postedDate": "2026-06-15 14:36:00",
    "photos": ["https://ak-d.tripcdn.com/images/…"],
    "ownerResponse": "Dear Guest, thank you for choosing to stay with us…"
}
```

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run hourly/daily/weekly to track prices or watch a destination for new hotels; perfect for price feeds and dashboards.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (price-alert email, Slack message, database import) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/trip-com-scraper').call({
    searchDestinations: ['Tokyo'],
    checkInDate: '2026-09-10',
    checkOutDate: '2026-09-12',
    maxHotels: 50,
    includeReviews: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} hotels & reviews`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push hotels and prices straight into your sheets or CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored destination has new hotels or price drops.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find 4-star hotels in Tokyo under $200 with a 9+ review score" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **travel & experiences** data stack:

- **[Airbnb Scraper](https://apify.com/scrapesage/airbnb-scraper)** — vacation rentals: listings, prices, and availability.
- **[GetYourGuide Scraper](https://apify.com/scrapesage/getyourguide-scraper)** — tours, activities and experiences with prices and ratings.
- **[Tours & Activities Scraper](https://apify.com/scrapesage/tours-activities-scraper)** — attraction tickets and things to do across Civitatis and Tiqets.
- **[Eventbrite Scraper](https://apify.com/scrapesage/eventbrite-scraper)** — events with ticket prices and organizer contacts.
- **[Luma Scraper](https://apify.com/scrapesage/luma-scraper)** — Luma events, hosts and attendee-facing details.
- **[Meetup Scraper](https://apify.com/scrapesage/meetup-scraper)** — local meetups, groups and events.

### Tips

- **Any destination**: only popular cities resolve by name. For everything else, open the city on Trip.com, copy the number after `?city=` in the URL into **City IDs**, or paste the whole list URL into **Search URLs**.
- **Prices need dates**: set `checkInDate`/`checkOutDate` to price for your exact stay. Without dates the actor prices tomorrow night.
- **Fast & cheap sweep**: turn `includeHotelDetails` off to collect price + rating + geo only (one fetch per page, no per-hotel detail call).
- **More hotels per city**: raise `maxHotelsPerSearch`; the actor pages through the listing and deduplicates. Very large markets are best split by area (use several `searchUrls` with neighbourhood filters).
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to capture only newly listed hotels each run.
- **Proxies**: the default Apify datacenter (US) proxy works well; switch to residential if you scrape at high volume.

### FAQ

**How do I scrape hotels for a specific city?** Put the city in `searchDestinations` (e.g. `Bangkok`). If it isn't recognised, copy its numeric ID from the Trip.com hotels URL (`?city=ID`) into `cityIds`, or paste the list URL into `searchUrls`.

**Does it return live prices?** Yes — the lowest available room rate for your dates, plus the total including taxes & fees and any crossed-out "was" price. Prices come from the search/list pages; direct hotel-ID lookups return the full profile and reviews without a live nightly rate.

**Can I get guest reviews?** Yes. With `includeReviews` on, each hotel's most-relevant reviews are output as separate records with the rating, sub-ratings, original text **and an English translation**, room, travel type, dates, photos and the hotel's response.

**Can I export to Google Sheets, CSV or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor a destination automatically?** Create a [Schedule](https://docs.apify.com/platform/schedules) (e.g. daily) and turn on `monitorMode` to emit only new hotels; optionally add a [webhook](https://docs.apify.com/platform/integrations/webhooks) to push them downstream.

**Is scraping Trip.com legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for any personal data in reviews) and Trip.com's terms.

**A field is null — why?** Some hotels genuinely don't publish a field (e.g. brand-new hotels with no reviews, or properties without published policies). Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `searchDestinations` (type: `array`):

City / destination names to search hotels in, e.g. <code>Tokyo</code>, <code>Singapore</code>, <code>New York</code>, <code>Dubai</code>, <code>London</code>. The actor resolves popular destinations automatically. For any other city, pass its numeric Trip.com city ID in <b>City IDs</b> (read it from a Trip.com hotels URL: <code>.../hotels/list?city=<u>123</u></code>) or paste the list URL in <b>Search URLs</b>.

## `cityIds` (type: `array`):

Numeric Trip.com city IDs to search (e.g. <code>73</code> = Singapore, <code>228</code> = Tokyo). Use this for any destination not covered by the built-in name list. Find an ID in the hotels list URL: <code>.../hotels/list?city=<u>ID</u></code>.

## `searchUrls` (type: `array`):

Paste Trip.com hotel <b>list</b> URLs (e.g. <code>https://us.trip.com/hotels/list?city=73</code>). Every hotel on the page is scraped. Used in addition to the destinations above.

## `hotelUrls` (type: `array`):

Paste Trip.com hotel <b>detail</b> URLs (e.g. <code>https://us.trip.com/hotels/detail/?hotelId=687474</code>) to scrape specific hotels with full details and reviews.

## `hotelIds` (type: `array`):

Numeric Trip.com hotel IDs to scrape directly (full detail + reviews).

## `checkInDate` (type: `string`):

Check-in date (YYYY-MM-DD) used to price rooms. Defaults to tomorrow.

## `checkOutDate` (type: `string`):

Check-out date (YYYY-MM-DD) used to price rooms. Defaults to the day after check-in.

## `adults` (type: `integer`):

Number of adults (per room) for pricing.

## `children` (type: `integer`):

Number of children for pricing.

## `rooms` (type: `integer`):

Number of rooms for pricing.

## `maxHotelsPerSearch` (type: `integer`):

Maximum hotels to collect for each destination / search URL.

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

Maximum number of hotels to scrape across all destinations.

## `minRating` (type: `integer`):

Only keep hotels with a review score (0–10) at or above this value.

## `minReviews` (type: `integer`):

Only keep hotels with at least this many guest reviews.

## `starRatings` (type: `array`):

Only keep hotels with these star classes. Leave empty for all.

## `maxPrice` (type: `integer`):

Only keep hotels whose lowest room price is at or below this amount (in the site currency, USD). 0 = no limit.

## `includeHotelDetails` (type: `boolean`):

Fetch each hotel's detail page for the full record: description, complete amenities list, address & nearby transit, all policies, comment-tag breakdown, AI review summary and sub-ratings. One extra page fetch per hotel.

## `includeReviews` (type: `boolean`):

Output the most-relevant guest reviews for each hotel as separate review records — rating, sub-ratings, original text plus an English translation, room, travel type, dates, photos and the hotel's response. Requires hotel details.

## `maxReviewsPerHotel` (type: `integer`):

Maximum guest reviews to output for each hotel.

## `deduplicateHotels` (type: `boolean`):

Skip a hotel if it was already emitted in this run (e.g. when a hotel appears in two searches).

## `monitorMode` (type: `boolean`):

Remember hotels returned in previous runs (in a named key-value store) and output only hotels that are NEW since the last run. Pair with Apify Schedules to watch a destination for newly listed properties. This does not conflict with the scheduler — the schedule triggers the run; monitor mode dedupes a run's results against earlier runs.

## `monitorStoreName` (type: `string`):

Named key-value store used to remember seen hotels across runs. Use different names to track different destinations independently (lowercase letters, digits and hyphens).

## `maxConcurrency` (type: `integer`):

How many hotel pages to fetch in parallel.

## `proxyConfiguration` (type: `object`):

Proxies to use. Apify Proxy (datacenter, US) works well for Trip.com; switch to residential if you hit rate limits at high volume.

## Actor input object example

```json
{
  "searchDestinations": [
    "Singapore"
  ],
  "adults": 2,
  "children": 0,
  "rooms": 1,
  "maxHotelsPerSearch": 30,
  "maxHotels": 100,
  "minRating": 0,
  "minReviews": 0,
  "maxPrice": 0,
  "includeHotelDetails": true,
  "includeReviews": true,
  "maxReviewsPerHotel": 10,
  "deduplicateHotels": true,
  "monitorMode": false,
  "monitorStoreName": "tripcom-monitor",
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped hotel records and optional guest-review records as JSON items in the default dataset.

# 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 = {
    "searchDestinations": [
        "Singapore"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/trip-com-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 = {
    "searchDestinations": ["Singapore"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/trip-com-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 '{
  "searchDestinations": [
    "Singapore"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapesage/trip-com-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/7ylkEBf7bgd5c4IUx/builds/fGnn3xsRDa6thdfhA/openapi.json
