# Trip.com & Ctrip 携程酒店 Hotel Scraper: Prices, Reviews, Changes (`getascraper/ctrip-hotel-rate-intelligence`) Actor

Scrape Trip.com and Ctrip hotels by city or link: nightly and total price, discounts, free cancellation, breakfast, stars, guest scores, amenities and reviews. Filters, up to 14 check-in dates per run, price-change feed. JSON, CSV, Excel. No login or cookies. 携程酒店数据采集

- **URL**: https://apify.com/getascraper/ctrip-hotel-rate-intelligence.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Travel, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.63 / 1,000 result rows

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 Scraper: Prices, Reviews, Changes

<table width="100%" style="margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#EEF4FD;border:1px solid #D3E4F9;border-top:4px solid #2577E3;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Ctrip hotel prices and guest reviews for any city, ready for your spreadsheet</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search 携程 and Trip.com hotels by city, dates and filters. Get nightly prices, discounts, cancellation terms, guest scores and reviews, then schedule it to see what changed. No login needed.</span>
</td>
</tr>
</table>
<table width="100%" style="margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E4F9;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1C5BB5">💰 Real room prices</span><br>
<span style="font-size:12px;color:#57534E">Price per night, the total with taxes, the discount and the room behind it.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E4F9;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1C5BB5">🎯 Filters that cut noise</span><br>
<span style="font-size:12px;color:#57534E">Stars, guest score, price, free cancellation, breakfast, amenities, areas and brands.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E4F9;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1C5BB5">⭐ Review insight</span><br>
<span style="font-size:12px;color:#57534E">Ratings, traveler type, reviewer country, translation and the hotel's reply.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E4F9;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1C5BB5">🔔 Price-change feed</span><br>
<span style="font-size:12px;color:#57534E">Rerun on a schedule and see which hotels are new, cheaper or dearer.</span>
</td>
</tr>
</table>

Type a city such as Shanghai or 上海 and get the hotels Ctrip lists there, each with a price for your dates, a guest score, a location and the offer behind the price. You can also add amenities, policies, nearby places and guest reviews. No login, no cookies, no setup.

### 🔍 What does this actor do?

Ctrip 携程 and Trip.com are the largest hotel booking sites for China and for travel across Asia. This actor reads the public hotel pages for the city, dates and guests you choose and turns them into a clean table you can sort, chart or load into your own tools.

Each row is one hotel for one check-in date. It carries the lowest shown price per night, the price before the discount, the total for the whole stay with taxes and fees, free cancellation and breakfast flags, star level, guest score with cleanliness, facilities, location and service sub-scores, review count, map coordinates and photos. Turn on hotel details for the full amenity list, policies, phone and nearby places, and turn on reviews to get guest feedback as separate rows.

Compare up to 14 check-in dates in one run, search several cities at once, or look up specific hotels by link. Results download as JSON, CSV, Excel or XML.

### 💡 Who uses this?

- **I am a travel agent building packages for China trips.** I need to compare 4-star hotels in six cities for next month's dates, with free cancellation, and hand clients a clean price sheet.
- **I am a revenue manager at a hotel.** I want to see what competing hotels in my district charge for the next 14 nights and who is discounting.
- **I am an online travel analyst.** I check rate parity and promotion depth for a city on a schedule and need only the hotels whose price changed.
- **I am a researcher studying tourism demand.** I need guest scores, reviewer countries and traveler types for hotels across cities to see who actually stays where.
- **I am building a hotel dataset.** I need stable hotel IDs, coordinates, amenities and policies in one table, in English or Chinese.

