# Ctrip Attractions & Tickets Scraper 携程景点门票: Prices and Ratings (`getascraper/ctrip-attractions-ticket-catalog`) Actor

Ctrip 携程景点门票 scraper: attraction tickets by city with online and gate prices, discounts, ratings, review counts, 5A grades, free-cancellation and instant-entry flags, GPS coordinates, optional hours and reviews. Trip.com offers in 14 currencies. Filters plus a price-change feed. No login.

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

## Pricing

from $2.63 / 1,000 attraction records

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

## 🎫 Ctrip Attractions & Tickets Scraper 携程景点门票: Prices and Ratings

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#EEF4FD;border:1px solid #D3E4F9;border-top:4px solid #2577E3;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Ctrip ticket prices, ratings and availability for every attraction in a city</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pull 携程 attraction listings with online and gate prices, discounts, 5A grades, free-cancellation and instant-entry flags, and optional addresses, hours and reviews. No login needed.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E4F9;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#1C5BB5">🎟️ Price and saving</span><br>
<span style="font-size:12px;color:#57534E">Online price, gate price and the exact saving on every row.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E4F9;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#1C5BB5">🔎 Filters that cut noise</span><br>
<span style="font-size:12px;color:#57534E">Theme, 5A grade, rating, reviews, price band, free cancellation and instant entry.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E4F9;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#1C5BB5">🔔 Price-change feed</span><br>
<span style="font-size:12px;color:#57534E">Schedule it and get only new attractions or moved prices.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E4F9;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#1C5BB5">💱 Offers in 14 currencies</span><br>
<span style="font-size:12px;color:#57534E">Ticket and tour offers with cancellation, confirmation and sold counts.</span>
</td>
</tr>
</table>

Type a city such as Shanghai or 上海 and get the attractions Ctrip lists there, each with ticket price, rating, review count and what you can book today. No login, no cookies, no setup.

### 🔍 What does this actor do?

Ctrip (携程) is one of China's biggest online travel platforms, and its attraction pages are where Chinese travelers check ticket prices and reviews before they book. This actor reads those public pages for any city and returns one clean row per attraction.

Each row carries the online ticket price, the gate price, the discount, the star rating, the review count, the official 5A to 1A grade, Ctrip's ranking title, map coordinates and Ctrip's own availability labels: bookable today, instant entry and free cancellation. You can read many cities in one run, filter by theme, grade, rating, review count and price, and sort by rating, reviews, popularity or price.

Three optional add-ons go further. Detail mode adds address, phone numbers, description, opening hours, child, senior and student ticket rules, facilities, rating breakdown and nearby attractions. Review mode attaches up to 10 recent reviews per attraction. Offer mode adds Trip.com ticket and tour products priced in the currency you choose. Results download as JSON, CSV, Excel or XML.

### 💡 Who uses this?

- **I am a travel agency product manager.** I build China packages for overseas clients and need current ticket prices, free-cancellation flags and opening hours for dozens of attractions across Beijing, Shanghai and Chengdu in one table.
- **I am an online travel pricing analyst.** I compare online prices with gate prices and watch discounts move week to week, and I want a feed that shows only what changed.
- **I am an inbound tour operator.** I shortlist top-grade 5A sites with strong ratings, check child, senior and student rules, and plan around real opening hours.
- **I am a destination marketing researcher.** I rank attractions by reviews and popularity, read what travelers praise and complain about, and map them with coordinates.

