Trip.com Product Details Scraper
Pricing
from $2.10 / 1,000 product-scrapeds
Trip.com Product Details Scraper
Scrape Trip.com tour and activity details. Just add product ids or links and get the name, rating, price, packages with ticket types, itinerary by day, inclusions, highlights, how to use, cancellation rules, booking cut-off, languages, attractions, photos and FAQs.
Pricing
from $2.10 / 1,000 product-scrapeds
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 Product Details Scraper?
A Trip.com tour page holds far more than a name and a "from" price, and Trip.com Product Details Scraper gives you all of it as one record. Paste a product id or link and you get every package with its ticket types and quantity limits, the itinerary stop by stop, the cancellation rules, the booking cut-off, the service languages, the attractions visited, the photos and the FAQs.
It reads one tour, activity, transfer or pass at a time. To find products in the first place, use Trip.com Things to Do Search, whose links paste straight in. Trip.com hotels are handled by separate actors.
What you get that a listing scrape can't give you:
- The itinerary as data. A Bangkok floating-market day tour came back with 10 itineraries across its package options, each stop with its time, duration, places, whether lunch is included and the meeting point's coordinates.
- Every package priced by ticket type. That tour sells 5 packages, each with Adult and Child prices and a minimum and maximum group size.
- Policies you can filter on. The cancellation label and rules, and the booking cut-off as days ahead plus a clock time, were present on all 17 products of 17 different kinds we sampled.
- Text in the buyer's language. Korean, Japanese, German and Chinese were each checked on three products, with prices in the currency you choose.
- $3.00 per 1,000 products on the Free plan, $2.10 on Business. An id Trip.com doesn't know isn't charged.
BonCross Verified means we tested this actor against the live site before release and kept the record:
- 30 of 30 live checks on its inputs and filters passed on 7 October 2026
- 14 products run the same day in seven cities from Bangkok to Queenstown: 13 records, and the one made-up id refused
- Charges checked against the 13 products
- An unknown id gets an uncharged row saying why
What data is in a product record?
| Product name, category and tags | ⭐ Rating, its wording and review count |
| 🛒 Bookings last month and last year | 💵 Price from, with the pre-sale price and discounts |
| 📦 Packages with ids and names | 🎟️ Ticket types with prices |
| Minimum and maximum quantity | ⏳ Booking cut-off: days ahead and time |
| 🗺️ Itinerary per package, day by day | Meals, included or not |
| 📍 Meeting points and pick-up areas | Attractions visited, with coordinates |
| Inclusions and exclusions | Highlights |
| Description and its images | How to use, and important information |
| 📅 Validity period | Cancellation label, summary and rules |
| 🗣️ Service languages | Traveller types and age or height ranges |
| Departure and destination cities | Supplier name and id |
| 🖼️ Photos and videos | FAQs |
How much does it cost to scrape Trip.com product details?
| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
actor-start, per run | $0.001 | $0.001 | $0.001 | $0.001 |
product-scraped, per product record returned | $0.003 | $0.0027 | $0.0024 | $0.0021 |
Enterprise plans pay the Business price.
$3.00 per 1,000 products on the Free plan, $2.10 on Business. The price doesn't change with the size of the record: a tour with 14 itineraries costs the same as a rail ticket. Platform usage is included, and there's no proxy to set up or pay for.
- Ten products: $0.001 + 10 × $0.003 = $0.031 ($0.022 on Business).
- One thousand: $0.001 + 1,000 × $0.003 = $3.001 ($2.101 on Business).
You aren't charged for an id Trip.com doesn't have, for a product that couldn't be read, or for an attraction-ticket notice row (explained under Output).
With the $5 of monthly credits on Apify's Free plan you can read about 1,650 products before paying anything: that's 33 runs of 50 products at $0.151 each.
How to scrape Trip.com product details
- Sign up for a free Apify account, then open Trip.com Product Details Scraper.
- Paste product ids or product links into Products. The id is the number in a link such as
/things-to-do/detail/49278954/. - Choose a currency and a language. Leave itineraries and FAQs on unless you want smaller rows.
- Press Start, then download the records as JSON, CSV or Excel.
Nested parts (packages, itineraries) stay nested in JSON and are flattened into columns in CSV and Excel.
⬇️ Input
Paste Trip.com product ids (49278954) or product links (https://www.trip.com/things-to-do/detail/49278954/), in any of the forms Trip.com uses. A product you list twice is read once.
If your list is long, Start URLs can load it from a file, a Google Sheet or a remote list. The two inputs are combined. "Maximum products" caps the number of records in the whole run, and 0 means no cap. There's no per-product limit to set: each product is one record with all its packages.
One tour with everything
{"products": ["49278954"],"currency": "USD","locale": "en-XX"}
Two Seoul products from a search, in Korean and won, without itineraries
{"products": ["https://www.trip.com/things-to-do/detail/89137206","https://www.trip.com/things-to-do/detail/50095890"],"currency": "KRW","locale": "ko-KR","includeItinerary": false}
A long list from a file, capped
{"startUrls": [{ "requestsFromUrl": "https://example.com/my-products.txt" }],"maxItems": 500}
| Field | Notes |
|---|---|
products | Product ids or links. |
startUrls | Product links, pasted or loaded in bulk. Added to products. |
maxItems | Stop after this many product records. Default 0, no limit. |
includeItinerary | Default true. Each tour's itinerary per package. |
includeFaqs | Default true. The questions and answers on the product page. |
currency | ISO code, default USD. |
locale | Trip.com locale, default en-XX. Others include en-US, en-GB, ja-JP, ko-KR, zh-HK, zh-TW, th-TH, de-DE, fr-FR, es-ES. |
includeRawData, maxConcurrency, delayMs | Advanced. See below. |
For developers
includeRawData(defaultfalse) attaches Trip.com's full original record to each row, for anything not mapped to a column.maxConcurrency(default 8, from 1 to 8) is how many products are fetched at once.delayMs(default 0, up to 10,000) is a pause after each request on each parallel lane, in milliseconds.- Rows are saved in input order as they arrive. A run that reaches its time limit keeps what it collected.
- If Apify restarts a run part-way, it carries on where it stopped. Products already delivered aren't written or charged again.
- With
includeItineraryoff,itinerariesis left out anditineraryCountis null. maxItemscounts product records. Notice rows and error rows don't use it up.
⬆️ Output
One row per product, with packages, itineraries and FAQs nested inside. This is the Bangkok day tour from the first example, read on 7 October 2026 and shortened: one of its 5 packages, one of its 10 itineraries, five of that itinerary's eight stops, and long lists cut where you see "…". The Child ticket and traveller type are among the cuts.
{"input": "49278954","id": "49278954","productId": "49278954","url": "https://www.trip.com/things-to-do/detail/49278954/","name": "High-quality Small-group | Day tour to Damnoen Saduak Floating Market & Maeklong Railway Market in Bangkok | Optional Private Tour","subName": null,"category": "Day tour product","categoryId": "10112","tags": ["Day tours", "Experiences"],"rating": 4.8,"ratingScale": 5,"ratingText": "Outstanding","reviewCount": 1193,"bookedLastMonth": 579,"bookedLastYear": 9792,"price": 19.72,"priceText": "19.72","priceListed": 21.92,"priceUnit": "person","discounts": [{ "title": "Limited-time sale", "name": "10% off", "amount": 2.2 }],"currency": "USD","highlights": ["*Standards: Professional fleet, uniforms, GPS positioning, vehicle monitoring.", "…"],"inclusions": [],"exclusions": [],"howToUse": "Must be booked by 23:00, 1 day before the visit.\nA member of staff will contact you by 23:30 (local time), 1 day before your trip.\nPlease provide your e-confirmation at the designated meeting point on the day of your trip.","importantInfo": ["Prohibited behaviors", "Drone usage, picking plant, Eating in vehicles, …", "Dress restrictions", "…"],"validityText": null,"validityDays": null,"cancellationLabel": "Conditional cancellation","cancellationSummary": "Free cancellation by 17:00, 1 day before the date of use","cancellationRules": ["If a cancellation request is submitted before 17:00, 1 day(s) prior to the date of use, no cancellation fee will be charged.","If a cancellation request is submitted after 17:00 1 day(s) before the date of use, a fee of 100% will be charged.","…"],"bookingCutoffDays": 1,"bookingCutoffTime": "23:00","minQuantity": 1,"features": ["Book now for tomorrow", "Booking confirmation", "Service languages: English", "Join-in tour/Private tour", "Pick-up available/Meet at meeting point"],"serviceLanguages": ["Mandarin", "English"],"travellerTypes": [{ "name": "Adult", "description": "Height 1.2m+" }, "…"],"travellerNote": null,"departureCity": "Bangkok","departureCities": ["Bangkok"],"destinationCities": ["Damnoen Saduak", "Mueang Samut Songkhram"],"utcOffsetSeconds": 25200,"vendorName": "GGG Co Ltd","vendorId": "1184751","attractions": [{ "poiId": "77043", "name": "Damnoen Saduak Floating Market", "address": "Damnoen Saduak, Damnoen Saduak District, Ratchaburi 70130泰国", "rating": 4.3, "lat": 13.5201684, "lng": 99.9586044 },{ "poiId": "94792", "name": "Maeklong Railway Market", "address": "Phet Samut, Mae Klong, Mueang Samut Songkhram District, Samut Songkhram 75000泰国", "rating": 4.6, "lat": 13.4075512, "lng": 99.9988927 }],"images": ["https://ak-d.tripcdn.com/images//0586112000mzvh6bvB6E8.jpg", "…"],"imageCount": 15,"videos": ["https://video.c-ctrip.com/videos/u50r33000001jfupfF9A5.mp4"],"packageCount": 5,"packages": [{"packageId": "103591277","packageName": "D-meeting point pick-up and drop-off | Damnoen Saduak + Maeklong | English","highlights": "meeting point pick-up and drop-off | Damnoen Saduak + Maeklong | English","serviceDescription": "Join-in tour, up to 12 travelers | Tour guide | Meet at meeting point","groupType": "Join-in tour","languages": ["English"],"bookingCutoffDays": 1,"bookingCutoffTime": "23:00","bookingCutoffText": "Bookings must be made by 23:00, 1 day before your travel date","minQuantity": 1,"maxQuantity": 12,"tickets": [{ "resourceId": "103591278", "ticketType": "Adult", "price": 21.92, "ageText": "Height 1.2m+", "ageMin": null, "ageMax": null, "minQuantity": 1, "maxQuantity": 12 },"…"]}],"itineraryCount": 10,"itineraries": [{"itineraryId": "1370000212","name": null,"packageId": "103591246","orderMayChange": true,"orderNote": "The order of attractions visited may change depending on crowd levels at each site","days": [{"day": 1,"summary": "活动约2小时30分钟、交通约4小时、用餐约30分钟;午餐自理;支持送","items": [{ "time": "09:30", "type": "meet", "name": "Meet-up", "mode": "Meet at meeting point", "meetingPoints": [{ "name": "Central Park Bangkok", "address": null, "lat": 13.728365, "lng": 100.537333 }] },{ "time": null, "type": "transport", "name": "Transportation", "durationMinutes": 90, "durationText": "Travel time: Approx. 1 hour30 minutes", "mode": "Car" },{ "time": null, "type": "activity", "name": "Activities", "durationMinutes": 90, "places": [{ "poiId": "77043", "name": "Damnoen Saduak Floating Market", "notes": ["Enter attraction", "Free attraction", "Entry tickets included"] }] },{ "time": null, "type": "meal", "name": "Dining", "durationMinutes": 30, "meal": { "name": "Lunch", "isIncluded": false, "text": "At your own expense" } },{ "time": "17:00", "type": "return", "name": "Return", "mode": "Provide drop-off service" }]}]}],"faqs": [{ "question": "Can I change or cancel my booking?", "answer": "Please confirm the details on the product details page, as cancellation and change policies depend on the specific product" }],"isAttractionTicket": false,"language": "en-XX","scrapedAt": "2026-10-07T17:05:56.275Z"}
A few columns need a word:
| Column | Meaning |
|---|---|
id, productId | The Trip.com product id |
price, priceListed | Trip.com's "from" price in the run's currency, and the price before a sale. priceListed is filled only when the product is on sale |
discounts | The sale offers applied to the price, each {title, name, amount} |
subName | The product's second title line, null when there is none |
description, descriptionImages | The description text and the image links embedded in it |
productInfo | The "product introduction" block as a list of lines |
validityText, validityDays | How long a booking stays valid, as Trip.com words it and as a number of days. Null when not stated |
travellerNote | Trip.com's note on who the product suits |
departureCities | Every departure city. departureCity is the first |
vendorName | The operator's brand or name, as Trip.com publishes it |
itineraries[].text | The whole itinerary as plain text, beside the structured days |
isAttractionTicket, isPartialRecord, attractionUrl, attractionId, notice | See the next paragraph |
An attraction ticket is sold on its attraction's page and has no product page of its own. Give the actor one and you get a short row with isAttractionTicket: true, isPartialRecord: true, the attraction's link and id, and a notice. That row is free. An id Trip.com doesn't have, or a product that couldn't be read, gets a row whose error says what happened and what to check, also free.
What Trip.com publishes, by kind of product
Not every product has every block, because Trip.com doesn't publish every block for every kind. Two samples show the pattern.
On 7 October 2026 we read 13 products in seven cities, from Bangkok to Queenstown. All seven day tours came with itineraries, between 2 and 12 each. The two cruises, the airport rail ticket, the coach transfer, the scenic flight and the guided safari had none.
On 4 October 2026, 17 products of 17 kinds (tours, rail, bus and boat tickets, a metro pass, a SIM card, meals, spa, lessons, yachting, racing, costume hire, photography, zipline, a restaurant) filled like this:
| Present on | Columns |
|---|---|
| 17 of 17 | name, category, price, packages, how to use, cancellation label and rules, booking cut-off, departure city, supplier, photos, FAQs |
| 16 | rating, highlights, important information |
| 15 | description |
| 13 | attractions |
| 12 | service languages |
| 10 | inclusions and exclusions, traveller types |
| 4 | videos |
| 3 | validity period |
| 1 | itineraries (the one day tour in that sample) |
Speed, measured the same day: a single product finishes in 2.4 to 8.4 seconds including start-up (27 runs), and the 19-input run of those 17 products plus two attraction tickets took 6.5 seconds. Every package and ticket type is returned. There's no cap on either.
FAQ
Where do I find product ids?
In the product link (/things-to-do/detail/49278954/), or from Trip.com Things to Do Search, which returns a link per product that you can paste here as it is.
Why does my tour have no inclusions list?
Trip.com shows an Inclusions block on passes, rail, bus and boat tickets, SIM cards, meals, spa and photography products (10 of the 17 sampled). A tour says what's included inside its itinerary: each meal has isIncluded, and each place has notes such as "Entry tickets included".
Why is itineraries empty for my product?
Itineraries are published for tours. Tickets, transfers, cruises and passes don't have one. Multi-day tours weren't in either sample, so we can't yet tell you how those look.
I pasted a ticket and got a short row. What happened?
That product is an attraction ticket, which lives on the attraction's page. The row tells you which attraction. Trip.com Attraction Products Scraper returns those tickets with their terms, and Trip.com Attraction Availability & Prices returns their dates and prices.
Can I get the price for a specific date?
Not from this actor. price is the "from" price, and each ticket type has its current price. For a date-by-date calendar with places left, run the availability actor on the same product id.
Can I get the text in another language?
Set the language to a Trip.com locale such as ja-JP, ko-KR, zh-HK or de-DE. Those four were each checked on three products: names, package names and the cancellation label came back translated. Set the currency to match if you want local prices.
Why is some text in Chinese on an English run?
Trip.com hasn't translated all of its content. The supplier name is often Chinese, and an itinerary's day summary or the tail of an address can be too, as in the example above. You get the text as Trip.com serves it.
Do I need proxies or a Trip.com account?
You need neither one. Paste the ids and run it.
What are the limits?
priceis a "from" price. Dated prices and places left come from the availability actor.- Review text isn't part of the record. The rating and the review count are.
- Itineraries exist for tours only, and multi-day tours haven't been measured yet.
- An attraction ticket gets a short notice row, not a full record.
- Some text arrives untranslated, and the supplier name is given as Trip.com publishes it, often in Chinese.
- Attraction coordinates are Trip.com's. They matched the real locations for the places we checked (Mount Fuji, Lake Kawaguchi, Gotemba Premium Outlets).
Is it legal to scrape Trip.com?
The actor reads only what Trip.com shows a visitor who isn't logged in. Scraping publicly available data is generally lawful. You're responsible for how you use it, for Trip.com's terms and for the law that applies to you.
Build a tour catalogue with it
The record is built for joining. Search a city with Trip.com Things to Do Search, feed the links here, and you have a catalogue with itineraries and policies. Add the availability actor and each package gets a price per date. People also use the records to compare how operators package the same trip (group size, languages, pick-up, what's included), to watch cancellation rules and cut-offs across a destination, and to give a trip-planning model real itineraries to work from.
From code, POST https://api.apify.com/v2/acts/boncross~tripcom-product-details/run-sync-get-dataset-items with the input JSON returns the records in one request. Use apify-client (npm or PyPI) and a webhook for bigger lists. Through the Apify MCP server at mcp.apify.com, an AI agent can pass a product link and read the itinerary and policies back.
More from BonCross
- Trip.com Attraction Products Scraper: Every product Trip.com sells for an attraction.
- Trip.com Attraction Availability & Prices: Trip.com attraction availability and prices.
- 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 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
Is a block on the Trip.com page missing from your record, or a field parsed wrongly? Open an issue on the Issues tab in Apify Console and include the product id. BonCross reads each one and replies there.