### 🚀 How to use

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EEF4FD;border:1px solid #D3E4F9;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#2577E3;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick cities and dates</span><br>
<span style="font-size:12px;color:#57534E">Type city names, set check-in, nights and guests, and choose your currency.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EEF4FD;border:1px solid #D3E4F9;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#2577E3;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Filter and enrich</span><br>
<span style="font-size:12px;color:#57534E">Narrow by stars, score, price or brand. Switch on details or reviews if you need them.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EEF4FD;border:1px solid #D3E4F9;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#2577E3;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Download or schedule</span><br>
<span style="font-size:12px;color:#57534E">Export the table, or schedule the run and turn on price tracking to see what moved.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `destinations` | array of strings | No | Cities to search, one per line. Use an English or Chinese city name such as Shanghai or 上海, a numeric Trip.com city ID, or a Trip.com hotel list link. Defaults to Shanghai. |
| `hotels` | array of strings | No | Optional hotel page links or hotel IDs. When filled, only these hotels are looked up (profile, amenities, policies and optional reviews) and the city search is skipped. |
| `checkInDate` | string | No | Optional fixed check-in date. Leave empty to use the days-from-today setting. A date in the past is ignored. |
| `checkInDaysFromToday` | integer | No | Days from the run date until check-in when no fixed date is set. Defaults to 7. |
| `nights` | integer | No | Length of the stay, 1 to 30 nights. Defaults to 1. |
| `scanDays` | integer | No | Number of consecutive check-in dates to price, 1 to 14, so you can compare a week of prices in one run. Defaults to 1. |
| `adults` | integer | No | Adult guests per room, 1 to 8. Some rooms are only sold for certain party sizes. Defaults to 2. |
| `rooms` | integer | No | Number of rooms, 1 to 5. The total price on each row covers all rooms. Defaults to 1. |
| `sortBy` | enum | No | Order of the results before the first hotels are taken: recommended, top reviewed, lowest price, highest price or star rating. |
| `starRatings` | array of options | No | Keep only these star levels (5, 4, 3, or 2 and below). Leave empty for all. |
| `minGuestScore` | enum | No | Keep only hotels with a guest score of at least 6, 7, 8 or 9 out of 10. |
| `minReviewCount` | enum | No | Keep only hotels with at least 100, 200 or 500 reviews. |
| `minPrice` | integer | No | Keep only hotels at or above this price per night, in your chosen currency. 0 means no minimum. |
| `maxPrice` | integer | No | Keep only hotels at or below this price per night, in your chosen currency. 0 means no maximum. |
| `freeCancellation` | boolean | No | Keep only hotels that offer a room with free cancellation. |
| `breakfastIncluded` | boolean | No | Keep only hotels that offer a room with breakfast included. |
| `propertyTypes` | array of options | No | Keep only these kinds of places to stay, such as hotel, serviced apartment, resort, villa or hostel. |
| `amenities` | array of options | No | Keep only hotels with these facilities, such as free parking, gym, spa, pets welcome or a balcony in the room. |
| `areas` | array of strings | No | Keep only hotels in or near these districts, business areas, landmarks, airports or metro stations, one per line. Names that match nothing are listed in the run summary. |
| `brands` | array of strings | No | Keep only hotels of these brands, such as Hilton, Atour or Marriott. Combined with areas, it finds those brands in those places. |
| `dataSource` | enum | No | Trip.com shows live room prices in several languages. Ctrip.com 携程 is the mainland China site in Simplified Chinese with no room prices and only the star, guest score, review count, free cancellation and breakfast filters. |
| `language` | enum | No | Language of hotel names, addresses and tags on Trip.com: English, Traditional Chinese, Japanese or Korean. |
| `currency` | enum | No | Currency of all prices on Trip.com, from ten options including USD, CNY, EUR, JPY and KRW. Defaults to USD. |
| `includeDetails` | boolean | No | Add the full amenity list, check-in and policy rules, description, phone, nearby places, photos and a review summary to each hotel. Slower, one extra page per hotel. Defaults to off. |
| `includeReviews` | boolean | No | Save the most relevant guest reviews as separate rows, with ratings, traveler type, reviewer country, translation and the hotel reply. Defaults to off. |
| `maxReviewsPerHotel` | integer | No | Reviews to save per hotel when review collection is on, 1 to 10. Defaults to 10. |
| `trackChanges` | boolean | No | Compare each price with the previous run that used the same tracking name and add a change status to every row. Defaults to off. |
| `onlyChanges` | boolean | No | With price tracking on, save only hotels that are new or whose price moved since the last run. |
| `monitorScope` | string | No | Short name that keeps separate watch lists apart. Runs that share a name are compared with each other. Defaults to default. |
| `maxItems` | integer | No | Most hotels to save per city and check-in date, 1 to 200. Larger numbers run extra searches with different sort orders and filters. Defaults to 10. |
| `proxyConfiguration` | object | No | Proxy settings. Datacenter proxies are used by default. Switch to residential only if the site starts refusing requests. |

