Shopee Products Scraper: Prices, Reviews, No Login avatar

Shopee Products Scraper: Prices, Reviews, No Login

Pricing

from $0.25 / 1,000 products

Go to Apify Store
Shopee Products Scraper: Prices, Reviews, No Login

Shopee Products Scraper: Prices, Reviews, No Login

Track rival prices on Shopee with no login. Get products, prices, sellers, shop reviews and flash sales from public pages, see what changed since your last run, and export JSON or CSV. Keyword search covers 9 countries.

Pricing

from $0.25 / 1,000 products

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Security

Limited permissions

Share

Type keywords or paste Shopee links, and get Shopee products as rows with price, original price, discount, rating, seller name and seller rating. No login and no Shopee account are needed. The prefilled search for 10 phone cases in Thailand takes 20 to 40 seconds and costs about $0.006 on the Free plan.

Use it to track rival prices on Shopee, see what changed since your last run, read shop reviews and watch flash sales. Export the rows as JSON or CSV, or read them by API.

Shopee Products Scraper: keywords or Shopee links go in, product rows with price, discount, seller and rating come out, with no login

The rows in this picture are samples. Your results depend on the search and the day.

Table of contents

What it does

The Actor reads public Shopee pages as a guest and returns one row for each result. It can collect:

  • Products from keywords, search links, shop links and category links.
  • Product details such as description, gallery, categories, attributes and variants.
  • Seller data: name and rating, and on request followers, response rate and other shop metrics.
  • Shop reviews with stars, text, seller reply and a summary row.
  • Flash sales with promotion time, sale price and remaining promotional stock.
  • Keyword hints and the category tree of a market.
  • Changes since your last run: new products and new prices.

Good fit

  • You sell on Shopee and want to check rival prices and discounts each day.
  • You research a product niche in Southeast Asia, Taiwan, Brazil or Mexico.
  • You want to read what buyers say about a shop.

Not a good fit

  • You need order data, your own seller account data or buyer contacts. The Actor reads only public guest pages.
  • You need exact stock and exact sold counts for every product. Shopee often hides these from guests, so these fields can be empty.

👉 Try it now: open the input form

How it works

  1. You choose what to collect. Enter keywords, paste Shopee links or enter IDs, then set a result limit.
  2. The Actor reads public pages. It waits about one second between normal requests, so large runs take time. Links run first, then keywords.
  3. You get the rows. Open the Output tab, export the data or read it by API. The run also saves a RUN_SUMMARY record with counts and the reason it stopped.

👉 Try it now: open the input form

Quick start

Input form with three numbered marks: Country, Search keywords and the Result limits section

  1. Open the Input tab and keep Country set to Thailand.
  2. Keep phone case in Search keywords.
  3. Open Result limits and keep Maximum results at 10.
  4. Run the Actor.
  5. When the run ends, open Output and choose the Products view.
  6. Check price, originalPrice and discountPercent.
  7. Check shopName and shopRating.

Output table with three numbered marks: the Products view, the price and discount columns, and the seller columns

Expected result: 10 product rows in Thai baht (THB) in 20 to 40 seconds. The cost is about $0.006 on the Free plan. Search results change from run to run, so your products will differ from the picture.

👉 Try it now: open the input form

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Watch rival prices each daykeywords or shopUrls with onlyChanges: trueProductprice, previousPrice, changeStatus, discountPercent, shopNameSchedule the run, then send a summary to Slack
Research a product nichekeywords, country, minRating, sortByProductprice, rating, location, shopRatingExport CSV to a spreadsheet
Read what buyers say about a shopmode: reviews with shopUrlsReview and summaryrating, comment, sellerReply, ratingCountsByStarSend the rows to a text analysis tool
Check a shop before you work with itmode: profile with shopUrlsShopshopRating, shopFollowers, shopResponseRate, shopProductCountAdd the rows to a supplier sheet
Watch the current flash salemode: flash_sale, countryFlash-sale productprice, stockRemainingPercent, promotionEndRun on a schedule and export JSON

👉 Try it now: open the input form

Input

