Trip.com Product Details Scraper avatar

Trip.com Product Details Scraper

Pricing

from $2.10 / 1,000 product-scrapeds

Go to Apify Store
Trip.com Product Details Scraper

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

BonCross API

Maintained by Community

Actor 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 dayMeals, included or not
📍 Meeting points and pick-up areasAttractions visited, with coordinates
Inclusions and exclusionsHighlights
Description and its imagesHow to use, and important information
📅 Validity periodCancellation label, summary and rules
🗣️ Service languagesTraveller types and age or height ranges
Departure and destination citiesSupplier name and id
🖼️ Photos and videosFAQs

How much does it cost to scrape Trip.com product details?

EventFree planStarterScaleBusiness
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

  1. Sign up for a free Apify account, then open Trip.com Product Details Scraper.
  2. Paste product ids or product links into Products. The id is the number in a link such as /things-to-do/detail/49278954/.
  3. Choose a currency and a language. Leave itineraries and FAQs on unless you want smaller rows.
  4. 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
}
FieldNotes
productsProduct ids or links.
startUrlsProduct links, pasted or loaded in bulk. Added to products.
maxItemsStop after this many product records. Default 0, no limit.
includeItineraryDefault true. Each tour's itinerary per package.
includeFaqsDefault true. The questions and answers on the product page.
currencyISO code, default USD.
localeTrip.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, delayMsAdvanced. See below.

For developers

  • includeRawData (default false) 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 includeItinerary off, itineraries is left out and itineraryCount is null.
  • maxItems counts 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:

ColumnMeaning
id, productIdThe Trip.com product id
price, priceListedTrip.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
discountsThe sale offers applied to the price, each {title, name, amount}
subNameThe product's second title line, null when there is none
description, descriptionImagesThe description text and the image links embedded in it
productInfoThe "product introduction" block as a list of lines
validityText, validityDaysHow long a booking stays valid, as Trip.com words it and as a number of days. Null when not stated
travellerNoteTrip.com's note on who the product suits
departureCitiesEvery departure city. departureCity is the first
vendorNameThe operator's brand or name, as Trip.com publishes it
itineraries[].textThe whole itinerary as plain text, beside the structured days
isAttractionTicket, isPartialRecord, attractionUrl, attractionId, noticeSee 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 onColumns
17 of 17name, category, price, packages, how to use, cancellation label and rules, booking cut-off, departure city, supplier, photos, FAQs
16rating, highlights, important information
15description
13attractions
12service languages
10inclusions and exclusions, traveller types
4videos
3validity period
1itineraries (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?

  • price is 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).

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

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.