SHEIN Scraper avatar

SHEIN Scraper

Pricing

from $1.20 / 1,000 products

Go to Apify Store
SHEIN Scraper

SHEIN Scraper

Scrape SHEIN product listings by keyword, product ID, or URL. Returns prices, ratings, images, and optional reviews.

Pricing

from $1.20 / 1,000 products

Rating

0.0

(0)

Developer

Data Scrapers

Data Scrapers

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Security

Limited permissions

Share

SHEIN Scraper creates a structured dataset of product listings collected from SHEIN storefront search and product pages. Each dataset item is one product and can include identifiers, pricing, ratings, images, category labels, color variants, and optional nested details and reviews arrays on the same row. Query the source using keyword search, numeric goods IDs, or SHEIN URLs, control volume with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format. Pricing starts from $0.001 per product row, with optional $0.001 per details enrichment and $0.001 per review when those options are enabled (verify current event prices in the Apify Console).

SHEIN Scraper — input to structured data

Dataset at a glance

PropertyValue
Sourcewww.shein.com (regional hosts such as de.shein.com)
Record unitOne product listing
Input methodssearchQueries, productIds, startUrls
Main identifiersgoodsId, url, goodsSn, spu
DeliveryApify default dataset and Dataset API
Export formatsJSON, CSV, Excel, XML, RSS, HTML (via Apify export)
Update modelFresh records per Actor run
PricingPay per event: product row, optional details, optional reviews (see below)

Coverage and available records

Supported

  • Keyword search with sort options (recommend, newest, price_asc, price_desc, popular)
  • Direct fetch by SHEIN goods ID (productIds)
  • Product or search URLs via startUrls (search URLs are treated as queries)
  • Store context via country — currency and residential proxy country are set automatically (United Kingdom → GBP, Japan → JPY). Europe shares the EUR identity; the United States uses the US identity
  • Listing-card fields: name, brand code, category, sale and retail price, discount, rating, review count, stock flags, images, color swatches
  • Optional details object on the same row: description, attribute table, size and stock, gallery, store info, live price when returned
  • Optional reviews array on the same row: text, rating, date, buyer size hints, images (up to maxReviewsPerProduct)

Observed behavior

  • Residential proxies follow the selected store (GB → GB, JP → JP, with a nearby fallback when Apify has no exit for that ISO code)
  • Products from multiple queries are enriched in parallel (up to six concurrent product jobs)
  • Extra detail endpoints may be skipped when the storefront risk session is stale; the run continues with listing-card data only

Not currently collected

  • Separate dataset rows per review (reviews stay nested under reviews)
  • Guaranteed size or material fields on every listing (card-level material may contain UI metadata)
  • Historical price snapshots across runs (each run is a new extract)
  • Full marketplace coverage for a query in a single run (maxItems caps volume)

Data dictionary

Product (top-level fields)

FieldTypeNullableDescriptionExample
goodsIdstringnoSHEIN goods ID"234115243"
goodsSnstringyesInternal goods serial"sz25073006763685501"
spustringyesStyle / SPU code"z250730067636"
productIdstringyesProduct relation ID from the card"z250730067636"
namestringyesProduct title"Plus Size Knit Dress..."
urlstringnoPublic product URL for countryhttps://de.shein.com/...-p-234115243.html
brandstringyesBrand code on the card"1et3n"
categorystringyesCategory name"Plus Size Dresses"
categoryIdstringyesCategory ID"1889"
currencystringyesISO currency when present on the card"EUR"
salePricenumberyesNumeric sale price25.49
salePriceDisplaystringyesFormatted sale price"25.49€"
retailPricenumberyesNumeric retail / reference price33.99
retailPriceDisplaystringyesFormatted retail price"33.99€"
discountPricenumberyesDiscount amount when exposed0.0
discountPercentnumberyesDiscount percentage0.0
ratingnumberyesAverage star rating from the card4.68
reviewCountintegeryesReview count when numeric416
reviewCountDisplaystringyesDisplay review count string"100+"
soldOutbooleannoSold-out flag from cardfalse
stockstringyesStock indicator when present"1"
isClearancebooleannoClearance flagfalse
isOnSalebooleannoOn-sale flagfalse
isPlusSizebooleannoPlus-size flagtrue
quickshipbooleannoQuickship flagtrue
mallCodestringyesMall code"1"
storeCodestringyesStore code"4952344492"
imageUrlstringyesPrimary image URLhttps://img.ltwebstatic.com/...
detailImagestring or string[]yesExtra gallery URLs from search card[ "https://..." ]
videoUrlstringyesVideo reference when present"0"
colorImagesstring or arrayyesColor swatch imageURL or list
colorsobject[]noRelated color variants { goodsId, image, color }may be empty entries
labelsarraynoMarketing labels from card[]
materialobjectyesRaw card UI / material payload from searchnested object
sourceQuerystringyesKeyword, ID, or URL source for the row"dress"
scrapedAtstringnoUTC ISO-8601 scrape timestamp"2026-11-03T21:43:12.399768+00:00"
detailsobjectyesPresent when includeDetails is true and detail APIs succeedsee below
reviewsobject[]yesPresent when includeReviews is truesee below