Only one thing is needed: something to search for. No field is strictly required.

  • Empty input: if you send {} or empty lists, such as {"keywords":[]}, through the API, the Actor has no work to do. The run ends with 0 rows and only the start fee. The Console form starts with phone case already filled in.
  • Practical maximum: 5,000 products per run. See Limits for time and cost.
  • Duplicates: repeated keywords and links are removed. A product that appears twice in results is delivered once.
  • Bad links: a bad link is skipped and reported. The run fails only if no valid target is left.

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
countryCountrystringNothth, id, sg, my, ph, vn, tw, br, mxMarket for keywords, categories and flash sales. Each pasted link keeps its own market.thReviews, details and flash sales were tested only in Thailand.
modeModestringNoautoauto, search, product, shop, reviews, hints, profile, categories, flash_saleWhat to collect. auto reads the link type.reviewsKeep auto for keywords and normal links.
keywordsSearch keywordsstring listNodefault empty; prefill phone caseAny textSearch terms. They share one result limit.["desk lamp"]Use more keywords for large runs.
startUrlsShopee URLslink listNoemptyHTTPS Shopee search, category, shop or product linksAny Shopee link.https://shopee.co.th/search?keyword=phone%20caseUse this if you have mixed links.
productUrlsProduct URLslink listNoemptyHTTPS product links with shop and product IDsOpens each product page.https://shopee.co.th/product/333239573/56366098260Costs more than a search row.
shopUrlsShop URLslink listNoemptyHTTPS shop linksProducts of each shop.https://shopee.co.th/shop/333239573Good for watching one rival.
categoryUrlsCategory URLslink listNoemptyHTTPS category linksProducts of each category.https://shopee.co.th/Mobile-Gadgets-cat.11044458Add filters to keep rows useful.
shopIdShop IDstringNononeDigits onlyOne shop, or one product with itemId.333239573Use with country.
itemIdProduct IDstringWith shopIdnoneDigits onlyOne product.56366098260Needs shopId.
categoryIdCategory IDstringNononeDigits onlyOne category of the chosen market.11044458Find IDs with mode: categories.
maxItemsMaximum resultsintegerNo10 / 101 to 5,000Stops after this many products, categories or hints.100Start small, then raise it.
includeSellerDetailsAdd seller name and ratingbooleanNotruetrue, falseOne shop lookup per seller.falseTurn off for large runs: much faster.
includeShopMetricsAdd detailed shop metricsbooleanNofalsetrue, falseFollowers, response rate and more. One profile lookup per shop, and page data may apply.trueUse for small runs.
ongoingOnlyCurrent flash sale onlybooleanNotruetrue, falseOff also visits the other listed sessions.trueKeep on for today's prices.
promotionIdFlash sale promotion IDstringNononePublic promotion IDReads one flash-sale session.promotionId from a flash rowLeave empty for the current session.
includeShopProfileAdd shop profile rowbooleanNotruetrue, falseFor shop links, adds one shop row.trueIt does not count toward maxItems.
includeListingPriceLook up hidden pricesbooleanNotruetrue, falseIf a product page hides the price, looks for the same product ID on listing pages. Listing pages are charged.trueTurn off if you only need the text.
includeDetailsAdd product detailsbooleanNofalsetrue, falseOpens each product page for the description, gallery, attributes and variants.trueCosts more. Try with a few products first.
sortBySort bystringNorelevancyrelevancy, sales, latest, price_asc, price_descAsks Shopee to sort the results.price_ascSponsored cards can change the order.
minPriceMinimum pricenumberNonone0 or more, local currencyRemoves lower prices and products with no price.100Use local money, not USD.
maxPriceMaximum pricenumberNonone0 or more, local currencyRemoves higher prices and products with no price.500Must not be below minPrice.
minRatingMinimum ratingnumberNonone0 to 5Removes lower ratings and products with no rating.4.5Good for finding strong sellers.
minSoldMinimum units soldnumberNonone0 or moreAdds a detail lookup. Removes products with a hidden sold count.100Use only if needed: it costs more and removes many rows.
conditionConditionstringNoanyany, new, usedAsks Shopee for this condition.newKeep any by default.
discountedOnlyDiscounted onlybooleanNofalsetrue, falseKeeps products with a discount.trueGood for promotion checks.
freeShippingOnlyFree shipping onlybooleanNofalsetrue, falseAsks Shopee for free-shipping listings.trueShipping depends on destination.
officialShopOnlyShopee Mall onlybooleanNofalsetrue, falseAsks Shopee for Shopee Mall listings.trueUse for brand checks.
preferredSellerOnlyPreferred sellers onlybooleanNofalsetrue, falseAsks Shopee for preferred sellers.trueOptional.
codAvailableOnlyCash on delivery onlybooleanNofalsetrue, falseAsks Shopee for cash-on-delivery listings.trueOptional.
wholesaleOnlyWholesale onlybooleanNofalsetrue, falseAsks Shopee for wholesale listings.trueOptional.
genuineOnlyAuthentic products onlybooleanNofalsetrue, falseAsks Shopee for listings it marks as authentic.trueOptional.
withVideoOnlyWith video onlybooleanNofalsetrue, falseAsks Shopee for listings with video.trueOptional.
shippedFromShipped fromstring listNoemptyLocation labels of the marketAsks Shopee for these locations.["Bangkok"]Copy the label from Shopee.
brandBrandstring listNoemptyBrand names or IDsAdds detail lookups. Removes products with no reported brand.["Samsung"]Costs more. Use a few products first.
includeTextName containsstringNononeAny textKeeps names with this text. Letter case is ignored.magneticUse the language of the market.
excludeTextName does not containstringNononeAny textRemoves names with this text.usedUse the language of the market.
includeReviewsAdd reviewsbooleanNofalsetrue, falseAdds reviews from the public shop feed.trueSet maxReviewsPerShop first.
includeShopSummaryAdd review summary rowbooleanNotruetrue, falseAdds one free summary row per target.trueKeep on.
maxReviewsPerShopMaximum reviews per shopintegerNo1000 to 100,000; 0 means until the feed endsLimit of delivered reviews per shop or product link.50Do not use 0 without a spending limit.
starRatingsStar ratingsstring listNo1 to 51, 2, 3, 4, 5Reads these stars in the order you give.["1","2"]Use low stars to find problems.
onlyWithTextReviews with text onlybooleanNofalsetrue, falseKeeps reviews with a comment.trueScans more of the feed.
onlyWithMediaReviews with media onlybooleanNofalsetrue, falseKeeps reviews with photos or videos.trueScans more of the feed.
reviewsSinceReviews sincestringNononeISO date and timeKeeps newer reviews.2026-01-01T00:00:00ZUse with scheduled runs.
hintExpansionHint expansionstringNononenone, alphabet, alphanumericAlso tries each letter, or letter and digit, after the keyword.alphabetMore prefixes cost more.
onlyNewNew products onlybooleanNofalsetrue, falseReturns only products this history has not seen.trueUse with a schedule.
onlyChangesNew products and price changesbooleanNofalsetrue, falseReturns new products and new prices.trueThe first run creates the history.
stateNameHistory namestringNodefault1 to 40 letters, digits, _ or -The name of your watchlist history.rival-casesUse one name per watchlist.
stateRetentionDaysHistory retention daysintegerNo301 to 3,650Older history expires.90Set longer than your schedule gap.
proxyConfigurationProxyobjectNodirect connectionDatacenter or your own proxyConnection for normal requests. Residential and Unblocker selections are not accepted.{"useApifyProxy":false}Leave as it is.
deliveryConnectorSend results tostringNononeYour Slack, Notion or other MCP connectorPosts a short summary after the run.Pick it in the formSee below.
deliveryTargetNotion page or channelstringNononeA Notion page link or a Slack channel IDWhere the summary goes.C0123456789See below.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Many keywordskeywordsmaxItemsThe limit is shared. Each keyword gets a share before the rest is collected.3 keywords and 300 resultsAbout 100 products per keyword if Shopee has them.
Links and keywords togetherlinkskeywordsLinks run first, and keywords use what is left of the limit.1 shop link and 1 keywordKeywords may get few rows or none.
Pasted link in another marketcountrylinkThe link keeps its own market.th and a .vn linkRows from that link use vn and its currency.
Reviews with no targetmode: reviewskeywords onlyThe run fails at the start with REVIEWS_NEED_SHOP_OR_PRODUCT_URLS.mode: reviews, no linkStart fee only.
Reviews with a targetmode: reviewslinks and keywordsKeywords are ignored.A shop link and a keywordOnly reviews of the shop.
Product link with reviewsproductUrlsincludeReviewsThe shop feed is filtered to that product. Old reviews can be outside the feed.One product linkReview pages are charged even if few match.
Filters that need the product pageminSold or brandmaxItemsEach product read gets a detail lookup. Numeric brand IDs go to Shopee directly; names are checked after the lookup.minSold: 100Costs more, and hidden sold counts remove rows.
Strict filtersfiltersmaxItemsmaxItems counts delivered rows, not pages read. The Actor keeps reading pages to find matches.A filter with no matches over 20 pages$0.0288 with 0 rows. Set a spending limit.
Large runmaxItemsincludeSellerDetailsSeller lookups slow the run to about 20 products a minute. Without them, about 250 a minute.5,000 productsTurn the option off and raise the timeout.
Short timeoutRun timeoutmaxItemsThe run stops before the timeout and keeps the rows it has.Default 300 secondsPartial result with DEADLINE. You pay only for delivered rows and pages read.
Monitoring with no changesonlyChangesstateNameOnly new or changed rows are returned, and history fees apply.A repeat run, no price changes$0.0018 with 0 rows.

