Shopee Product Detail Scraper: Full Data, Stock & Reviews
Pricing
from $3.99 / 1,000 products
Shopee Product Detail Scraper: Full Data, Stock & Reviews
Scrape full Shopee product detail by URL: live price, discount, per-variant stock, units sold, ratings, specifications, brand, and category path, plus complete customer reviews with photos and sub-ratings. Works across all 8 Shopee markets.
Pricing
from $3.99 / 1,000 products
Rating
5.0
(1)
Developer
Zen Studio
Maintained by CommunityActor stats
1
Bookmarked
812
Total users
254
Monthly active users
13 hours
Issues response
a day ago
Last modified
Categories
Share
Shopee Product Detail Scraper | Full Product Data, Variants, Stock & Customer Reviews by URL (2026)
From Zen Studio, creators of the 1688 Wholesale Scraper, Alibaba Scraper and Shopee Product Search.
Latest update (2026-10-20): every product row now carries cardStatus — reported or not_reported — which says whether the product's listing card was collected with it. The card is the only source of the promotional and pre-discount card prices, the recommended vouchers, Brazil's Pix pair and the shop's ship-from location, so when it does not arrive those fields are empty for that reason and not because the product has no promotion. Rows in every market can arrive without it at the moment; they are now marked, counted and named per market in the run log, and re-running may complete them. Rows also carry ratingStatus, stockStatus, salesStatus and listingStatus, so a row says whether its rating figure was reported, whether its stock count is a measured figure, whether the market publishes units sold at all, and whether a listing is no longer offered rather than simply not retrieved this run. Details are under What Data Can You Extract.
Why choose this actor?
- 180+ fields for product and seller research. Export specifications, vouchers, flash-sale offers, rating breakdowns and the seller profile together. Brazil listings also include Pix discounts and the final Pix price where offered.
- Compare the price and stock of individual variants. Each available SKU can carry its own price, pre-discount price and stock count. Track which sizes, colours or models are available in Brazil, Indonesia, Singapore, Thailand, Malaysia, Taiwan and the Philippines.
- Judge the seller behind the listing. Get seller ratings, response and cancellation rates, follower counts, last-active time and order-preparation time where available. Optional buyer reviews add photos, videos, purchased variants and seller replies in a separate dataset.
Try one product
Paste a full Shopee product URL. Product detail and seller fields are included without an enrichment switch:
{"startUrls": [{"url": "https://shopee.com.br/Celular-IPhone-13-13-Pro-13-Pro-Max-128GB-256GB-Original-i.1835966088.58212512681"}],"includeReviews": false}
Open actor input to replace the example or add more products. Export JSON, CSV or Excel; JSON preserves nested variants and specifications. See Pricing for current charges.
The output has 192 fields; values depend on the product, market and available data. Vietnam is currently not returning product data at all (see below), and for a small share of products in other markets no stock count is available — those rows carry stockStatus: not_reported and an empty stock, which means no count was reported, not that the product is out of stock. Units sold are published for Brazil and Indonesia; Singapore, Thailand, Malaysia, Taiwan and the Philippines do not publish them at all, so sold and the other sales fields are empty there and the row says so with salesStatus: unavailable (see Sales figures). Customer ratings are served in every market, but some rows in Singapore, Thailand, Malaysia, Taiwan and the Philippines currently arrive without the figure: those carry ratingStatus: not_reported with an empty rating and ratingCount, which means no figure was reported rather than a product nobody has rated, and re-running may complete them. Rows can also arrive without the product's listing card, which carries the promotional and pre-discount card prices, the recommended vouchers, Brazil's Pix pair and the shop's ship-from location: those read cardStatus: not_reported, so those fields are empty because the card did not arrive and not because the product has no promotion, and re-running may complete them. Some listings lack descriptions or specifications, especially in the Philippines. The hero shows an illustrative product view.
Reviews are currently limited: many runs return none right now. Products are always collected in full, and reviews are charged only when delivered. Each row says which case it is: reviewsStatus is collected (the reviews this product has were fetched, so reviewsFetched: 0 means it has none), unknown (reviews could not be collected this run, re-running usually completes them) or unavailable (that market serves no customer reviews), and null when the run asked for no reviews.
Set includeReviews to true for up to 1,000 recent reviews per product, billed separately. Taiwan reviews are unavailable. For deeper review history, use Shopee Reviews.
| Zen Studio · Shopee & Lazada | ||||
You are here | Find products | Review history | Live prices | Product search |
Copy to your AI assistant
zen-studio/shopee-product-detail-scraper on Apify. Scrapes full Shopee product detail by product URL, plus optional customer reviews. Default dataset: one row per product with 192 fields: itemId, shopId, sellerId, modelId, itemType, url, name, nameTranslated, image, images, longImages, transparentBackgroundImage, sizeChartImage, sizeChartInfo, videos, highlightVideo, lowBandwidthVideo, clipInfo, previewInfo, makeupTryOn, hasVideo, price, priceBeforeDiscount, priceMin, priceMax, priceMinBeforeDiscount, priceMaxBeforeDiscount, lowestPastPrice, discountPercent, currency, exclusivePriceInfo, installment, cardDisplayPrice, promoPrice, strikethroughPrice, pixDiscount, pixPrice, cardPromotion, cardStatus, stock, stockStatus, normalStock, otherStock, discountStock, reservedPromotionStock, hasReservedPromotionStock, hasShopeeStock, sold, historicalSold, globalSold, soldMonthly, salesStatus, rating, ratingCount, ratingBreakdown, ratingStatus, commentCount, likedCount, viewCount, shopName, shopRating, shopLocation, shopLocationTranslated, isOfficialShop, isVerifiedSeller, isPreferredPlusSeller, isServiceByShopee, isOutletShop, hasLowFulfillmentRate, categoryId, categoryBreadcrumb, feCategoryBreadcrumb, brand, brandId, condition, itemStatus, createdAt, isPreOrder, estimatedShippingDays, tierVariations, variationImageOrder, models, attributes, description, richDescription, minPurchaseLimit, maxPurchaseLimit, canUseWholesale, canUseBundleDeal, wholesaleTiers, isOnFlashSale, flashSale, upcomingFlashSale, hasLowestPriceGuarantee, isLowestPrice, platformVoucher, shopVoucher, adsVoucher, voucherInfo, shopVouchers, bundleDeal, bundleDealId, groupBuy, isGroupBuyItem, hasGroupBuyStock, addOnDeal, coinInfo, welcomePackage, welcomePackageType, welcomePackageEligible, deepDiscount, isFreeShipping, freeShippingInfo, deliveryInfo, estimatedDeliveryTime, canUseCod, codFlag, ccInstallmentEligible, nonCcInstallmentEligible, creditInsurance, invoiceOption, taxCode, isCrossBorder, isMart, isShopeeChoice, isAdult, isSexual, adultTypes, adultAgeThreshold, isAlcohol, isPrescriptionItem, isInfantMilkFormula, needKyc, ageGate, complaintPolicy, isPartialFulfilled, compatibleWithUserVehicle, packSize, presaleInfo, isLiveStreamingPrice, liveStreamingInfo, hasPost, hasSizeRecommendation, enriched, scrapedAt, soldDisplayed, sizeChartImageId, transparentBackgroundImageId, hasVoucher, hasBundleDeal, hasGroupBuy, hasAddOnDeal, reviewSummary, reviewsFetched, reviewsStatus, listingStatus, promotionLabels, sellerBadge, isAd, collectedVia, descriptionTranslated, shopUsername, shopCountry, shopFollowerCount, shopItemCount, shopResponseRate, shopResponseTimeSec, shopCancellationRate, shopRatingGood, shopRatingNormal, shopRatingBad, shopCreatedAt, shopLastActiveAt, shopOnVacation, shopPreparationTimeSec, shopDescription, shopCoverImage, shopAvatar, shopUpdatedAt, shopChatDisabled, shopLowFulfillmentWarning, shopPhoneVerified, shopEmailVerified, shopFollowingCount, shopPromotions, shopLatestListingAt, shopSemiInactive, shopOffersDisabled, shopMainCategory, shopAttributes, isStockHidden, addOnServices. When includeReviews is on, reviews are written to a separate "reviews" dataset, one row per review, joined to products by itemId and shopId: reviewId, ratingStar, comment, createdAt, editedAt, author, authorId, authorPortrait, authorLoyaltyTier, isAnonymous, isRepeatPurchase, likeCount, status, region, detailedRating (productQuality/sellerService/deliveryService/driverService), variations (variant bought), images, videos, shopReply, followUp, templateTags, overallFit, sizeInfoTags, authorMeasurements. Call ApifyClient("TOKEN").actor("zen-studio/shopee-product-detail-scraper").call(run_input={...}); products = client.dataset(run["defaultDatasetId"]).list_items().items; the reviews dataset is in the same run's Storage. Required: startUrls (Shopee product URLs containing -i.<shop>.<item>; the market is auto-detected from each URL, mix markets freely). Optional: includeReviews (bool), maxReviewsPerProduct (default 100, up to 1000), includeShopVouchers (bool, default false: fills shopVouchers with the shop's claimable coupons; sg/th/my/tw/ph return them regardless, br/id need the flag and get slower). Brazil, Indonesia, Singapore, Thailand, Malaysia, Taiwan and the Philippines are fastest and most reliable (~60 products/min); PH rows always carry the full commercial record, stock and per-variant prices included; description/specifications arrive less often there and the row is marked enriched:false when they do not; Vietnam currently returns NO product data: those rows are delivered flagged, are never charged, and the run reports the market as unavailable rather than the products as gone. Reviews are collected in all eight markets, Taiwan included (every product still carries its rating total and breakdown even with reviews off). Every market except Vietnam returns each variant's own price, pre-discount price and stock in `models`; `isStockHidden` is true when the seller hides the stock count on the storefront (the `stock` value is still real); `stockStatus` is per row, `reported` (`stock` and each variant's `stock` are a measured count, and a `0` means out of stock), `not_reported` (no count was available for that product this run, so the empty figure means no count, not an empty shelf) or `unverified` (a figure arrived from a source that cannot be confirmed as a count; no market returns this today), and the row is charged the same either way; `addOnServices` lists paid add-ons offered with the product (extended warranty, insurance, installation). Shop fields cover when the seller was last active, vacation status, average order-preparation time (`shopPreparationTimeSec`), the shop description, cover and avatar images, running shop promotions and verification flags; `shopMainCategory` and `shopAttributes` (Shopee Mart, outlet, pharmacy and similar shop types) are filled in every market except Indonesia. Brazilian products carry `pixDiscount` and `pixPrice` (the price when paying with Pix, = `promoPrice` less the Pix discount); `cardDisplayPrice` is the all-in displayed price, which also nets off a platform voucher; the Pix discount is a percentage of promoPrice taken BEFORE vouchers, and neither price accounts for shop coupons (claimed by the shopper, see shopVouchers), so both can differ from the figure rendered on the product page. To rebuild the page's Pix figure: rate = pixDiscount.discountAmount / promoPrice, then subtract platformVoucher.voucherDiscount and whichever shopVouchers you assume the buyer claims from promoPrice, and take that rate off the remainder. `sold` is all-time (`soldDisplayed` is the displayed count) and is published for Brazil and Indonesia: Singapore, Thailand, Malaysia, Taiwan and the Philippines publish no units-sold figure for a product page, so every sales field is empty there and the row says so with `salesStatus: unavailable`, which is never a zero (`reported` = a figure is on the row, `not_reported` = the market publishes one and this row did not get it); the run also states it once per market, and nothing else on those rows is affected. `rating`, `ratingCount` and `ratingBreakdown` are published wherever the figure is reported, and `ratingStatus` says which: `reported` (a figure is on the row; a 0 there means nobody has rated the product yet) or `not_reported` (no figure was reported for that product on that run, so the empty rating is not an unrated product and re-running may complete it). Every market serves a rating, so `not_reported` is always worth a re-run; the run also states the count and the markets once. `cardStatus` is per row, `reported` or `not_reported`, and says whether the product's listing card was collected with it: the card is the only source of `cardDisplayPrice`, `promoPrice`, `strikethroughPrice`, `cardPromotion`, the Brazil Pix pair, the recommended vouchers (`platformVoucher`, `shopVoucher`, `adsVoucher`) and `shopLocation`, so on a `not_reported` row those are empty because the card did not arrive, not because the product has no promotion; the product's own price, stock, variants, description, rating and shop profile are unaffected, the row is charged the same, the run states the count per market, and re-running may complete it. `reviewSummary` only when reviews are enabled. `listingStatus` is per row, available / unavailable / unknown: `unavailable` means the market will not serve that listing (removed, delisted or banned), `unknown` means this run did not complete it and a re-run may answer, so a live listing is never reported as gone. `reviewsStatus` is per row, collected / unknown / unavailable and null when the run asked for no reviews: `collected` with `reviewsFetched: 0` means the product has no reviews, `unknown` means this run could not collect them and re-running usually completes them, `unavailable` means that market serves no customer reviews. Reviews are charged only when delivered, so an `unknown` row costs nothing. PPE: product result $4.99/1k products until 21 October 2026, $7.99/1k from then (volume tiers are lower); reviews $3.99 per 1k reviews. Free tier: 20 runs, up to 10 products per run, no reviews. Token: https://console.apify.com/account/integrations To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
Key Features
- 192 fields per product: live price, original price, discount percent, the Brazilian Pix discount and final Pix price, per-variant stock with per-SKU pricing, units sold in Brazil and Indonesia (all-time and monthly; the other markets publish none and the row says so), rating and star breakdown, brand, full description, structured specifications, both category paths, product videos, voucher, bundle and flash-sale terms, shop profile (name, rating, location, follower and listing counts, response and cancellation rates, last active time, vacation status, order-preparation time, main category), and a rich review summary in every record.
- Full customer reviews: enable the reviews tier to collect review text, star and per-aspect sub-ratings, buyer photos and videos, the exact variant purchased, follow-up reviews, and seller replies. Reviews land in a separate dataset, joined to each product by
itemIdandshopId. Currently limited: many runs return no reviews right now. Reviews are collected in all eight markets, Taiwan included; every product still carries its rating total and star breakdown even when the reviews tier is off. - All 8 Shopee markets: Singapore (SGD), Indonesia (IDR), Malaysia (MYR), Philippines (PHP), Thailand (THB), Taiwan (TWD), Vietnam (VND), and Brazil (BRL).
- Fastest and most reliable in Brazil, Indonesia, Singapore, Thailand, Malaysia, Taiwan and the Philippines: around 60 products per minute, and in our benchmark runs every single product came back complete, seller profile included. In the Philippines the description and specifications come through less often; those rows still carry the full commercial record, stock and per-variant prices included, and are marked
enriched: falseso you can tell. Vietnam is currently not returning product data; those rows are flagged and never charged. - Seller profile on every row: shop name, seller ID, shop rating and its good/neutral/bad split, location, follower and listing counts, response rate and time, and cancellation rate.
- Review sample: collect up to 1000 recent reviews per product into a separate dataset.
ratingCountand the 1-5 starratingBreakdowncome with the product regardless, andratingStatuson the row says whether the figure was reported for it on that run. - Free tier: 20 free runs, up to 10 products each; the reviews tier is a paid feature.
How to Scrape Shopee Product Detail
Basic: one product, full detail
{"startUrls": [{ "url": "https://shopee.sg/Razer-Blackshark-V2-X-multi-platform-wired-e-sports-gaming-headset-gam-i.1687421270.55363121938" }]}
Several products at once
{"startUrls": [{ "url": "https://shopee.sg/Razer-Blackshark-V2-X-multi-platform-wired-e-sports-gaming-headset-gam-i.1687421270.55363121938" },{ "url": "https://shopee.sg/P2961-Wireless-Over-Ear-Bluetooth-Headphones-Hi-Fi-Stereo-Sports-HD-Mi-i.1006220784.26386145184" }]}
Product detail with up to 100 reviews each
{"startUrls": [{ "url": "https://shopee.com.br/Celular-IPhone-13-13-Pro-13-Pro-Max-128GB-256GB-Original-i.1835966088.58212512681" }],"includeReviews": true,"maxReviewsPerProduct": 100}
A larger review sample
{"startUrls": [{ "url": "https://shopee.co.id/product-i.255563049.23157471408" }],"includeReviews": true,"maxReviewsPerProduct": 1000}
Reviews are a recent sample, up to 1000 per product. The full rating count and star/media breakdown are always in reviewSummary.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array | required | Shopee product page URLs (the links containing -i.<shop>.<item>). Copy the full product link, the one that still has the product name in it: a shortened link works too, but full links return the most complete data. One product per URL. The market and currency are auto-detected from each URL, so you can mix markets in one run. |
includeReviews | boolean | false | Also collect customer reviews into a separate reviews dataset. Billed per review. Currently limited: many runs return none right now. |
maxReviewsPerProduct | integer | 100 | How many recent reviews to collect per product, up to 1000. Only applies when includeReviews is on. |
includeShopVouchers | boolean | false | Also collect the coupons the shop offers on the product into shopVouchers (code, amount off, minimum spend). Singapore, Thailand, Malaysia, Taiwan and the Philippines return these either way; switch this on for Brazil and Indonesia, where it makes products slower to collect. Not included in free runs. |
What Data Can You Extract from a Shopee Product?
Each product (default dataset, 192 fields): price, discount, the Brazilian Pix discount and final Pix price, per-variant stock, units sold (Brazil and Indonesia), ratings and a full reviewSummary, seller and shop trust signals, full description, specifications, brand, both category paths, variants, videos, promotions (vouchers, bundles, flash sale), and shipping.
Sales figures are counts of units sold, never revenue:
| Field | Period |
|---|---|
sold, historicalSold | All-time, in this market (the same number under two names) |
globalSold | All-time, across every Shopee market the listing sells in. Equals historicalSold for a single-market listing |
soldMonthly, soldDisplayed | Shopee's monthly figure for this market (the same number under two names) |
Which markets publish them: Brazil and Indonesia do. Singapore, Thailand, Malaysia, Taiwan and the Philippines publish no units-sold figure for a product page, so every sales field above is empty on those rows and salesStatus reads unavailable — the run also says it once per market in the log. An empty sales figure is never a zero: salesStatus is per row, reported (a figure is on the row, and a 0 there is a real zero), unavailable (that market publishes none, so re-running cannot fill it) or not_reported (the market does publish one and this row did not get it; re-running may answer). Everything else on those rows — price, pre-discount price, stock, per-variant price and stock, shop and category — is unaffected, and the row is charged the same either way. To rank products by sales in those markets, Shopee Search can return a search, category or shop in Shopee's own best_selling order, which is the ordering rather than the counts.
Each review (optional, separate reviews dataset): star rating, text, photos and videos, per-aspect sub-ratings (product, seller, delivery), the variant bought, repeat-purchase flag, apparel fit and reviewer measurements, and the seller's reply.
The exact shape is below.
Output Example: product (default dataset)
{"itemId": 6646421738,"shopId": 131198971,"url": "https://shopee.sg/product/131198971/6646421738","name": "Baseus WM01 TWS Bluetooth Earphones Stereo Wireless 5.3 Bluetooth Headphones Touch Control","image": "https://down-sg.img.susercontent.com/file/cn-11134207-7r98o-lt3ijo9b9xwde3","images": ["https://down-sg.img.susercontent.com/file/cn-11134207-7r98o-lt3ijo9b9xwde3","https://down-sg.img.susercontent.com/file/0101a8de2faa7083572ad73875215293","...+6 more images"],"price": 18.22,"priceBeforeDiscount": 43.81,"priceMin": 18.22,"priceMax": 18.22,"priceMinBeforeDiscount": 43.81,"priceMaxBeforeDiscount": 43.81,"discountPercent": 58,"currency": "SGD","cardStatus": "reported","stock": 45,"stockStatus": "reported","sold": 69492,"historicalSold": 69492,"soldDisplayed": 1056,"rating": 4.863496641493682,"ratingCount": 52712,"ratingStatus": "reported","likedCount": 13950,"commentCount": 26003,"reviewsFetched": 100,"reviewsStatus": "collected","reviewSummary": {"total": 26352,"starBreakdown": [174, 107, 443, 1700, 23928],"withComment": 13968,"withImage": 9907,"withMedia": 10177,"localReviews": 26352,"overseaReviews": 0,"repeatPurchases": 0,"fitBreakdown": { "fit": 0, "large": 0, "small": 0 },"fitPercent": { "fit": null, "large": null, "small": null }},"shopName": "Baseus Official Store","shopRating": 4.886495,"shopLocation": "SG","sellerId": 131199821,"shopUsername": "baseus.sg","shopFollowerCount": 412903,"shopItemCount": 683,"shopResponseRate": 98,"shopCancellationRate": 1,"shopRatingGood": 51204,"shopRatingNormal": 912,"shopRatingBad": 596,"shopCreatedAt": "2019-03-14T08:22:41+00:00","isOfficialShop": true,"isVerifiedSeller": false,"isPreferredPlusSeller": false,"isServiceByShopee": true,"isShopeeChoice": false,"isMart": false,"isCrossBorder": true,"isAdult": false,"categoryId": 100535,"createdAt": "2020-08-13T07:07:52+00:00","itemStatus": "normal","listingStatus": "available","isOnFlashSale": true,"canUseCod": false,"canUseWholesale": false,"hasVoucher": true,"hasBundleDeal": false,"hasGroupBuy": false,"hasAddOnDeal": false,"hasLowestPriceGuarantee": false,"hasShopeeStock": true,"voucherInfo": { "promotion_id": 1428764345769984, "voucher_code": "WHJUN544", "label": "25% off" },"bundleDeal": null,"groupBuy": null,"addOnDeal": null,"ccInstallmentEligible": false,"nonCcInstallmentEligible": false,"tierVariations": [{"name": "Colors","options": ["White", "Black", "Green", "Purple", "Pink"],"images": ["36a1e80576943652e150d2263ea08feb", "...+4 more"],"type": 0}],"brand": "BASEUS","sizeChartImageId": null,"transparentBackgroundImageId": "cn-11134207-7r98o-lt3ijo9b9xwde3","videos": [{ "id": "sg_3a916e51-5548-438c-963b-6aff56be0d11_000026", "durationSec": 60, "thumbnailId": "2d5f9c2b0da5d85821f53ab2630b40ce", "path": "KQ0Cf_-sz_lASLKG" }],"categoryBreadcrumb": ["Audio", "Earphones, Headphones & Headsets"],"feCategoryBreadcrumb": ["Mobile & Gadgets", "Audio", "...+1 more"],"models": [{ "name": "Purple", "modelId": 50598177669, "price": 18.22, "priceBeforeDiscount": 43.81, "stock": 27 },{ "name": "White", "modelId": 50598177670, "price": 18.22, "priceBeforeDiscount": 43.81, "stock": 4 },"...+3 more variants"],"description": "Hey~ Welcome to Baseus Official Store!!! Please read the product description clearly, choose what you need. Most items have ready stocks! …","richDescription": [{ "text": "Hey~ Welcome to Baseus Official Store!!!", "imageId": null },"...+45 more paragraphs"],"attributes": [{ "name": "Connection Type", "value": "Wireless" },{ "name": "Earphone, Headphone, & Headset Type", "value": "In Ear" },"...+5 more specs"],"condition": "new","estimatedShippingDays": 1,"minPurchaseLimit": 0,"maxPurchaseLimit": null,"isFreeShipping": false,"nameTranslated": null,"descriptionTranslated": null,"enriched": true,"scrapedAt": "2026-06-24T08:56:47.541210+00:00"}
Output Example: Brazil Pix pricing
Brazilian products carry the Pix payment discount and every price behind Shopee's headline figure. Real record, pricing fields only:
{"itemId": 58212512681,"url": "https://shopee.com.br/product/1835966088/58212512681","currency": "BRL","price": 2165.0,"priceBeforeDiscount": 3999.0,"discountPercent": 46,"strikethroughPrice": 3999.0,"promoPrice": 2165.0,"pixDiscount": { "discountId": 470693858988179, "snapshotId": 325103934198074, "discountAmount": 173.2 },"pixPrice": 1991.8,"cardDisplayPrice": 1966.8,"platformVoucher": { "promotionId": 1499453651562496, "voucherCode": "1437235186", "voucherDiscount": 25.0, "minSpend": 200.0, "percentageWithDecimal": 5.0 },"cardPromotion": { "promotionType": 301, "promotionId": 470763035636297, "discount": 51, "modelId": 199190658690, "originalPrice": 3999.0 }}
How the four prices relate: promoPrice (2165.00) is the price after the seller's promotion,
pixPrice (1991.80) is that price less the Pix discount (173.20), and cardDisplayPrice (1966.80)
is the all-in figure Shopee shows, which also nets off the recommended platform voucher (25.00).
pixDiscount and pixPrice are Brazil-only and are null in every other market.
All five of those fields come from the product's listing card — the record Shopee shows in
search and category results, collected alongside the product — together with the recommended
vouchers (platformVoucher, shopVoucher, adsVoucher) and the shop's ship-from location
(shopLocation). cardStatus on the row says whether that card was collected: reported means it
was, not_reported means it was not, so those fields are empty because the card did not arrive and
not because the product has no promotion or the shop no location. Everything else on the row — the
product's own price, stock, variants, description, specifications, rating and shop profile — is
unaffected, the row is charged as usual, and re-running may complete it. The run log also says how
many rows were affected and in which markets.
Two things to know before comparing cardDisplayPrice to the price on the product page. The Pix
discount is a percentage of promoPrice, taken before any voucher, so a page that applies its
vouchers first and takes the percentage off the remainder shows a slightly different figure. And
neither price accounts for shop coupons: those are claimed by the shopper, not applied
automatically, so Shopee leaves them out of the displayed all-in price. Switch on
includeShopVouchers to get them in shopVouchers and subtract whichever ones your use case
assumes the buyer will claim.
To rebuild the figure the page shows: take the Pix rate as
pixDiscount.discountAmount / promoPrice, subtract platformVoucher.voucherDiscount and the
coupons you assume the buyer claims from promoPrice, then take that rate off the remainder.
Output Example: review (separate reviews dataset)
{"reviewId": 38074473483,"itemId": 6646421738,"shopId": 131198971,"ratingStar": 5,"comment": "Product Quality: Very good Quality\nPerformance: Very good Performance\nBest Feature: Long battery life and crisp sound …","createdAt": "2025-04-18T09:45:49+00:00","editedAt": "2025-04-20T06:53:11+00:00","author": "b*****v","authorId": 1166917792,"authorPortrait": "https://down-sg.img.susercontent.com/file/sg-11134233-7rase-m1fxiibwecopce","authorLoyaltyTier": "Member Gold","isAnonymous": true,"isRepeatPurchase": false,"likeCount": 101,"status": 2,"region": "SG","detailedRating": { "productQuality": 5, "sellerService": 5, "deliveryService": 5, "driverService": null },"variations": [{ "name": "Black", "options": ["Black"], "modelId": 29558850468, "image": "https://down-sg.img.susercontent.com/file/cn-11134207-7ras8-m98i19fzx5zm92" }],"images": ["https://down-sg.img.susercontent.com/file/ph-11134103-7rase-m8q1lab7t3dt6f","...+3 more"],"videos": [{ "id": "ph-11110103-6kfkr-m8q1xtzqijj5fb", "url": "https://down-tx-sg.vod.susercontent.com/api/v4/11110103/mms/ph-11110103-6kfkr-m8q1xtzqijj5fb.mp4", "coverUrl": "https://down-zl-sg.img.susercontent.com/ph-11110103-6kfkr-m8q1xtzqijj5fb_cover", "durationMs": 32823 }],"shopReply": { "comment": "Thank you for your kind review! See you again.", "createdAt": "2025-04-19T02:11:00+00:00" },"followUp": null,"templateTags": ["Product Quality", "Performance", "...+1 more"],"overallFit": 0,"sizeInfoTags": [],"authorMeasurements": [],"scrapedAt": "2026-06-24T08:56:47.541210+00:00"}
Advanced Usage
Ready-made configurations for catalog enrichment, review and voice-of-customer analysis, price and stock monitoring, and competitor research.
Catalog enrichment: many products, no reviews
{"startUrls": [{ "url": "https://shopee.sg/Razer-Blackshark-V2-X-multi-platform-wired-e-sports-gaming-headset-gam-i.1687421270.55363121938" },{ "url": "https://shopee.sg/P2961-Wireless-Over-Ear-Bluetooth-Headphones-Hi-Fi-Stereo-Sports-HD-Mi-i.1006220784.26386145184" }]}
Voice of customer: review sample
{"startUrls": [{ "url": "https://shopee.co.id/product-i.255563049.23157471408" }],"includeReviews": true,"maxReviewsPerProduct": 1000}
Price and stock monitoring
Schedule the actor on a recurring basis from the Apify Console. Each run returns the current price, discount, and per-variant stock for the same product URLs, so you can track changes over time. Read stockStatus alongside stock: reported is a measured count (0 means out of stock), not_reported means no count was available on that run, so a monitor does not read it as a product selling out.
{"startUrls": [{ "url": "https://shopee.com.br/Celular-IPhone-13-13-Pro-13-Pro-Max-128GB-256GB-Original-i.1835966088.58212512681" }]}
Localized review text
{"startUrls": [{ "url": "https://shopee.co.th/iPhone-17-by-Apple-Flagship-Store-i.989284521.43918327790" }],"includeReviews": true,"maxReviewsPerProduct": 50}
Pricing: Pay Per Event (PPE)
$4.99 per 1,000 products (less on higher Apify plans) for the full detail record. Reviews are billed separately at $3.99 per 1,000 reviews, only when the reviews tier is on.
| Event | Price | Charged when |
|---|---|---|
result | $4.99 / 1,000 products | Once per delivered product, full detail record |
reviews | $3.99 / 1,000 reviews | Per review row, only when the reviews tier is on |
Example costs:
- 1,000 products, detail only: $4.99
- 1,000 products with 50 reviews each (50,000 reviews): $4.99 + $199.50
Free tier: 20 free runs for new users, up to 10 products per run. The reviews tier is a paid feature with no free allowance.
FAQ
What is Shopee? Shopee is the largest e-commerce marketplace in Southeast Asia, also operating in Taiwan and Brazil. It spans Singapore, Indonesia, Malaysia, the Philippines, Thailand, Taiwan, Vietnam, and Brazil, selling electronics, fashion, home goods, and groceries from individual sellers and official brand stores. This actor turns any Shopee product page into a structured record and, optionally, its full set of customer reviews.
How do I get a product URL?
Open the product on Shopee and copy the page URL from your browser. It contains the pattern -i.<shopId>.<itemId> (for example https://shopee.sg/Razer-Blackshark-V2-X-multi-platform-wired-e-sports-gaming-headset-gam-i.1687421270.55363121938). Paste one or more into startUrls. The market is detected automatically from each URL, so you can mix markets in one run.
Can I search for or discover products? This actor works on product URLs you already have. To find products by keyword, category, or shop, use the Shopee Product Scraper; it returns product URLs you can feed straight into this actor for full detail and reviews.
How fast is it, and is it reliable?
Brazil, Indonesia, Singapore, Thailand, Malaysia, Taiwan and the Philippines are the fastest and most dependable: about 60 products per minute, and in our benchmarks every product returned complete with its seller profile. In the Philippines the description and specifications come through less often than elsewhere; when they are missing the row still carries the full commercial record, stock and per-variant prices included, and is marked enriched: false. Vietnam is currently not returning product data. Rows for Vietnam are delivered clearly flagged and are never charged, and the run says so rather than reporting the products as gone. This is a problem at the source, not with the links you submit, and it may clear. The other seven markets are unaffected.
Why does a product sometimes arrive without price or stock?
For one of two reasons, and the row says which in listingStatus. unavailable means the listing is no longer offered, so re-running returns the same answer. unknown means it could not be retrieved this run and re-running usually completes it. We never drop a row you asked for: either way it is delivered with its IDs, a _warning, and enriched: false, and you are not billed for it. This is separate from enriched: false on an otherwise full record, which simply means the deep detail (description and specifications) was unavailable while price, stock, variants and ratings came through normally.
Can I check whether listings and shops are still live?
Yes. Re-run your URLs and read listingStatus: available means the listing is still offered, unavailable means it is not (removed, delisted or taken down), and unknown means this run could not tell. The shop is reported separately: a row can come back unavailable with the shop fields (shopName, shopRating, shopLastActiveAt, shopItemCount) still filled, which means the seller is still trading and only that listing is gone. When both the listing and the shop fields are empty, the whole shop is no longer reachable. shopOnVacation, shopSemiInactive and shopLastActiveAt cover the states between the two. Rows that are not available are never charged.
Is the stock count always there, and what does an empty one mean?
stockStatus answers it on every row. reported means stock (and each variant's stock in models) is a measured count — a 0 included, which means out of stock. not_reported means no count was available for that product on that run: the figure is left empty rather than filled in, so an empty stock is an empty count and never an empty shelf. unverified, which no market returns today, would mean a figure arrived that we could not confirm as a count. The run log also says how many rows were affected and in which markets. Everything else on a not_reported row — price, variants, ratings, description, shop fields — is unaffected, and the row is charged as usual.
How many reviews can I collect per product?
Up to 1000 recent reviews per product (maxReviewsPerProduct, default 100). This actor delivers a representative review sample alongside the product detail; the rating total and 1-5 star breakdown are in ratingCount and ratingBreakdown, with or without reviews, and ratingStatus says whether the figure was reported for that product on that run (not_reported means it was not, so an empty rating is never an unrated product). Reviews are written to a separate reviews dataset, joined to each product by itemId and shopId.
Where do the reviews appear?
In a separate dataset named reviews in the same run's Storage tab, one row per review. The product record carries ratingCount and ratingBreakdown whenever the figure is reported, with ratingStatus saying so per row, plus a reviewSummary (media, fit and repeat-purchase breakdowns) and a reviewsFetched count once the reviews tier is on. reviewsStatus on the same row says whether those reviews were collected (collected, and a count of 0 then means the product has none), could not be collected this run (unknown, re-running usually completes them) or are not served in that market (unavailable).
Are per-variant prices included?
Yes. Every variant in the models array carries its own current price, pre-discount price and stock, in every market except Vietnam, alongside the overall price range (priceMin, priceMax). Where no stock count is available for a product, the variant list comes back without one and the row says so in stockStatus — see the stock question below.
How fresh is the data? Every run is scraped live and reflects the current price, stock, and reviews at the moment you start it.
Do I need a Shopee account or cookies? No. Provide product URLs and hit Start; no Shopee account, cookie export, or login is involved.
How do I export the data? Open the run's Storage tab and download JSON, CSV, Excel, or XML, or use the Apify API. JSON preserves all nested fields (variant arrays, breadcrumb paths, review media, sub-ratings). Products and reviews are separate datasets, so export each one.
What happens if a product URL is invalid or from the wrong market? The actor skips it and writes a short warning record noting the reason, then continues with the remaining URLs.
Is it legal to scrape Shopee product data and reviews? This actor collects publicly visible product and review information. Users are responsible for complying with Shopee's Terms of Service and applicable data protection regulations, including the PDPA laws across Southeast Asia, GDPR, CCPA, and LGPD (Brazil). Reviews contain personal data such as reviewer usernames, photos, and body measurements, so handle them accordingly.
What is the free tier? New users receive 20 free runs, each collecting up to 10 products, at no cost. The reviews tier is excluded from the free tier.
Why did my run return no products? The run log says which of two cases applies:
- "Free tier limit reached": the 20 free runs are used up, and a quota-blocked run delivers nothing rather than a partial sample. Runs on a paid Apify plan have no run cap.
- "Products for a market could not be collected and were skipped": collection for that market failed on this run and nothing was charged for it. Re-run; delivered rows are never dropped, and rows that did not arrive are not billed.
A URL the actor cannot read is not an empty run: it is delivered as a row carrying _warning and the reason (see the question on invalid URLs above). A product the source no longer serves is delivered with its IDs and enriched: false, also unbilled.
More Zen Studio scrapers
🛒 E-commerce
TikTok Shop
Lazada
Naver Search 네이버 검색
AliExpress 全球速卖通
Shopee
Taobao 淘宝
JD.com 京东
1688 阿里巴巴
Weidian 微店
Goofish 闲鱼
Dewu 得物
Coupang 쿠팡
Naver Shopping 네이버쇼핑
🎬 Short-video & social
Douban 豆瓣
Zhihu 知乎
Weibo 微博
Kwai (Brazil)
Kuaishou 快手
Douyin 抖音
RedNote 小红书
Xigua 西瓜视频
Bilibili 哔哩哔哩
Naver Blog & Cafe 네이버 블로그·카페
🏠 Real estate & autos
Naver 부동산
Anjuke 安居客
58.com 58同城
Autohome 汽车之家
Support
- Bugs: Issues tab
- Features: Issues tab
Legal Compliance
Extracts publicly available product and review data. Users must comply with Shopee's Terms of Service and applicable data protection regulations (PDPA across Southeast Asia, GDPR, CCPA, and LGPD for Brazil). Reviews include personal data such as usernames and photos.
Full Shopee product detail by URL: price, per-variant stock, specifications, brand, and complete customer reviews across all 8 Shopee markets.