Recommended deduplication key: goodsId within a country-specific catalog. For cross-run dedup, use goodsId plus your run timestamp or dataset id.

details (when enabled and returned)

FieldTypeNullableDescription
descriptionstringyesProduct description text
productDetailsobject[]noAttribute rows { name, value }
materialDetailsobjectyesMaterial block from detail API
sizeAndStockarraynoSize and stock rows when exposed
galleryarrayyesDetail gallery URLs
videoobjectyesVideo metadata
storeInfoobjectyesStore block
salePricenumberyesLive sale price from detail
salePriceDisplaystringyesFormatted live sale price
currencystringyesCurrency on detail price
stockstringyesStock from detail
isOnSalebooleanyesOn-sale from detail
realtimeobjectyesLive stock, promotions, shipping hints when merged

Review object (reviews[])

FieldTypeNullableDescription
commentIdstringnoReview ID
goodsIdstringnoParent goods ID
ratingnumberyesStar rating
contentstringyesReview text
translatedstringyesTranslated text when provided
languagestringyesLanguage flag
datestringyesReview date string from storefront
userNamestringyesDisplay name
userAvatarstringyesAvatar URL
userHeightstringyesBuyer height hint
userWeightstringyesBuyer weight hint
verifiedPurchasebooleannoVerified purchase flag
colorstringyesPurchased color
sizestringyesPurchased size
imagesarraynoReview image URLs
videosarraynoReview video URLs
likeCountintegeryesHelpful votes

Example dataset record

Produced with searchQueries: ["dress"], country: "DE", maxItems: 10, includeDetails and includeReviews disabled (listing-card fields only):

{
"goodsId": "234115243",
"goodsSn": "sz25073006763685501",
"spu": "z250730067636",
"productId": "z250730067636",
"name": "Lounesse Plus Size Women High Neck Black Knit Long Sleeve Paired With Khaki Corduroy A-Line Skirt...",
"url": "https://de.shein.com/Lounesse-Plus-Size-Women-High-Neck-Black-Knit-Long-Sleeve-Paired-With-Khaki-Corduroy-A-Line-Skirt-Plus-Size-Dress-For-Everyday-Wear-Date-Fashion-Winter-p-234115243.html",
"brand": "1et3n",
"category": "Plus Size Dresses",
"categoryId": "1889",
"currency": "",
"salePrice": 25.49,
"salePriceDisplay": "25.49€",
"retailPrice": 33.99,
"retailPriceDisplay": "33.99€",
"discountPrice": 0.0,
"discountPercent": 0.0,
"rating": 4.68,
"reviewCount": 416,
"reviewCountDisplay": "100+",
"soldOut": false,
"stock": "1",
"isClearance": false,
"isOnSale": false,
"isPlusSize": true,
"quickship": true,
"imageUrl": "http://img.ltwebstatic.com/v4/j/pi/2025/10/23/a5/17612028562f4138c1d56ab1af67ce7ea24141dd76_thumbnail_405x552.jpg",
"sourceQuery": "dress",
"scrapedAt": "2026-11-03T21:43:12.399768+00:00"
}

Long arrays such as detailImage, colors, and nested material are omitted here for readability.

Query and input reference

InputTypeRequiredDefaultAccepted valuesDescription
searchQueriesstring[]no*prefill dressNon-empty stringsKeyword search on SHEIN
productIdsstring[]no*—Goods IDsDirect product lookup
startUrlsobject[]no*search URL prefillProduct or search URLsRequest-list sources
sortstringnorecommendrecommend, newest, price_asc, price_desc, popularSearch sort order
countrystringnoUSStore select (US, GB, FR, JP, AE, …)Sets catalog, currency, and proxy country
includeReviewsbooleannofalsetrue/falseAttach reviews[]
maxReviewsPerProductintegerno20≥ 0Cap reviews per product
includeDetailsbooleannofalsetrue/falseAttach details when APIs succeed
maxItemsintegerno0≥ 0Max products; 0 = no cap
proxyConfigurationobjectnoresidentialApify proxyCountry is overwritten to match country

*At least one of searchQueries, productIds, or startUrls should be provided.

Minimal request

