# Shopee Product Scraper - Live Stock & Prices (`zen-studio/shopee-product-scraper`) Actor

Scrape Shopee products by keyword or URL across all 8 markets. Get live stock, price, discount, units sold, rating, and shop data, plus optional full description, specifications, brand, category breadcrumb, and per-variant breakdown. No account or login needed. Export to JSON, CSV, or Excel.

- **URL**: https://apify.com/zen-studio/shopee-product-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** E-commerce
- **Stats:** 964 total users, 333 monthly users, 98.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Shopee Product Scraper | Prices, Stock, Variants & Full Product Data Across 8 Markets (2026)

[![141 FIELDS. ONE SHOPEE PRODUCT. VOUCHERS. VARIANT STOCK. FLASH SALES.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/shopee-product-scraper-readme-hero-v1.png)](https://console.apify.com/actors/FHLdQDoADvB14bAyA/input)

From <strong>Zen Studio</strong>, creators of the <a href="https://apify.com/zen-studio/1688-wholesale-scraper"><strong>#1-ranked 1688 scraper on Apify</strong></a>, used by <strong>1,800+ users</strong>, and the <a href="https://apify.com/zen-studio/alibaba-scraper"><strong>Alibaba scraper</strong></a>, used by <strong>300+ users</strong>. The same studio brings its focus on rich marketplace data to Shopee.

**Latest update (2026-10-07):** every product row now carries `stockStatus` (`reported` or `not_reported`), so an empty `stock` reads as what it is — Shopee does not publish a stock count on its listing rows — instead of as an empty shelf. Details are under What data you get from Shopee. Every search term now also gets its share of the product total, so a broad first keyword no longer uses up the run before the later keywords are collected, and a term Shopee has no products for is named in the results. Since 2026-10-06 a run that returns fewer products than you asked for also names the reason (your filters, the sort's reach per search term, or no more products for your terms).

### Why choose this Shopee products scraper?

<strong>142 fields for product research.</strong><br>Export product data covering platform and shop vouchers, flash sales, monthly sales, seller ratings and price ranges. Compare the offers behind a listing, not just its title and headline price.

<strong>Know which variants are in stock.</strong><br>For Brazil and Indonesia, enable full product details to add each variant’s price, stock and stock by warehouse, alongside specifications, descriptions and brand data.

<strong>Search across 8 Shopee markets.</strong><br>Search multiple keywords or collect a shop’s catalog, with results de-duplicated across keywords and the product total shared between them. Filter by price, rating, seller type and more. Choose from Southeast Asia, Taiwan and Brazil, with prices in local currency.

<a href="https://console.apify.com/actors/FHLdQDoADvB14bAyA/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/shopee-product-scraper-readme-cta-v1.svg" width="240" height="48" alt="Search your product"/></a>

### How to scrape Shopee products

Try 20 mechanical keyboard listings from Brazil, with full product details enabled for variant prices, stock and specifications.

```json
{
  "searchTerms": [
    "teclado mecanico"
  ],
  "region": "BR",
  "maxItems": 20,
  "includeEnrichment": true
}
```

<a href="https://console.apify.com/actors/FHLdQDoADvB14bAyA/input">Open actor input</a> to choose your keywords and market.

Full product details are a separately billed add-on, available for Brazil and Indonesia. Other markets return the base listing data. The 142-field structure includes optional fields; values depend on the product, market and available promotions. A single keyword returns up to a few hundred products; add keywords for larger collections, up to 5,000 unique products per run.

<table><tr><td colspan="5" style="padding:10px 14px;background:#EE4D2D;color:#FFFFFF;font-size:13px;font-weight:700">Zen Studio · Shopee &amp; Lazada</td></tr><tr><td style="padding:10px 12px;border:1px solid #E7E5E4;background:#FFDDCE;vertical-align:top;width:20.00%"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-FHLdQDoADvB14bAyA-r6ZrVkIHKi-shopee-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/shopee-product-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Shopee Search</a></span><br><span style="color:#57534E;font-size:12px;white-space:nowrap">You are here</span></td><td style="padding:10px 12px;border:1px solid #E7E5E4;background:#FFF0E8;vertical-align:top;width:20.00%"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-LwARSYSMWLBZfXfdr-FrDaNbQarB-shopee-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/shopee-product-detail-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Shopee Detail</a></span><br><span style="color:#57534E;font-size:12px;white-space:nowrap">Full details from product URLs</span></td><td style="padding:10px 12px;border:1px solid #E7E5E4;background:#FFF0E8;vertical-align:top;width:20.00%"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-vX1uhoJOlFc6UYe9N-3CHi8eZdZY-shopee-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/shopee-product-reviews-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Shopee Reviews</a></span><br><span style="color:#57534E;font-size:12px;white-space:nowrap">Buyer feedback and seller replies</span></td><td style="padding:10px 12px;border:1px solid #E7E5E4;background:#FFF0E8;vertical-align:top;width:20.00%"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-61pGAsgb61jsm6EiX-rm8RZVH8JO-cand_c_live_mark.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/shopee-live-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Shopee Live</a></span><br><span style="color:#57534E;font-size:12px;white-space:nowrap">Live-only prices, on air</span></td><td style="padding:10px 12px;border:1px solid #E7E5E4;background:#FFF0E8;vertical-align:top;width:20.00%"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-BxfAdacLJc6abdnGC-tt95RgkJY6-lazada-product-search-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/lazada-product-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Lazada Products</a></span><br><span style="color:#57534E;font-size:12px;white-space:nowrap">Product data across Southeast Asia</span></td></tr></table>

#### Copy to your AI assistant

```
zen-studio/shopee-product-scraper on Apify. Scrapes Shopee product listings by keyword, shop ID, or Shopee search/shop URL across all 8 markets (SG/ID/MY/PH/TH/TW/VN/BR). One row per unique product with 142 structured fields — camelCase, prices in the market's major currency, times ISO 8601, image IDs already resolved to URLs. Base fields in every record include: itemId, shopId, sellerId, modelId, url, name, nameTranslated, image, images, transparentBackgroundImage, videos, hasVideo, price, priceBeforeDiscount, priceMin, priceMax, priceMinBeforeDiscount, priceMaxBeforeDiscount, discountPercent, currency, installment, cardDisplayPrice, promoPrice, strikethroughPrice, pixDiscount, pixPrice, cardPromotion, soldMonthly, rating, ratingCount, ratingBreakdown, commentCount, likedCount, viewCount, shopName, shopRating, shopLocation, isOfficialShop, isVerifiedSeller, isPreferredPlusSeller, isServiceByShopee, isOutletShop, categoryId, itemStatus, createdAt, tierVariations, canUseWholesale, isOnFlashSale, flashSale, upcomingFlashSale, hasLowestPriceGuarantee, isLowestPrice, platformVoucher, shopVoucher, adsVoucher, voucherInfo, bundleDeal, groupBuy, addOnDeal, coinInfo, welcomePackage, isFreeShipping, freeShippingInfo, deliveryInfo, canUseCod, isCrossBorder, isMart, isShopeeChoice, isAdult, needKyc, isLiveStreamingPrice, stockStatus, scrapedAt, enriched, and many more. Enrichment-only fields (populated when includeEnrichment=true; enrichment is available for Brazil and Indonesia): stock, normalStock, otherStock, discountStock, reservedPromotionStock, sold, historicalSold, globalSold, categoryBreadcrumb, feCategoryBreadcrumb, brand, brandId, condition, estimatedShippingDays, models (per-variant price+stock+per-warehouse stock), attributes (specifications), description, richDescription, minPurchaseLimit, maxPurchaseLimit, wholesaleTiers. Call ApifyClient("TOKEN").actor("zen-studio/shopee-product-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Shopee does not publish an item-level stock count on a listing row in any market, so `stock` is empty on a base record and every row says which it is in stockStatus (reported / not_reported): empty means not reported, NOT out of stock, and 0 would be a real count. Units sold (`sold`, `historicalSold`, `globalSold`, `soldMonthly`) is the same case: Shopee does not report it on a listing row in any market, so those fields are empty on a base record, which means not reported, not zero. Sorting by best selling still ranks by sales, because Shopee applies that ranking itself. Enable includeEnrichment (Brazil and Indonesia) for the real count, or pass a row's url to zen-studio/shopee-product-detail-scraper, which returns the item-level and per-variant count in every market except Vietnam. Required: at least one of searchTerms (string[]), startUrls, or shopId. Optional: region (SG/ID/MY/PH/TH/TW/VN/BR, default SG), maxItems (default 100, max 5000; total across all search terms combined), sort (relevance/newest/price_low_to_high/price_high_to_low/best_selling), includeEnrichment (bool; BR/ID only), priceMin, priceMax, minRating (1-5), minSold, condition (any/new/used), discountedOnly, freeShippingOnly, officialShopOnly, preferredSellerOnly, codAvailableOnly, wholesaleOnly, authenticOnly, withVideoOnly, shippedFrom, brand, language. PPE: result $4.99/1k, enrichment add-on $2.99/1k. No free-run cap; new Apify accounts can use their $5 platform credit here (~1,000 products). 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

- **142 structured fields per product** — the deepest Shopee dataset on the Store. Every price angle (current, before-discount, min/max range, lowest-ever, strike-through), discount, monthly + all-time sold, ratings with a per-star breakdown, seller badges, flash sales (live + upcoming), platform and shop vouchers, Shopee Coins cashback, installment plans, Brazil Pix discounts, bundle / add-on / group-buy / wholesale tiers, per-variant (SKU) pricing with per-warehouse stock, playable product videos, and full specifications.
- **Fast** — up to ~1,000 products in about **2 minutes**, fully enriched — a fraction of the time other Shopee scrapers take.
- **All 8 Shopee markets** — Singapore (SGD), Indonesia (IDR), Malaysia (MYR), Philippines (PHP), Thailand (THB), Taiwan (TWD), Vietnam (VND), Brazil (BRL). Prices in each market's local currency.
- **High coverage** — search many keywords in a single run; results are merged and de-duplicated across all terms, up to **5,000 unique products** per run.
- **Optional enrichment (Brazil & Indonesia)** — full product description, structured specifications, brand, category breadcrumb paths, and a complete per-variant breakdown (price + stock per SKU). Other markets return the rich base listing.
- **Clean, ready-to-use output** — camelCase fields, prices as numbers, timestamps in ISO 8601, image IDs already resolved to URLs. No account or login required.
- **Pay only for what you get** — priced per product returned, with no run limits and no subscription. New Apify accounts can start with their free platform credit.

### How to Scrape Shopee Product Data

#### Basic: keyword search, default 100 products

```json
{
    "searchTerms": ["iphone 15"],
    "region": "SG"
}
```

#### Multiple keywords, higher coverage

```json
{
    "searchTerms": ["running shoes", "wireless earbuds", "yoga mat"],
    "region": "MY",
    "maxItems": 1000,
    "sort": "best_selling"
}
```

Results are merged and de-duplicated across all terms — `maxItems` is the total for the whole run.

#### Keyword with filters and full enrichment (Brazil / Indonesia)

```json
{
    "searchTerms": ["mechanical keyboard"],
    "region": "BR",
    "maxItems": 300,
    "minRating": 4,
    "minSold": 100,
    "discountedOnly": true,
    "includeEnrichment": true
}
```

#### All products from one shop

```json
{
    "shopId": 1372532408,
    "region": "BR",
    "maxItems": 500,
    "sort": "price_low_to_high"
}
```

You can also paste Shopee **search** or **shop** page URLs into `startUrls`.

### Input Parameters

At least one of `searchTerms`, `startUrls`, or `shopId` is required.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchTerms` | string\[] | | Product keywords to search. Results across all terms are merged and de-duplicated, and the product total is shared across your terms, so a broad term does not use up the run before a narrower one is collected. |
| `startUrls` | array | | Shopee **search** or **shop** page URLs. Single-product URLs are not supported — use the Shopee Product Detail Scraper for those. |
| `shopId` | integer | | Scrape all products from one shop by its numeric shop ID. |
| `region` | string | `"SG"` | Shopee market: SG, ID, MY, PH, TH, TW, VN, or BR. Prices returned in the market's local currency. |
| `maxItems` | integer | `100` | Maximum unique products — **total across all search terms combined** (and per shop). Up to 5,000. |
| `sort` | string | `"relevance"` | Ranking: `relevance`, `newest`, `price_low_to_high`, `price_high_to_low`, or `best_selling`. `relevance` and the price sorts reach the furthest per search term; `best_selling` returns about 20 products per term and `newest` fewer than relevance, so for a large run use `relevance` or add more search terms. |
| `includeEnrichment` | boolean | `false` | Add full description, specifications, brand, category breadcrumb, and a per-variant (SKU) breakdown. **Available for Brazil and Indonesia**; billed at an additional per-product rate. |
| `priceMin` / `priceMax` | integer | | Keep only products within this price range, in the region's local currency. |
| `minRating` | integer | | Keep only products rated at or above this many stars (1–5). |
| `minSold` | integer | | Keep only products with at least this many total units sold. Shopee reports units sold only with full product details (Brazil and Indonesia, `includeEnrichment` on); without it no product has a figure to compare, so this filter keeps nothing and the run says so. |
| `condition` | string | `"any"` | Restrict to `new` or `used` items. |
| `discountedOnly` | boolean | `false` | Only products currently on sale. |
| `freeShippingOnly` | boolean | `false` | Only products eligible for free shipping. |
| `officialShopOnly` | boolean | `false` | Only Shopee Mall official brand stores. |
| `preferredSellerOnly` | boolean | `false` | Only Preferred / Star sellers. |
| `codAvailableOnly` | boolean | `false` | Only products that support Cash on Delivery. |
| `wholesaleOnly` | boolean | `false` | Only products offering wholesale (bulk) pricing. |
| `authenticOnly` | boolean | `false` | Only products flagged 100% original / authentic. |
| `withVideoOnly` | boolean | `false` | Only products that include a product video. |
| `shippedFrom` | string | | Restrict to items shipped from a location (city / state). |
| `brand` | string | | Restrict to a brand name. |
| `language` | string | | Optional locale code for result text, e.g. `en`, `zh-TW`. Defaults to the region's primary language. |

### What data you get from Shopee

One row per unique product — **142 structured fields**, source-masked into clean camelCase: prices as numbers in the market's major currency, timestamps in ISO 8601, image IDs already resolved to ready-to-use URLs. Every field is present in every record; the **22 enrichment-only fields** (per-variant `models`, `attributes` / specifications, `description`, the full `stock` breakdown, `categoryBreadcrumb`, `condition`, and more) populate when `includeEnrichment` is on for Brazil or Indonesia. A field is `null` either when the product genuinely doesn't have that feature (no flash sale, no voucher, guest-hidden seller id) or when Shopee does not report it for that row. **Item-level `stock` is the second case**: Shopee does not publish a stock count on a listing row in any market, so it is empty on a base record and every row carries `stockStatus` — `reported` when the row has a count, `not_reported` when there was none to collect. Empty means not reported, not out of stock; a genuine `0` is a reported count.

Real record, a Brazil product with full product details enabled, so the units-sold and stock fields are populated (deeply-nested arrays abridged with `...+N more` for display; nothing is dropped at the top level):

```json
{
  "itemId": 22293490123,
  "shopId": 1372532408,
  "sellerId": null,
  "modelId": 219171817314,
  "itemType": 0,
  "url": "https://shopee.com.br/product/1372532408/22293490123",
  "name": "Celular IPhone 13 / 13 Pro/ 13 Pro Max 128gb Com",
  "nameTranslated": null,
  "image": "https://down-br.img.susercontent.com/file/br-11134207-820ln-mqa8yh9yvbwid9",
  "images": [
    "https://down-br.img.susercontent.com/file/br-11134207-820ln-mqa8yh9yvbwid9",
    "https://down-sg.img.susercontent.com/file/sg-11134201-7rdyx-m1hurvdjz63i34",
    "https://down-sg.img.susercontent.com/file/sg-11134201-7rdvu-m1hurvvb96la0c",
    "https://down-sg.img.susercontent.com/file/sg-11134201-7rdvx-m1hurxdp1llz40",
    "...+5 more"
  ],
  "longImages": [],
  "transparentBackgroundImage": "https://down-br.img.susercontent.com/file/br-11134207-820ln-mqa8yh9yvbwid9",
  "sizeChartImage": null,
  "sizeChartInfo": null,
  "videos": [
    {
      "id": "br-11110105-6kfko-m6fv71kcdug776",
      "durationSec": 34,
      "thumbnailUrl": "https://down-br.img.susercontent.com/file/br-11110105-6kfko-m6fv71kcdug776_cover",
      "url": "https://mms.vod.susercontent.com/api/v4/11110105/mms/br-11110105-6kfko-m6fv71kcdug776.default.mp4",
      "formats": [
        { "definition": "V720P", "url": "https://down-aka-br.vod.susercontent.com/.../br-11110105-6kfko-m6fv71kcdug776.mp4", "width": 1280, "height": 720 }
      ]
    }
  ],
  "highlightVideo": null,
  "lowBandwidthVideo": null,
  "clipInfo": null,
  "previewInfo": null,
  "makeupTryOn": null,
  "hasVideo": false,
  "price": 2279.0,
  "priceBeforeDiscount": 4500.0,
  "priceMin": 2279.0,
  "priceMax": 3699.0,
  "priceMinBeforeDiscount": 4500.0,
  "priceMaxBeforeDiscount": 6000.0,
  "lowestPastPrice": null,
  "discountPercent": 49,
  "currency": "BRL",
  "exclusivePriceInfo": null,
  "installment": null,
  "cardDisplayPrice": 2614.0,
  "promoPrice": 2950.0,
  "strikethroughPrice": 5000.0,
  "pixDiscount": { "discountId": 470693858988179, "snapshotId": 325103934198074, "discountAmount": 236.0 },
  "pixPrice": 2714.0,
  "cardPromotion": { "promotionType": 301, "promotionId": 482647600222671, "discount": 48, "modelId": 219171817314, "recommendedPlatformVoucherPromotionId": 1484194111172608, "originalPrice": 5000.0 },
  "stock": 903,
  "stockStatus": "reported",
  "normalStock": 994,
  "otherStock": 98,
  "discountStock": 903,
  "reservedPromotionStock": 7,
  "hasReservedPromotionStock": true,
  "hasShopeeStock": null,
  "sold": 201,
  "historicalSold": 2899,
  "globalSold": 2899,
  "soldMonthly": 0,
  "rating": 4.82367601246106,
  "ratingCount": 1605,
  "ratingBreakdown": [1605, 38, 11, 19, "...+2 more"],
  "commentCount": 1605,
  "likedCount": 46077,
  "viewCount": null,
  "shopName": "EliteTech666",
  "shopRating": null,
  "shopLocation": "São Paulo",
  "shopLocationTranslated": null,
  "isOfficialShop": false,
  "isVerifiedSeller": true,
  "isPreferredPlusSeller": false,
  "isServiceByShopee": false,
  "isOutletShop": false,
  "hasLowFulfillmentRate": false,
  "categoryId": 100013,
  "categoryBreadcrumb": [
    { "id": 100013, "name": "Celulares e Dispositivos" },
    { "id": 100073, "name": "Celulares" }
  ],
  "feCategoryBreadcrumb": [
    { "id": 11059988, "name": "Celulares e Dispositivos" },
    { "id": 11060166, "name": "Celulares" }
  ],
  "brand": "Apple",
  "brandId": 1189223,
  "condition": "new",
  "itemStatus": "normal",
  "createdAt": "2024-10-18T02:26:34+00:00",
  "isPreOrder": false,
  "estimatedShippingDays": 2,
  "tierVariations": [
    {
      "name": "Cor",
      "options": ["13 azul 128GB", "13 azul 256GB", "13 preto 128GB", "13 preto 256GB", "...+20 more"],
      "images": ["https://down-br.img.susercontent.com/file/br-11134207-7r98o-m6a0qc3e1gn91a", "...+23 more"],
      "type": 0,
      "summedStocks": [1, 46, 2, 41, "...+20 more"]
    }
  ],
  "variationImageOrder": [0, 1, 2, 3, "...+20 more"],
  "models": [
    {
      "modelId": 189167696869,
      "name": "13 PRO MAX prteo256GB",
      "price": 3699.0,
      "priceBeforeDiscount": 6000.0,
      "stock": 44,
      "normalStock": 44,
      "reservedPromotionStock": 0,
      "hasReservedPromotionStock": false,
      "promotionId": 482647600222671,
      "tierIndex": [19],
      "isPreOrder": false,
      "estimatedShippingDays": 2,
      "stockByLocation": [
        { "stockBreakdownByLocation": [{ "locationId": "BRZ", "availableStock": 44, "fulfilmentType": 2 }], "promotionType": 301 }
      ]
    },
    "...+23 more"
  ],
  "attributes": [
    { "name": "Nome do Modelo", "value": "A2643", "id": 101040 },
    { "name": "Nr. de Homologação", "value": "112432101993", "id": 101197 },
    "...+1 more"
  ],
  "description": "ATENÇÃO: Por questões logísticas, NÃO estamos enviando para os seguintes estados: Acre (AC), Bahia (BA), Amapá (AP), Rio Grande do Sul (RS) …",
  "richDescription": null,
  "minPurchaseLimit": null,
  "maxPurchaseLimit": null,
  "canUseWholesale": false,
  "canUseBundleDeal": false,
  "wholesaleTiers": null,
  "isOnFlashSale": true,
  "flashSale": {
    "flashSaleType": 0,
    "promotionId": 488524763836565,
    "startTime": "2026-08-18T03:00:00+00:00",
    "endTime": "2026-08-19T03:00:00+00:00",
    "promoImages": ["https://down-br.img.susercontent.com/file/br-11134207-820ln-mqa8yh9yvbwid9"],
    "price": 2279.0,
    "flashSaleStock": 7,
    "stock": 7,
    "priceBeforeDiscount": 4500.0
  },
  "upcomingFlashSale": null,
  "hasLowestPriceGuarantee": false,
  "isLowestPrice": false,
  "platformVoucher": {
    "promotionId": 1484194111172608,
    "voucherCode": "1427618094",
    "voucherDiscount": 100.0,
    "timeInfo": { "startTime": "2026-08-10T18:00:00+00:00", "endTime": "2026-09-01T02:59:59+00:00" },
    "minSpend": 1000.0,
    "percentageWithDecimal": 5.0
  },
  "shopVoucher": null,
  "adsVoucher": null,
  "voucherInfo": null,
  "shopVouchers": null,
  "bundleDeal": null,
  "bundleDealId": null,
  "groupBuy": null,
  "isGroupBuyItem": null,
  "hasGroupBuyStock": null,
  "addOnDeal": null,
  "coinInfo": { "spendCashUnit": 1000 },
  "welcomePackage": null,
  "welcomePackageType": null,
  "welcomePackageEligible": null,
  "deepDiscount": null,
  "isFreeShipping": false,
  "freeShippingInfo": null,
  "deliveryInfo": null,
  "estimatedDeliveryTime": null,
  "canUseCod": false,
  "codFlag": 0,
  "ccInstallmentEligible": true,
  "nonCcInstallmentEligible": false,
  "creditInsurance": null,
  "invoiceOption": null,
  "taxCode": null,
  "isCrossBorder": false,
  "isMart": false,
  "isShopeeChoice": false,
  "isAdult": false,
  "isSexual": false,
  "adultTypes": null,
  "adultAgeThreshold": null,
  "isAlcohol": false,
  "isPrescriptionItem": false,
  "isInfantMilkFormula": false,
  "needKyc": false,
  "ageGate": null,
  "complaintPolicy": null,
  "isPartialFulfilled": false,
  "compatibleWithUserVehicle": false,
  "packSize": null,
  "presaleInfo": null,
  "isLiveStreamingPrice": null,
  "liveStreamingInfo": null,
  "hasPost": false,
  "hasSizeRecommendation": false,
  "enriched": true,
  "scrapedAt": "2026-08-18T09:15:24.231651+00:00"
}
```

### Advanced Usage

Ready-made configurations for price monitoring, dropship sourcing, MAP enforcement, and cross-market research.

#### Price monitoring: filter by rating and sales volume

```json
{
    "searchTerms": ["sony wh-1000xm5"],
    "region": "SG",
    "maxItems": 100,
    "sort": "price_low_to_high",
    "minRating": 4,
    "minSold": 50
}
```

#### Dropship sourcing: official stores with full specs (Brazil)

```json
{
    "searchTerms": ["yoga mat", "resistance bands"],
    "region": "BR",
    "maxItems": 500,
    "sort": "best_selling",
    "officialShopOnly": true,
    "includeEnrichment": true
}
```

#### MAP enforcement: brand catalog with full specs (Indonesia)

```json
{
    "searchTerms": ["samsung galaxy s24"],
    "region": "ID",
    "maxItems": 1000,
    "sort": "relevance",
    "includeEnrichment": true
}
```

#### On-sale hunting: discounted, free-shipping items in a price band

```json
{
    "searchTerms": ["air fryer"],
    "region": "TH",
    "maxItems": 300,
    "discountedOnly": true,
    "freeShippingOnly": true,
    "priceMin": 500,
    "priceMax": 3000
}
```

#### Cross-market comparison: same keyword, different regions

Run the actor once per `region` with the same keyword to compare prices, ratings and promotions across any of the 8 supported markets (stock needs full product details, so Brazil and Indonesia, or the Shopee Product Detail Scraper).

### Integrations and scheduling

Run the Shopee products scraper on a schedule in Apify Console, daily for price monitoring (add full product details in Brazil or Indonesia to track stock as well), weekly for catalogue refreshes. Each run can call a webhook when it finishes, so n8n, Make and Zapier flows pick up new rows without polling. The Apify API and the Apify MCP server take the same input, for scripts and AI agents.

### Pricing: Pay Per Event (PPE)

**$4.99 per 1,000 products** (base price; less on higher Apify plans). Enable enrichment for $2.99 per 1,000 additional enriched products.

<table>
<thead>
<tr>
<th style="color:#1C1917;text-align:left;padding:8px 12px;background:#F0FDF4;border:1px solid #E7E5E4">Event</th>
<th style="color:#1C1917;text-align:left;padding:8px 12px;background:#F0FDF4;border:1px solid #E7E5E4">Price per 1,000</th>
<th style="color:#1C1917;text-align:left;padding:8px 12px;background:#F0FDF4;border:1px solid #E7E5E4">Charged when</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:8px 12px;border:1px solid #E7E5E4"><code>result</code></td>
<td style="padding:8px 12px;border:1px solid #E7E5E4"><span style="color:#4C945E;font-weight:700">$4.99</span></td>
<td style="padding:8px 12px;border:1px solid #E7E5E4">Once per delivered product, base record</td>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #E7E5E4"><code>enrichment</code></td>
<td style="padding:8px 12px;border:1px solid #E7E5E4"><span style="color:#E67E22;font-weight:700">$2.99</span> add-on</td>
<td style="padding:8px 12px;border:1px solid #E7E5E4">Only when enrichment fields are successfully returned</td>
</tr>
</tbody>
</table>

**Trying it out:** there is no run limit. New Apify accounts come with free platform credit, which covers roughly 1,000 products here.

### FAQ

**What is Shopee?**
Shopee is a leading Southeast Asian and Brazilian e-commerce marketplace operating in Singapore, Indonesia, Malaysia, the Philippines, Thailand, Taiwan, Vietnam, and Brazil. It offers consumer products across electronics, fashion, home goods, and groceries from both individual sellers and official brand stores. This actor covers keyword and shop-based product discovery across all 8 Shopee markets.

**How fast is it?**
Very. A typical run returns up to ~1,000 fully-enriched products in about 2 minutes — a fraction of the time other Shopee scrapers take.

**How many products can I extract?**
The default is 100. Raise `maxItems` up to 5,000 — that's the **total** across all your search terms combined (de-duplicated). The total is shared across your terms, so each term contributes its share and a term with fewer products leaves the rest to the others. A single search term returns up to a few hundred products, so add more terms (or a shop) for larger runs.

**What is the enrichment add-on and when should I use it?**
The base record carries the commercial fields Shopee puts on a listing row: price (every angle), discount, sold counts, ratings + per-star breakdown, seller badges, flash sales, vouchers, Shopee Coins, and variant axes. Enable `includeEnrichment` when you also need the full product **description**, structured **specifications**, **brand**, **category breadcrumb** path, the **units sold**, the item-level **stock** count, and the complete **per-variant (SKU) breakdown** (price + stock per option). Enrichment is billed at $2.99 per 1,000 enriched products on top of the base price.

**Which markets support enrichment?**
Full enrichment (description, specifications, per-variant breakdown) is available for **Brazil and Indonesia**. In the other markets that detail is login-gated by Shopee, so those runs return the rich base listing (still 100+ populated fields for typical products). If you enable enrichment for an unsupported market, the run still succeeds with base records and notes it.

**Does every row have a stock count?**
No, and the row tells you so. Shopee does not publish an item-level stock count on a listing row in any market, so on a base record `stock` is empty and `stockStatus` reads `not_reported` — empty means not reported, **not out of stock** (a genuine `0` is a reported count, and reads `reported`). Units sold (`sold`, `historicalSold`, `globalSold`, `soldMonthly`) is the same case: Shopee does not report it on a listing row in any market, so those fields are empty on a base record, which means not reported, not zero. Sorting by best selling still ranks by sales, because Shopee applies that ranking itself. To get the real count, enable `includeEnrichment` for **Brazil or Indonesia**, or pass a row's `url` to the [Shopee Product Detail Scraper](https://apify.com/zen-studio/shopee-product-detail-scraper), which returns the item-level and per-variant count in every market except Vietnam.

**Are per-variant stock counts exact?**
Yes, with enrichment. The `models` array gives each SKU's price, stock, and even per-warehouse stock breakdown. The total item-level `stock` is also included when enriched.

**How do I target a specific shop?**
Set `shopId` to the numeric shop ID, or paste a shop URL (e.g. `shopee.sg/shop/123456`) into `startUrls`. Filters and sort from the input fields apply uniformly.

**Can I scrape by category?**
Category browsing isn't supported — use keyword search instead, which covers the same products with far more control (filters, sort, multi-keyword). For a specific product you already have the URL for, use the [Shopee Product Detail Scraper](https://apify.com/zen-studio/shopee-product-detail-scraper); for full review history, the [Shopee Product Reviews Scraper](https://apify.com/zen-studio/shopee-product-reviews-scraper).

**How fresh is the data?**
Data is collected live at run time. Each run reflects the current state of Shopee at the moment you start it.

**Do I need a Shopee account or cookies?**
No. Provide keywords, a shop ID, or URLs and hit Start — no account, cookie export, or login required.

**Which sort options are available?**
Relevance (default), Newest, Price: low to high, Price: high to low, and Best selling. Price sorts are ordered by the final output price. The sorts do not all reach the same depth: Relevance and the price sorts go furthest per search term, Best selling returns about 20 products per term, and Newest sits in between. For a large run, use Relevance or add more search terms — each term contributes its own products.

**How do I export the data?**
Open the run's Storage tab and download JSON, CSV, Excel, or XML. JSON preserves all nested fields (variant models, breadcrumb arrays, vouchers, flash sales). Dataset items are also available programmatically.

**What happens if a search returns fewer products than `maxItems`?**
**Latest update (2026-10-05):** every search term now gets its share of the product total, so a broad first keyword no longer uses up the run before the later keywords are collected, and a term Shopee has no products for is named in the results. If one of your search terms has no products at all in that market, that term is named too, so an empty term is never hidden inside the combined total.

**Is it legal to scrape Shopee product data?**
This actor collects publicly visible product information. Users are responsible for complying with Shopee's Terms of Service and applicable data protection regulations, including GDPR, CCPA, and LGPD (Brazil). Product listings are not personal data.

**Can I try it before paying?**
Yes. There is no run limit or trial cap. New Apify accounts come with free platform credit, which covers roughly 1,000 products here, and every feature including enrichment is available from the first run.

### More Zen Studio scrapers

- [Shopee Product Detail Scraper](https://apify.com/zen-studio/shopee-product-detail-scraper)
- [Shopee Product Reviews Scraper](https://apify.com/zen-studio/shopee-product-reviews-scraper)
- [Shopee Live Scraper](https://apify.com/zen-studio/shopee-live-scraper)
- [TikTok Shop Review Scraper](https://apify.com/zen-studio/tiktok-shop-review-scraper)
- [Lazada Product Scraper](https://apify.com/zen-studio/lazada-product-scraper)

Also from the same studio (name, then `account/slug` for the URL `https://apify.com/account/slug`):

- Lazada Reviews Scraper (`zen-studio/lazada-reviews-scraper`)
- Lazada Store Scraper (`zen-studio/lazada-store-scraper`)
- Naver Search Scraper (`zen-studio/naver-search-scraper`)
- AliExpress Product Scraper (`zen-studio/aliexpress-scraper`)
- Taobao Search Scraper (`zen-studio/taobao-search-scraper`)
- Taobao Product Detail Scraper (`zen-studio/taobao-detail-scraper`)
- Taobao Seller Products Scraper (`zen-studio/taobao-seller-products-scraper`)
- JD.com Search Scraper (`zen-studio/jd-com-search-scraper`)
- 1688 Wholesale Scraper (`zen-studio/1688-wholesale-scraper`)
- Alibaba Scraper (`zen-studio/alibaba-scraper`)
- 1688 Reviews Scraper (`zen-studio/1688-reviews-scraper`)
- Weidian Scraper (`zen-studio/weidian-scraper`)
- Goofish (Xianyu) Search Scraper (`zen-studio/goofish-xianyu-search-scraper`)
- Goofish (Xianyu) Seller Scraper (`zen-studio/goofish-xianyu-seller-scraper`)
- Goofish (Xianyu) Item Detail Scraper (`zen-studio/goofish-xianyu-item-detail-scraper`)
- Goofish (Xianyu) Item Comments & Q\&A Scraper (`zen-studio/goofish-xianyu-item-comments-scraper`)
- Goofish (Xianyu) Reverse Image Search Scraper (`zen-studio/goofish-xianyu-visual-search-scraper`)
- Coupang Review Scraper (`zen-studio/coupang-review-scraper`)
- Coupang Search Scraper (`zen-studio/coupang-search-scraper`)
- Coupang Product Detail Scraper (`zen-studio/coupang-detail-scraper`)
- Naver Shopping Scraper (`zen-studio/naver-shopping-scraper`)
- Naver Shopping Product Detail Scraper (`zen-studio/naver-product-detail-scraper`)
- Naver Shopping Review Scraper (`zen-studio/naver-review-scraper`)
- Douban Scraper (`zen-studio/douban-scraper`)
- Douban Reviews Scraper (`zen-studio/douban-reviews-scraper`)
- Douban Group Scraper (`zen-studio/douban-group-scraper`)
- Zhihu Scraper (`zen-studio/zhihu-scraper`)
- Weibo Search Scraper (`zen-studio/weibo-search-scraper`)
- Weibo Comments Scraper (`zen-studio/weibo-comments-scraper`)
- Kwai Search Scraper (`zen-studio/kwai-search-scraper`)
- Kwai Comments Scraper (`zen-studio/kwai-comments-scraper`)
- Kuaishou Scraper (`zen-studio/kuaishou-scraper`)
- Douyin Search Scraper (`zen-studio/douyin-search-scraper`)
- Douyin Profile Scraper (`zen-studio/douyin-profile-scraper`)
- Douyin Video Scraper (`zen-studio/douyin-video-scraper`)
- Douyin Comments Scraper (`zen-studio/douyin-comments-scraper`)
- Douyin Transcripts Scraper (`zen-studio/douyin-transcripts-scraper`)
- Douyin Creator Rankings Scraper (`zen-studio/douyin-xingtu-rankings-scraper`)
- Douyin Live Recorder (`zen-studio/douyin-live-recorder`)
- Douyin Hot Search Scraper (`zen-studio/douyin-hot-search-scraper`)
- Douyin Product Search Scraper (`zen-studio/douyin-product-search-scraper`)
- Douyin User Search Scraper (`zen-studio/douyin-user-search-scraper`)
- RedNote User Profile Scraper (`zen-studio/rednote-user-profile-scraper`)
- RedNote Search Scraper (`zen-studio/rednote-search-scraper`)
- RedNote Comments Scraper (`zen-studio/rednote-comments-scraper`)
- RedNote Product Search Scraper (`zen-studio/rednote-product-search-scraper`)
- RedNote Note Detail Scraper (`zen-studio/rednote-note-detail-scraper`)
- RedNote Product Reviews Scraper (`zen-studio/rednote-product-reviews-scraper`)
- RedNote Live Recorder (`zen-studio/rednote-live-recorder`)
- Xigua Video Search Scraper (`zen-studio/xigua-video-search-scraper`)
- Xigua Video Detail Scraper (`zen-studio/xigua-video-detail-scraper`)
- Bilibili Video Scraper (`zen-studio/bilibili-video-scraper`)
- Bilibili Danmaku Scraper (`zen-studio/bilibili-danmaku-scraper`)
- Naver Blog & Cafe Scraper (`zen-studio/naver-blog-cafe-scraper`)
- Naver Real Estate Scraper (`zen-studio/naver-land-scraper`)
- Anjuke For-Sale Listings Scraper (`zen-studio/anjuke-real-estate-scraper`)
- Anjuke New-Home Scraper (`zen-studio/anjuke-new-home-scraper`)
- Anjuke Rental Listings Scraper (`zen-studio/anjuke-rent-scraper`)
- Anjuke Listing Detail Scraper (`zen-studio/anjuke-sale-detail-scraper`)
- 58.com Real Estate Scraper (`zen-studio/58-real-estate-scraper`)
- Autohome (Che168) Used-Car Scraper (`zen-studio/che168-car-scraper`)

Full directory: [Zen Studio on Apify](https://apify.com/zen-studio)

### Support

- **Bugs**: Issues tab
- **Features**: Issues tab

### Legal Compliance

Extracts publicly available product data. Users must comply with Shopee's Terms of Service and applicable data protection regulations (GDPR, CCPA, LGPD for Brazil).

***

*Shopee product data at scale: prices, discount, ratings, seller details, and optional full product content with stock across all 8 Shopee markets.*

# Actor input Schema

## `searchTerms` (type: `array`):

Product keywords to search. All terms are searched together and de-duplicated toward one combined <b>Max products</b> total, shared between your terms so each one contributes — add more terms to collect more. A term with no products in that market is named in the results.<br><br>Example: <code>iphone 15</code>, <code>running shoes</code>

## `startUrls` (type: `array`):

Paste Shopee <b>search</b> or <b>shop</b> page URLs. Sorting and filtering are controlled by the fields below, not by parameters inside a pasted URL. Single-product URLs are not supported here — use the Shopee Product Detail Scraper for those.

## `shopId` (type: `integer`):

Scrape all products from one shop by its numeric shop ID.

## `region` (type: `string`):

Which Shopee market to scrape. Prices are returned in the market's local currency.

## `maxItems` (type: `integer`):

Maximum unique products to collect — <b>total across all your search terms combined</b> (de-duplicated), shared between them, and per shop. A single search term returns up to a few hundred products, so add more terms for larger runs.

## `sort` (type: `string`):

How to rank results within each context. <b>Relevance</b> and the price sorts reach the most products per search term; <b>Best selling</b> returns about 20 per term and <b>Newest</b> fewer than Relevance, so for a large run pick Relevance or add more search terms. Best selling is ranked by sales by Shopee itself; the units-sold numbers behind it are only reported with full product details.

## `includeEnrichment` (type: `boolean`):

Adds full product description, specifications, brand, category breadcrumb path, units sold, the item-level stock count, and a per-variant breakdown (price + stock per SKU). Products with enrichment are billed at an additional per-product rate.<br><br>Without this, base records still include price, rating, vouchers, and every commercial field Shopee puts on a listing row. Units sold and an item-level stock count are not among them: Shopee reports neither on a listing row in any market, so those fields stay empty, which means not reported, not zero, and <code>stockStatus</code> says so on each row.

## `priceMin` (type: `integer`):

Keep only products priced at or above this value, in the region's local currency (e.g. SGD, IDR, BRL).

## `priceMax` (type: `integer`):

Keep only products priced at or below this value, in the region's local currency.

## `minRating` (type: `integer`):

Keep only products rated at or above this many stars (1–5).

## `minSold` (type: `integer`):

Keep only products with at least this many total units sold. Shopee reports units sold only with full product details (Brazil and Indonesia, with the enrichment add-on on); without it no product carries a figure to compare, so this filter keeps nothing and the run tells you so.

## `condition` (type: `string`):

Restrict to new or used items.

## `discountedOnly` (type: `boolean`):

Only products that currently have a discount.

## `freeShippingOnly` (type: `boolean`):

Only products eligible for free shipping.

## `officialShopOnly` (type: `boolean`):

Only products from Shopee Mall official brand stores.

## `preferredSellerOnly` (type: `boolean`):

Only products from Preferred / Star sellers.

## `codAvailableOnly` (type: `boolean`):

Only products that support Cash on Delivery.

## `wholesaleOnly` (type: `boolean`):

Only products offering wholesale (bulk) pricing.

## `authenticOnly` (type: `boolean`):

Only products flagged 100% original / authentic.

## `withVideoOnly` (type: `boolean`):

Only products that include a product video.

## `shippedFrom` (type: `string`):

Restrict to items shipped from a location (e.g. a city or state as shown in Shopee's "Shipped From" filter). Leave blank for all locations.

## `brand` (type: `string`):

Restrict to a brand name (as shown in Shopee's brand filter for the category). Leave blank for all brands.

## `language` (type: `string`):

Optional locale code for result text (e.g. <code>en</code>, <code>zh-TW</code>). Defaults to the region's primary language.

## `feedback` (type: `string`):

For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns.

## Actor input object example

```json
{
  "searchTerms": [
    "iphone 15"
  ],
  "region": "SG",
  "maxItems": 100,
  "sort": "relevance",
  "includeEnrichment": false,
  "condition": "any",
  "discountedOnly": false,
  "freeShippingOnly": false,
  "officialShopOnly": false,
  "preferredSellerOnly": false,
  "codAvailableOnly": false,
  "wholesaleOnly": false,
  "authenticOnly": false,
  "withVideoOnly": false
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset of products — one row per unique Shopee product, de-duplicated across all queries in the run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "iphone 15"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/shopee-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "searchTerms": ["iphone 15"] }

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/shopee-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "iphone 15"
  ]
}' |
apify call zen-studio/shopee-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/shopee-product-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/FHLdQDoADvB14bAyA/builds/ATvFH8ib7ArVNoKq0/openapi.json
