Shein Product Detail & Variants Scraper
Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.
Shein Product Detail & Variants Scraper
Extract full product detail from Shein PDPs: all color/size variants with per-variant stock, pricing, size guide, composition, ratings, and images. Supports us.shein.com and regional storefronts. Built for apparel-catalog and dropshipping-import workflows.
What you get
Each scraped PDP produces one dataset record with:
| Field | Type | Description |
|---|---|---|
goods_id |
string | Shein internal product id (numeric string, extracted from PDP or URL) |
goods_sn |
string | Shein product SKU/style code (e.g. sw2212215742) |
product_url |
string | Canonical product page URL |
product_name |
string | Product display title |
brand |
string | Brand name (Shein sub-brand where available) |
category_path |
string | Breadcrumb category path (e.g. Women / Dresses / Maxi Dresses) |
description |
string | Product description text |
sale_price |
number | Current discounted sale price |
retail_price |
number | Original / retail price before discount |
discount_pct |
number | Discount percentage off retail price (0–100) |
currency |
string | Currency code (e.g. USD, GBP, EUR) |
in_stock |
boolean | True if at least one variant is available |
stock_hint |
string | Low-stock banner text (e.g. "Almost Sold Out") — null if none |
colors |
array | Color option objects — {color_name, thumb_url, goods_id_for_color} |
sizes |
array | Size objects — {size_label, size_measurements, in_stock} |
size_fit |
string | Size fit feedback summary (e.g. "Runs small", "True to size") |
size_guide |
object | Size guide chart — {unit, rows:[{size, bust, waist, hip, length}]} |
images |
array | Product image URLs (main + all gallery images) |
video_url |
string | Product video URL — null if none |
material |
string | Primary material name |
composition |
string | Full fabric composition (e.g. 95% Polyester, 5% Spandex) |
care_instructions |
string | Care instruction text |
review_count |
integer | Total number of customer reviews |
avg_rating |
number | Average star rating (0–5) |
rating_breakdown |
object | {true_to_size_pct, quality_pct, shipping_speed_pct} |
seller_name |
string | Seller/store name — null for standard Shein listings |
is_flash_sale |
boolean | True if the product is on a flash/limited-time sale |
flash_sale_price |
number | Flash-sale price if active — null otherwise |
flash_sale_end |
string | ISO 8601 end timestamp of the flash sale — null if not a flash sale |
scraped_at |
string | ISO 8601 timestamp when this record was scraped |
region |
string | Storefront region code (us / uk / de / etc.) |
Input
| Parameter | Type | Required | Description |
|---|---|---|---|
productUrls |
array | Yes | List of Shein PDP URLs to scrape. Each entry is {"url": "https://us.shein.com/...-p-<id>.html"}. URLs must end in -p-<id>.html. |
maxItems |
integer | Yes | Maximum number of records to return. |
region |
string | No | Storefront region code (e.g. us, uk, de). Auto-detected from the URL if omitted. |
Example input
{
"productUrls": [
{"url": "https://us.shein.com/Adidas-M-Lux-Tiro-P-Polo-Comfortable-Short-Sleeve-T-Shirt-Tops-Men-p-494522693.html"},
{"url": "https://us.shein.com/Shirts-Real-Me-Cotton-Top-Tees-Summer-Street-Style-Short-Sleeve-Shirt-Harajuku-Casual-Tshirt-P-Shirts-Crewneck-Summer-Tops-Casual-p-505855831.html"}
],
"region": "us",
"maxItems": 100
}
Supported URLs
https://us.shein.com/...-p-<id>.htmlhttps://shein.co.uk/...-p-<id>.htmlhttps://shein.de/...-p-<id>.html- Any
*.shein.*orshein.com*hostname with a-p-<id>.htmlpath
URLs that do not match the -p-<id>.html pattern are skipped with a warning.
Resuming a large crawl
To continue a run that was interrupted or hit maxItems before finishing:
- Find
resumeCursorin the previous run's OUTPUT key-value store entry. - Pass it as
resumeCursorin the new run's input alongside the sameproductUrlslist.
The actor reopens the previous run's request queue, skipping pages already processed — no duplicate charges, no duplicate records.
Note: resumption only benefits runs that did not complete in a single execution. Single-URL or fully-completed runs do not need it.
Notes
- Reliable access to Shein PDPs — JS rendering and anti-bot detection are handled for you.
- A read-through cache reduces redundant upstream fetches on re-runs of the same URLs.
- Anti-bot challenge pages (fetch reports success but carries no product data) are detected and skipped automatically.
- Price and stock data reflects the state at scrape time. For price monitoring use the companion Shein Product Monitor actor.