Input examples

Search in one market

{"country":"th","keywords":["phone case"],"maxItems":10}
  • Expected behavior: reads one search page, then looks up sellers.
  • Expected output: 10 product rows.
  • Limit or cost note: about $0.006 and 20 to 40 seconds.

Daily check of rival prices

{"country":"th","keywords":["phone case"],"maxItems":50,"onlyChanges":true,"stateName":"rival-cases"}
  • Expected behavior: the first run saves all rows to the history. Later runs return only new products and new prices.
  • Expected output: product rows with changeStatus and previousPrice.
  • Limit or cost note: a repeat run with no changes costs $0.0018 in our test.

Reviews of one shop

{"mode":"reviews","shopUrls":["https://shopee.co.th/shop/333239573"],"maxReviewsPerShop":10}
  • Expected behavior: reads the public review feed of the shop.
  • Expected output: 10 review rows and 1 free review_summary row.
  • Limit or cost note: about $0.03 for 10 reviews.

Current flash sale

{"mode":"flash_sale","country":"th","maxItems":50}
  • Expected behavior: reads the current session.
  • Expected output: product rows with promotion fields.
  • Limit or cost note: a run with 53 flash-sale rows cost $0.09875 in our test.

👉 Try it now: open the input form

Output

Each row has a recordType: product, shop, review, review_summary, keyword or category. The Output tab has views for each: Products, Product details, Reviews, Shops, Categories and Keyword hints.