### 📊 Data table

Hotel rows and review rows share one dataset. The `recordType` field tells them apart.

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | string | Row kind: hotel or review. |
| `hotelId` | string | Trip.com and Ctrip hotel ID. |
| `name` | string | Hotel name in the chosen language. |
| `nameEn` | string | English hotel name, when different from the name. |
| `localName` | string | With hotel details on. Hotel name in its local language, with hotel details on. |
| `propertyType` | string | Kind of property, such as hotel or apartment. |
| `starRating` | number | Star or diamond level. |
| `guestRating` | number | Guest score. |
| `ratingScale` | number | Top of the guest score scale (10 on Trip.com, 5 on Ctrip.com). |
| `ratingLabel` | string | Score label such as Very good. |
| `reviewCount` | number | Number of guest reviews. |
| `subScores` | object | Guest sub-scores for cleanliness, facilities, location and service. |
| `reviewHighlight` | string | One-line guest comment shown on the listing. |
| `city` | string | City name. |
| `cityId` | number | Trip.com city ID. |
| `zones` | array | Districts or business areas. |
| `address` | string | Street address or area. |
| `locationSummary` | string | Short location summary with nearby landmarks. |
| `latitude` | number | Latitude in WGS84. |
| `longitude` | number | Longitude in WGS84. |
| `coordinateSystem` | string | Coordinate system of latitude and longitude. |
| `checkIn` | string | Check-in date. |
| `checkOut` | string | Check-out date. |
| `nights` | number | Number of nights priced. |
| `adults` | number | Adults per room priced. |
| `rooms` | number | Rooms priced. |
| `hasPrice` | boolean | Whether a bookable price was shown for the stay. |
| `currency` | string | Currency of all prices on the row. |
| `pricePerNight` | number | Lowest shown price per room per night, before taxes and fees. |
| `priceDisplay` | string | Price per night as the site shows it. |
| `originalPricePerNight` | number | Price per night before the discount. |
| `discountPercent` | number | Discount from the original price, in percent. |
| `totalPrice` | number | Total for all nights and rooms, including taxes and fees. |
| `totalPriceDisplay` | string | Total price as the site shows it. |
| `taxesAndFees` | number | Taxes and fees included in the total. |
| `discounts` | array | Named discounts applied, with amounts. |
| `payment` | string | prepay or payAtHotel. |
| `roomsLeft` | number | Rooms left at this price, when the site shows scarcity. |
| `promotionTags` | array | Promotion labels on the offer. |
| `discountTags` | array | Discount labels on the offer. |
| `roomName` | string | Room type of the shown offer. |
| `bedType` | string | Bed setup of the shown offer. |
| `freeCancellation` | boolean | Whether the shown offer has free cancellation. |
| `breakfastIncluded` | boolean | Whether the shown offer includes breakfast. |
| `urgencyNote` | string | Recent booking note such as Last booked 9 mins ago. |
| `isSponsored` | boolean | Whether the listing is a sponsored placement. |
| `searchRank` | number | Position in the site result list for your exact filters and sort order, when found there. |
| `imageUrls` | array | Photos shown on the listing. |
| `videoUrl` | string | Promo video link. |
| `labels` | array | Badges shown on the listing. |
| `changeStatus` | string | With price tracking on. With price tracking: new, priceDrop, priceRise, unchanged, noLongerPriced or noPrice. |
| `previousPricePerNight` | number | With price tracking on. Price per night on the previous run. |
| `priceChange` | number | With price tracking on. Price change per night since the previous run. |
| `priceChangePercent` | number | With price tracking on. Price change in percent since the previous run. |
| `previousSeenAt` | string | With price tracking on. When the hotel was last seen. |
| `firstSeenAt` | string | With price tracking on. When the hotel was first seen for this search. |
| `hotelGroup` | string | With hotel details on. Hotel group or chain. |
| `openedYear` | number | With hotel details on. Year the hotel opened. |
| `hotelFacts` | array | With hotel details on. Facts such as opening year and number of rooms. |
| `description` | string | With hotel details on. Hotel description. |
| `phone` | string | With hotel details on. Hotel phone number. |
| `email` | string | With hotel details on. Hotel email address. |
| `nearestTransit` | string | With hotel details on. Nearest metro or rail connection. |
| `nearbyPlaces` | array | With hotel details on. Nearby places with distances. |
| `highlights` | array | With hotel details on. Guest-voted highlights. |
| `amenities` | array | With hotel details on. All amenities. |
| `amenityGroups` | object | With hotel details on. Amenities grouped by category. |
| `policies` | object | With hotel details on. Check-in, check-out, breakfast, child, pet and age rules. |
| `photoUrls` | array | Gallery photos with hotel details on; photos attached to a guest review on review rows. |
| `photoCount` | number | With hotel details on. Total photos on the hotel page. |
| `reviewOverview` | object | With hotel details on. Review summary with topics, traveler mix and sub-scores. |
| `hotelUrl` | string | Hotel page for the stay. |
| `searchUrl` | string | List page that returned the hotel. |
| `destination` | string | City searched. |
| `source` | string | trip.com or ctrip.com. |
| `scrapedAt` | string | When the row was collected. |
| `hotelName` | string | Review rows. Reviewed hotel name. |
| `reviewId` | string | Review rows. Review ID. |
| `rating` | number | Review rows. Overall review rating. |
| `ratingBand` | string | Review rows. positive (8+ of 10), neutral (6 to 8) or negative. |
| `subRatings` | object | Review rows. Review sub-ratings for location, facilities, service and room. |
| `text` | string | Review rows. Review text in its original language. |
| `language` | string | Review rows. Language of the review text. |
| `translatedText` | string | Review rows. Machine translation of the review, when offered. |
| `translatedLanguage` | string | Review rows. Language of the translation. |
| `textLength` | number | Review rows. Characters in the review text. |
| `postedAt` | string | Review rows. When the review was posted. |
| `stayDate` | string | Review rows. Month of the stay. |
| `travelerType` | string | Review rows. Traveler type such as Couple or Business traveler. |
| `recommended` | boolean | Review rows. Whether the guest recommends the hotel. |
| `usefulVotes` | number | Review rows. Helpful votes. |
| `reviewerCountry` | string | Review rows. Reviewer country. |
| `reviewerCountryCode` | string | Review rows. Reviewer country code. |
| `reviewerLevel` | string | Review rows. Reviewer level. |
| `reviewerReviewCount` | number | Review rows. Reviews written by the reviewer. |
| `isAnonymous` | boolean | Review rows. Whether the reviewer is anonymous. |
| `hasVideo` | boolean | Review rows. Whether the review has a video. |
| `hasHotelReply` | boolean | Review rows. Whether the hotel replied. |
| `hotelReply` | object | Review rows. The hotel reply with text, date and language. |

