Trip.com Attraction Products Scraper avatar

Trip.com Attraction Products Scraper

Pricing

from $2.10 / 1,000 product-scrapeds

Go to Apify Store
Trip.com Attraction Products Scraper

Trip.com Attraction Products Scraper

Scrape every product Trip.com sells for an attraction. Just add an attraction URL and get each ticket, pass and tour with its price, person types, sales count, first bookable date, cheapest date, tags, category, city and stock status. Track price changes between runs. $3.00 per 1,000 products.

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 Attraction Products Scraper?

Point Trip.com Attraction Products Scraper at an attraction and you get its whole shelf: each ticket, combo, pass and tour Trip.com sells for that place, priced, with how many have been sold. The Grand Palace in Bangkok had 18 products on 7 October 2026, from a $14.86 entry ticket bought 52,665 times to combos with river cruises and a Muay Thai ringside seat. You'd get all 18 from one pasted link.

What makes it worth picking:

  • You see what sells. Trip.com publishes a sales count per product, and it's on the row. On a 71-product shelf we measured, 99% of products had one.
  • The ticket terms are included in the price. Switch on "Include product details" for what's included and excluded, how to use the ticket and the booking notes. There's no extra charge for them.
  • It remembers prices. Name a price memory and a scheduled run returns only the products whose price moved. The rest are free.
  • Size doesn't slow it down. 150 attractions returned 2,323 products in 33.5 seconds.
  • $3.00 per 1,000 products on the Free plan and $2.10 on Business, with proxy usage and platform usage included.

BonCross Verified means we tested this actor against the live site before release and kept the record:

  • 19 of 19 live checks on its inputs and filters passed on 7 October 2026
  • 14 attractions run the same day: 124 products, 3 error rows
  • Charges matched the rows: 11 attractions, 124 products
  • An attraction with nothing on sale gets an uncharged row saying so

It's the first step for most Trip.com ticket work. The product ids on its rows are what Trip.com Attraction Availability & Prices takes to return dates, price per date and places left, and what Trip.com Product Details Scraper takes to return one tour's full record. If you'd sooner start from a keyword or a city than from an attraction, that's Trip.com Things to Do Search. Visitor reviews of the attraction come from Trip.com Attraction Reviews Scraper, and hotels from Trip.com Hotel Search Scraper and its siblings.

What product data do you get?

🎟️ Product name🆔 Product id
💵 Current price🏷️ List price
💱 CurrencyDiscount amount and percent
👤 Person types with pricesTicket group
🛒 Sales countYearly sales of the ticket group
📅 First bookable dateCheapest date
✅ In stock↩️ Refundable
TagsPayment mode
🏛️ Attraction name and id🔗 Attraction link
🏙️ CityCategory
What is included and excludedHow to use the ticket
Booking notes (cut-off, ticketing time, conditions)Other notes
📈 Price change since last runProduct link

How to scrape Trip.com attraction products

  1. Create an Apify account. It's free.
  2. Open Trip.com Attraction Products Scraper.
  3. On Trip.com, open the attraction's page and copy its address into Attractions.
  4. Pick the currency you want prices in.
  5. Press Start, and download the product list as Excel, CSV or JSON when it's done.

⬇️ Input

Paste attraction links, such as https://www.trip.com/travel-guide/attraction/bangkok/the-grand-palace-77012, or the bare id at the end of one (77012). Start URLs takes the same links in bulk, from a file, a Google Sheet or a remote list, and the two inputs are combined.

"Max products per attraction" limits each attraction separately: ten attractions at 50 each returns 500. "Maximum results for the whole run" limits the total, and nothing beyond it is fetched or charged for. Both are 0 by default, meaning the whole shelf.

Prices are quoted in the currency you choose (USD unless you change it). Product names and tags follow the locale.

The whole shelf of one attraction

{
"attractions": ["https://www.trip.com/travel-guide/attraction/bangkok/the-grand-palace-77012"],
"currency": "USD"
}

The shelf with ticket terms, category and city

{
"attractions": ["https://www.trip.com/travel-guide/attraction/seoul/n-seoul-tower-83001"],
"includeDetails": true,
"maxDetailProducts": 50
}

Three attractions in one run, by id

{
"attractions": ["77012", "83001", "87338"],
"currency": "USD",
"maxProductsPerAttraction": 40
}

Those are the Grand Palace, N Seoul Tower and Burj Khalifa.

A daily price watch that returns only what moved

{
"attractions": ["https://www.trip.com/travel-guide/attraction/seoul/n-seoul-tower-83001"],
"priceStoreName": "seoul-tower-prices",
"onlyNewOrChanged": true
}
FieldNotes
attractions, startUrlsAttraction links or bare ids, pasted or loaded in bulk.
maxProductsPerAttraction, maxItemsThe per-attraction cap and the run-wide cap. Both default to 0, no limit.
includeDetails, maxDetailProductsAdds category, city, stock flags and the ticket terms, on up to this many products per attraction (default 20). includeDetails is false by default.
currencyISO code, default USD.
localeLanguage of product names and tags, default en-XX.
priceStoreName, onlyNewOrChangedThe price memory, and the switch that returns only products whose price moved.
includeRawDataAttaches Trip.com's unparsed product record to each row. Default false.
delayMs, maxConcurrencyPacing. Defaults 700 and 8.