About empty values: a field is null when Shopee does not show it to a guest or when you did not ask for it. null never means zero. For example, sold: null with soldStatus: "not_reported" means the count is hidden, not that nothing was sold. In our Thai search test, originalPrice and discountPercent were filled in about half of the rows and location in about 80%. description, brand, categories, attributes and variants need includeDetails. shopFollowers needs includeShopMetrics.

Output fields

FieldMeaningTypeCan be empty?Example / enumSource / notes
recordTypeRow typestringNoproduct, shop, review, review_summary, keyword, categoryAdded by the Actor
statusProduct statestringYescomplete, not_foundnot_found means the product is no longer listed
countryMarket codestringNothFrom input or link
currencyCurrency of the prices. Prices are not converted.stringYesTHBShopee
itemId, shopIdProduct ID and shop IDstringYes45217194564Shopee
nameProduct namestringYesMagnetic caseShopee
priceShown price in local moneynumberYes314null if hidden
priceStatusWas a price shown?stringYesreported, not_reportedAdded by the Actor
priceLookupStatus, priceLookupRouteResult and place of the hidden-price lookupstringYesmatched, not_found_in_listings, unavailable, charge_limitMatches only the same product and shop ID
originalPricePrice before discountnumberYes710Shopee
discountPercentDiscount in percentnumberYes55.77Shopee, or worked out from the two prices
rating, ratingCountProduct stars and number of ratingsnumberYes4.9Shopee
sold, soldStatusUnits sold, and whether Shopee reported themnumber, stringYesreported, not_reportedNever estimated
stock, stockStatusStock, and why it may be missingnumber, stringYesnot_reported, masked_by_source, flash_sale_remainingOften hidden from guests
locationShipping location on the cardstringYesBangkokLocal language
images, videosImage links and video dataarrayYesImage linkDetails give the full gallery
url, shopUrlProduct link and shop linkstringYeshttps://shopee.co.th/shop/133448475Shopee
searchTermKeyword that found this productstringYesphone casenull for a pasted link
description, brand, brandIdText and brandstringYesSamsungWith details
categoryId, categoriesCategory ID and pathstring, arrayYes11044458With details
attributesProduct specificationsarrayYes{"name":"Material","value":"TPU"}With details
variants, tierVariationsVariants and their optionsarrayYesmodelId, name, priceWith details. Variant prices can be hidden.
likedCount, createdAt, condition, isPreOrder, estimatedDeliveryDaysMore product datanumber, string, booleanYestrueWith details, when Shopee reports them
isFreeShipping, isCashOnDelivery, isWholesale, isGenuine, hasVideoShopee flags for the productbooleanYestruenull if not reported
isOfficialShop, isPreferredSellerShopee flags for the shopbooleanYestruenull if not reported
detailsStatusWere details added?stringYesreportedAdded by the Actor
source, sourceRoute, fetchedAtSource, page type and time of the readstringYesshopee, social_crawler_htmlAdded by the Actor. Time in UTC.
changeStatus, previousPriceMonitoring result and last known pricestringYesnew, price_changed, unchangedWith onlyNew or onlyChanges
shopName, shopRating, shopRatingCount, shopLookupStatusSeller name, rating and lookup resultstring, numberYesreported, unavailable, charge_limitOne failed lookup leaves these empty and keeps the product
shopFollowers, shopFollowing, shopProductCount, shopResponseRate, shopResponseTimeSeconds, shopCancellationRate, shopCreatedAt, shopLastActiveAt, isOnVacation, sellerId, shopUsernameShop metricsnumber, string, booleanYes1200With includeShopMetrics or shop rows
flashSaleStock, stockRemainingPercent, flashDetailsStatusFlash-sale stock datanumber, stringYes40Flash sales only
promotionId, promotionName, promotionIsOngoing, promotionStart, promotionEnd, promotionTimeZoneFlash-sale sessionstring, booleanYesUTCFlash sales only
reviewId, productName, productUrl, reviewedProducts, variationReview and its productstring, arrayYes115923903493Reviews only
comment, hasText, hasMedia, updatedAt, sellerReplyReview text, media flag, time and seller replystring, boolean, objectYestrueContact details are removed
productQualityRating, sellerServiceRating, deliveryServiceRatingStar ratings of the reviewnumberYes5Reviews only
reviewerAnonymous, buyerRegionAnonymous flag and region of the buyerboolean, stringYesTHNo buyer account IDs are saved
reviewScope, targetItemIdWhole shop feed or one product in the feedstringYesshop_feed, product_in_shop_feedReviews only
reviewsCollected, reviewsScanned, sourceReviewTotal, ratingCountsByStar, coverageReview summarynumber, object, stringYesreviewsCollected: 10, coverage: limitedFree summary row
prefix, keyword, categoryName, rankPositionKeyword hint datastring, numberYesphoneHints only
parentCategoryId, categoryLevel, categoryPath, childCount, isLeafCategory tree datastring, number, array, booleanYes2Categories only