You can download the dataset in JSON, HTML, CSV, or Excel from the Output tab of any run. Fields the site does not publish for a hotel are left out of that row instead of being filled with placeholders.

### 📤 Sample output

A hotel row:

```json
{
    "recordType": "hotel",
    "hotelId": "6870954",
    "name": "Dihang Boutique Hotel (Shanghai Pudong Airport)",
    "propertyType": "Hotel",
    "starRating": 3,
    "guestRating": 8.5,
    "ratingScale": 10,
    "reviewCount": 10055,
    "subScores": {
        "cleanliness": 8.5,
        "facilities": 8.3,
        "location": 8.5,
        "service": 8.8
    },
    "reviewHighlight": "The airport transfer service was excellent, and the driver was very responsible.",
    "city": "Shanghai",
    "cityId": 2,
    "zones": [
        "Pudong International Airport Area"
    ],
    "address": "Pudong International Airport Area",
    "locationSummary": "Near Dongfang Modern Commercial Plaza | Shanghai Pudong International Airport",
    "latitude": 31.177277611532315,
    "longitude": 121.74013489512171,
    "coordinateSystem": "WGS84",
    "checkIn": "2026-10-18",
    "checkOut": "2026-10-19",
    "nights": 1,
    "adults": 2,
    "rooms": 1,
    "hasPrice": true,
    "currency": "USD",
    "pricePerNight": 19,
    "priceDisplay": "US$19",
    "originalPricePerNight": 38,
    "discountPercent": 50,
    "totalPrice": 20,
    "totalPriceDisplay": "US$20",
    "taxesAndFees": 1.11,
    "discounts": [
        {
            "name": "China travel deal",
            "amount": 11.88
        },
        {
            "name": "Surprise Savings",
            "amount": 5.94
        },
        {
            "name": "Early Bird Deal",
            "amount": 1.98
        }
    ],
    "payment": "prepay",
    "roomsLeft": 4,
    "promotionTags": [
        "China travel deal"
    ],
    "discountTags": [
        "50% off"
    ],
    "roomName": "Twin Room",
    "bedType": "2 single beds",
    "freeCancellation": true,
    "breakfastIncluded": false,
    "isSponsored": false,
    "searchRank": 1,
    "imageUrls": [
        "https://ak-d.tripcdn.com/images/1mc6x12000it4okzdEAC0_R_600_600_R5_D.jpg",
        "https://ak-d.tripcdn.com/images/1mc4212000irlhbcp0729_R_600_600_R5_D.jpg",
        "https://ak-d.tripcdn.com/images/1mc5b12000ir8pd8980CB_R_600_600_R5_D.jpg",
        "https://ak-d.tripcdn.com/images/20040y000000m49j15CD0_R_600_600_R5_D.jpg",
        "https://ak-d.tripcdn.com/images/1mc4c12000c34qcw56AD2_R_600_600_R5_D.jpg"
    ],
    "videoUrl": "https://video.c-ctrip.com/videos/220t34000001jk1dk4E53.mp4",
    "labels": [
        "Hi China!"
    ],
    "hotelUrl": "https://www.trip.com/hotels/detail/?hotelId=6870954&cityId=2&checkIn=2026-10-18&checkOut=2026-10-19&adult=2&children=0&crn=1&curr=USD",
    "searchUrl": "https://www.trip.com/hotels/list?city=2&checkin=2026-10-18&checkout=2026-10-19&adult=2&children=0&crn=1&curr=USD",
    "destination": "Shanghai",
    "source": "trip.com",
    "scrapedAt": "2026-10-11T11:29:56.142Z"
}
```

