Trip.com Attraction Availability & Prices
Pricing
from $0.35 / 1,000 slot-listeds
Trip.com Attraction Availability & Prices
Scrape Trip.com attraction availability and prices. Just add product ids or product URLs and get every bookable date and package with the price, minimum price, remaining stock, sold-out flag and the options that define each package. It covers attractions, not hotels. $0.50 per 1,000 slots.
Pricing
from $0.35 / 1,000 slot-listeds
Rating
0.0
(0)
Developer
BonCross API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
What is Trip.com Attraction Availability & Prices?
Trip.com Attraction Availability & Prices returns the booking calendar of a Trip.com tour or ticket: each date on sale, each package, what it costs that day and how many places are left. You paste a product id or a product link, and the calendar arrives as rows you can sort and chart.
You can point it at attraction tickets, day tours, transfers and rail or metro passes. Trip.com hotels are a separate family of actors, and if you only have an attraction page and not a product, Trip.com Attraction Products Scraper lists the products to feed in here.
Why use this one:
- You get stock, not just a price. All 390 slots in our 7 October 2026 sample came with the number of places left.
- A package is never averaged away. A shared tour and a private tour of the same product are separate rows with separate prices.
- The booking terms come with the price: ticket type, the most you can book at once, and the last day and time to book. Measured over 17 products of 17 kinds and 10 attraction tickets, those four were on every row.
- It's fast enough for a whole catalogue. 155 products returned 61,818 slots in 48 seconds.
- $0.50 per 1,000 slots on the Free plan, $0.35 on Business, with nothing to set up.
BonCross Verified means we tested this actor against the live site before release and kept the record:
- 28 of 28 live checks on its inputs and filters passed on 7 October 2026
- 14 products run the same day across 9 destinations: 390 slots, 1 error row
- Charges matched the rows: 13 products, 390 slots, 1 checked
- A product id with no dates on sale gets a row saying so
What else you can do with it:
- Read the price before a sale next to the sale price, on the dates Trip.com has discounted
- See the options that define a package, such as event time, language, vehicle or meal type
- Trim the calendar to a date range, in any currency Trip.com quotes
- Keep a price memory between runs and get only the slots whose price moved
- Find out why a product has no calendar from a row that says so
- Download the lot as JSON, CSV, Excel, XML or HTML
People run it to watch a tour sell down date by date, to get an alert when a sold-out date reopens, to check that a reseller is honouring an agreed price, and to feed real bookable inventory into a price comparison. Remaining places per date is also a more direct measure of demand than a review count.
What data is on each row?
| 📅 Date | ⏰ Session time, on timed products |
| 💵 Price for that date and package | Lowest price on the date |
| 🏷️ Price before a sale | 💱 Currency |
| 📦 Places remaining | Trip.com's wording for it ("Only 1 spot left") |
| 🎟️ Package id and name | Package options as name and value |
| ✅ Bookable flag | 🚫 Sold-out flag |
| 🧑 Ticket type, e.g. Adult, Child | 👥 Minimum party size |
| Maximum quantity per booking | ⏳ Booking cut-off: days ahead and time |
| 📝 Package description: validity, how to use | Resource id |
| 🆔 Product id | 🔗 Product link |
| 📈 Price change since last run | Previous price and when it was read |
How to scrape Trip.com attraction availability
You don't need to write any code. It's a form, and the result opens as a table.
- Create a free Apify account and open Trip.com Attraction Availability & Prices.
- Open the tour or ticket on Trip.com and copy its address, or just the product id in it. Paste one or more into Products.
- Pick a currency. Add a date range if you only care about part of the calendar.
- Press Start, then download the slots as Excel, CSV or JSON.
⬇️ Input
Paste product ids or product links. A product is the ticket or tour you book, not the attraction's page. If you paste the whole link, the id is picked out of it.
Got a long list? Put the links in Start URLs, which can load them from a file, a Google Sheet or a remote list. Both inputs are used together.
You have two limits. "Maximum slots per product" applies to each product separately: ten products at 50 each returns 500. "Maximum results for the whole run" caps the total, and nothing past it is fetched or charged for. Both default to 0, which means no limit.
Two tours, every date on sale
{"products": ["49278954", "89137206"],"currency": "USD"}
The first is a floating market and railway market tour, the second a shared group tour with an 8:00 start. Both were in our 7 October 2026 sample.
One month of dates from a pasted link
{"products": ["https://www.trip.com/things-to-do/detail/49278954"],"dateFrom": "2026-11-01","dateTo": "2026-11-30","currency": "USD"}
A daily price watch that reports only what moved
{"products": ["49278954", "89137206"],"priceStoreName": "tripcom-prices","onlyNewOrChanged": true,"currency": "USD"}
Package names in Japanese, priced in yen
{"products": ["49278954"],"locale": "ja-JP","currency": "JPY"}
| Field | Notes |
|---|---|
products | Product ids, or any Trip.com link that contains one. |
startUrls | The same links, loaded in bulk. |
maxSlotsPerProduct, maxItems | The per-product cap and the run-wide cap. Both default to 0, no limit. |
dateFrom, dateTo | Keep only dates in this range, as YYYY-MM-DD. Empty keeps the whole calendar. |
currency | ISO code, default USD. |
locale | Language of package and option names, default en-XX. |
priceStoreName, onlyNewOrChanged | The price memory, and the switch that returns only slots whose price moved. |
includeRawData | Adds Trip.com's untouched per-package record to each row. Default false. |
delayMs, maxConcurrency | Pacing. Defaults 800 and 8. |
poiId, scenicSpotId | Attraction id overrides, rarely needed. |
For developers
- Trip.com checks a product against the attraction it belongs to. The actor looks that attraction up for you. To pin it yourself, add the attraction id after an @ sign, as in
59489114@10558849, or setpoiId(Attraction id override), which applies to any product that doesn't have one of its own.scenicSpotIdis an alternative identifier for when you don't have the attraction id. dateFromanddateTotrim the calendar Trip.com returns. They can't extend it.maxItemsdoesn't count the row for a product that couldn't be read or has no dates. The first is free, and the second costs theproduct-checkedfee.priceStoreNamenames a key-value store that remembers the last price per package and date. Rows then havepreviousPrice,previousScrapedAt,priceChangeandpriceChangePct.onlyNewOrChangedneeds that store.delayMs(default 800, up to 10,000) is the pause between products.maxConcurrency(default 8, from 1 to 8) is how many requests run at once. The default is the fastest level we measured clean, and the only reason to lower it is a run that reports refusals or errors.- Rows are saved as they arrive. If Apify restarts a run part-way through, it continues from where it stopped, and no slot is saved or charged twice.
⬆️ Output
You get one row per date and package, in the dataset and as a table in the Output tab. This one is from a run on 7 October 2026:
{"input": "49278954","id": "49278954-103591277-2026-10-09-all-103591278","url": "https://www.trip.com/things-to-do/detail/?productId=49278954","productId": "49278954","date": "2026-10-09","dateMinPrice": 19.72,"packageId": "103591277","packageName": "A · car (type to be confirmed) · D-meeting point pick-up and drop-off | Damnoen Saduak + Maeklong | English-English","salesProperties": {"Itinerary": "A","Brand car series": "car (type to be confirmed)","Package": "D-meeting point pick-up and drop-off | Damnoen Saduak + Maeklong | English-English"},"resourceId": "103591278","ticketType": "Adult","timeSlot": null,"price": 19.72,"priceText": "19.72","priceListed": 21.92,"minPrice": 19.72,"stock": 13,"stockText": null,"minQuantity": 1,"maxQuantity": 12,"bookingCutoffDays": 1,"bookingCutoffTime": "23:00","packageDescription": null,"isSoldOut": false,"isAvailable": true,"currency": "USD","previousPrice": null,"previousScrapedAt": null,"priceChange": null,"priceChangePct": null,"scrapedAt": "2026-10-07T17:01:42.995Z"}
A few columns need a word:
| Column | Meaning |
|---|---|
id | Product, package, date, time slot and resource joined together. One row is one bookable slot. |
dateMinPrice | The lowest package price on that date, after any sale. |
priceListed | The price before a sale. Filled only on dates and packages Trip.com has on sale, otherwise null. |
timeSlot | The session time on timed products ("11:00"). Null where the product is sold by the day, as above. |
stock, stockText | Places left as a number, and Trip.com's wording where it shows one. |
bookingCutoffDays, bookingCutoffTime | The last moment to book: at least that many days before the date, by that time. |
maxQuantity | The most that can be booked at once for that date. |
packageDescription | Validity and how-to-use text. Tours, transfers and passes may have it. Attraction tickets don't. |
In the 7 October 2026 sample of 390 slots, timeSlot was filled on 30 and stockText on 45. Those depend on how the product is sold. Price, date and stock were on all 390.
A product that can't be read still gets a row: the input, the product id and an error telling you what happened and what to try next. That row isn't charged. A product id Trip.com answers with no packages or dates gets the same kind of row, for the $0.0005 product-checked fee.
How much does it cost to scrape Trip.com availability?
| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
actor-start, per run | $0.002 | $0.002 | $0.002 | $0.002 |
product-resolved, per product | $0.002 | $0.002 | $0.002 | $0.002 |
product-checked, per product Trip.com answered with no dates, instead of product-resolved | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
slot-listed, per row returned | $0.0005 | $0.00045 | $0.0004 | $0.00035 |
Enterprise plans pay the Business price.
$0.50 per 1,000 slots on the Free plan, $0.35 on Business. That's the whole price: there's no proxy to set up, and platform usage is included.
Rows removed by your date range, and unchanged rows when you ask for only new or changed, are free. A product with no calendar costs only the $0.0005 product-checked fee. A product that couldn't be read is free.
- Two products returning 220 rows: $0.002 + 2 × $0.002 + 220 × $0.0005 = $0.116 ($0.083 on Business).
- A daily watch on one product returning 110 changed rows: $0.002 + $0.002 + 110 × $0.0005 = $0.059 ($0.0425 on Business).
The $5 of credits in Apify's Free plan each month buys about 43 runs the size of the first example, or about 9,400 slots.
One thing to plan for: a slot is a row, and some products have a lot of them. Across the 155 products in the speed table below, the average was about 400 slots each, and a pass with many packages over a long calendar returns far more. Set "Maximum slots per product" or a date range if you're testing.
How big is a calendar, and how fast is a run?
Whole runs on Apify, start-up included, three runs each on 2 October 2026:
| Run | Rows | Time | Cost at the Free-plan price |
|---|---|---|---|
| One product, first 8 slots | 8 | 5.8 to 6.7 s | $0.008 |
| Four products (one with no calendar), every slot | 446 + 1 notice | 4.4 to 4.7 s | $0.2315 |
| 155 products, every slot | 61,818 + 7 notices | 48 s | $31.2105 |
A large run delivers about 75,000 slots a minute, at about 400 slots per product. An hour covers roughly 10,000 products.
How far ahead you can see is Trip.com's decision. Two products measured on 11 September 2026 returned 28 and 39 dates, over 23 packages and 220 rows between them.
Watch prices on a schedule, or call it from code
A price watch is what this data is for. Create an Apify Schedule, name a price memory store, switch on "Only new or changed", and each run hands you just the slots that moved. Send them to Slack or a Google Sheet through Apify's integrations, or fire a webhook when the run ends.
From code, POST https://api.apify.com/v2/acts/boncross~tripcom-availability/run-sync-get-dataset-items with the input as the body returns the slots in one request. The apify-client packages on npm and PyPI cover longer runs. AI agents reach it through the Apify MCP server at mcp.apify.com, where it's the tool boncross/tripcom-availability: give it product ids and it reads the calendar back.
Limitations: what the calendar won't tell you
- You won't find the product name on a row. The calendar doesn't include it, and rows identify the product by its id and link. Trip.com Product Details Scraper has the name and description.
- You get only the dates Trip.com publishes. A range wider than the calendar adds nothing.
- On a pass that books several attractions at once,
timeSlotis the first attraction's session andsalesPropertieshas all of them. - A few sellers name their ticket types in Chinese only. The common ones are given in English ("Adult", "Standard price", "Group(1-4 People)"). A name we haven't seen is shown as the seller wrote it.
- An id Trip.com doesn't know looks the same to us as a product with no calendar. It gets the same row and the same $0.0005 fee.
FAQ
What exactly do I paste?
Open the tour or ticket on Trip.com and look at the address. The id is the number after /detail/ or after productId=. You can paste the whole address and skip the copying.
I only have the attraction's page. What now?
Run Trip.com Attraction Products Scraper on it first. It lists the tickets and tours sold for that attraction, each with the product id this actor takes. To find products by keyword or city, use Trip.com Things to Do Search.
Why did a product return no slots?
There are three usual reasons. Some products are sold without a date, such as a meal voucher or a ticket valid for 90 days, and have no calendar. A product answers only in the languages of the markets where Trip.com sells it, so one that isn't on the Japanese site returns nothing for ja-JP while it answers in English. And if the attraction lookup fails, a product comes back as a row reporting no dates: add its attraction id after an @ sign and run it again. In each case you get a row saying what happened.
Why does a date disappear between runs?
Trip.com removes a date from the calendar once it sells out or leaves the sale window. It doesn't show it with zero places. A date that vanished is a signal, and a date that returns is a reopening.
Why do two rows share a date?
A product usually sells several packages: a shared tour and a private one, a lunch sitting and a dinner sitting. Each has its own row, price and remaining places.
Is the price per person?
It's per package for the date. Tours, transfers and passes name who the price is for in ticketType (Adult, Child, Number of people). Attraction tickets don't, and give you only the minimum party size.
Do I need proxies or a Trip.com account?
Neither. There's nothing to configure, no login, and no proxy charge on top of the price per slot.
Is it legal to scrape Trip.com?
The actor reads only what Trip.com shows any visitor who isn't logged in: public prices and availability. Scraping public data is generally lawful, but how you use it is your responsibility, including Trip.com's terms and the law where you operate.
More from BonCross
- Trip.com Attraction Products Scraper: Every product Trip.com sells for an attraction.
- Trip.com Hotel Details Scraper: The full Trip.com record for any hotel, with its guest reviews.
- Trip.com Hotel Search Scraper: Every hotel Trip.com lists for a destination and your dates.
- Trip.com Product Details Scraper: Trip.com tour and activity details.
- Trip.com Things to Do Search: Search Trip.com's things-to-do catalogue by keyword, city or attraction.
- Trip.com Attraction Reviews Scraper: Trip.com reviews for any attraction.
Your feedback
Seen a price or a stock figure that doesn't match what Trip.com shows for that date? Tell us on the Issues tab in Apify Console, with the product id and the date. BonCross reads every report and replies there.