### 🚀 How to use

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#EEF4FD;border:1px solid #D3E4F9;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<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 filters</span><br>
<span style="font-size:12px;color:#57534E">Type city names such as Shanghai or 上海, then set theme, grade, rating or price limits.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EEF4FD;border:1px solid #D3E4F9;border-left:none;vertical-align:top;color:#1C1917">
<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">Run and get rows</span><br>
<span style="font-size:12px;color:#57534E">Every attraction arrives with price, rating, reviews and booking availability.</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;color:#1C1917">
<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">Schedule for changes</span><br>
<span style="font-size:12px;color:#57534E">Turn on change tracking to receive only new attractions and price moves.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `destinations` | array of strings | No | Cities to read, one per row. Use an English name such as Shanghai, a Chinese name such as 上海, a Ctrip city id, or a Ctrip listing link. Defaults to Beijing. Results are split evenly across the cities. |
| `startUrls` | array of URLs | No | Optional Ctrip city listing links. A page link such as `.../s0-p3.html` starts reading at that page. |
| `themes` | array of enums | No | Keep attractions that match any chosen theme, such as museums, theme parks, nature or night views. Matching uses Ctrip labels and attraction names. |
| `keywords` | array of strings | No | Keep attractions whose name, tags or tagline contain any of these words. Chinese words work best. |
| `scenicLevels` | array of enums | No | Keep attractions with the official China tourist-site grade you choose, from 5A (top) to 1A. |
| `minRating` | number | No | Minimum star rating out of 5. Use 0 for no minimum. |
| `minReviews` | integer | No | Minimum number of Ctrip reviews. Use 0 for no minimum. |
| `minPrice` | number | No | Lowest online ticket price to keep, in Chinese yuan. Use 0 for no minimum. |
| `maxPrice` | number | No | Highest online ticket price to keep, in Chinese yuan. Use 0 for no maximum. |
| `admission` | enum | No | Free and paid attractions, free entry only, or paid tickets only. |
| `bookableToday` | boolean | No | Keep only attractions Ctrip marks as bookable for today. Off by default. |
| `instantEntryOnly` | boolean | No | Keep only attractions whose tickets can be used right after buying. Off by default. |
| `freeCancellationOnly` | boolean | No | Keep only attractions whose tickets can be refunded at any time. Off by default. |
| `includeNonAttractions` | boolean | No | Keep the events and editorial topic pages that Ctrip mixes into its lists. Off by default, so rows are real attractions. |
| `sortBy` | enum | No | Ctrip ranking, highest rating, most reviews, popularity score, lowest ticket price or highest ticket price. Sorting works on every page that was read. |
| `includeTicketOffers` | boolean | No | Also read the public Trip.com listing for each city and add ticket and tour offers, plus English names and converted prices on matching attractions. Off by default. |
| `offerCurrency` | enum | No | Currency for Trip.com offers and converted prices. Fourteen currencies are available. Defaults to USD. |
| `offerFreeCancellationOnly` | boolean | No | Keep only ticket offers that show free cancellation. |
| `offerInstantConfirmationOnly` | boolean | No | Keep only ticket offers that show instant confirmation. |
| `includeDetails` | boolean | No | Open each attraction page to add address, phones, description, opening hours, ticket rules, facilities, photos, rating breakdown, review highlights and nearby attractions. Off by default. |
| `maxReviewsPerAttraction` | integer | No | Newest public reviews to attach to each row, from 0 to 10. Use 0 to skip reviews. |
| `trackChanges` | boolean | No | Remember prices and ratings from the last run so each row is labelled new, price changed, rating changed or unchanged. Off by default. |
| `changeFeed` | enum | No | With change tracking on: return everything, only new attractions, only price or rating changes, or new and changed together. |
| `monitorScope` | string | No | A short name for this watch list. Runs with the same name share one memory of past prices. Defaults to `default`. |
| `maxItems` | integer | No | Total attraction rows to return, split evenly across cities. Defaults to 10, up to 500. Ticket offers are extra rows. |
| `maxPagesPerDestination` | integer | No | Most listing pages (10 attractions each) to read per city. Defaults to 3, up to 100. |
| `dedupe` | boolean | No | Return each attraction once even if several cities list it. On by default. |
| `proxyConfiguration` | object | No | Optional proxy. Ctrip pages normally load without one. |

### 📊 Data table

