SHEIN Scraper - Products, Prices, Discounts & Ratings
Pricing
from $1.60 / 1,000 product results
SHEIN Scraper - Products, Prices, Discounts & Ratings
Scrape SHEIN product listings by keyword or from any category, sale or search link. Returns product ID, SKU, title, link, category, current price, genuine was-price and discount, star rating, review count, stock, flash-sale and clearance flags, and images. Nine regional storefronts.
Pricing
from $1.60 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
SHEIN Scraper: Products, Prices, Discounts & Ratings
Scrape SHEIN product listings by keyword, or from any category, sale or search link you paste. Returns clean, structured product data including a genuine was-price and discount, not a guessed one.
Covers the Australian, Singapore and Canadian storefronts, each with its own catalogue and currency.
What you get
Every product is one dataset row:
| Field | Description |
|---|---|
productId, sku, spu | SHEIN's own identifiers |
title | Product name |
url | Direct link to the product page |
category, categoryId | Category the product sits in |
price | Current price |
originalPrice | Was-price, only present when the item is genuinely reduced |
discountPercent, discountAmount | Discount size, only on reduced items |
isOnSale | Whether the item is genuinely reduced |
currency, priceUsd | Storefront currency symbol, plus a USD figure for cross-market comparison |
rating, reviewsCount | Star rating and number of reviews |
inStock, stock | Availability and remaining units |
isFlashSale, isClearance | Promotion flags |
hasVideo | Whether the listing has a video |
image, images | Primary image and the full image list |
storeCode, mallCode | Seller/marketplace identifiers |
scrapedAt | UTC timestamp of collection |
On the was-price
Most listings show the same value for retail and sale price, meaning the item is not discounted. This scraper leaves originalPrice, discountPercent and discountAmount empty in that case rather than echoing the current price back as a "was" price. When a discount is real, all three are populated. So isOnSale is a reliable filter.
Input
Search by keyword
{"mode": "search","queries": ["summer dress", "wide leg jeans"],"storefront": "au","maxItems": 200}
Scrape URLs
Paste category, sale or search links:
{"mode": "url","urls": ["https://au.shein.com/RecommendSelection/Women-Clothing-sc-017172961.html"],"storefront": "au","maxItems": 500}
Options
| Option | Default | Notes |
|---|---|---|
mode | search | search (by keyword) or url (paste links) |
queries | (none) | Keywords, one per line. Search mode only |
urls | (none) | Listing links, one per line. URL mode only |
storefront | au | au, sg, ca |
sortBy | relevance | Site default, price, rating, reviews or biggest discount |
minPrice, maxPrice | (none) | Price range, in the storefront's currency |
minRating | (none) | Minimum stars. Unrated products are excluded when set |
onSaleOnly | false | Only genuinely reduced products |
includeOutOfStock | true | Turn off to return only what is available |
maxItems | 20 | Total cap across all keywords and links. 0 means no limit |
maxPages | 0 | Listing pages per keyword or link. 0 means no limit |
resumeFromRunId | (none) | Continue an interrupted run, skipping what it already returned |
incrementalMode | false | Recurring runs return only new and changed products |
stateKey | (none) | Name the saved state; derived from the search when empty |
emitUnchanged | false | Also return unchanged products in incremental mode |
emitExpired | false | Also return products that have disappeared |
proxy | Apify proxy | Connection used to reach the site |
mcpConnectors | (none) | Optionally pipe results into Notion, Linear, Airtable |
Filters apply to both modes, so a pasted category link can be narrowed the same way a keyword search can.
Recurring runs and resuming
Turn on incrementalMode and every run after the first returns only what is new or changed, each row carrying changeType, changedFields, firstSeenAt and lastSeenAt. Set emitUnchanged to get everything each time, or emitExpired to be told when a product disappears.
Category and sale pages are recommendation feeds, so the products SHEIN shows rotate between visits. Expect some products to be reported as new on each run simply because the feed surfaced them this time. Price changes, by contrast, are real: SHEIN moves promotional prices frequently, and those show up as updates with price in changedFields.
Delisted products are only reported when a run reads a listing all the way through. If a run stops at maxItems, it cannot tell "gone" from "not reached yet", so it says nothing rather than guessing.
If a run is interrupted, pass its run ID as resumeFromRunId and the next run skips whatever it already returned.
Send results into your apps (MCP connectors)
Authorize a connector under Apify, Settings, API & Integrations, then pick it in mcpConnectors. Notion also needs notionParentPageUrl. Each product is written as a readable summary; the complete record always stays in the Apify dataset. A connector problem never fails the run or changes the dataset.
How deep can it go?
Each listing link yields up to 120 products, which is one full page of SHEIN's own results. To collect more, pass more links: run several categories, sale pages or searches together and the totals add up, deduplicated by product.
A large category holds far more than 120 products, and this scraper does not currently walk past the first page of one. If you need deeper coverage of a single category, split it into narrower sub-categories or searches and pass those as separate links.
Pricing
Pay per result: you are charged for each product returned, plus a one-off start fee. You are not charged for duplicates: products already returned in the same run are filtered before billing.
Notes and limits
-
There is no full-detail mode. A product's own page carries more (attributes, size and colour options, seller, the full image set), but the site serves only one product page per session, so fetching details would cost a fresh session per product, around 130 times the price of a listing result. Rather than ship a paid option that fails four times in five, it is left out. Everything listed above comes from the listing itself.
-
Results reflect what the chosen storefront shows for that region. Prices, availability and the catalogue itself differ between storefronts.
-
A keyword search returns SHEIN's own ranked results, so ordering can shift between runs.
-
If a listing is temporarily unavailable, the run finishes with whatever it collected and says so in the log rather than failing outright.