Shopee Product Catalog & Variant Scraper
Pricing
from $4.00 / 1,000 products
Shopee Product Catalog & Variant Scraper
Scrape Shopee product pages across 11 countries: title, full description with inline images, all photos and videos, specifications, category breadcrumb, seller vouchers, and every variant with its Colour/Size options resolved - plus the seller's profile. No login or API key.
Pricing
from $4.00 / 1,000 products
Rating
0.0
(0)
Developer
Elena Vance
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Pull complete product content off Shopee — across 11 marketplaces, with no API key, no login, no browser and no residential proxy.
Built for catalogue work: PIM population, content migration, competitor assortment tracking, brand and listing monitoring, and building product datasets for search or LLM use.
Read this first: what is and isn't here
This Actor does not return price, stock, ratings or units sold. That is a property of Shopee, not of the Actor, and being straight about it up front is more useful than burying it.
Shopee serves the product page with those fields deliberately stripped — its own payload literally lists them as removed:
"removed_fields": ["product_price.price", "product_price.price_before_discount","product_price.discount", "item.bundle_deal_info"]
…and it returns a constant placeholder of 10 for every variant's stock,
verified across 24 SKUs on three marketplaces. This Actor omits that field
rather than passing a fake number through as inventory.
Reaching the real numbers means defeating Shopee's anti-fraud device attestation — which does not work even from a genuine headful Chrome (see docs/architecture.md). Actors that do sell those fields pay a commercial unblocking service per request, and that cost lands in their pricing.
Everything below is real, complete and stable.
What you get
| Group | Fields |
|---|---|
| Identity | item ID, shop ID, canonical URL, marketplace, currency |
| Content | title, brand, condition, plain-text description, and the description as ordered blocks so inline images keep their position |
| Media | every product photo, videos with a playable MP4 URL + duration + thumbnail, size-chart image |
| Taxonomy | Shopee's internal category path and the consumer-facing breadcrumb, both as {id, name} |
| Specifications | seller-declared attributes as {name, value} — material, origin, warranty… |
| Variants | the option axes (Colour → options + swatch images) and every SKU with its options resolved to readable names |
| Promotions | seller vouchers with minimum spend, discount amount or percentage, % used, and validity window |
| Logistics | free shipping, pre-order, estimated shipping days, wholesale, ships-from location, cross-border |
| Seller | rating, review total, followers, listing count, response rate, cancellation rate, badges |
The variant join is the point
Shopee stores variants as two disconnected halves: the option names live in one
place, and each SKU refers to them only by positional index ([2, 1]). Raw
exports leave you to reassemble that. This Actor does the join:
"variations": [{ "name": "Color", "options": ["White", "Blue Camouflage", "Rosy Camouflage"],"optionImages": ["https://down-sg.img.susercontent.com/file/4acb03…"] },{ "name": "Size", "options": ["14: Insole 11.5cm", "15: Insole 12.0cm", "…"] }],"variants": [{ "modelId": 92932478374, "name": "White,20: Insole 14.5cm","options": { "Color": "White", "Size": "20: Insole 14.5cm" },"isPreOrder": false, "estimatedShippingDays": 1, "isAvailable": true }]
Example output (trimmed)
{"itemId": 6192497619,"shopId": 178158839,"region": "sg","url": "https://shopee.sg/product/178158839/6192497619","title": "Kids Baby Lightweight Sandals Summer Boys Mesh Sandals 0-3Yrs Girls Infant Prewalker","condition": "new","isAvailable": true,"categories": [{ "id": 100633, "name": "Baby & Kids Fashion" },{ "id": 100692, "name": "Boy Shoes" },{ "id": 101060, "name": "Sandals" }],"attributes": [{ "name": "Country of Origin", "value": "China" },{ "name": "Material", "value": "Rubber" }],"variantCount": 24,"vouchers": [{ "code": "BABY70201", "minSpend": 11.0, "discountAmount": 0.33,"percentUsed": 32, "endsAt": "2026-10-03T15:59:00Z" }],"videos": [{ "url": "https://mms.vod.susercontent.com/…/…default.mp4","definition": "V540P", "durationSeconds": 12 }],"shopLocation": "Mainland China","isCrossBorder": true,"createdAt": "2021-06-22T07:01:57Z","shop": {"shopId": 178158839, "name": "Yienws.sg", "itemCount": 684,"followerCount": 16446, "ratingStar": 4.86, "ratingTotal": 36688,"responseRate": 85, "cancellationRate": 0}}
Input
A Shopee product needs two IDs — a shop ID and an item ID. All of these carry both:
{"products": ["https://shopee.sg/product/178158839/6192497619","https://shopee.sg/Kids-Baby-Sandals-i.178158839.6192497619","178158839/6192497619","https://shopee.co.id/product/165796339/7454342119"],"includeShop": true,"includeDescription": true}
Paste a single item ID and the Actor tells you exactly what's missing rather than failing vaguely.
| Option | Default | Notes |
|---|---|---|
products | — | Required. Product URLs or shopId/itemId pairs. |
region | sg | Applies only to bare pairs; URLs use their own domain. |
includeShop | true | Seller profile, fetched once per shop and reused. |
includeDescription | true | Largest part of a record; off for a slimmer dataset. |
maxItems | 100 | Hard cap on stored rows. |
proxyConfiguration | off | Leave off — see below. |
Marketplaces
Singapore · Malaysia · Indonesia · Thailand · Vietnam · Philippines · Taiwan · Brazil · Mexico · Colombia · Chile
Verified live on all of them. Shopee has exited Spain, France, India and Poland, so those are not offered.
Speed and cost
One product is one HTTP request. The seller profile is one more per shop, not per product, so 500 products from one seller cost 501 requests, not 1,000. No browser is launched. Measured: 4 products across 3 countries in ~4 seconds.
No proxy is used unless Shopee actually blocks an IP, and then the Actor escalates on its own — datacenter first (included in every Apify plan, free tier included), residential only if your plan has it.
Use it for
- Catalogue and PIM population — titles, specs, images, variants and category paths in one structured row per product.
- Assortment tracking — watch which SKUs and options a competitor adds or drops over time by scheduling a run.
- Content migration — move listings between marketplaces with the description blocks and images intact.
- Search / LLM datasets — clean, deduplicated product records with a real category path.
- Voucher monitoring — seller promo codes with their spend thresholds and expiry.
Related
Pair with the Shopee Shop & Seller Profile Scraper for seller-level metrics, and the category and brand-directory Actors to discover what to feed in.