Output entities and surfaces

SituationDataset/API/KVS/live viewResult shapeUser action
Normal itemDataset, API and the Output tabOne row per result. RUN_SUMMARY in the key-value store has status: complete.Use the rows.
Domain-empty resultEmpty dataset and RUN_SUMMARY0 rows, run SUCCEEDED, stopReason: SOURCE_EXHAUSTED.Change the keyword or filters.
Partial resultDataset and RUN_SUMMARYRows are saved. status: partial with a stopReason such as DEADLINE, CHARGE_LIMIT or INVALID_URL_SKIPPED.Read the reason, then raise the limit or fix the link.
Technical failure or retryRun status FAILED, RUN_SUMMARY and logAn error code such as SOURCE_BLOCKED. Up to 2 retries are made per request.See Troubleshooting.

Output example

The example uses the input {"country":"th","keywords":["phone case"],"maxItems":10}. It is a real row from a test run. Search results change from run to run.

{
"recordType": "product",
"status": "complete",
"country": "th",
"currency": "THB",
"shopId": "333807292",
"itemId": "44812090805",
"name": "สำหรับ iPhone 17 Pro Max 17Air 17Pro 17Promax 13/14/15 Xs Max Xr เคสกำมะหยี่ สีพื้น ลบรอยปากกาได้ สำหรับ ไอโฟน 024",
"price": 51,
"originalPrice": 55,
"discountPercent": 7.27,
"rating": 5,
"ratingCount": null,
"sold": null,
"soldStatus": "not_reported",
"stock": null,
"stockStatus": "not_reported",
"location": "จังหวัดกรุงเทพมหานคร",
"images": [
"https://down-th.img.susercontent.com/file/sg-11134201-823pn-mpcj1sybegwbe8"
],
"url": "https://shopee.co.th/%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A-iPhone-17-Pro-Max-17Air-17Pro-17Promax-13-14-15-Xs-Max-Xr-%E0%B9%80%E0%B8%84%E0%B8%AA%E0%B8%81%E0%B8%B3%E0%B8%A1%E0%B8%B0%E0%B8%AB%E0%B8%A2%E0%B8%B5%E0%B9%88-%E0%B8%AA%E0%B8%B5%E0%B8%9E%E0%B8%B7%E0%B9%89%E0%B8%99-%E0%B8%A5%E0%B8%9A%E0%B8%A3%E0%B8%AD%E0%B8%A2%E0%B8%9B%E0%B8%B2%E0%B8%81%E0%B8%81%E0%B8%B2%E0%B9%84%E0%B8%94%E0%B9%89-%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A-%E0%B9%84%E0%B8%AD%E0%B9%82%E0%B8%9F%E0%B8%99-024-i.333807292.44812090805",
"shopUrl": "https://shopee.co.th/shop/333807292",
"searchTerm": "phone case",
"description": null,
"brand": null,
"categoryId": null,
"categories": null,
"attributes": null,
"variants": null,
"videos": null,
"shopName": "888_shop1",
"shopRating": 4.65,
"shopFollowers": null,
"isOfficialShop": null,
"isPreferredSeller": null,
"source": "shopee",
"sourceRoute": "social_crawler_html",
"fetchedAt": "2026-11-04T11:44:13.818Z",
"shopRatingCount": 255758,
"shopLookupStatus": "reported"
}

