DEV Community

Nikita Iakovlev
Nikita Iakovlev

Posted on

Scraping Southeast Asian Marketplaces in 2026 — Shopee and Tokopedia Without a Browser

Southeast Asia's e-commerce market runs on platforms most Western developers have never opened. Shopee is the region's largest marketplace and also operates in Taiwan and Brazil. Tokopedia is Indonesia's best-known domestic marketplace, now 75% owned by ByteDance and merged with TikTok Shop. Neither has a public product API, and both moved to client-side rendering, which is where most scraping attempts stop.

They shouldn't. Here's a product pulled this month over plain HTTP, no browser, no token:

{
  "type": "product",
  "title": "Oleh Oleh Bali - Kopi Bubuk Bali Cap Kupu Kupu Bola Dunia kemasan baru 400 Gram",
  "url": "https://shopee.co.id/...-i.21681717.6213583834",
  "shopId": "21681717",
  "itemId": "6213583834",
  "country": "ID",
  "marketplace": "Indonesia",
  "currency": "IDR",
  "price": 74700,
  "rating": 4.9,
  "location": "Denpasar",
  "position": 1,
  "searchTerm": "kopi bali"
}
Enter fullscreen mode Exit fullscreen mode

The rendering problem, and the way around it

In mid-2026 Shopee moved product pages to a client-rendered application whose internal API is guarded by a JavaScript-signed token. The token is computed in the browser. Reproducing it means either running the JavaScript or reverse-engineering a signing routine that changes.

This is why most Shopee tooling today returns only what a product card shows, and marks description, brand and image gallery as "browser only". It's also why those tools are expensive per row — a headless browser costs orders of magnitude more compute than an HTTP request.

The way around it is that Shopee still serves a server-rendered version of the same page to crawlers. Search results, category pages and shop pages come back as HTML with the full product card in it: title, price, original price, discount, rating, units sold, shipping location, badges, image. No browser, no token, no login.

A search for forty products finishes in under a minute on a few megabytes of traffic. The same run through a headless browser burns orders of magnitude more compute and is more likely to be blocked, because a browser fingerprint is a much larger attack surface than an HTTP GET.

Tokopedia is a different shape with the same conclusion. Its review data lives behind its own data endpoint, which answers directly. Thousands of reviews come back in minutes without rendering anything.

The eight live Shopee marketplaces

This is the part that makes Shopee worth more than a single-country scraper:

Country Domain Currency
Indonesia shopee.co.id IDR
Singapore shopee.sg SGD
Malaysia shopee.com.my MYR
Philippines shopee.ph PHP
Thailand shopee.co.th THB
Vietnam shopee.vn VND
Taiwan shopee.tw TWD
Brazil shopee.com.br BRL

Shopee's Latin American footprint has been shrinking: Argentina and the Mexican local marketplace went in 2022, and Chile and Colombia closed on 30 October 2025, leaving cross-border only. Watch out for this — shopee.cl and shopee.com.co still answer with HTTP 200, because a shared CDN shell responds whether or not there's a marketplace behind it. A status code is not evidence that a storefront exists; a product row is. Requesting a Chilean search through the actor now returns an upstream error, which is the honest answer.

Same product, eight catalogues, eight price levels, eight sets of competitors. Every row carries country, marketplace and currency, so one dataset can hold several countries side by side without a currency column guessing game. Prices come back in the marketplace's own currency, never converted — conversion is a decision with a date attached and doesn't belong in extraction.

The cross-market comparison is the analysis nobody does. A product selling at IDR 74,700 in Indonesia and its equivalent in Vietnam and the Philippines tells you which market a seller is underpricing.

What Tokopedia reviews look like

{
  "type": "review",
  "shopName": "Makarizo Advisor",
  "reviewId": "2289257709",
  "rating": 5,
  "reviewText": "Semoga cocok yaaa",
  "reviewTime": "Hari ini",
  "reviewerName": "P***w",
  "isAnonymous": true,
  "sellerReply": "",
  "productName": "Makarizo Advisor Hair & Scalp Tonic 60mL",
  "productUrl": "https://www.tokopedia.com/makarizo-advisor/..."
}
Enter fullscreen mode Exit fullscreen mode

