Shopee Product Scraper
Pricing
from $0.25 / 1,000 products
Shopee Product Scraper
Scrape Shopee products in 8 markets (SG, ID, MY, PH, TH, VN, TW, BR) by keyword or URL: price, discount, rating, seller location, labels. Optional full product details and seller profile. Export to JSON, CSV or Excel.
Pricing
from $0.25 / 1,000 products
Rating
0.0
(0)
Developer
Nice Dev
Maintained by CommunityActor stats
0
Bookmarked
47
Total users
26
Monthly active users
an hour ago
Last modified
Categories
Features
Share
🛒 What is Shopee Product Scraper?
Shopee Product Scraper extracts products from Shopee in 8 markets (Singapore, Malaysia, Philippines, Thailand, Vietnam, Indonesia, Taiwan and Brazil): name, price and photo of every product of a keyword search, a category or a shop, plus the discount, rating, seller location and promotion labels that keyword searches and shop pages show, and the units sold when Shopee shows them. Paste a product link to read that product's page. Optional extras: every variant (colour, size), description, specifications, brand, shop vouchers, and the seller's shop rating and followers. It works as a Shopee API alternative: run it on a schedule to track prices, call it from your code, or plug it into Make, Zapier or n8n.
Pick a market, type a keyword (iphone 15) or paste any Shopee link, click Start, and download the products in JSON, CSV or Excel. No login, nothing to set up. Use it to track prices and discounts, research products and sellers, or watch your competitors on Shopee.
📋 What data can you extract from Shopee?
One item per product, 76 fields:
| Category | What you get |
|---|---|
| 🏷️ Product | name, link, Shopee product, item and shop numbers, market, main photo — Google Pixel 10a [128GB/256GB] |
| 💰 Price and discount | price (and the highest price when Shopee shows a price range), price before discount, discount in percent and in money, currency, Brazil's Pix price — 778.9 SGD, -13% |
| ⭐ Rating and sales | rating shown in the search results, and whether it is the product's rating or the shop's; units sold when the card shows them — 4.9 (product), 3 Sold |
| 📍 Location and labels | where the seller ships from, promotion labels, the kind of seller the badge says (Mall, Preferred…), shipped by Shopee, voucher icon, campaign frame over the photo — SG, Selling Fast, mall |
| 🔎 Where it was found | the keyword, the search you asked for, the rank on its results page |
| 📦 Variants (option) | variation axes and every variant (colour, size…) with its id and pre-order flag — Lavender, 256GB |
| 📄 Product page (option) | full description, specifications, brand, category path, all photos and videos, listing date, condition, minimum order, wholesale prices |
| 🚚 Shipping and offers (option) | days to ship, Shopee Mall shop, fulfilled by Shopee, shop vouchers (code, discount, minimum spend, share already claimed, end date), flash sale end, guarantees — 100% Authentic |
| 🏪 Seller profile (option) | shop name, shop link, logo, shop rating, number of shop ratings, followers, the product the shop puts forward — Google Authorised Retailer, 4.9, 20,400 followers |
Every field, with an example, is listed in the Output section below.
The rows marked (option) are filled when you tick Full product details (variants, product page, shipping and offers) or Seller profile. Both are paid options, off by default; without them those columns are null. Everything else comes with the search itself.
✅ Why use Shopee Product Scraper?
- 🌏 8 Shopee markets in one Actor: Singapore, Malaysia, Philippines, Thailand, Vietnam, Indonesia, Taiwan and Brazil, each price in the market's own currency.
- 📈 More than the first 40 products: a Shopee search shows about 40 products and no real page 2. Deep search reads the same search again in every sort order and in narrower and narrower price bands, for hundreds of products per keyword (keyword searches, categories and shops: a pasted category link and a shop link are read whole).
- ⭐ Product rating or shop rating? In some markets the search results show the shop's rating instead of the product's. The
ratingTypecolumn tells you which one you got, and Min rating only keeps real product ratings. - 📦 Variants and offers (option): every colour and size, plus shop vouchers, flash sale end and guarantees.
- 🏪 Seller profile (option): shop rating, number of ratings, followers, logo and featured product, read once per seller and copied to all its products.
- 🧩 Nothing missed, nothing twice: a product found by several searches or sort orders is saved — and charged — once.
- 🔔 Monitoring built in: tick Only new products, schedule the Actor, and each run returns (and charges) only what it has never delivered before.
- 🔌 API, scheduling, monitoring, integrations (Make, Zapier, n8n, Google Sheets…), proxy rotation and JSON/CSV/Excel export via the Apify platform.
🚀 How to scrape Shopee
- Create a free Apify account.
- Open Shopee Product Scraper, choose the Market and type a Search keyword (e.g.
iphone 15). - Or paste Shopee links into Start URLs: search results (the sort, price range, location and Shopee Mall filters set on the site are kept), category pages (read whole, with your sort and price range), shops or single products, from any of the 8 markets. A shop page shows no price before discount: that column is then
null(with Full product details, the seller location comes from the product page). - Set Max products (100 by default, 0 = no limit) — and Max products per search when you run several searches — then click Start.
- Download the dataset in JSON, CSV, Excel or via API.
💰 How much does it cost to scrape Shopee?
This Actor uses pay per event pricing: you pay for each product returned, plus a small fee per run start. The options are off by default, charged apart and only for what they deliver. See the Pricing tab for every amount.
- Product: each product saved from a search, category or shop page.
- Product with details (Full product details): each product saved after its product page was read, charged instead of the product price, not on top of it. The filters Condition, Brand, Products with a video only and Wholesale offers only need the product page, so they turn the details on. A product link pasted in Start URLs is always read on its page and is charged as a product with details.
- Seller profile (Seller profile): once per seller found in the run, on the first product of that seller; the seller's other products carry the same profile at no extra charge. A shop that gives no profile is not charged.
- Filter check and Detail filter check: the filters Shopee does not offer are applied by the Actor on every product it reads (Min rating, Discounted products only, Min discount, Seller types, Fulfilled by Shopee only, Products with a voucher only, Exclude seller locations, Must contain one of, Exclude keywords, and the price range checked again on each product). A product that passes costs its normal price; a product a filter drops costs a small filter fee instead, so filtering never costs more than taking everything. Detail filter check is the fee of a product dropped after its page was read (Condition, Brand, video, wholesale). With Only new products, a product your filters drop is checked (and the fee charged) once; the next runs with the same filters skip it for free. Change a filter, or tick Reset the memory, to check them again. Official shops only and the seller location are Shopee's own filters: they cost nothing extra. Max products per shop costs nothing either: a product above the cap is neither saved nor charged.
Deep search does not change the price per product. Platform usage (compute, proxy) is included in the price.
⚙️ Input
{"country": "SG","query": "iphone 15","maxItems": 200}
Several searches in Brazil, a cap per search, filters, and only the products not delivered before:
{"country": "BR","searchQueries": ["fone bluetooth", "smartwatch"],"location": "São Paulo","maxItems": 500,"maxItemsPerQuery": 100,"minRating": 4.5,"discountedOnly": true,"onlyNew": true,"stateKey": "br-audio"}
Two categories of Shopee, read on three markets, Preferred sellers only (6 searches, no keyword needed):
{"countries": ["SG", "ID", "BR"],"categoryIds": ["11044440", "11060166"],"preferredSellerOnly": true,"maxItems": 500}
All the products of a shop (by its number, newest first), then one word searched inside the same shop:
{"country": "ID","shopIds": ["241308147"],"sort": "newest","maxItems": 1000}
{"country": "ID","query": "ipad","shopIds": ["241308147"]}
Or with your own links, with both options:
{"startUrls": [{ "url": "https://shopee.sg/search?keyword=iphone&minPrice=500" },{ "url": "https://shopee.co.id/Laptop-cat.11044364.11044440" },{ "url": "https://shopee.sg/shop/454919755" },{ "url": "https://shopee.sg/Google-Pixel-10a-128GB-256GB--i.454919755.44228667447" }],"extractDetails": true,"includeShopProfile": true,"maxItems": 300}
| Field | Notes |
|---|---|
country | Market searched by the keywords: SG (default), MY, PH, TH, VN, ID, TW, BR. Start URLs carry their own market. |
query, searchQueries | Product search, exactly as typed on Shopee (iphone 15); searchQueries adds more keywords (one search each). Ignored when startUrls is set. |
location, locations | Seller location, written as Shopee's location filter lists it for that market (Singapore or Mainland China in Singapore, Jakarta Barat in Indonesia, São Paulo in Brazil) — not the location column of the results — sent to Shopee's location filter; locations adds more places. Every keyword is searched in every location (max 500 searches per run). |
startUrls | Search results (https://shopee.sg/search?keyword=iphone&minPrice=500), category pages (https://shopee.co.id/Laptop-cat.11044364.11044440), shops (https://shopee.sg/shop/454919755) or single products (https://shopee.sg/product/454919755/44228667447), from any of the 8 markets. Max 1,000 URLs. |
maxItems | Stop after this many products for the whole run, after deduplication and filters (0 = unlimited). |
maxItemsPerQuery | Cap for EACH search (keyword × location, or start URL). 0 = no per-search cap. |
sort, deepSearch | Shopee sort order: relevance (default), best_selling, newest, price_low_to_high, price_high_to_low. It orders the page of about 40 products Shopee gives for the search, picked among its top results: not a ranking of all of Shopee (price_low_to_high with maxItems 15 gives the 15 cheapest of that page, not the 15 cheapest on Shopee). deepSearch (on by default) also reads the other orders and narrower price bands to reach more products, only when your cap asks for more than the first page gives (or with no cap); the sort chosen here is read first. Keyword searches only: a start URL keeps its own filters. |
minPrice, maxPrice | Price range in whole units of the market's currency (500), sent to Shopee and checked on each product. Also added to a pasted search URL that has no price bound of its own. |
condition | any (default), new or used. Read on the product page: turns on the details. |
officialShopOnly | Only Shopee Mall / official brand stores (Shopee's own filter). Keyword searches only: a start URL keeps its own filters. |
preferredSellerOnly | Only the Preferred sellers (Star sellers in Indonesia, Indicado in Brazil), by Shopee's own filter, applied before the products are read: no filter fee. Keyword and category searches only: a start URL keeps its own filters. |
shopIds | Shop numbers (the shopId column of the results, or the number in shopee.sg/shop/454919755): one search per shop. With a keyword (query, searchQueries) the word is searched INSIDE each shop; with none you get the shop's products (a run with only shops is valid). Numbers only: for a shop name, paste the shop link in startUrls. The sort and the price range apply inside the shop; categoryIds, brandIds, location, officialShopOnly and preferredSellerOnly are not available there and are refused with a message. Ignored when startUrls is set. |
categoryIds | Read Shopee categories by their number, with or without a keyword: one search per number. The number is the last group of a category link (shopee.sg/Laptops-cat.11044364.11044440 gives 11044440) or the facet= value of a search link. Shopee's own filter: no filter fee. A run with only categories is valid. |
brandIds | Only products of these brands, by Shopee's brand number (the brandId column of the results with Full product details): one search per number, beside a keyword or a category. Shopee's own filter: no filter fee and no product page opened. For a brand name, use brand. |
countries | The same keywords and categories searched on several markets in one run (["SG", "ID", "BR"]): one search per market, each product says its market in the country column. They replace country; start URLs keep their own market. Prices stay in each market's currency. A cookie works with one market only. |
extractDetails | Paid option: open each product page for every variant, description, specifications, brand, category path, all photos and videos, listing date, shipping days and vouchers. |
includeShopProfile | Paid option: add the seller's shop name, shop rating, number of shop ratings, followers, logo and featured product to each product (charged once per seller per run). |
minRating | Only products whose product rating is at least this value (4.5). Products with no product rating (new, or only a shop rating shown) are dropped. |
discountedOnly | Only products showing a discount. |
minDiscountPercent | Only products whose card shows a discount of at least this many percent (1-99). A product with no discount shown is dropped. |
sellerTypes | Only these kinds of seller, as the badge on the search card says: mall (Shopee Mall), preferred, preferred_plus, premium, none (a card that shows no badge). Empty = every seller. A card whose badge image this Actor does not know (Shopee may add one) matches no kind, none included, so it is dropped when you pick any; a product link pasted alone has no card and is dropped too. |
fulfilledByShopeeOnly | Only products whose card carries the "shipped by Shopee" badge ("Fulfilled", "Full" in Brazil). |
withVoucherOnly | Only products whose card shows the voucher icon. |
excludeLocations | Drop the products whose location column is exactly one of these places (Mainland China to leave out foreign sellers in Singapore), case and accents ignored. A product with no location is kept. Max 50. Unlike location, this is not sent to Shopee: it filters the results. |
maxItemsPerShop | At most this many products from the same shop in the whole run (0 = no cap, the default). A product above the cap is not saved, not charged, and its product page is not opened. A product whose page then fails keeps its place, so a shop can end with fewer than this number. |
brand | Only products of this brand, as written on the product page, case ignored (Samsung). Turns on the details. |
withVideoOnly, wholesaleOnly | Only products with a video, or with wholesale prices. Read on the product page: each turns on the details. |
createdAfter | Only products listed on Shopee on or after this date (the createdAt column): 2026-09-01, or a period before now such as 30 days, 2 weeks, 3 months. A date without a time starts at midnight Singapore time; a date in the future is refused. A product whose page gives no listing date is dropped. Turns on the details. |
inStockOnly | Only products the page shows in stock (at least one variant can be bought). Sold-out products, and products whose page does not say, are dropped. Turns on the details. |
excludePreOrder | Drop the pre-order products. A product whose page does not say is dropped too. Turns on the details. |
maxShippingDays | Only products whose estimated shipping time on the page is at most this many days (1-365). A product with no estimate is dropped. Turns on the details. |
includeKeywords | Keep only the products whose name contains at least one of these words, case and accents ignored. The text is searched as a piece of the name: art keeps "Smart watch" (unlike excludeKeywords, which looks for whole words). Empty = every product is kept. Max 50 words. |
excludeKeywords | Drop the products whose name contains one of these WHOLE words (refurbished), case and accents ignored: art drops "Art deco", not "Smart watch". Several words in one entry (hand made) must appear together. Chinese, Japanese, Korean, Thai, Lao, Khmer and Burmese words are found anywhere in the name (no spaces there). Max 50 words. |
onlyNew, stateKey, resetState | Monitoring: only the products never delivered under this memory key (sg-iphone); resetState forgets the memory. |
cookie | Optional, secret: the cookie of your own Shopee account. With Full product details it adds four facts about each seller that Shopee shows only to signed-in buyers (vacation, opening date, chat response rate, Preferred+ badge: needs your cookie). Leave it empty to work as a visitor. See Your Shopee account below. |
| Advanced | proxyConfiguration (Apify proxy by default, included in the price; the residential Apify proxy is not available), maxConcurrency, maxRequestsPerMinute, minRequestIntervalMs, maxRequestRetries, debugLog. |
🔑 Your Shopee account (optional)
By default the Actor reads Shopee as a visitor and needs no account. If you give the cookie of your own Shopee account in the cookie field, Full product details also returns four facts about each seller that Shopee shows only to signed-in buyers: shopIsOnVacation, shopJoinedAt, shopResponseRatePercent and shopIsPreferredPlus. Without a cookie these four columns are null.
- Not tested with a real account yet: tell us in the Issues tab if something fails.
- How to copy it: log in to your Shopee site in your browser (the same market as your search, for example shopee.sg), open the developer tools (F12) › Network, click any request to that site and copy the whole
Cookierequest header into the field. It must containSPC_EC=orSPC_ST=. - One market: a cookie belongs to one Shopee site. Start URLs from several sites are refused when a cookie is given; a keyword search uses the market chosen in
country. - Safety: the cookie is used only to read public pages at a visitor's pace. It is never written to the dataset or the log. Use an account of your own: Shopee may ask it to log in again after heavy use.
- If Shopee does not take the cookie (expired, signed out), the run stops at once with a clear message, and nothing is charged for the account data.
- It has no effect without Full product details, and customer reviews stay unavailable with or without a cookie.
📦 Output
One real product with both options on (shortened: 7 more photos and 4 more variants):
{"id": "454919755.44228667447","itemId": "44228667447","shopId": "454919755","url": "https://shopee.sg/Google-Pixel-10a-128GB-256GB--i.454919755.44228667447","title": "Google Pixel 10a [128GB/256GB]","country": "SG","price": 778.9,"priceMax": null,"priceBeforeDiscount": null,"discountPercent": 13,"discountAmount": null,"priceIsPix": null,"currency": "SGD","rating": 4.9,"ratingType": "product","sold": null,"location": "SG","labels": ["Selling Fast", "Free Gift"],"shopBadge": "mall","isFulfilledByShopee": true,"hasVoucher": true,"image": "https://down-sg.img.susercontent.com/file/sg-11134301-8259q-mtrcwmkwf0g320","images": ["https://down-sg.img.susercontent.com/file/sg-11134301-8259q-mtrcwmkwf0g320","https://down-sg.img.susercontent.com/file/sg-11134301-8257t-mtrcv29rpuyt57"],"promoOverlayImage": null,"displayModelId": "340542500967","searchQuery": "iphone","searchUrl": "https://shopee.sg/search?keyword=iphone","position": 11,"brand": "Google","brandId": "1146548","categoryId": "11013454","categories": ["Mobile & Gadgets", "Mobile Phones & Tablets", "Google"],"description": "Google Pixel 10a [128GB/256GB]\nGoogle Pixel 10a [128GB/256GB]","attributes": [{ "name": "Brand", "value": "Google" },{ "name": "Ships From", "value": "SG" }],"variations": [{ "name": "Colour", "options": ["Obsidian", "Fog", "Lavender"], "images": [] },{ "name": "Size", "options": ["128GB", "256GB"], "images": [] }],"variants": [{"modelId": "340542500970","name": "Lavender,256GB","stock": null,"isPreOrder": false,"options": { "Colour": "Lavender", "Size": "256GB" },"isSoldOut": false,"estimatedShippingDays": 1,"image": null},{"modelId": "340542500965","name": "Obsidian,128GB","stock": null,"isPreOrder": false,"options": { "Colour": "Obsidian", "Size": "128GB" },"isSoldOut": false,"estimatedShippingDays": 1,"image": null}],"stock": null,"condition": "new","itemStatus": "normal","isSoldOut": false,"isPreOrder": false,"createdAt": "2026-02-09T02:13:16.000Z","isOfficialShop": true,"isServiceByShopee": true,"estimatedShippingDays": 1,"minPurchaseLimit": 1,"wholesaleTiers": [],"videos": [],"shopVouchers": [{"code": "SFC-1511244646195200","promotionId": "1511244646195200","discount": 20,"minSpend": 0,"percentUsed": 10,"startsAt": "2026-09-30T16:00:57.000Z","endsAt": "2026-10-31T15:59:57.000Z","discountCap": null,"percentClaimed": 53}],"flashSaleEndsAt": "2026-10-15T04:00:00.000Z","services": ["100% Authentic","Fulfilled by Shopee","15-Day Free Returns","Extended Warranty","Electronics Protection"],"shopName": "Google Authorised Retailer","shopUsername": "google.authorisedretailer","shopUrl": "https://shopee.sg/google.authorisedretailer","shopRating": 4.9,"shopRatingCount": 13373,"shopFollowers": 20400,"scrapedAt": "2026-10-15T12:00:00.000Z","videoDetails": [],"categoryIds": ["11013350", "11013448", "11013454"],"brandUrl": "https://shopee.sg/search?brands=1146548","baseDiscountPercent": 11,"hashtags": [],"descriptionImages": ["https://down-sg.img.susercontent.com/file/sg-11134202-8259l-mtrd15qq4v0m53"],"tradeInMaxSaving": 799,"addOnDealLabel": "Free Gift","isAdult": false,"isMart": false,"isInstallmentEligible": false,"isCrossBorder": false,"shopLogoUrl": "https://mms.img.susercontent.com/sg-11134216-82592-mr85tkmlebrb46","shopFeaturedProduct": {"name": "Google Pixel 11 Pro [256GB/512GB/1TB]","url": "https://shopee.sg/Google-Pixel-11-Pro-256GB-512GB-1TB--i.454919755.54914347933","image": "https://down-sg.img.susercontent.com/file/sg-11134207-8259g-mtrqm52cy7syee","rating": 4.93,"reviewCount": 89}}
You can download the dataset in various formats such as JSON, HTML, CSV or Excel.
All 62 fields
| Fields | What you get |
|---|---|
id, itemId, shopId | 🏷️ Product — 454919755.44228667447 (shop number . item number, unique across Shopee), 44228667447, 454919755 |
url, title, country | product page, product name, market (SG, MY, PH, TH, VN, ID, TW, BR) |
price, priceMax, priceBeforeDiscount, discountPercent, discountAmount, priceIsPix, currency | 💰 Price — 778.9; for a price range (S$20 - S$90) price is the lowest and priceMax the highest; struck-through price; 13 for -13%; the money saved (discountAmount, to the cent, null when there is no struck-through price or a price range); true when the Brazilian price is the Pix price; SGD |
rating, ratingType, sold | ⭐ Rating and sales — 4.9; product or shop (the card showed the shop's rating); units sold when the card prints them (3 Sold = 3, 1.2k sold = 1200), null otherwise: Shopee shows this count to visitors who are not logged in on few cards only |
location, labels | ships from (SG, Mainland China), promotion labels (Selling Fast, Free Gift) |
shopBadge, isFulfilledByShopee, hasVoucher | what the badges and icons of the search card say — kind of seller mall, preferred, preferred_plus, premium (null = no badge, or one this Actor does not know), shipped by Shopee, voucher icon; null for a product link pasted alone (no card) |
image, images, promoOverlayImage, displayModelId | main photo, every photo (main photo only without details), the campaign frame laid over the photo on the card (11.11), the variant whose price is shown |
searchQuery, searchUrl, position | the keyword, the search you asked for (keyword search, category or shop link), the rank on the results page of that search (1 = first); position is null for a product deep search found by reading the search again in another order or price band |
brand, brandId, categoryId, categories | details — Google, category path Mobile & Gadgets › Mobile Phones & Tablets › Google |
description, attributes | details — full description, specifications (name / value pairs) |
variations, variants, stock, isPreOrder | details — variation axes (Colour: Obsidian, Fog, Lavender) with the photo of each option when it has one (images), each variant with its id, name, its choice on each axis (options: {"Colour": "Lavender", "Size": "256GB"}), sold-out flag, days before shipping, own photo and pre-order flag; stock and variants[].stock stay null while Shopee hides the stock from visitors who are not logged in |
condition, itemStatus, isSoldOut, createdAt | details — new or used, listing status normal, true when every variant is sold out (false while one can be bought), listing date 2026-02-09T02:13:16.000Z |
isOfficialShop | Shopee Mall shop — from the product page when it is read, else from the Mall badge of the card (false for another badge or none, null when the badge is unknown or there is no card) |
isServiceByShopee, estimatedShippingDays, minPurchaseLimit, wholesaleTiers | details — fulfilled by Shopee (product page), days before shipping, minimum order quantity, quantity prices |
videos, shopVouchers, flashSaleEndsAt, services | details — video links, shop vouchers (code, discount, minimum spend, share already used, start and end, highest discount discountCap of a percentage voucher, share already claimed percentClaimed), flash sale end, guarantees (100% Authentic, 15-Day Free Returns) |
shopIsOnVacation, shopJoinedAt, shopResponseRatePercent, shopIsPreferredPlus | details, needs your cookie — true when the shop is in holiday mode, the date the shop was opened 2018-01-01T00:00:00.000Z, the share of buyer chats it answers (98 = 98 %), true when it has the Preferred+ badge; null without your Shopee cookie |
shopUrl | shop page: https://shopee.sg/shop/454919755 on every row; with Seller profile the shop's own address (https://shopee.sg/google.authorisedretailer) |
shopName, shopUsername, shopRating, shopRatingCount, shopFollowers | seller profile (shopName is also filled by Full product details when the product has a shop voucher) — Google Authorised Retailer, google.authorisedretailer, 4.9, 13373 shop ratings, 20400 followers (20.4k on Shopee) |
shopLogoUrl, shopFeaturedProduct | seller profile — link to the shop's logo, and the product the shop page puts forward (name, url, image, rating, reviewCount; no rating in Taiwan, no price on the page); null without Seller profile |
scrapedAt | ISO timestamp of the extraction |
videoDetails | details — one entry per product video: link, cover image, length in seconds, width and height ([] when the product has no video) |
categoryIds | details — the Shopee number of each level of the category path, top to bottom, in the order of categories; the same numbers the categoryIds input takes |
brandUrl | details — link to all the products of the brand on that market: https://shopee.sg/search?brands=1146548 |
baseDiscountPercent | details — the discount printed on the product page (11 = 11 %), null when none; handy for a product pasted by its link, which has no search card |
hashtags, descriptionImages | details — the #hashtags of the description (without #, once each) and the photos placed inside the description |
tradeInMaxSaving, addOnDealLabel | details — the most you save by trading in an old device (in the market's currency), and the add-on offer label (Free Gift); null when the product has none |
isAdult, isMart, isInstallmentEligible, isCrossBorder | details — adult-only product, sold through Shopee Mart, can be paid in installments, seller shipping from abroad (null when the page does not say) |
💡 Tips
How to get more results
Keep Deep search on (default), set maxItems to 0 and use a broad keyword. Without deep search, each search gives about 40 products: Shopee shows about 40 products per search and no real page 2. Deep search works on keyword searches, categories and shops: a pasted category link is read as a Shopee search of that category, and a shop (link or shopIds) is read in every sort order and price band, so you get far more than the 40 products of its first page. A small shop is read once. To cover a large market, split it by price with minPrice / maxPrice, or run several keywords at once.
How to reduce costs
The price is per product, so the levers are maxItems, maxItemsPerQuery, the filters (a filtered-out product costs only the filter fee, lower than a product), maxItemsPerShop (free: a product above the cap is not charged) and onlyNew for recurring runs (you never pay twice for the same product). Tick Full product details only when you need the variants, description or vouchers: the filters Condition, Brand, Products with a video only and Wholesale offers only turn it on too. Official shops only, the seller location and the price range are sent to Shopee itself.
Several searches in one run
Fill searchQueries, locations, categoryIds, brandIds, shopIds and / or countries: the Actor runs one search per combination (3 keywords × 4 locations = 12 searches; × 2 markets = 24, up to 500 per run). The single query and location fields still work and are added to the lists. A product found by several searches is saved — and charged — once. Set maxItemsPerQuery to give every search its own cap: without it the first searches can use up the whole maxItems budget. You can also paste several Shopee links into startUrls: each one is a search of its own, with the same cap.
Product rating or shop rating
In the search results, Shopee usually shows the product's rating. In some markets (Singapore, the Philippines, Indonesia, Brazil) a card may show the shop's rating instead, labelled as such on Shopee ("Shop Rating", "Penilaian Toko", "Avaliação da loja"). The Actor keeps the number in rating and tells you which one it is in ratingType (product or shop). Min rating only keeps products whose own rating reaches your value: a card that only shows a shop rating is dropped. For the shop's full profile (rating, number of ratings, followers), tick Seller profile.
Monitoring: only the new products
Tick Only new products (onlyNew) and schedule the Actor. The first run returns everything; each later run skips the products already delivered: they are not saved, not charged, and their page is not even opened. The memory lives in a named key-value store of your account (shopee-product-scraper-seen, up to 150,000 products per key) and is only updated with products that really reached the dataset, so a failed run never hides anything. Give each schedule its own stateKey (two schedules sharing a key would hide each other's products), and tick resetState once to start over. Shopee shows no publication date in its search results, so each run reads its searches again and keeps only the products it has not delivered yet.
🔌 Integrations and API
Call the Actor via the Apify API, the JavaScript or Python clients, or connect it with integrations and webhooks (Make, Zapier, n8n, Google Sheets, Slack, Airtable…). The dataset can be fetched as JSON or CSV from any tool.
🤖 Use with AI agents (MCP)
AI agents (Claude, ChatGPT, Cursor…) can find and run this Actor through the Apify MCP server, billed to their Apify account like any run. It returns one item per Shopee product. Actor id: nice_dev/shopee-product-scraper; MCP server with this Actor only: https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/shopee-product-scraper.
Smallest input, for a cheap first call:
{"country": "SG","query": "iphone","maxItems": 10}
Key output fields: url, title, price, currency, discountPercent, rating, location, and variants (with extractDetails).
Cost: a price per product plus a small fee per run start; the details and the seller profile are options charged apart (see the pricing section above and the Pricing tab). Cap each call with maxItems and, through the API, with the run option maxTotalChargeUsd.
❓ FAQ
Is it legal to scrape Shopee?
By default the Actor only reads what Shopee shows publicly to any anonymous visitor, and logs in to nothing. If you give the cookie of your own account (optional, see Your Shopee account), it reads the product pages as that signed-in buyer sees them, and you are responsible for using your account in line with Shopee's Terms of Service. Results are product and shop data; a shop name can be a person's name, which is personal data protected by GDPR and similar laws: do not store it without a legitimate reason. You are responsible for using the data in compliance with Shopee's Terms of Service and applicable law. This Actor is not affiliated with Shopee.
Does it need a login or a proxy?
No login is needed (your own account is optional: see Your Shopee account). The proxy is included in the price, product pages included: leave the default setting (the residential Apify proxy is not available). A request the site turns away is retried at once on a new proxy session, up to 10 times on top of the retries (without a proxy, after a pause of 5 seconds, doubled at each retry up to 150 seconds).
Apify free plan: the included proxy is for paying Apify plans only. On the free plan, add your own proxy URLs in Proxy configuration; without them the run stops at once with a message saying so.
Why are there no reviews, and units sold on few products only?
Shopee shows customer reviews, the units sold of most products and the product page's price and rating only to visitors who are logged in. The Actor reads Shopee as a visitor (the cookie of your own account, if you give one, only adds the four seller facts above), so customer reviews are not available, and sold is filled only when the search card itself prints the count (3 Sold: about 1 card in 40 in Singapore), null otherwise. Price, discount and rating come from the search results instead; a product link pasted alone in Start URLs has no search result behind it, so its price, discountPercent and rating are null.
Is the data safe to open in Excel or to show on a web page?
Product names and descriptions are the sellers' own words, copied as they are. A text can begin with -, +, = or @ (a name such as -50% today): Excel and Google Sheets may read such a cell of a CSV file as a formula or as a number. The Actor leaves the text as it is, so that the JSON and the API give the real value: when you open a CSV, import these columns as text. On a web page, escape every field like any text written by a stranger.
Known limitations
- Customer reviews are not available, and units sold only for the few products whose search card shows them (see above).
- The sort order applies to the page of about 40 products Shopee gives for a search, not to all of Shopee:
price_low_to_highdoes not return the cheapest products of the whole market. To narrow a market, setminPrice/maxPrice. - Shopee shows no publication date in its search results: there is no date filter. The listing date (
createdAt) comes with Full product details. - A shop and a category are read in several sort orders and price bands (deep search on): Shopee gives about 40 products per read, so a very large shop can still miss products. In the
searchUrlcolumn a pasted category link appears as the Shopee search address that was read (https://shopee.sg/search?facet=<number>). - Shopee hides the stock from visitors who are not logged in (it shows the same placeholder on every variant):
stockandvariants[].stockstaynull. onlyNewremembers product numbers, not their content: a product whose price changed is not returned again.- Two runs sharing the same
stateKeyat the same time may both return the same new product.
A run that reaches its timeout stops itself about 45 seconds before it: no new page is asked, what it read is saved and, with onlyNew, remembered, and the run ends Succeeded with "Stopped before the run's timeout". Resurrect it to go on from there, or give the next run a longer timeout (Run options).
A run the platform stops without warning (out of memory)
- Resurrect it: it goes on from where it stood at most a minute before the stop. What it had read since is read again, and the products already saved are skipped: none is delivered or charged twice, and
maxItemsstill counts them. - With
onlyNew, the memory is saved after each write (at most once every 2 seconds): resurrect the stopped run and the products it had saved meanwhile join the memory; leave it stopped for good, and the next run may return the products of its last 2 seconds once more.
Something doesn't work?
The last line of the log counts the products saved, filtered out and no longer on Shopee (a pasted product link of a removed product, or a product removed while the run was reading it), and the requests that failed after every retry. Those requests and the removed products are listed, with the reason, in the FAILED_REQUESTS record of the run's key-value store. A run that saved nothing and had failed requests fails, and its last message gives the cause: a search, category or shop link that does not exist says "Search URL not found", instead of "run it again".
If Shopee changes its pages, you are told instead of paying for blank rows. A results page that shows products but none the Actor can read is an error (listed in FAILED_REQUESTS), never a quiet empty result. If the first 20 products read all lack their name or — for products found in search results — their price or photo, the run saves nothing more, stops and fails, and its last message names the missing field: at most those first products are charged. A product that Min rating drops because it shows no rating at all counts among those 20. A run of fewer products (a scheduled onlyNew run that finds a few new ones, a small Max products) is checked at its end, from 5 products: its products are already saved, and the run fails with the missing field instead of ending green.
🛟 Support
Open an issue in the Issues tab with a link to your run: the run log and the FAILED_REQUESTS record of the key-value store show exactly which URLs failed and why.