Send results to Slack or Notion

Pick your connector in the optional deliveryConnector field. After the run saves its data, the Actor posts a short summary (up to 25 rows and a link to the full dataset) there. Put a Notion page link or a Slack channel ID in deliveryTarget: in Notion every run is added on top of that one page, so your workspace does not fill up with new pages. A delivery error never fails the run and costs nothing extra. Connect a service once in Apify Console → MCP connectors.

Use case → fields

Use caseFields to read
Price watchitemId, name, price, originalPrice, discountPercent, previousPrice, changeStatus, url
Niche researchname, price, rating, location, shopName, shopRating, searchTerm
Shop checkshopName, shopRating, shopRatingCount, shopFollowers, shopResponseRate, shopProductCount
Review readingrating, comment, productName, sellerReply, updatedAt, ratingCountsByStar
Flash-sale watchname, price, stockRemainingPercent, promotionName, promotionStart, promotionEnd

👉 Try it now: open the input form

Pricing

You pay per event. Apify platform usage is included in the event prices. The Free-plan prices are below, and Bronze, Silver and Gold plans pay 10%, 20% and 30% less. The start fee is the same on every plan.

Pricing unit

EventWhen it is chargedFree-plan price
productOne product row from search, shop or category$0.36 per 1,000
product-detailOne product row with details$0.60 per 1,000
detail-lookupOne product page read$0.60 per 1,000
listing-pageOne search, shop or category page read$1.40 per 1,000
shop-lookupOne seller name and rating lookup$0.05 per 1,000
profile-lookupOne full shop profile read$1.00 per 1,000
reviewOne review row$2.70 per 1,000
review-pageOne review feed page read$0.90 per 1,000
keywordOne keyword hint row$0.45 per 1,000
categoryOne category row$0.45 per 1,000
hint-pageOne hint request$0.30 per 1,000
category-pageOne category tree request$0.30 per 1,000
flash-pageOne flash-sale page read$0.30 per 1,000
flash-productOne flash-sale row$1.80 per 1,000
detail-dataEach started 100 KiB of data when a product or shop page needs the automatic connection, at least one block per request$4.50 per 1,000
monitor-historyOne history read or write$0.50 per 1,000
apify-actor-startOnce per run. The start fee grows with memory, one start per GB, but the allowed 256 to 512 MB always counts as one start.$0.0008 per start
  • Valid run with 0 rows: you pay the start fee and the pages read. An empty request costs $0.0008. A filter with no matches on 1 page costs $0.0022.
  • Monitoring with no changes: you pay the start fee and two history events, $0.0018 in our test.
  • Partial result: you pay for the rows delivered and the pages read. Rows are saved before the run stops.
  • Failed run: invalid input costs only the start fee, $0.0008. If Shopee blocks the run, you pay the start fee and the requests already made, and a failed page never costs more than the same page that worked.

Cost examples

We counted the events in real test runs and priced them at Free plan rates. Paid plans cost less per event, except the start fee.

ScenarioInput scopeExpected item/event countBase chargeOptional chargeStop/cap behavior
Prefilled search1 keyword, 10 products10 products, 1 page, up to 10 sellers, 20 to 40 s$0.0058Sellers up to $0.0005Total up to $0.0063, MAX_ITEMS
Medium search with sellers3 keywords, 300 products300 products, 11 pages, 232 sellers, 751 s$0.1242Sellers $0.0116Total $0.1358. Timeout set to 900 s.
Largest search, no sellers198 keywords, 5,000 products5,000 products, 198 pages, 1,230 s$2.078NoneMAX_ITEMS. Needs a longer timeout.
One product with details1 product link1 product, 1 detail lookup, 3 data blocks$0.0169IncludedTotal $0.01695
Reviews of one shop1 shop, 10 reviews10 reviews, 5 pages, 1 free summary$0.03235NoneStops at your limit
Reviews of one shop, larger1 shop, 200 reviews200 reviews, 12 pages, 21 s$0.55165NoneStops at your limit
Reviews of one shop, whole feed1 shop, maxReviewsPerShop: 01,134 reviews, 60 pages, 95 s$3.11665NoneFeed ended
Shop profile1 shop with metrics1 shop row$0.0108IncludedDone
Flash saleCurrent session53 rows, 39 sellers$0.0968Sellers $0.00195Total $0.09875. Session ended
Keyword hints1 keyword, limit 2012 keywords, 1 page$0.0065NoneSource ended
Category tree264 categories264 categories$0.1199NonemaxItems
First monitoring runSmall searchProducts and history$0.01895History includedDone
Monitoring, no changesSame search0 rows, 2 history events$0.0018IncludedDone
Filter with no matches1 page, 20 pages0 rows$0.0022, $0.0288NoneSource ended