{
"searchQueries": ["dress"],
"maxItems": 100,
"country": "US",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Advanced request (search + details + reviews)

{
"searchQueries": ["winter jacket"],
"maxItems": 50,
"sort": "price_asc",
"country": "US",
"includeDetails": true,
"includeReviews": true,
"maxReviewsPerProduct": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Retrieve the data through the API

  1. Start the Actor with JSON input (Apify Console, CLI, or HTTP API).
  2. Wait for the run to finish, or use the synchronous dataset endpoint for small jobs.
  3. Read items from the run’s default dataset (GET /v2/datasets/{datasetId}/items).
  4. Paginate with offset and limit, or export the full dataset from the Console.

Python (Apify client)

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("datascrapers/shein-scraper").call(
run_input={
"searchQueries": ["dress"],
"maxItems": 25,
"country": "US",
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": ["RESIDENTIAL"],
},
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["goodsId"], item.get("salePriceDisplay"), item.get("rating"))

cURL (start run)

curl -s -X POST "https://api.apify.com/v2/acts/datascrapers~shein-scraper/runs" \
-H "Authorization: Bearer <YOUR_APIFY_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["dress"],"maxItems":10,"country":"US"}'

OpenAPI spec and generated clients are available on the Actor API tab in Apify Console.

Data quality and record handling

  • Completeness: Search cards populate most listing fields. currency may be empty on the card while salePriceDisplay still shows a formatted price. Optional details and reviews are omitted when disabled or when a single product fails enrichment.
  • Fail-soft: One failed detail or review fetch does not stop the run; that product’s optional fields are skipped and processing continues.
  • Deduplication: Within a run, the same goodsId should appear once per discovery path; cap volume with maxItems.
  • Cross-run dedup: Not built in. Merge datasets on goodsId in your warehouse or use Apify webhooks to append only new ids.
  • Retries: Transient network errors are retried on HTTP fetches; blocked detail endpoints are skipped after logging once per run.
  • Derived fields: Public url is built from the listing slug, goodsId, and country. scrapedAt is set at parse time in UTC.

Run statistics (product, detail, and review charge counts) are stored in the key-value store under run-stats.

Export and pipeline examples

DestinationRecommended methodTypical use
PostgreSQL / SupabaseDataset API + scheduled ActorFashion catalog monitoring
Google SheetsApify integration or CSV exportMerchandising samples
S3 / cloud storageApify dataset export or webhookRaw JSON archive
BI tools (Looker, Power BI)CSV/Excel exportPrice and rating dashboards

Pricing and cost examples

This Actor uses pay-per-event billing on the Apify platform. Placeholder Store prices (verify in Console before budgeting):

EventWhat triggers itPlaceholder unit price (Free tier)
Actor startEach run$0.00005
productEach product row pushed to the dataset$0.001
product-detailsEach product where a non-empty details object is returned$0.001
product-reviewEach review object inside reviews$0.001

Higher Apify plans may receive tier discounts on result events. Residential proxy usage is billed separately through Apify proxy consumption.

Illustrative totals (product event only, details/reviews off)

ProductsEstimated product event cost
1,000$1.00
10,000$10.00

Illustrative totals (100 products, details on for 80 products, 20 reviews each)

ChargeCountPlaceholder cost
Product rows100$0.10
Details80$0.08
Reviews2,000$2.00
Total (events only)~$2.18

Estimates exclude compute, proxy, and plan discounts. Edit event prices in the Apify Console monetization tab.

Limitations and responsible data use

  • Collects data exposed on the public SHEIN storefront for the selected country context; availability and fields change when SHEIN updates its apps or sites.
  • You are responsible for complying with SHEIN terms, applicable commerce and privacy laws, and your own data retention policies.
  • Reviews are user-generated content; do not treat them as verified facts without your own validation.
  • Extra product details depend on storefront session state; runs may return listing cards only when detail endpoints are blocked.
  • The Actor does not guarantee complete catalog coverage for a query—use filters, multiple queries, and repeated runs if you need broader samples.

Dataset questions

What does one dataset item represent?

One SHEIN product listing from search, ID lookup, or URL discovery. Reviews and extended attributes are nested on that same item, not separate rows.

Which field should I use as a unique identifier?

Use goodsId as the primary key. Pair it with country if you compare the same style across regional storefronts.

Are fields nullable or conditional?

Yes. Card metrics may be partial. details and reviews appear only when enabled and successfully fetched. Individual review text or buyer fields may be empty.

Can I retrieve the records as CSV or JSON?

Yes. Export from the Apify Console or call the Dataset API with format=csv or format=json.

How do I paginate large datasets?

Use dataset API offset and limit parameters, or download split files from the Console export dialog.

Does the Actor return historical data?

Each run captures a current snapshot. Store dataset exports yourself if you need history.

Which countries return real store prices?

Select country only. Currency and the residential proxy exit follow that store (Japan → JPY + JP, United Kingdom → GBP + GB). The bundled identity is the common/aws store (Middle East, Asia, Americas, Oceania). Europe and the United States need their own data-center identity after a switch-country hop.

What counts as a billable result?

Each product row bills the product event. A returned details object bills product-details once for that product. Each object in reviews bills one product-review event.

ActorRelationship
AliExpress ScraperMarketplace product rows with optional nested details and reviews
H&M ScraperApparel catalog listings with product-page enrichment
Adidas ScraperBrand retail product data for assortment comparison

Browse the full Data Scrapers Store profile for more commerce and catalog Actors.

Data Scrapers support

Need an additional field, regional preset, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample SHEIN URL or search phrase, required fields, expected product volume, and whether you need nested reviews or details on every row.