For developers

  • includeDetails costs time, not money: it has no charge event. maxDetailProducts (default 20, up to 500) caps how many products per attraction get the extra lookup. The detail columns appear only on the products inside that cap.
  • priceStoreName names a key-value store holding the last price per product. Rows then have previousPrice, previousScrapedAt, priceChange and priceChangePct. onlyNewOrChanged needs the store.
  • maxItems doesn't count rows reporting an input the actor couldn't resolve. Those rows are never charged.
  • delayMs (default 700, up to 10,000) is the pause between calls. maxConcurrency (default 8, from 1 to 8) is how many requests run at once, and 8 is the fastest level we measured clean. Go lower only when a run reports refusals or errors.
  • Rows are saved as they arrive. If the platform interrupts and restarts a run, it resumes where it stopped and no product is saved or charged twice.

⬆️ Output

One row per product. This is N Seoul Tower's best seller, from a run on 7 October 2026 with product details on. Long texts are shortened with "…".

{
"input": "https://www.trip.com/travel-guide/attraction/seoul/n-seoul-tower-83001",
"id": "109937038-109937040-Observatory Ticket",
"productId": "109937038",
"url": "https://www.trip.com/things-to-do/detail/109937038/",
"poiId": "83001",
"attractionName": "N Seoul Tower",
"name": "Observatory Ticket [Individual (Non-Korean Nationality)]",
"resourceId": "109937040",
"relatedProductIds": ["109937038"],
"price": 15.32,
"priceText": "15.32",
"priceListed": 21.67,
"currency": "USD",
"discountAmount": null,
"discountPct": 29,
"minPriceDate": "2026-10-08",
"firstBookingDate": "2026-10-08",
"ticketType": "Individual",
"isAvailable": true,
"isSoldOut": false,
"stockStatus": 1,
"isRefundable": false,
"tags": ["Up to US$6.35 off", "Trip.com discount", "Official partner", "Immediate access", "Valid until December 31, 2027", "Non-refundable", "Ticket collection required"],
"payMode": "P",
"salesCount": 39470,
"advanceBookingDays": 0,
"ticketGroupName": "Observatory Ticket",
"ticketGroupYearlySales": 97735,
"ticketOptions": [
{ "id": "758407", "name": "Individual", "code": "daxtj", "price": 15.32, "currency": "USD" },
{ "id": "551910", "name": "Infant", "code": "yingyrp", "price": 0, "currency": "USD" }
],
"attractionUrl": "https://www.trip.com/travel-guide/attraction/seoul/n-seoul-tower-83001",
"spotId": "50023",
"categoryName": "Individual Attraction/Activity Ticket",
"categoryId": "392",
"cityName": "Seoul",
"hasInventory": true,
"productFlags": ["hasInventory", "active", "online", "translate", "supportGiftCard", "systemTranslate"],
"inclusions": ["Observatory Ticket", "About this Product", "· What's included: N Seoul Tower Observatory ticket. Digital telescopes and audio guides are available for an additional fee"],
"exclusions": ["Other personal expenses"],
"howToUse": "Ticket collection time & location 105 Namsan Mountain Park Road, Yongsan-gu, Seoul (Yongsan-dong 2-ga), redeem your tickets at the self-service ticket machine on the B1 level of the observation deck…",
"bookingNotes": [
{ "code": "ReadyToUse", "title": "Immediate access", "text": "Must be purchased [by 22:00 (local time) on the date of use]. Effective immediately after booking is confirmed…" },
{ "code": "TicketSpeed", "title": "Ticketing time", "text": "Tickets are issued in 1 seconds on average" },
{ "code": "NonRefundable", "title": "Non-refundable", "text": "Please note that the booking cannot be canceled once it is confirmed…" }
],
"otherNotes": [
{ "code": "GiftCard", "title": "Gift card", "text": "Gift cards can be used for payment. Details will be listed on the payment page." }
],
"previousPrice": null,
"previousScrapedAt": null,
"priceChange": null,
"priceChangePct": null,
"scrapedAt": "2026-10-07T20:26:55.391Z"
}

The full row has five booking notes and three other notes. Reading the columns:

  • id joins the product, the shelf entry and its name, because one product can sit on the shelf under more than one ticket.
  • discountAmount is Trip.com's promotion amount and discountPct its own percentage against priceListed. Trip.com publishes the two separately and they don't always agree, as you can see above.
  • ticketGroupYearlySales is the figure for the ticket group, not this product. It's often 0 where the product itself has sales.
  • isRefundable comes from the card's tags: "Non-refundable" is false, "Cancel anytime" is true, and "Conditional cancellation" is left empty.
  • categoryName, categoryId, cityName, hasInventory, productFlags and the ticket terms appear only with "Include product details" on, and only on the products its cap covers.
  • inclusions and exclusions are lists of lines as Trip.com publishes them. howToUse is text. bookingNotes and otherNotes are lists of {code, title, text}, where code is Trip.com's own item code (BookingDate, ReadyToUse, TicketSpeed, NonRefundable, ApplicableConditions …) and is the same in each language.

