Tony Wang8 分で読めますHow to Scrape SHEIN in 2026 (API & Python)
Scrape SHEIN in 2026 — product search, detail, category listings, filter facets, navigation, and trending keywords as structured JSON — DIY, no-code, or API.
The fastest way to scrape SHEIN in 2026 is to call a structured API that returns normalized JSON for keyword search, product detail, category listings, and trending keywords — instead of trying to reach SHEIN's own app API yourself. SHEIN's storefront is open to browse without an account, but there's no self-serve public API for outside developers, and the data behind search and product pages sits behind a genuinely layered anti-bot stack, not a simple rate limit. This guide covers all three approaches, what each returns, exactly where DIY stops working, and the legal basics.
Why scrape SHEIN?
SHEIN's product and category data powers:
- Fast-fashion pricing intelligence — track how a listing's price and sale status move, at SHEIN's release-and-markdown pace.
- Catalog and assortment research — see what a category carries and how deep it runs, category by category.
- Trend and demand tracking — the trending search keywords SHEIN's own app surfaces are a real-time read on what shoppers are searching for.
- Size and stock availability tracking — per-SKU stock lets you watch when a popular size sells out.
- Competitor and retail-intelligence pipelines — feed normalized fast-fashion listings into pricing models alongside other retailers.
Is it legal to scrape SHEIN?
Option 1: DIY in Python (and why it breaks)
SHEIN's search and product data isn't served from a stable public JSON endpoint — it comes from the same app API SHEIN's own mobile app calls, and that API checks a signed request before it returns anything:
import requests
# The real host and path are omitted deliberately — see the anti-bot deep
# dive linked below for why reconstructing them isn't the point here.
resp = requests.get(
SHEIN_APP_API_HOST + "/product/search",
params={"keyword": "dress", "page": 1},
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
# A plain, unsigned request doesn't reach product data at all — SHEIN's app API
# rejects it before that. The rejection can look like an auth failure
# ("You must upgrade your app.") when it's really a routing/signing check.
print(resp.status_code, resp.text[:200])
It fails immediately, and for reasons that compound rather than a single fixable bug:
- Request signing. Every call needs an
x-gw-authsignature header — a deterministic HMAC over a fixed set of request headers — reconstructed by decompiling SHEIN's app. Skip it and you get an error that reads like an auth failure but is really a signing rejection. - A native device fingerprint. Clear signing and the product endpoints still refuse: they require a pair of tokens generated inside a packed, virtualized native library — deliberately hostile to static analysis, not something
requestscan produce. - A device identity check. Clear the fingerprint too, and detail/category endpoints validate a stable per-install device id on top of it.
- No self-serve API and no official developer program. There's no sanctioned way to request programmatic access as an outside researcher.
- Doing this yourself crosses into real legal exposure, not just engineering difficulty — see the legal section above.
The full mechanics of all three layers — and why "hard to reverse" and "bound to the client" turn out to be different problems — are in how SHEIN's anti-bot actually works. The one tier that is DIY-reachable without any of that is the metadata surface: category filter facets, subcategory navigation, and trending search keywords, which sit behind only the signing layer.
Option 2: No-code tools
Browser extensions and point-and-click scrapers can export a page of SHEIN search results for a one-off pull against the public web storefront, but they don't reach the app API's product data any more reliably than a DIY script does, and they give you no stable schema for a recurring pricing or catalog pipeline.
Option 3: A structured SHEIN API
For a repeatable workflow, Crawlora's SHEIN API returns normalized JSON for product search, product detail, category listings, filter facets, navigation, and trending keywords — no anti-bot work to maintain, because Crawlora already runs it as infrastructure. Search by keyword:
curl "https://api.crawlora.net/api/v1/shein/products/search?keyword=dress&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"
A search response is normalized, paginated JSON with pricing, rating, and a goods_id per product (real fields — check the docs):
{
"code": 200,
"msg": "OK",
"data": {
"keyword": "dress",
"total": 6535,
"page": 1,
"products": [
{
"goods_id": "163003837",
"goods_name": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress",
"sale_price": "HK$119.00",
"usd_price": "$15.16",
"comment_count": 1001,
"comment_avg": "4.68",
"sold_out": false,
"on_sale": true
}
]
}
}
Then pass a result's goods_id to product detail for the full color/size breakdown:
import requests
BASE = "https://api.crawlora.net/api/v1/shein"
headers = {"x-api-key": "YOUR_API_KEY"}
results = requests.get(f"{BASE}/products/search", headers=headers, params={"keyword": "dress"}).json()["data"]["products"]
goods_id = results[0]["goods_id"]
product = requests.get(f"{BASE}/products/detail", headers=headers, params={"goods_id": goods_id}).json()["data"]
for sku in product["skus"]:
print(sku["sku_code"], sku["stock"], sku["sale_price"])
Product detail returns every color variant, the full size list, per-SKU stock, and the image gallery:
{
"code": 200,
"msg": "OK",
"data": {
"goods_id": "163003837",
"goods_name": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress",
"sale_price": "HK$119.00",
"usd_price": "$15.16",
"on_sale": true,
"color_variants": [
{ "goods_id": "162996968", "color_name": "Blue" }
],
"sizes": [
{ "attr_id": "87", "attr_name": "Size", "attr_value_id": "757", "attr_value_name": "XXS" }
],
"skus": [
{ "sku_code": "I6ar22eezl2i", "stock": "20", "sale_price": "HK$119.00" }
]
}
}
For category browsing instead of keyword search, pull a category's complete listing along with its facets and subcategory tabs:
curl "https://api.crawlora.net/api/v1/shein/category/goods?cat_id=1727&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"
curl "https://api.crawlora.net/api/v1/shein/category/filters?cat_id=1727" \
-H "x-api-key: $CRAWLORA_API_KEY"
curl "https://api.crawlora.net/api/v1/shein/category/nav?cat_id=1727" \
-H "x-api-key: $CRAWLORA_API_KEY"
And for the credential-free discovery surface — search-box typeahead and the trending keywords SHEIN's own app shows:
curl "https://api.crawlora.net/api/v1/shein/search/autocomplete?word=dres" \
-H "x-api-key: $CRAWLORA_API_KEY"
curl "https://api.crawlora.net/api/v1/shein/search/keywords" \
-H "x-api-key: $CRAWLORA_API_KEY"
Store one row per goods_id (or sku_code if you need per-size granularity), and re-run search or category pulls on a schedule to track sale_price and stock changes.
What you can collect
Public product and catalog data: search results (name, price, rating, sale status, image) filtered by keyword; full product detail (real marketing description, every color variant, the complete size list, per-SKU stock, and the image gallery); a category's complete product listing plus its filter facets (size, color, material, price range) and subcategory navigation tabs; search-box autocomplete suggestions; and the trending search keywords SHEIN's app surfaces in its own search box. Public storefront data only — not account, order, or payment information.
Beyond search: deals, sellers and trends
Besides search, detail and category listings, the SHEIN API has routes for three other surfaces. We called each on 2026-10-26.
- Deals.
/shein/deals/productspages through SHEIN's coupon and deal pool, which reports atotalof 3,000, using the same product-card fields as search./shein/deals/tabsreturns the 21 deal-landing categories (the first is Home & Living,cat_id2032), and you can pass their ids to/shein/category/goods. - Sellers. Every product card carries a
store_code./shein/storeturns it into a profile with the store name, logo, follower count, seller label and four store-type flags. The store we sampled, Dazy Kids, returned 202K followers and the label Brand, withis_trends_storetrue andis_brand_storefalse, so treat the label and the flags as separate fields./shein/store/productslists one category of a store's products. - Trends.
/shein/trending/categoriesreturned 36 trending categories, each with a representativestore_codeandgoods_id./shein/trending/filtersreturned 14 collection tabs and 9 category filters./shein/categoriesand/shein/brandsreturn the root category tree and the brand channel's 21 category tabs, with ids you can reuse in the routes above.
Two limits showed up. On the deals route, 15 of the 20 pages we requested answered 503, and the pages that worked held 10 products although page_size was 20, so retry with a pause and do not treat a short page as the last one. And the store route returned an empty categories list for the store we sampled, so do not rely on it to find the category_id that /shein/store/products needs.
Limitations and common challenges
- No self-serve public API. SHEIN doesn't offer outside developers a sanctioned way to pull catalog data programmatically — a structured API fills that gap.
- The app API is gated behind a genuinely layered anti-bot stack. Request signing, a native device fingerprint, and a device-identity check all have to clear in order — see how SHEIN's anti-bot actually works for exactly how each layer works and why DIY reproduction of layers 2 and 3 is a legal, not just technical, problem.
- Terms of Use restrict automated access even to public pages. SHEIN's license is explicitly personal/non-commercial and bars "any robot, spider or other manual or automated device" — see the legal section above.
- Color and size add real complexity. A product's price and stock vary by SKU, so "the product" is really a matrix of variants, not a single row.
- Media and copy are copyrighted. Price, size, and stock are facts you can collect; product photography and marketing descriptions are SHEIN's content — don't republish beyond what your use case and law allow.
Where this gets used
- Fast-fashion pricing intelligence — track
sale_price,usd_price, andon_saleon watched products or categories over time. - Catalog and trend research — measure category depth and turnover by pulling full category listings, and read shopper demand straight from the trending-keywords endpoint.
- Size and stock monitoring — watch per-SKU
stockfor high-demand items, useful for resale and restock alerts.
Sources
Start collecting
Try it first, free: run any public URL through the Free Web Scraper, or check whether a site blocks bots with the Anti-Bot Checker — no signup.
Test the search, category, and product endpoints in the Playground, check the schema in the API docs, and review pricing. For the mechanics behind SHEIN's own anti-bot stack, see how SHEIN's anti-bot actually works; for the same per-color, per-size product-detail shape on other fast-fashion retailers, see how to scrape Zara, how to scrape H&M, and how to scrape Nike. See also how to choose a web scraping API and is web scraping legal.
Part of our how-to-scrape guide series — every platform we cover, in one index.
よくある質問
How do I search SHEIN products with an API?
Send a keyword to Crawlora's /shein/products/search endpoint and get normalized, paginated product cards — name, price, rating, sale status — as structured JSON, no SHEIN account required.
Does SHEIN have an official public API?
No. SHEIN doesn't offer outside developers a self-serve API — its search and product data come from the same app API SHEIN's own mobile app calls, gated behind a layered anti-bot stack, not a documented developer program.
Can I scrape SHEIN without getting blocked?
For the metadata tier — category filter facets, subcategory navigation, trending keywords — yes, that sits behind only a signed-request check. For product search, detail, and category listings, SHEIN's app API adds a native device fingerprint and a device-identity check on top; reproducing those yourself is a real anti-bot fight, which is why a structured API that already runs that as infrastructure is the practical path.
Is it legal to scrape SHEIN?
SHEIN's Terms of Use grant only a personal, non-commercial license and explicitly prohibit any robot or automated means of accessing the Services. Collecting the public metadata tier is the defensible tier; reproducing SHEIN's device-fingerprint or device-identity checks yourself is a real DMCA §1201/CFAA exposure. See our guide on whether web scraping is legal.
Can I get every color and size for a SHEIN product?
Yes — /shein/products/detail returns every color variant plus a full sizes list and per-SKU skus array (each with its own stock and price), given a goods_id from a search or category result.
Does SHEIN category browsing paginate?
Yes — /shein/category/goods uses page and page_size query parameters, returning that category's product listing a page at a time, with the same product-card fields as search.
How do I get SHEIN's trending search keywords?
Call Crawlora's /shein/search/keywords endpoint for the trending keywords SHEIN's app surfaces in its own search box — no query parameter required, and no SHEIN account needed.