Attraction rows and ticket offer rows share one table. Empty fields are left out of a row instead of being filled in.

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | string | `attraction` for a Ctrip attraction, `ticketOffer` for a Trip.com offer. |
| `poiId` | number | Ctrip place id. Stable, and the key used for change tracking. |
| `businessId` | number | Ctrip attraction page id. |
| `name` | string | Attraction name in Chinese. |
| `nameEn` | string | English name, when the detail page or Trip.com publishes one. |
| `kind` | string | `attraction`, `event` or `topic`. |
| `destination` | string | City the row was collected for. |
| `destinationId` | number | Ctrip city id. |
| `city` | string | City name in Chinese. |
| `cityEn` | string | City name in English. |
| `zone` | string | Area or business district inside the city. |
| `rank` | number | Position in Ctrip's own ranking for the city. Offers use their position in the Trip.com list. |
| `scenicLevel` | string | Official China tourist-site grade, from 5A to 1A. |
| `rankingTitle` | string | Ctrip list the attraction appears on, for example a must-visit ranking. |
| `tagline` | string | Ctrip's one-line description. Offers use the supplier's highlight line. |
| `tags` | array | Ctrip theme labels. Offers use their Trip.com service badges. |
| `rating` | number | Star rating out of 5. |
| `reviewCount` | number | Number of Ctrip reviews. |
| `heatScore` | number | Ctrip popularity score from 0 to 10. |
| `price` | number | Lowest online ticket price. Attractions are in Chinese yuan, offers in the chosen currency. Free attractions show 0. |
| `marketPrice` | number | Window price at the gate, in Chinese yuan. |
| `discountAmount` | number | Saving of the online price against the window price. |
| `discountPercent` | number | Saving as a percentage. |
| `currency` | string | Currency of the price fields on the row. |
| `priceType` | string | How Ctrip describes the price, such as ticket or free. |
| `isFree` | boolean | Ctrip lists free entry. |
| `bookableToday` | boolean | Can be booked for today. Offers show the same flag. |
| `bookableTomorrow` | boolean | Can be booked for tomorrow. |
| `instantEntry` | boolean | Ticket can be used right after buying. |
| `freeCancellation` | boolean | Ticket can be refunded at any time. |
| `advanceBooking` | string | Advance booking rule, such as reserve 7 days ahead. |
| `availabilityTags` | array | Ctrip's own availability labels in Chinese. |
| `openStatus` | string | Opening status shown on the listing, such as closing time. |
| `distanceToCenter` | string | Distance to the city center as Ctrip words it. |
| `distanceToCenterKm` | number | Distance to the city center in kilometers. |
| `latitude` | number | Latitude in standard GPS coordinates. |
| `longitude` | number | Longitude in standard GPS coordinates. |
| `imageUrl` | string | Main photo. |
| `hasVideo` | boolean | The attraction has a video on Ctrip. |
| `detailUrl` | string | Ctrip attraction page. |
| `convertedPrice` | number | Online ticket price in your chosen currency, from Trip.com. Only for attractions that Trip.com lists. |
| `convertedMarketPrice` | number | Window price in your chosen currency. |
| `convertedCurrency` | string | Currency of the converted prices. |
| `convertedDiscount` | string | Discount label from Trip.com. |
| `soldLabel` | string | Sold count as Trip.com words it, such as 2mil+ booked. |
| `soldCountMin` | number | The same sold count as a number. |
| `openingHoursEn` | string | Opening hours in English from Trip.com. |
| `tripcomUrl` | string | Trip.com page for the attraction. |
| `address` | string | Street address. Detail option. |
| `phones` | array | Public phone numbers. Detail option. |
| `introduction` | string | Plain-text description. Detail option. |
| `openingHours` | string | Opening hours with holiday changes. Detail option. |
| `openingHoursToday` | string | Opening hours for today. Detail option. |
| `openingNote` | string | Note about opening hours. Detail option. |
| `visitDuration` | string | Suggested visit time. Detail option. |
| `ticketPolicies` | array | Rules for children, seniors, students and other groups. Detail option. |
| `facilities` | array | Parking, luggage storage, strollers and similar services. Detail option. |
| `notice` | string | Visitor notice. Detail option. |
| `imageCount` | number | Number of photos on Ctrip. Detail option. |
| `images` | array | Photo links. Detail option. |
| `reviewScores` | object | Average scores for scenery, fun and value. Detail option. |
| `reviewHighlights` | array | Most mentioned review topics with counts and sentiment. Detail option. |
| `nearby` | array | Nearby attractions with distance, rating and review count. Detail option. |
| `reviewTotal` | number | Total reviews on the attraction page. Detail option. |
| `reviews` | array | Review sample with rating, text, date, traveler type, sub-ratings, reviewer region and owner reply. Review option. |
| `changeType` | string | `new`, `priceChanged`, `ratingChanged` or `unchanged`. Change tracking option. |
| `previousPrice` | number | Online price at the last run. Change tracking option. |
| `previousMarketPrice` | number | Window price at the last run. Change tracking option. |
| `previousRating` | number | Rating at the last run. Change tracking option. |
| `reviewCountChange` | number | Reviews gained since the last run. Change tracking option. |
| `firstSeenAt` | string | When this watch list first returned the attraction. Change tracking option. |
| `page` | number | Ctrip listing page the row came from. |
| `sourceUrl` | string | Page the row was read from. |
| `scrapedAt` | string | Collection time in UTC. |
| `offerId` | string | Trip.com product id. Offers only. |
| `title` | string | Offer title. Offers only. |
| `listedPrice` | number | Price before the discount, when shown. Offers only. |
| `pricePrefix` | string | Wording before the price, such as From. Offers only. |
| `discountLabel` | string | Discount label. Offers only. |
| `instantConfirmation` | boolean | Offer shows instant confirmation. Offers only. |
| `durationText` | string | Length of the tour or activity. Offers only. |
| `languages` | array | Languages offered. Offers only. |
| `highlights` | array | Duration, language and similar badges. Offers only. |
| `badge` | string | Trip.com highlight such as a best-seller note. Offers only. |
| `promotions` | array | Active promotion labels. Offers only. |
| `url` | string | Trip.com offer page. Offers only. |