A review row:

```json
{
    "recordType": "review",
    "hotelId": "52522745",
    "hotelName": "Hotel Metropolitan Kawasaki",
    "reviewId": "2091017019",
    "rating": 10,
    "ratingScale": 10,
    "ratingLabel": "Outstanding",
    "ratingBand": "positive",
    "subRatings": {
        "location": 10,
        "facilities": 10,
        "service": 10,
        "room": 10
    },
    "text": "房間大，衞生乾淨，交通便利，購物方便，非常滿意。房間大，衞生乾淨，交通便利，購物方便，非常滿意。房間大，衞生乾淨，交通便利，購物方便，非常滿意。",
    "language": "zh",
    "translatedText": "The room was spacious and clean, with convenient transportation and easy access to shopping. I was very satisfied.",
    "translatedLanguage": "en",
    "textLength": 72,
    "postedAt": "2026-09-04 14:22:00",
    "stayDate": "2026-08-01",
    "travelerType": "Family",
    "roomName": "Standard Queen Room",
    "recommended": true,
    "usefulVotes": 0,
    "reviewerCountry": "China",
    "reviewerCountryCode": "CN",
    "reviewerLevel": "Review Specialist",
    "reviewerReviewCount": 12,
    "isAnonymous": false,
    "photoUrls": [
        "https://ak-d.tripcdn.com/images/0237312000tr1rlx70FE2_W_1280_853_R5_Q70.jpg?proc=autoorient",
        "https://ak-d.tripcdn.com/images/0233y12000tr21khu88C8_W_1280_853_R5_Q70.jpg?proc=autoorient",
        "https://ak-d.tripcdn.com/images/0235412000tr1oam8DC82_W_1280_853_R5_Q70.jpg?proc=autoorient"
    ],
    "hasHotelReply": true,
    "hotelReply": {
        "text": "感謝您在百忙之中撰寫評論。我們非常高興您對房間的寬敞、清潔度以及交通便利性感到滿意。我們衷心期待您的再次光臨。 敬上，Hotel Metropolitan Kawasaki",
        "date": "2026-09-06",
        "language": "zh"
    },
    "source": "trip.com",
    "scrapedAt": "2026-10-11T11:30:21.530Z"
}
```

