# Trip.com Hotels Scraper (`fetch_cat/trip-com-hotels-scraper`) Actor

Scrape public Trip.com hotel listings, prices, ratings, amenities, and URLs by destination.

- **URL**: https://apify.com/fetch\_cat/trip-com-hotels-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 3 total users, 0 monthly users, 98.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.06 / 1,000 hotel result extracteds

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 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 Hotels Scraper

Collect public Trip.com hotel listings for destinations, market research, price monitoring, and travel planning workflows.

### Ready-to-run examples

- [Trip Com Rio De Janeiro Hotels](https://apify.com/fetch_cat/trip-com-hotels-scraper/examples/trip-com-rio-de-janeiro-hotels)
- [Trip Com Edinburgh Hotels](https://apify.com/fetch_cat/trip-com-hotels-scraper/examples/trip-com-edinburgh-hotels)
- [Trip Com Lisbon Hotels](https://apify.com/fetch_cat/trip-com-hotels-scraper/examples/trip-com-lisbon-hotels)
- [Trip Com Doha Hotels](https://apify.com/fetch_cat/trip-com-hotels-scraper/examples/trip-com-doha-hotels)
- [Trip Com Istanbul Hotels](https://apify.com/fetch_cat/trip-com-hotels-scraper/examples/trip-com-istanbul-hotels)
- [Trip Com Brisbane Hotels](https://apify.com/fetch_cat/trip-com-hotels-scraper/examples/trip-com-brisbane-hotels)

[View all ready-to-run examples](https://apify.com/fetch_cat/trip-com-hotels-scraper/examples)

### What does Trip.com Hotels Scraper do?

Trip.com Hotels Scraper extracts public hotel listing data from Trip.com destination pages. Provide one or more Trip.com hotel list URLs and the actor returns hotel names, Trip.com URLs, ratings, review counts, images, addresses when visible, prices when visible, and source metadata.

### Who is it for?

- 🧳 Travel agencies comparing hotel inventory across destinations
- 🏨 Hotel revenue teams monitoring nearby properties
- 📊 Tourism analysts building destination supply datasets
- 🛫 OTAs and metasearch teams checking public Trip.com coverage
- 💼 Consultants preparing travel market reports

### Why use this actor?

Manual hotel research is slow. This actor turns public Trip.com destination pages into structured rows that can be exported to JSON, CSV, Excel, or consumed from the Apify API.

### Input settings

| Setting | JSON key | Type / default | Description |
| --- | --- | --- | --- |
| Trip.com hotel list URLs | `searchUrls` | array, default `[{"url":"https://www.trip.com/hotels/tokyo-hotels-list-228/"}]` | Public Trip.com destination hotel list URLs, for example https://www.trip.com/hotels/tokyo-hotels-list-228/ |
| Check-in date | `checkIn` | string, default `""` | Optional check-in date in YYYY-MM-DD format. The date is appended to each Trip.com URL. |
| Check-out date | `checkOut` | string, default `""` | Optional check-out date in YYYY-MM-DD format. The date is appended to each Trip.com URL. |
| Adults | `adults` | integer, default `2` | Optional number of adults for date-specific Trip.com URLs. |
| Rooms | `rooms` | integer, default `1` | Optional number of rooms for date-specific Trip.com URLs. |
| Maximum hotels | `maxItems` | integer, default `20` | Maximum number of hotel listings to save across all URLs. |
| Work budget | `maxRuntimeSecs` | integer, default `270` | Stops starting new source pages before the platform timeout so completed rows and a run summary can be saved. |
| Runtime safety margin | `runtimeSafetySecs` | integer, default `30` | Time reserved for saving completed rows and `RUN_SUMMARY`; keep it lower than the work budget. |
| Proxy configuration | `proxyConfiguration` | object, default `{"useApifyProxy":false}` | Optional Apify Proxy settings. Datacenter proxies are usually enough; use residential only if your run is blocked. |

### Output fields

| JSON key | Label | Type | Description |
| --- | --- | --- | --- |
| `hotelName` | HotelName | string | Output field for hotelname. |
| `hotelUrl` | HotelUrl | string / null | Output field for hotelurl. |
| `hotelId` | Hotel ID | string / null | Stable Trip.com hotel ID parsed from a public detail URL when available. |
| `destination` | Destination | string / null | Output field for destination. |
| `district` | District | string / null | Output field for district. |
| `starRating` | StarRating | number / null | Output field for starrating. |
| `guestRating` | GuestRating | number / null | Output field for guestrating. |
| `reviewCount` | ReviewCount | integer / null | Output field for reviewcount. |
| `price` | Price | number / null | Output field for price. |
| `currency` | Currency | string / null | Output field for currency. |
| `taxesFeesText` | TaxesFeesText | string / null | Output field for taxesfeestext. |
| `amenities` | Amenities | array | Output field for amenities. |
| `imageUrl` | ImageUrl | string / null | Output field for imageurl. |
| `address` | Address | string / null | Output field for address. |
| `sourceUrl` | SourceUrl | string | Output field for sourceurl. |
| `resultPage` | Result page | integer | Listing page represented by the row; current public extraction is page 1. |
| `status` | Result status | string | `SAVED` for a hotel row written to the dataset. |
| `warning` | Warning | string / null | Completeness note, including when card fields were recovered from structured data. |
| `scrapedAt` | ScrapedAt | string | Output field for scrapedat. |

### Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

| Event | What is charged | Price |
| --- | --- | ---: |
| `start` | One-time fee charged when a run starts. Covers fixed startup cost (init, proxy warmup, first HTTP setup). | $0.005 |

| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
| `item` | Charged per hotel result saved to the dataset. Error and summary records are not dataset items. | $0.115 / 1,000 | $0.1 / 1,000 | $0.078 / 1,000 | $0.06 / 1,000 | $0.04 / 1,000 | $0.028 / 1,000 |

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

### Input

The main input is `searchUrls`, an array of public Trip.com hotel list URLs.

```json
{
  "searchUrls": [
    { "url": "https://www.trip.com/hotels/tokyo-hotels-list-228/" }
  ],
  "maxItems": 20
}
```

### Optional stay details

You can provide optional stay parameters:

- `checkIn` in `YYYY-MM-DD` format
- `checkOut` in `YYYY-MM-DD` format
- `adults`
- `rooms`

These values are appended to the Trip.com URLs when dates are supplied.

### Example input

```json
{
  "searchUrls": [
    {
      "url": "https://www.trip.com/hotels/tokyo-hotels-list-228/"
    }
  ],
  "checkIn": "2026-09-01",
  "checkOut": "2026-09-03",
  "adults": 2,
  "rooms": 1,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

### Output example

```json
{
  "hotelName": "KOKO HOTEL Tokyo Nishikasai",
  "hotelUrl": "https://www.trip.com/hotels/tokyo-hotel-detail-129054778/koko-hotel-tokyo-nishikasai/",
  "destination": "Tokyo",
  "district": null,
  "starRating": 3,
  "guestRating": 8.4,
  "reviewCount": 842,
  "price": null,
  "currency": null,
  "taxesFeesText": null,
  "amenities": [],
  "imageUrl": "https://ak-d.tripcdn.com/images/0221712000oahl31u544A.jpg",
  "address": null,
  "sourceUrl": "https://www.trip.com/hotels/tokyo-hotels-list-228/",
  "scrapedAt": "2026-06-29T10:43:35.793Z"
}
```

### How to run

1. Open the actor on Apify.
2. Paste one or more Trip.com hotel list URLs.
3. Set `maxItems` to the number of hotels you need.
4. Start the run.
5. Export results from the Dataset tab.

### Tips for best results

- Use destination listing pages, not the Trip.com home page.
- Start with a small `maxItems` value for your first run.
- Use URLs copied from the Trip.com website in the same language/market you want to monitor.
- If prices are important, include Trip.com URLs where prices are visible to public visitors.

### Integrations

Use this actor in workflows such as:

- Daily hotel market snapshots exported to Google Sheets
- Destination inventory monitoring in a BI dashboard
- Travel content enrichment pipelines
- Hotel competitor lists for revenue management
- Tourism research datasets for recurring reports

### API usage

Run Trip.com Hotels Scraper from your own code with the Apify API.

**Node.js**

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
  "searchUrls": [
    {
      "url": "https://www.trip.com/hotels/tokyo-hotels-list-228/"
    }
  ],
  "checkIn": "2026-09-01",
  "checkOut": "2026-09-03",
  "adults": 2,
  "rooms": 1
};

const run = await client.actor('fetch_cat/trip-com-hotels-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python**

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/trip-com-hotels-scraper").call(run_input={
  "searchUrls": [
    {
      "url": "https://www.trip.com/hotels/tokyo-hotels-list-228/"
    }
  ],
  "checkIn": "example",
  "checkOut": "example",
  "adults": 2,
  "rooms": 1
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

**cURL**

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~trip-com-hotels-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchUrls":[{"url":"https://www.trip.com/hotels/tokyo-hotels-list-228/"}],"checkIn":"example","checkOut":"example","adults":2,"rooms":1}'
```

### Use with AI agents via MCP

Trip.com Hotels Scraper can be used by AI assistants through the hosted Apify MCP server.

**Claude Code setup**

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/trip-com-hotels-scraper"
```

**Claude Desktop, Cursor, or VS Code JSON config**

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/trip-com-hotels-scraper"
    }
  }
}
```

**Example prompts**

- "Run Trip.com Hotels Scraper with this input JSON and summarize the dataset."
- "Export the latest Trip.com Hotels Scraper results to a table I can review."
- "Schedule this Actor for monitoring and tell me what changed between runs."

### Legality and responsible use

This actor collects publicly available information from Trip.com pages. Always use the data responsibly, respect applicable laws, and review Trip.com's terms and local regulations for your use case.

### Limits

Trip.com page content can vary by destination, locale, dates, and availability. Some fields may be null when Trip.com does not expose them publicly on the supplied page. The Actor extracts the supplied public result page and does not claim automatic multi-page or room-detail coverage. `RUN_SUMMARY` reports failed or pending source URLs. Large runs should use sensible `maxItems` values.

### FAQ and troubleshooting

#### Why are some prices empty?

Trip.com does not always expose public prices on every hotel list response. Add check-in and check-out dates or use a listing page where prices are visibly shown.

#### Why did I get zero results?

Check that your input URL is a Trip.com hotel list page such as `/hotels/tokyo-hotels-list-228/`. Home pages, search landing pages, and unsupported pages may not contain hotel cards.

### Related actors

- [Agoda Reviews Scraper](https://apify.com/fetch_cat/agoda-reviews-scraper)
- [Airbnb Listings Scraper](https://apify.com/fetch_cat/airbnb-listings-scraper)
- [Airbnb Reviews Scraper](https://apify.com/fetch_cat/airbnb-reviews-scraper)
- [Apple Maps Places Scraper](https://apify.com/fetch_cat/apple-maps-places-scraper)
- [Agoda Hotels Scraper](https://apify.com/fetch_cat/agoda-hotels-scraper)

### Dataset export

Results can be downloaded from Apify as JSON, CSV, XML, RSS, Excel, or HTML table. Use CSV for spreadsheets and JSON for application workflows.

### Quality notes

The actor is designed for hotel listing rows. It does not scrape private account data, booking confirmations, user-only prices, or data behind a login.

### Support

Report bugs, wrong output, blocked runs, or missing fields from the Actor page. Include the Apify run ID or run URL, your input JSON, what you expected, what the Actor returned, and one reproducible public URL so the issue can be tested quickly.

### Field coverage

Field coverage depends on the public content Trip.com returns for each destination page. The actor saves the source URL and scrape timestamp so records can be audited later.

### Best practices

Run smaller recurring jobs instead of very large one-off jobs when monitoring destinations over time. This makes changes easier to compare and keeps individual runs fast.

### Example destinations

Tokyo, Bangkok, London, Paris, New York, Singapore, Seoul, and other Trip.com destination pages can be supplied as long as they use public hotel list URLs.

### Data freshness

Every run fetches current public page content from Trip.com. The actor does not reuse old dataset rows between runs.

### Automation ideas

Schedule this actor daily or weekly, send the dataset to a database, and compare rating or price changes over time.

### Privacy

The actor extracts hotel listing information only. It does not collect user accounts, private bookings, or payment data.

### Privacy and data handling

This Actor only requests the permissions needed to run the input you provide. It uses your input (such as URLs, search terms, identifiers, filters, and limits) only to fetch the requested public data from the relevant source site or API for this Actor, then writes results to your Apify dataset/key-value store.

Data may pass through Apify platform services and Apify Proxy during the run, and requests are sent only to the target site or public data provider required for this Actor's results. FetchCat does not send your inputs or outputs to advertising networks, data brokers, or model-training services, and does not retain run data outside Apify storage after the run except when you explicitly share run details for transient support debugging.

You are responsible for using this Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs. Review the output before storing, sharing, or combining it with other data.

# Actor input Schema

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

Public Trip.com destination hotel list URLs, for example https://www.trip.com/hotels/tokyo-hotels-list-228/

## `checkIn` (type: `string`):

Optional check-in date in YYYY-MM-DD format. The date is appended to each Trip.com URL.

## `checkOut` (type: `string`):

Optional check-out date in YYYY-MM-DD format. The date is appended to each Trip.com URL.

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

Optional number of adults for date-specific Trip.com URLs.

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

Optional number of rooms for date-specific Trip.com URLs.

## `maxItems` (type: `integer`):

Maximum number of hotel listings to save across all URLs.

## `maxRuntimeSecs` (type: `integer`):

Stops starting new hotel-list requests before the platform timeout so completed rows and a run summary can be saved.

## `runtimeSafetySecs` (type: `integer`):

Time reserved for saving completed results and the run summary. Keep this lower than the work budget.

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

Optional Apify Proxy settings. Datacenter proxies are usually enough; use residential only if your run is blocked.

## Actor input object example

```json
{
  "searchUrls": [
    {
      "url": "https://www.trip.com/hotels/tokyo-hotels-list-228/"
    }
  ],
  "adults": 2,
  "rooms": 1,
  "maxItems": 20,
  "maxRuntimeSecs": 270,
  "runtimeSafetySecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "searchUrls": [
        {
            "url": "https://www.trip.com/hotels/tokyo-hotels-list-228/"
        }
    ],
    "checkIn": "",
    "checkOut": "",
    "adults": 2,
    "rooms": 1,
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/trip-com-hotels-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 = {
    "searchUrls": [{ "url": "https://www.trip.com/hotels/tokyo-hotels-list-228/" }],
    "checkIn": "",
    "checkOut": "",
    "adults": 2,
    "rooms": 1,
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/trip-com-hotels-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 '{
  "searchUrls": [
    {
      "url": "https://www.trip.com/hotels/tokyo-hotels-list-228/"
    }
  ],
  "checkIn": "",
  "checkOut": "",
  "adults": 2,
  "rooms": 1,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call fetch_cat/trip-com-hotels-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/ESNeUMYdgcwBAKhN4/builds/Mbd24TaLVygowp7VS/openapi.json
