SHEIN Scraper - Products, Prices and Categories
Pricing
from $2.20 / 1,000 results
SHEIN Scraper - Products, Prices and Categories
Extract SHEIN products and categories from regional storefronts including the US, UK, Germany, France, and the Philippines. Get prices, images, sizes, colors, and available ratings; pay per delivered row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
5
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
SHEIN Scraper
Extract SHEIN products, prices, sizes, colors, and category rows from regional storefronts into an exportable dataset.
- Search by keyword, category, product URL, or goods ID.
- Compare local-currency prices and source-provided USD amounts.
- Get product images, SKU options, and available ratings.
- Export product rows or a two-level category tree.
- Pay $3.00 per 1,000 delivered rows on the Free plan, plus a start fee.
What does SHEIN Scraper do?
SHEIN Scraper collects public product listings and details for price monitoring and assortment research. Regional choices include us, uk, de, fr, ph, au, mx, and br. Availability and fields vary by storefront; choose one region per run.
- Keyword search: use
queryorkeywordsfor product listings. - Category listing: use
categoryUrl,catId,categorySlug, orbucket. - Product detail: use
productUrlorgoodsIdfor one product. - Categories: set
modetocategoriesfor category rows, not products. - Detail enrichment: enabled by default for up to three listing rows. It fills the same product row, without a separate row charge.
- Optional extras:
includeReviewsadds available review samples to product rows.expandColorscan add billed color-product rows within the row limit. Both are off by default.
What data can you extract from SHEIN?
Product rows
Detail fields depend on the product page being available. A listing without enrichment may contain fewer fields.
| Field | Description | Example |
|---|---|---|
rowType | Row category for products | product |
type | Listing or detail subtype | productDetail |
id | Stable product identifier | 414286470 |
goodsId | SHEIN goods identifier | 414286470 |
goodsSn | Product series code | sz25042590866423837 |
title | Product name | Linen blend dress |
url | Product page address | https://us.shein.com/Dress-p-414286470.html |
region | Selected storefront | us |
currency | Price currency | USD |
salePrice | Current local-currency price | 12.49 |
retailPrice | Local-currency list price | 18.99 |
usdSalePrice | USD amount when supplied | 12.49 |
usdRetailPrice | USD list price when supplied | 18.99 |
image | Main product image address | https://img.ltwebstatic.com/example.jpg |
images | Available image gallery | [] |
skuList | Size-level SKU options | [{"skuCode":"EXAMPLE-M","size":"M"}] |
skuCount | Options found before truncation | 4 |
colors | Related color IDs and labels | [{"goodsId":"12345678","attrValue":"Blue"}] |
stock | Source availability value, not a verified inventory count | null |
ratingValue | Average published rating | 4.8 |
ratingCount | Published aggregate rating or review count | 120 |
reviews | Optional review sample | [] |
reviewCount | Reviews found in the sample source, not the overall total | 0 |
enriched | Whether details were added | true |
scrapedAt | Collection timestamp | 2026-10-24T08:00:00+00:00 |
goodsId identifies a product; skuList[].skuCode identifies a size option. priceLocal and priceUsd remain compatibility aliases; prefer salePrice and usdSalePrice.
Category rows
| Field | Description | Example |
|---|---|---|
rowType | Row category | category |
id | Stable category identifier | women |
name | Category display name | Women |
bucket | Category grouping | clothing |
level | Parent or child level | 1 |
parentId | Parent identifier on child rows | women |
catId | SHEIN category identifier | 2223 |
categorySlug | Category address slug | Women-Tops |
categoryUrl | Category address, when available | null |
childCount | Children of a parent category | 5 |
How to scrape SHEIN
- Open SHEIN Scraper in Apify Console.
- Fill one target field and choose
regionif you do not want the US storefront. - Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- Download the dataset or read it through the API.
Empty input starts an example US search for dress, limited to three rows. It is a normal billed run. With mode: "auto", filling one target chooses the matching mode. When targets conflict, URLs take priority over IDs, then category shortcuts, then keywords. INPUT_REPORT records ignored fields.
Keyword search
Fill query, keyword, or keywords. keyword takes precedence over query; with a batch, it runs before keywords. Each keyword has its own row limit. Products repeated across inputs are deduplicated.
Category listing
Use a current categoryUrl, a known catId, or a shortcut such as bucket: "sale". Category IDs and promotional destinations can differ by region.
Product detail
Use goodsId or a SHEIN HTTPS product URL containing -p-<number>.html. Relative paths are accepted. This mode returns a product row, not a separate row for every size.
Categories
Set mode: "categories" explicitly; no target is required. An optional bucket narrows the category tree. It uses normal row limits rather than the three-row example limit.
What to fill in
| Field | What to enter | Default |
|---|---|---|
mode | auto, keywordSearch, categorySearch, productDetail, or categories | auto |
query | One search phrase | Empty; sample dress |
keyword | Alternative single search phrase | Empty |
keywords | Array of search phrases | Empty |
productUrl | SHEIN product URL or relative path | Empty |
goodsId | Numeric product identifier | Empty |
categoryUrl | Category or promotion URL | Empty |
catId | Numeric category identifier | Empty |
categorySlug | Category slug, preferably with catId | Empty |
bucket | Category shortcut, such as sale or women | Empty |
region | Storefront code such as us, uk, or ph | us |
browseCountry | Country alias; GB selects uk; overrides region | Empty |
currency | Currency hint such as USD or EUR | Regional currency |
maxResults | Maximum rows per input, from 1 to 500 | 70; form sample 3 |
sort | recommend, sales, price_asc, price_desc, or newest | Site order |
minPrice | Minimum local-currency price | Unset |
maxPrice | Maximum local-currency price | Unset |
color | Site-specific color filter value | Empty |
size | Site-specific size filter value | Empty |
refine | Known category filter expression | Empty |
enrichDetails | Add available details to listing rows | true |
enrichLimit | Maximum listing rows to enrich, from 0 to 50 | 3 |
includeReviews | Include available review samples | false |
expandColors | Add color-product rows when space remains | false |
page | Starting listing page, from 1 to 100 | 1 |
maxPages | Legacy page setting; use maxResults to limit this Actor | Form 1; API omission 3 |
pageRetry | Page retry setting, from 1 to 5 | 1 |
forceSuggest | Request the alternate search option on later pages | false |
Keyword search:
{"query": "linen dress","region": "us","maxResults": 3}
Category listing:
{"bucket": "sale","region": "us","maxResults": 3}
Product detail; replace the example ID with a current product:
{"goodsId": "414286470","region": "us","maxResults": 1}
Category tree:
{"mode": "categories","region": "us","maxResults": 5}
maxItems and limit are accepted aliases for maxResults. Close field-name misspellings are corrected; other unknown fields and invalid sort choices are ignored with a note. Invalid targets stop before any row charge with INVALID_INPUT: followed by the field and a correction. The start fee can still apply. Each run records its input interpretation in INPUT_REPORT in the default key-value store.
Output example
Illustrative product row; prices and availability are not a current offer:
{"rowType": "product","type": "product","id": "414286470","goodsId": "414286470","title": "Linen blend dress","url": "https://us.shein.com/Dress-p-414286470.html","mode": "keywordSearch","region": "us","currency": "USD","salePrice": 12.49,"ratingValue": 4.8,"ratingCount": 120,"scrapedAt": "2026-10-24T08:00:00+00:00"}
Export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. Use JSON when you need nested arrays such as skuList and reviews.
Why use this SHEIN scraper?
- Pay for delivered rows. Failed page attempts are not dataset rows.
- Keep available results. Partial results returned for delivery can be saved; rows already written remain available after a stop. Pending rows are not guaranteed after a manual abort.
- Understand failures.
ERROR_SUMMARYcontains failure details;RUN_SUMMARYincludes warnings and partial-result information. - Preserve missing values. Unavailable titles or prices are not invented.
- Batch searches. Collect several keywords in one run and schedule repeat price checks.
- No proxy setup. You do not need to set up proxies.
How much does it cost to scrape SHEIN?
Pricing is pay per event: $0.005 per start event, plus delivered rows. At the default 512 MB, a start incurs one start event. Start billing is one event per GB, with a minimum of one. Platform usage is included in these prices.
| Apify plan | Start event | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
maxResults applies to each keyword; a category, product, or category-tree request counts as one input. The default is 70. Larger requests are collected in parts of up to 70, subject to available results. The Free plan is capped at 200 rows per run and 10 runs of this Actor. Paid plans remove that run-count restriction, not row charges.
The whole run stops at the Maximum cost per run you set (maxTotalChargeUsd in the API). Additional color-product rows share the row limit and price. Enrichment and embedded reviews do not add separate row charges.
Example: two keywords delivering three distinct rows each give six rows. On the Free plan, one start at 512 MB costs $0.005 + 6 × $0.003 = $0.023.
What happens when the run timeout is too short
When automatic recovery is accepted, a short timeout can pause a run rather than fail it. Its status message says: "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." The run temporarily appears as ABORTED.
When results are ready, the same run resumes, writes to the same dataset, and finishes as SUCCEEDED if collection succeeds. Already delivered rows are skipped, so recovery does not deliver or charge them twice. If delivery had already started, the status can say "Resumed: delivering N rows." You do not need to restart a paused run manually.
Recovery is limited to at most three pauses per run. Keep the default timeout of 3600 seconds to reduce interruptions. Recovery is not a guarantee that failed collection will succeed.
The synchronous endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return an empty dataset while a run is paused. For longer jobs, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook.
Use with AI agents and the API
Apify MCP server
In Claude, ChatGPT, Cursor, VS Code, or another remote MCP client, add:
https://mcp.apify.com?tools=lentic_clockss/shein-scraper
Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; read rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/shein-scraper with APIFY_TOKEN set.
Example prompt: "Find three linen dresses on SHEIN US and return their names, prices, and product URLs."
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/shein-scraper").call(run_input={"query": "linen dress", "region": "us", "maxResults": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/shein-scraper').call({query: 'linen dress', region: 'us', maxResults: 3,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Over HTTP, send input as JSON to POST https://api.apify.com/v2/acts/lentic_clockss~shein-scraper/runs with an Authorization: Bearer token header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use the Integrations tab to connect Google Sheets, Make, Zapier, n8n, Slack, Airtable, or a webhook. Use Apify Schedules for recurring runs.
FAQ
Is it legal to scrape SHEIN?
This Actor collects public data and is not affiliated with SHEIN. You are responsible for complying with applicable terms and data-protection law. Processing personal data, including review content, requires a lawful basis.
Why did my run end as ABORTED?
It may be paused for automatic recovery; check the status message above. A manual abort is different and should not be assumed to resume automatically.
How many results can I get?
Set maxResults from 1 to 500 per input. The overall cost cap, Free-plan allowance, deduplication, and available products can reduce delivered rows.
Why are some fields empty?
Listings have fewer details than product pages, and fields vary by region. Enrichment can add available fields, but does not guarantee every price, size, rating, or image.
Can I collect every review?
No. includeReviews returns available samples, up to 50 entries per product. reviewCount is not the total review count and may exceed the returned sample length when truncated. Use ratingCount for the published aggregate when present.
Does stock mean exact inventory?
No. stock preserves a source value whose inventory meaning is not established. Do not interpret 0 as confirmed out of stock.
Are color rows independently checked products?
Not necessarily. expandColors can reuse parent details for additional color IDs. Check expandedFrom and colorLabel; do not assume a separate price or URL was verified for every color.
Limitations
- No checkout, orders, private accounts, or full review pagination.
- Regional support does not guarantee every product or category is available. Unknown region codes are rejected.
- Category mappings and sample IDs can become stale; use current category URLs.
- Detail galleries contain up to 40 images; SKU, color, and size-attribute lists are capped at 50.
maxPagesis not a reliable Actor row cap; usemaxResultsand the run cost limit.- Seller-specific contact details are not promised; any contact fields describe the platform rather than an individual product seller.
Related scrapers
More e-commerce and marketplace scrapers from the same publisher:
- Walmart Product Scraper
- Temu Product Scraper
- Allegro Scraper
- TikTok Shop Product Scraper
- Amazon Search, Category & Best Sellers Scraper
- Coupang Product Scraper
- MercadoLibre Scraper
- Rakuten Japan Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.