### 📤 Sample output

One attraction row with detail, review and change-tracking options on. Long text is shortened here for reading.

```json
{
  "recordType": "attraction",
  "poiId": 75627,
  "businessId": 762,
  "name": "东方明珠",
  "nameEn": "Oriental Pearl Radio & Television Tower",
  "kind": "attraction",
  "destination": "Shanghai",
  "destinationId": 2,
  "city": "上海",
  "cityEn": "Shanghai",
  "zone": "陆家嘴",
  "rank": 7,
  "scenicLevel": "5A",
  "rankingTitle": "2026全球100夜游必打卡景点",
  "tagline": "360度欣赏申城的地标",
  "tags": [
    "遛娃宝藏地",
    "亲子同乐"
  ],
  "rating": 4.7,
  "reviewCount": 179363,
  "heatScore": 8.5,
  "price": 199,
  "marketPrice": 199,
  "currency": "CNY",
  "priceType": "门票",
  "isFree": false,
  "bookableToday": true,
  "instantEntry": true,
  "freeCancellation": true,
  "availabilityTags": [
    "随买随用",
    "可订今日",
    "随时退"
  ],
  "distanceToCenter": "距市中心2.7km",
  "distanceToCenterKm": 2.7,
  "latitude": 31.241874,
  "longitude": 121.495225,
  "imageUrl": "https://dimg04.c-ctrip.com/images/1lo7412000isn0jrbD500_W_480_0_Q80.jpg",
  "hasVideo": true,
  "detailUrl": "https://you.ctrip.com/sight/shanghai2/762.html",
  "address": "上海市浦东新区世纪大道1号",
  "phones": [
    "021-58792888",
    "021-58791888"
  ],
  "introduction": "东方明珠矗立于上海浦东陆家嘴，与外滩隔江相望，是上海的标志性建筑。若在267米高的空中旋转餐厅一边品尝美食一边欣赏申城夜景，更是超凡的体验。…",
  "openingHours": "特殊营业时间：10月1日-10月5日 周一,周四–周日 08:30-21:00开放（21:00停止入园）;全年 09:0…",
  "openingHoursToday": "09:00-21:00开放（21:00停止入园）",
  "visitDuration": "2-4小时",
  "ticketPolicies": [
    {
      "name": "儿童",
      "description": "1米(不含)以下，免费；身高1米(含)-1.3米(含)或年龄6周岁(含)以下，半价"
    }
  ],
  "facilities": [
    {
      "name": "行李寄存",
      "description": "参考价格：以景区现场为准；地址：游客中心…"
    }
  ],
  "imageCount": 467,
  "images": [
    "https://dimg04.c-ctrip.com/images/1lo7412000isn0jrbD500.jpg"
  ],
  "reviewScores": {
    "scenery": 4.7,
    "fun": 4.6,
    "value": 4.6
  },
  "reviewHighlights": [
    {
      "tag": "上海的地标性建筑",
      "count": 11952,
      "sentiment": "positive"
    },
    {
      "tag": "建筑有特色",
      "count": 7775,
      "sentiment": "positive"
    }
  ],
  "nearby": [
    {
      "poiId": 13412802,
      "name": "上海迪士尼度假区",
      "distance": "直线距离18.9km",
      "rating": 4.7,
      "reviewCount": 317899,
      "url": "https://you.ctrip.com/sight/shanghai2/1412255.html"
    }
  ],
  "reviewTotal": 102789,
  "reviews": [
    {
      "id": "766511789",
      "rating": 4,
      "text": "东方明珠是上海经典地标，矗立黄浦江畔。登上观光层，两岸风光尽收眼底，对岸外滩建筑群与陆家嘴高楼遥相呼应。透明悬空走廊颇具…",
      "language": "zh-cn",
      "publishedAt": "2026-07-27T13:08:45.000Z",
      "travelerType": "家庭亲子",
      "reviewerLocation": "上海",
      "author": "匿名用户",
      "subRatings": {
        "scenery": 4,
        "fun": 5,
        "value": 4
      },
      "usefulCount": 3,
      "photoCount": 4
    }
  ],
  "changeType": "new",
  "page": 1,
  "sourceUrl": "https://you.ctrip.com/sight/shanghai2.html",
  "scrapedAt": "2026-10-11T10:52:38.358Z"
}
```

