Tony Wang7 min readHow 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.
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.
Frequently asked questions
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.