### 💰 Pricing

Pricing is pay per result. Every hotel row and every guest review row saved to your dataset counts as one result, with the same rate for both, and hotel details, price tracking and the 14-day date comparison cost nothing extra. You are charged only for rows that were saved. Empty runs cost nothing, your per-run maximum charge is respected and the run stops cleanly when it is reached, and there are no monthly subscriptions or minimum commitments.

### ⭐ Enjoying Trip.com & Ctrip Hotel Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#EEF4FD;border:1px solid #D3E4F9;border-left:5px solid #2577E3;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">One run just turned a whole city of Ctrip hotels into a price sheet you can sort and compare.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other travel agents and hotel analysts find this actor. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#2577E3;border:1px solid #D3E4F9;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/ctrip-hotel-rate-intelligence/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- **Start small.** The default reads Shanghai and returns 10 hotels in seconds. Raise `maxItems` once the columns look right.
- **Price a week at once.** Set `scanDays` to 7 to get every hotel for seven check-in dates and chart how prices move.
- **Find bargains.** Set `sortBy` to lowest price, add `freeCancellation` and a `minGuestScore`, and compare `pricePerNight` with `originalPricePerNight`.
- **Watch a market.** Turn on `trackChanges`, give the run a `monitorScope` name and schedule it. Add `onlyChanges` to receive just the hotels that are new or whose price moved.
- **Read the total, not just the nightly price.** `pricePerNight` is for one room before taxes and fees. `totalPrice` covers every night and room with taxes and fees included.
- **Need Simplified Chinese?** Set `dataSource` to Ctrip.com. You get Chinese names, addresses, tags, details and reviews, but that site shows no room prices and supports fewer filters (stars, guest score, review count, free cancellation and breakfast).
- **Know the review limit.** The site shows its 10 most relevant reviews for each hotel without signing in, so `maxReviewsPerHotel` stops at 10. The review summary in hotel details covers all reviews.

### ❓ FAQ

##### 携程酒店价格怎么批量导出？

Enter one or more cities in `destinations`, choose your dates, and run the actor. Download the dataset as CSV, Excel or JSON. Every row has the nightly price, the total with taxes, the discount and the free-cancellation flag. Use `minPrice` and `maxPrice` to keep a price band.

##### 携程酒店评论和评分数据可以导出吗？

Yes. Every row has the guest score, its sub-scores and the review count. Turn on `includeReviews` to save up to 10 reviews per hotel as rows with the rating, traveler type, reviewer country, translation and the hotel's reply. Turn on `includeDetails` for the topics guests mention most across all reviews.

##### Does it need a login, and does it get blocked?

No login, API key or cookie is needed. The actor reads public pages at a polite pace and retries a refused request on a fresh connection. If the site still refuses, the run stops with a clear message instead of returning empty data, and you can switch to residential proxies in the advanced section.

##### How many hotels can I get for one city?

One search shows about a dozen hotels, so for larger targets the actor repeats the search with different sort orders, star levels and price bands and merges the results without duplicates. A big city such as Shanghai returned 200 distinct hotels for one check-in date in about two and a half minutes. Smaller cities have fewer hotels to find, and the mainland Ctrip.com source returns around 50 per city. Use areas, brands and filters to target the rest.

### 🔗 Other actors