### 💰 Pricing

Pay per result. You are charged for each attraction row written to your dataset, and for each Trip.com ticket offer row when you switch offers on. Details, review samples and change labels come with the row at no extra charge, so you pay only for rows you actually receive. Ticket offers are extra rows on top of your attraction limit, and they are billed like any other result.

Runs that return nothing are not charged. There are no monthly subscriptions or minimum commitments, and the run stops cleanly once your per-run maximum charge is reached. Paid Apify plans get lower per-result rates automatically.

### ⭐ Enjoying Ctrip Attractions & Tickets Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#EEF4FD;border:1px solid #D3E4F9;border-left:5px solid #2577E3;border-radius:10px 10px 0 0;color:#1C1917">
<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 attractions into a price sheet you can sort.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other travel agents and pricing analysts find this actor. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#226DD0;border:1px solid #226DD0;border-left:5px solid #226DD0;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#1C1917">
<a href="https://apify.com/getascraper/ctrip-attractions-ticket-catalog/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 Beijing and returns 10 attractions in seconds. Raise `maxItems` once the columns look right.
- **Strict filters need more pages.** Filters and sorting work on the pages that were read, so raise `maxPagesPerDestination` when you filter hard or sort by price.
- **Find bargains.** Set `sortBy` to lowest ticket price and `admission` to paid tickets only, then compare `price` with `marketPrice`.
- **Watch a market.** Turn on `trackChanges`, give the run a `monitorScope` name and schedule it. Choose `onlyChanged` to receive just the price and rating moves.
- **Plan an itinerary.** Turn on `includeDetails` for hours, ticket rules and facilities, and `maxReviewsPerAttraction` for a quick read of recent traveler feedback.

### ❓ FAQ

##### 携程景点门票价格怎么批量导出？

Enter one or more cities in `destinations`, run the actor, and download the dataset as CSV, Excel or JSON. Every row has the online ticket price, the gate price, the discount and a free-cancellation flag. Use `minPrice` and `maxPrice` to keep a price band.

##### 携程景点评分和评论数据可以导出吗？

Yes. Every row has the star rating and the review count. Turn on `includeDetails` for the score breakdown (scenery, fun, value) and the most mentioned review topics, and set `maxReviewsPerAttraction` to attach up to 10 recent reviews with text, date and traveler type.

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

No login, API key or cookie is needed. The actor reads public Ctrip pages at a polite pace. If Ctrip ever asks for a verification step, the run stops with a clear message instead of returning empty data, and you can switch on Apify Proxy in the advanced section.

##### Can I get adult and child ticket prices for each attraction?