On 20 products at two attractions, measured 4 October 2026, inclusions, how-to-use, booking notes and other notes were on every product. Exclusions were on the few that list any.

How much does it cost to scrape Trip.com attraction products?

EventFree planStarterScaleBusiness
actor-start, per run$0.002$0.002$0.002$0.002
attraction-resolved, per attraction read$0.002$0.002$0.002$0.002
product-scraped, per product$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. There's nothing else on the bill: no proxy to rent, and platform usage is in the price.

If Trip.com lists a product twice, you're billed once. With "Only new or changed" on, products whose price didn't move are free. The product details are free too.

An attraction that can't be read, or has nothing on sale, comes back as one row with an error that says what happened and what to do about it. You pay nothing for that row, and no attraction fee either.

  • The Grand Palace's 18 products: $0.002 + $0.002 + 18 × $0.003 = $0.058 ($0.0418 on Business).
  • A 71-product shelf: $0.002 + $0.002 + 71 × $0.003 = $0.217 ($0.153 on Business).
  • A daily price watch on one attraction where five products move: $0.002 + $0.002 + 5 × $0.003 = $0.019 ($0.0145 on Business).

Apify's Free plan gives you $5 of credits each month. With this actor that's about 86 attractions the size of the Grand Palace's shelf, or about 1,500 products.

How many products can you get, and how fast?

Three runs each on 2 October 2026, timed from start to finish:

RunRowsTimeCost at the Free-plan price
One attraction, first 8 products84.6 to 5.9 s$0.028
Two attractions (one with nothing on sale), category details on 10 products30 + 1 notice5.7 to 6.7 s$0.094
150 attractions, every product2,323 + 5 notices33.5 s$7.261

On a large run that works out at about 4,000 products a minute, or roughly 15,000 attractions an hour. A big attraction takes no longer than a small one.

How many rows you get depends on the attraction. The 71-product shelf mentioned above was measured on 11 September 2026, with a price on all 71. On 7 October 2026 the Grand Palace had 18 products and N Seoul Tower had 5.

Put it on a schedule, or call it from code

A shelf changes: products appear, prices move, a combo gets pulled. An Apify Schedule with a price memory turns this actor into a daily diff of one attraction, or of many. For one-off calls, POST https://api.apify.com/v2/acts/boncross~tripcom-attraction-products/run-sync-get-dataset-items with the input JSON returns the product list in the response, and apify-client on npm or PyPI handles the longer runs. Through the Apify MCP server (mcp.apify.com) an AI agent sees it as the tool boncross/tripcom-attraction-products and can be handed an attraction link.

What it doesn't do

  • You get the headline "from" price of each product. For the price on a given date, time slot and ticket type, run the availability actor on the product id.
  • You won't get a product image or coordinates from the shelf. City and category come with "Include product details". A description, photos and an itinerary don't.
  • Trip.com publishes the list price as zero on many products. priceListed and the discount fields are empty for those.
  • isRefundable is read from English tags. In other locales it's left empty, not guessed.
  • An attraction can have a free-entry note on its shelf. It's returned as a row with no product id or price.
  • An attraction with nothing on sale returns a row saying so. Trip.com doesn't say whether it's suspended or never sold tickets.
  • Trip.com takes a product it can't sell off the shelf. You won't find sold-out products listed with a flag.

FAQ

How is this different from the availability actor?

This one lists what an attraction sells, with one headline price per product. The availability actor takes a single product and returns its booking calendar: each date, time slot and ticket type with its own price and places left.

salesCount is the number Trip.com publishes for the product, and ticketGroupYearlySales is the yearly figure for its ticket group. Sort on the first and the best sellers are at the top.

How do I track price changes on a shelf?

Give the price memory a name and schedule the run. From the second run on, rows show the previous price and the change. Add "Only new or changed" if you want just the products that moved, which also means you pay only for those.

Why are the discount columns empty on most rows?

Because Trip.com gives no list price for those products. Where it does, you get priceListed and its percentage.

Can I get prices in my own currency, or names in another language?

Set Currency to any ISO code Trip.com quotes. Set Locale for the names and tags. One caveat: outside English, isRefundable is empty.

What do I get for an attraction with nothing on sale?

A row that says no products were returned. You aren't charged the attraction fee for it.

Do I need proxies or a Trip.com account?

No account, no proxy, and no proxy fee on top of the price per product.

The actor reads the public product listings Trip.com shows any visitor who isn't signed in. Scraping public data is generally legal. You're responsible for how you use it, and for following Trip.com's terms and the law that applies to you.

More from BonCross

Your feedback

Missing a product you can see on the attraction's page, or a field you'd like on the row? Report it on the Issues tab in Apify Console and include the attraction link. BonCross reads every issue, and fixes go out as new builds.