Two details worth knowing before you build on this.

Buyer names are masked at the source. P***w is what Tokopedia publishes, not what the scraper redacted. There is no personal data to collect here even if you wanted it, which makes this dataset unusually clean from a compliance standpoint.

Times are relative. Hari ini means "today". 2 hari lalu means two days ago. If you're building a time series you have to resolve those against the scrape timestamp at collection time, because the phrase stops being meaningful the moment you store it.

Review text is mostly Indonesian, which is a feature for anyone doing multilingual sentiment work and a problem for anyone assuming English.

Who actually buys this data

Sellers benchmarking price. The single most common use. What are the twenty competing listings for my SKU priced at today, in each market, with what discount and what rating.

Brands watching unauthorised resellers. Search your own brand across all eight marketplaces and see who's listing it, at what price, from which warehouse. Grey-market pricing destroys distributor relationships and is invisible from the brand's side without this.

Product research for sourcing. Units sold, rating and review counts across a category tell you where demand actually sits, before committing inventory.

Market entry research. A brand deciding whether to launch in Vietnam or the Philippines wants the current price and competitor density in both. Two runs, one afternoon.

Review mining. Tokopedia's reviews are a large public corpus of Indonesian-language consumer opinion, attached to specific products and star ratings. For a brand selling in Indonesia, that's the actual voice of the customer, and it's not on Twitter.

Running them

Shopee search:

{
  "mode": "search",
  "country": "ID",
  "searchTerms": ["kopi bali"],
  "maxItems": 100
}
Enter fullscreen mode Exit fullscreen mode

Tokopedia reviews, an entire shop at a time:

{
  "startUrls": [{ "url": "https://www.tokopedia.com/makarizo-advisor" }],
  "maxReviewsPerShop": 1000,
  "reviewsSort": "newest"
}
Enter fullscreen mode Exit fullscreen mode

From the API:

curl -X POST "https://api.apify.com/v2/acts/lergassy~shopee-scraper/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{"mode":"search","country":"ID","searchTerms":["kopi bali"],"maxItems":50}'
Enter fullscreen mode Exit fullscreen mode

Shopee also takes startUrls for category, shop or search URLs you already have, and a productDetail mode that takes shopId/itemId pairs. Tokopedia takes sort order and star-rating filters, including photos-only.

What you don't get

Shopee product descriptions and galleries are partial. The listing pages carry the full card. The detail page carries the category path and gallery size, and the full description only when Shopee serves its structured record for that product. This is the residue of the token problem above, and any tool claiming complete detail data over HTTP for every product is claiming something I couldn't reproduce.

No stock quantities. Neither platform publishes real inventory, only "units sold" as a cumulative badge.

No seller contact details. Shop pages give a name, rating and response rate. Anything beyond that isn't published.

Rate limits are real. These are large platforms with anti-bot infrastructure. Modest concurrency works; hammering a search endpoint gets you a challenge page instead of JSON, and the correct response is to slow down rather than to escalate to a browser.

That last point deserves a caveat you rarely see in posts like this one: on platforms in this region, an endpoint that answers cleanly today can start returning an anti-bot page next month with no warning and no change on your side. It has happened to me on a neighbouring marketplace while writing this. Build the retry and the alert before you build the analysis.

The niche, honestly

E-commerce product scraping is one of the most crowded categories on the Apify Store — 147 new actors in six months, median price around $4 per 1,000 rows, and roughly $6,300 a month in total third-party revenue across the whole category. It is not where the money is.

What's differentiated here isn't "scrapes an e-commerce site". It's eight marketplaces in one dataset, no browser in the pipeline, and an Indonesian-language review corpus that the English-speaking tooling ecosystem largely ignores. If you're building in this category, that's the level the difference has to exist at.


Actors: Shopee Scraper · Tokopedia Reviews Scraper

Related: Mercado Libre Scraper for the same job across Latin America.

Top comments (0)