A spending limit works: in a test with a $0.02 limit on the Bronze plan, the run delivered 51 products and stopped with CHARGE_LIMIT. With a $5 limit on the same plan and maxReviewsPerShop: 0, a larger shop stopped at 2,022 reviews.

👉 Try it now: open the input form

Limits

  • Markets: keyword search was confirmed in 9 markets: Thailand, Indonesia, Singapore, Malaysia, Philippines, Vietnam, Taiwan, Brazil and Mexico. Rich product pages, reviews and flash sales were confirmed only in Thailand. Colombia and Chile are not supported.
  • Result limit: 5,000 products per run. maxItems counts rows, not pages read, so strict filters can read many pages.
  • Speed: with sellers on, expect about 20 products a minute. In tests, 300 products took 751 s, and a run with 6 keywords and a limit of 1,000 stopped at 313 products when it reached its 900 s timeout. With sellers off, expect about 250 a minute: 5,000 products took 1,230 s. Product links and includeDetails read a full product page, so expect about 2 products a minute: 3 links took 92 s, and a list of 20 links stopped at 11 products at the default timeout.
  • Default timeout: 300 s fit 99 products with sellers on, 1,040 with sellers off, and 11 full product pages. For more, raise the timeout. If the timeout comes first, you keep the rows with DEADLINE.
  • Page depth: one results page gave about 25 new products in tests. Use many keywords for large runs: the 5,000-product test used 198 keywords.
  • Memory: 256 MB by default. The highest we saw in the final test series was 149 MB, and an earlier run reached 205 MB. The Actor allows up to 512 MB.
  • Hidden data: guests may not see stock, sold counts or variant prices. These stay null, not 0.
  • Hidden prices: the lookup fills a price only if the same product ID and shop ID are found on a listing page.
  • Reviews: the Actor reads the public shop feed. A product link filters the recent part of this feed, so older reviews of the product may be missing. We read one whole feed of 1,134 reviews. Longer feeds were not tested to the end, so set a spending limit with maxReviewsPerShop: 0.
  • History: onlyChanges compares the shown price only. onlyNew can skip a known product link before reading it. Old records leave the history after stateRetentionDays, or sooner if storage fills. If history is not available, the run ends as partial with STATE_UNAVAILABLE and never marks a row as new by mistake.
  • Failures in a row: one failed product, shop or link is skipped and reported. After 3 failures in a row, the Actor stops that kind of request. Seller lookups stop without removing products. Other work stops with SOURCE_FAILED_REPEATEDLY.
  • Requests: up to 2 retries per request, a 25-second timeout, and a 5 MB limit on one response. If Shopee asks to wait more than 10 seconds, the request is treated as failed.
  • Terms and privacy: Shopee's terms limit automated access, so check them before you use this for your business. Cookies, third-party keys and buyer IDs or contacts are not saved.

👉 Try it now: open the input form

API, export and integrations

API. Start a run and get the rows, using your own Apify token:

curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~shopee-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"country":"th","keywords":["phone case"],"maxItems":10}'

Export. Download the dataset as JSON, CSV, Excel, XML or RSS from the Output tab or the API. Add ?view=products to the dataset items link to get only the Products columns.

Scheduling. Use Apify Schedules to run a price check each day. Use onlyChanges so you get only what changed.

Webhooks. Use Apify webhooks to call your system when a run ends. Read RUN_SUMMARY to see if the run was complete or partial.

SDK.

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/shopee-scraper").call(
run_input={"country": "th", "keywords": ["phone case"], "maxItems": 10}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["name"], row["price"], row["currency"])

Use with AI agents (MCP)

Connect this Actor as a tool through https://mcp.apify.com?tools=cliqtomedia/shopee-scraper.

The smallest input is:

{"country":"th","keywords":["phone case"],"maxItems":10}
  • Main fields: country, keywords, maxItems, includeSellerDetails, onlyChanges.
  • Time and cost: 20 to 40 seconds and about $0.006 on the Free plan.
  • Limits: 5,000 products per run, and about 20 products a minute with sellers on. For large requests, set includeSellerDetails to false, and set a timeout and a spending limit.

👉 Try it now: open the input form

Troubleshooting

The run has fewer rows than maxItems

  • Symptom: the status is partial with stopReason: DEADLINE.
  • Likely reason: the timeout came first. Seller lookups make the run slow.
  • Check: stopReason in RUN_SUMMARY.
  • Action: raise the timeout or set includeSellerDetails to false.

The run stopped at the spending limit

  • Symptom: stopReason: CHARGE_LIMIT.
  • Likely reason: the maximum cost you set for the run was reached.
  • Check: the run's charged events.
  • Action: raise the limit. The delivered rows are kept.

No rows

  • Symptom: run SUCCEEDED with 0 rows and stopReason: SOURCE_EXHAUSTED.
  • Likely reason: no product passed the filters, or the keyword has no results in this market. With the API, a misspelled field can also cause this: the Actor ignores unknown fields, so keyword instead of keywords means an empty request, and you pay the start fee.
  • Check: your filters and field names. Use words in the language of the market.
  • Action: fix the field names, remove filters and run again with a small limit.
  • Symptom: INVALID_URL_SKIPPED and errors such as INVALID_URL with productUrls[1].
  • Likely reason: the link is not a Shopee link of a supported market, or a product link has no shop ID.
  • Check: the errors list in RUN_SUMMARY.
  • Action: fix that link. The other links still ran.

The run failed with SOURCE_BLOCKED or SOURCE_FAILED_REPEATEDLY

  • Symptom: run FAILED or partial, and these codes in RUN_SUMMARY.
  • Likely reason: Shopee refused the requests or was not available for some time.
  • Check: whether the rows delivered before the stop are enough for you.
  • Action: try again later or with a smaller scope. If it repeats, open an Issue with the run ID.

A product is missing or has no data

  • Symptom: DETAIL_UNAVAILABLE or PRODUCT_PAYLOAD_UNAVAILABLE.
  • Likely reason: the product page was not available for a guest. It may no longer be listed.
  • Check: open the link in a private browser window.
  • Action: the other products are kept. Retry this one later.
  • Symptom: INVALID_REDIRECT or CROSS_MARKET_REDIRECT.
  • Likely reason: Shopee sent the request to a page outside the expected site or market.
  • Check: the link and its country domain.
  • Action: use the full product link from that market.

Seller fields are empty

  • Symptom: shopLookupStatus: unavailable and OPTIONAL_SELLER_UNAVAILABLE.
  • Likely reason: the seller lookup failed for this shop.
  • Check: optionalSellerErrors in RUN_SUMMARY.
  • Action: the product rows are kept. Run again later for those sellers.

The input was refused

  • Symptom: run FAILED with an error code such as ITEM_NEEDS_SHOP_ID, INVALID_ID, INVALID_PRICE_RANGE or PAID_PROXY_SELECTION_UNSUPPORTED.
  • Likely reason: the product ID has no shop ID, an ID has more than digits, minPrice is above maxPrice, or the proxy is Residential or Unblocker.
  • Check: the code in RUN_SUMMARY.
  • Action: fix that field. The run costs only the start fee.

👉 Try it now: open the input form

FAQ

Do I need a Shopee login or cookies?

No. The Actor reads public guest pages only. Do not add a login, cookies or any Shopee keys.

How many products can I get, and what will it cost?

Up to 5,000 per run. The 5,000-product test cost $2.078 on the Free plan with sellers off. If nothing is found, you pay only for the start and the pages read. An empty request costs $0.0008.

Why are sold and stock empty?

Shopee hides them from guests on many products. The Actor returns null and never guesses or returns 0. Check soldStatus and stockStatus.

Are the rows complete and fresh?

The rows show what a guest sees at the time of the run, and fetchedAt gives that time. Prices can change at any moment, and sponsored cards can change the order. Search does not promise every product on Shopee.

Can I watch prices over time?

Yes. Use onlyChanges with a stateName and an Apify schedule. The first run saves the history, and later runs return only new products and price changes.

👉 Try it now: open the input form

👉 Try it now: open the input form

Support

Open a request in the Issues tab of this Actor. Include the run ID, the mode you used and the error code or the row that looks wrong. Do not send your Apify token or any other secret.

👉 Try it now: open the input form