- [Ostrovok Hotels Scraper: Отели Островок](https://apify.com/getascraper/ostrovok-hotels-scraper) ↗ - Collect hotel listings, rates and ratings from Ostrovok.
- [Choice Hotels Scraper: Room Rates, Reviews & Rate-Drop Alerts](https://apify.com/getascraper/choice-hotels-scraper) ↗ - Track room rates and reviews across Choice Hotels brands.
- [Award Flights Scraper: Miles, Taxes, Seats & Cabins, No Login](https://apify.com/getascraper/award-flights-scraper) ↗ - Find award seats, miles and taxes across airline programs.
- [Skiresort.com Scraper: Ski Resort Data, Elevation & Lift Prices](https://apify.com/getascraper/skiresort-com-scraper) ↗ - Compare ski resorts by elevation, slopes and lift ticket prices.
- [Zhaopin Scraper 智联招聘: China Jobs & Salary API](https://apify.com/getascraper/zhaopin-jobs-scraper) ↗ - Collect China job listings with salary ranges from Zhaopin.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/ctrip-hotel-rate-intelligence/changelog.md

# Actor input Schema

## `destinations` (type: `array`):

Cities to search, one per line. Use a city name in English or Chinese (for example Shanghai, 上海, Tokyo, Bangkok), a numeric Trip.com city ID, or a Trip.com hotel list link. Each city is searched separately.

## `hotels` (type: `array`):

Optional. Hotel page links or numeric hotel IDs from Trip.com or Ctrip. When this list is filled, only these hotels are looked up (profile, amenities, policies and optional reviews) and the city search is skipped. Room prices are only available through the city search.

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

Optional fixed check-in date. Leave empty to use the number of days from today set below. A date in the past is ignored.

## `checkInDaysFromToday` (type: `integer`):

How many days from the run date the stay starts. Used when no fixed check-in date is set. Rerunning on a schedule with this setting always prices the same distance ahead.

## `nights` (type: `integer`):

Length of the stay. The total price on each row covers all nights and rooms, and the per-night price is for one room.

## `scanDays` (type: `integer`):

Price this many consecutive check-in dates, starting from the first one. Use 7 to see how a city's prices move across a week. Each date returns its own row for every hotel.

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

Number of adult guests. Some rooms are only sold for certain party sizes, so this can change the price shown.

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

Number of rooms to book. The total price on each row is for all rooms.

## `sortBy` (type: `string`):

How the site orders hotels before the first ones are taken. Recommended is the site's default ranking.

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

Only keep hotels with these star or diamond levels. Choosing 2 includes 2 stars and below. Leave empty for all levels.

## `minGuestScore` (type: `string`):

Only keep hotels whose guest score is at least this value out of 10.

## `minReviewCount` (type: `string`):

Only keep hotels with at least this many guest reviews. Useful to leave out new listings with little feedback.

## `minPrice` (type: `integer`):

Only keep hotels priced at or above this amount per night, in the currency chosen below. Use 0 for no minimum.

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

Only keep hotels priced at or below this amount per night, in the currency chosen below. Use 0 for no maximum.

## `freeCancellation` (type: `boolean`):

Only keep hotels that offer a room with free cancellation.

## `breakfastIncluded` (type: `boolean`):

Only keep hotels that offer a room with breakfast included.

## `propertyTypes` (type: `array`):

Only keep these kinds of places to stay. Leave empty for every type.

## `amenities` (type: `array`):

Only keep hotels that offer these facilities. Leave empty to ignore amenities.

## `areas` (type: `array`):

Only keep hotels in or near these places, one per line. Use names the site lists for the city, such as The Bund, Lujiazui, Pudong International Airport or a metro station. Several entries are combined, and a name that matches nothing is reported in the run summary.

## `brands` (type: `array`):

Only keep hotels of these brands, one per line, for example Hilton, Atour or Marriott. Combined with the areas above, it finds those brands in those places.

## `dataSource` (type: `string`):

Trip.com is the international site and shows live room prices in several languages. Ctrip.com is the mainland China site with Simplified Chinese text, but no room prices and only the star, guest score, review count, free cancellation and breakfast filters.

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

Language of hotel names, addresses and tags when the source is Trip.com. Ignored for Ctrip.com, which is always Simplified Chinese.

## `currency` (type: `string`):

Currency for all prices when the source is Trip.com.

## `includeDetails` (type: `boolean`):

Adds the full amenity list, check-in and policy rules, description, phone, nearby places, photos and a review summary with guest topics to each hotel. Opens one extra page per hotel, so the run takes longer.

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

Adds the most relevant guest reviews as separate rows, with rating, sub-ratings, traveler type, reviewer country, translation and the hotel's reply. Reviewer names are not collected.

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

How many reviews to save for each hotel when review collection is on. The site shows its 10 most relevant reviews without sign-in.

## `trackChanges` (type: `boolean`):

Compare each hotel's price with the previous run that used the same tracking name, stay and guests. Every row gets a change status (new, price drop, price rise, unchanged) and the size of the change.

## `onlyChanges` (type: `boolean`):

With price tracking on, save only hotels that are new or whose price went up or down since the last run. The first run saves everything because nothing has been seen yet.

## `monitorScope` (type: `string`):

A short name that keeps separate watch lists apart. Runs that share a name are compared with each other. Use a different name for each schedule.

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

Most hotels to save for each city and check-in date. The site lists about a dozen hotels per page, so larger numbers run extra searches with different sort orders, star levels and price bands to find more.

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

Datacenter proxies are used by default. Switch to residential only if the site starts refusing requests.

## Actor input object example

```json
{
  "destinations": [
    "Shanghai"
  ],
  "hotels": [],
  "checkInDaysFromToday": 7,
  "nights": 1,
  "scanDays": 1,
  "adults": 2,
  "rooms": 1,
  "sortBy": "recommended",
  "starRatings": [],
  "minGuestScore": "any",
  "minReviewCount": "any",
  "minPrice": 0,
  "maxPrice": 0,
  "freeCancellation": false,
  "breakfastIncluded": false,
  "propertyTypes": [],
  "amenities": [],
  "areas": [],
  "brands": [],
  "dataSource": "trip",
  "language": "en-XX",
  "currency": "USD",
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerHotel": 10,
  "trackChanges": false,
  "onlyChanges": false,
  "monitorScope": "default",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "destinations": [
        "Shanghai"
    ],
    "hotels": [],
    "checkInDaysFromToday": 7,
    "nights": 1,
    "scanDays": 1,
    "adults": 2,
    "rooms": 1,
    "sortBy": "recommended",
    "starRatings": [],
    "minGuestScore": "any",
    "minReviewCount": "any",
    "minPrice": 0,
    "maxPrice": 0,
    "freeCancellation": false,
    "breakfastIncluded": false,
    "propertyTypes": [],
    "amenities": [],
    "areas": [],
    "brands": [],
    "dataSource": "trip",
    "language": "en-XX",
    "currency": "USD",
    "includeDetails": false,
    "includeReviews": false,
    "maxReviewsPerHotel": 10,
    "trackChanges": false,
    "onlyChanges": false,
    "monitorScope": "default",
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/ctrip-hotel-rate-intelligence").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 = {
    "destinations": ["Shanghai"],
    "hotels": [],
    "checkInDaysFromToday": 7,
    "nights": 1,
    "scanDays": 1,
    "adults": 2,
    "rooms": 1,
    "sortBy": "recommended",
    "starRatings": [],
    "minGuestScore": "any",
    "minReviewCount": "any",
    "minPrice": 0,
    "maxPrice": 0,
    "freeCancellation": False,
    "breakfastIncluded": False,
    "propertyTypes": [],
    "amenities": [],
    "areas": [],
    "brands": [],
    "dataSource": "trip",
    "language": "en-XX",
    "currency": "USD",
    "includeDetails": False,
    "includeReviews": False,
    "maxReviewsPerHotel": 10,
    "trackChanges": False,
    "onlyChanges": False,
    "monitorScope": "default",
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/ctrip-hotel-rate-intelligence").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 '{
  "destinations": [
    "Shanghai"
  ],
  "hotels": [],
  "checkInDaysFromToday": 7,
  "nights": 1,
  "scanDays": 1,
  "adults": 2,
  "rooms": 1,
  "sortBy": "recommended",
  "starRatings": [],
  "minGuestScore": "any",
  "minReviewCount": "any",
  "minPrice": 0,
  "maxPrice": 0,
  "freeCancellation": false,
  "breakfastIncluded": false,
  "propertyTypes": [],
  "amenities": [],
  "areas": [],
  "brands": [],
  "dataSource": "trip",
  "language": "en-XX",
  "currency": "USD",
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerHotel": 10,
  "trackChanges": false,
  "onlyChanges": false,
  "monitorScope": "default",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/ctrip-hotel-rate-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/ctrip-hotel-rate-intelligence"
        }
    }
}
```

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/vytZ0ZlmPusIMzqJ5/builds/AfpXoZEXZbWyUiuAY/openapi.json