Ctrip shows one lowest online price and the gate price for each attraction, and those are what the rows contain. Child, senior and student discount rules come with `includeDetails`. For ticket and tour products priced in your own currency, switch on `includeTicketOffers`.

### 🔗 Other actors

- [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.
- [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.
- [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-attractions-ticket-catalog/changelog.md

# Actor input Schema

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

Cities to read, one per row. Use an English name (Shanghai), a Chinese name (上海), a Ctrip city id (2), or a Ctrip listing link such as https://you.ctrip.com/sight/hangzhou14.html. Results are split evenly across the cities.

## `startUrls` (type: `array`):

Optional Ctrip city listing links, for example https://you.ctrip.com/sight/beijing1.html. A page link such as .../s0-p3.html starts reading at that page. Works together with Destinations.

## `themes` (type: `array`):

Keep only attractions that match at least one of these themes. Matching uses Ctrip's own labels, rankings and attraction names. Leave empty for all themes.

## `keywords` (type: `array`):

Keep attractions whose name, tags or tagline contain any of these words. Chinese words work best, for example 博物馆 or 古镇.

## `scenicLevels` (type: `array`):

Keep attractions with this official tourist-site grade (5A is the highest). Only mainland China sites carry a grade.

## `minRating` (type: `number`):

Keep attractions rated at least this many stars out of 5. Use 0 for no minimum. Attractions without a rating are dropped when this is above 0.

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

Keep attractions with at least this many Ctrip reviews. Use 0 for no minimum.

## `minPrice` (type: `number`):

Keep attractions whose online ticket price is at least this amount in Chinese yuan. Use 0 for no minimum.

## `maxPrice` (type: `number`):

Keep attractions whose online ticket price is at most this amount in Chinese yuan. Use 0 for no maximum.

## `admission` (type: `string`):

Choose all attractions, only free attractions, or only attractions that sell a ticket.

## `bookableToday` (type: `boolean`):

Keep only attractions that Ctrip marks as bookable for today.

## `instantEntryOnly` (type: `boolean`):

Keep only attractions whose tickets can be used right after buying (Ctrip label: buy and use).

## `freeCancellationOnly` (type: `boolean`):

Keep only attractions whose tickets can be refunded at any time (Ctrip label: refund anytime).

## `includeNonAttractions` (type: `boolean`):

Ctrip mixes events and editorial topics such as flower-viewing guides into its lists. Turn this on to keep them. Off keeps real attractions only.

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

Order of the rows. Ctrip order is Ctrip's own ranking. Other options sort every page that was read, so they work best with more pages per city.

## `includeTicketOffers` (type: `boolean`):

Also read the public Trip.com listing for each city. Adds ticket and tour products with prices in your currency, free-cancellation and instant-confirmation flags, sold counts and ratings (up to 12 per city), plus English names and converted prices on matching attractions.

## `offerCurrency` (type: `string`):

Currency for Trip.com ticket offers and converted attraction prices.

## `offerFreeCancellationOnly` (type: `boolean`):

Keep only ticket offers that show free cancellation.

## `offerInstantConfirmationOnly` (type: `boolean`):

Keep only ticket offers that show instant confirmation.

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

Open each attraction's own Ctrip page to add address, phone numbers, description, opening hours, visit duration, child, senior and student ticket rules, facilities, photos, rating breakdown, review highlights and nearby attractions. Slower, about 2 seconds per attraction.

## `maxReviewsPerAttraction` (type: `integer`):

Newest public reviews to attach to each row, from 0 to 10. Each has rating, text, date, traveler type, sub-ratings and any owner reply. Use 0 to skip reviews.

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

Remember each attraction's ticket price and rating from the last run so every row says whether it is new, has a changed price or rating, or is unchanged. Best for scheduled runs.

## `changeFeed` (type: `string`):

With change tracking on, choose which rows are kept: everything, only attractions seen for the first time, only price or rating changes, or both.

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

A short name for this watch list. Runs that use the same name share one memory of past prices. Use a different name for each separate monitoring job.

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

Stop after this many attraction rows in total, split evenly across the cities. Ticket offers are extra rows and do not count here.

## `maxPagesPerDestination` (type: `integer`):

The most Ctrip listing pages (10 attractions each) to read per city. With Ctrip ranking order the run stops as soon as enough matches are found. Sorting or strict filters read all of these pages.

## `dedupe` (type: `boolean`):

Return each attraction only once, even when several cities list it.

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

Optional proxy. Ctrip's public pages normally load without one. Turn on Apify Proxy if a run reports that Ctrip asked for a verification step.

## Actor input object example

```json
{
  "destinations": [
    "Beijing"
  ],
  "startUrls": [],
  "themes": [],
  "keywords": [],
  "scenicLevels": [],
  "minRating": 0,
  "minReviews": 0,
  "minPrice": 0,
  "maxPrice": 0,
  "admission": "any",
  "bookableToday": false,
  "instantEntryOnly": false,
  "freeCancellationOnly": false,
  "includeNonAttractions": false,
  "sortBy": "ctrip",
  "includeTicketOffers": false,
  "offerCurrency": "USD",
  "offerFreeCancellationOnly": false,
  "offerInstantConfirmationOnly": false,
  "includeDetails": false,
  "maxReviewsPerAttraction": 0,
  "trackChanges": false,
  "changeFeed": "all",
  "monitorScope": "default",
  "maxItems": 10,
  "maxPagesPerDestination": 3,
  "dedupe": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "Beijing"
    ],
    "startUrls": [],
    "themes": [],
    "keywords": [],
    "scenicLevels": [],
    "minRating": 0,
    "minReviews": 0,
    "minPrice": 0,
    "maxPrice": 0,
    "admission": "any",
    "bookableToday": false,
    "instantEntryOnly": false,
    "freeCancellationOnly": false,
    "includeNonAttractions": false,
    "sortBy": "ctrip",
    "includeTicketOffers": false,
    "offerCurrency": "USD",
    "offerFreeCancellationOnly": false,
    "offerInstantConfirmationOnly": false,
    "includeDetails": false,
    "maxReviewsPerAttraction": 0,
    "trackChanges": false,
    "changeFeed": "all",
    "monitorScope": "default",
    "maxItems": 10,
    "maxPagesPerDestination": 3,
    "dedupe": true,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/ctrip-attractions-ticket-catalog").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": ["Beijing"],
    "startUrls": [],
    "themes": [],
    "keywords": [],
    "scenicLevels": [],
    "minRating": 0,
    "minReviews": 0,
    "minPrice": 0,
    "maxPrice": 0,
    "admission": "any",
    "bookableToday": False,
    "instantEntryOnly": False,
    "freeCancellationOnly": False,
    "includeNonAttractions": False,
    "sortBy": "ctrip",
    "includeTicketOffers": False,
    "offerCurrency": "USD",
    "offerFreeCancellationOnly": False,
    "offerInstantConfirmationOnly": False,
    "includeDetails": False,
    "maxReviewsPerAttraction": 0,
    "trackChanges": False,
    "changeFeed": "all",
    "monitorScope": "default",
    "maxItems": 10,
    "maxPagesPerDestination": 3,
    "dedupe": True,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/ctrip-attractions-ticket-catalog").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": [
    "Beijing"
  ],
  "startUrls": [],
  "themes": [],
  "keywords": [],
  "scenicLevels": [],
  "minRating": 0,
  "minReviews": 0,
  "minPrice": 0,
  "maxPrice": 0,
  "admission": "any",
  "bookableToday": false,
  "instantEntryOnly": false,
  "freeCancellationOnly": false,
  "includeNonAttractions": false,
  "sortBy": "ctrip",
  "includeTicketOffers": false,
  "offerCurrency": "USD",
  "offerFreeCancellationOnly": false,
  "offerInstantConfirmationOnly": false,
  "includeDetails": false,
  "maxReviewsPerAttraction": 0,
  "trackChanges": false,
  "changeFeed": "all",
  "monitorScope": "default",
  "maxItems": 10,
  "maxPagesPerDestination": 3,
  "dedupe": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call getascraper/ctrip-attractions-ticket-catalog --silent --output-dataset

```

## MCP server setup

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

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/8n0Zl6Uz88yIy0cep/builds/oB7Hh52QqwcMClp46/openapi.json
