# SHEIN Product Scraper - Prices, Discounts, Ratings & Fit (`topapi/shein-product-scraper`) Actor

Scrape SHEIN products from keyword searches, category ids and listing links on 6 storefronts (US, CA, AU, DE, ES, NL): price, original price, discount, rating, review count, size fit, brand, store, category, images, colour variants. Filters, price-drop monitor, no login.

- **URL**: https://apify.com/topapi/shein-product-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.63 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does SHEIN Product Scraper do?

**SHEIN Product Scraper** collects SHEIN products from keyword searches, category ids and SHEIN listing links, and returns one row per product with the price, original price, discount, rating, review count, size fit, brand, seller store, category, images and colour variants that SHEIN shows on its listings. It is built for price monitoring, assortment research, dropshipping and resale research, and fashion-trend tracking.

Also known as: SHEIN scraper, SHEIN price scraper, SHEIN product data API, SHEIN search scraper.

- 🔎 **Three ways in:** keywords (`summer dress`), category ids (`1727`) or SHEIN category, search and selection links.
- 💲 **Prices that add up:** current price, original price, discount %, discount amount, and the USD value of both.
- ⭐ **Social proof:** rating, review count, "3k+ sold" label, bestseller rank label and shopper size fit.
- 🏷️ **Who sells it:** brand, brand code, seller store code and the Marketplace seller label.
- 🌍 **Six storefronts:** United States, Canada, Australia, Germany, Spain and the Netherlands, each in its own currency.
- 🔭 **Wider search:** reopens a search under SHEIN's other sort orders and its own price bands to collect more than one listing screen.
- 🔁 **Monitor mode:** on a schedule, get only products you have not seen before, plus price drops and rises if you want them.
- 🔌 **No login, no cookies, no API key.** Export JSON, CSV or Excel, or call it from the API, Make, Zapier, n8n or an MCP client.

### What data can you get from SHEIN?

| | | |
|---|---|---|
| 🆔 `goodsId`, `sku`, `spu` | 🏷️ `title`, `url` | 💲 `price`, `priceFormatted` |
| 💲 `originalPrice`, `originalPriceFormatted` | 📉 `discountPercent`, `discountAmount`, `isOnSale` | 💵 `priceUsd`, `originalPriceUsd`, `currency` |
| ⭐ `rating` | 💬 `reviewsCount`, `reviewsCountText` | 🔥 `soldCountText` |
| 📏 `fit` (true to size / small / large) | 🏆 `rankLabel` | 🎟️ `promotions`, `dealEndsAt` |
| 🗂️ `category`, `categoryId`, `parentCategoryIds` | 👗 `brand`, `brandCode` | 🏬 `storeCode`, `mallCode`, `isMarketplaceSeller` |
| 🚚 `quickShip` | 🧾 `isClearance`, `isCustomizable` | 📦 `inStock` |
| 🖼️ `image`, `images` | 🎨 `colorImage`, `colorVariants` | 🔎 `searchQuery`, `sourceUrl`, `listingVariant`, `position` |

### How to scrape SHEIN with SHEIN Product Scraper

1. Create a free Apify account (it comes with free monthly credit).
2. Open **SHEIN Product Scraper** and click **Try for free**.
3. Type one or more **Search terms**, paste **Listing URLs**, or add **Category ids**.
4. Pick a **Storefront**, a **Sort by** order and any filters, then set **Max products**.
5. Click **Start** and watch the products arrive in the dataset.
6. Export the results as JSON, CSV, Excel or HTML, or read them through the API.

### ⬇️ Input

#### Input parameters

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `searchTerms` | array | Keywords, one search each, e.g. `"summer dress"`, `"cargo pants"`. Prefilled with `summer dress`. |
| `startUrls` | array | SHEIN category, search or selection links, e.g. `https://us.shein.com/Women-Dresses-c-1727.html`. A link keeps its own sort and price filters. |
| `categoryIds` | array | The number after `-c-` in a category link, e.g. `1727` (Women Short Dresses). |
| **🎯 Filters** (applied by SHEIN) | | |
| `country` | select | Storefront for keywords and category ids: `us` (default), `ca`, `au`, `de`, `es`, `nl`. |
| `sortBy` | select | Recommend (default), New Arrivals, Most Popular, Top Rated, Price: Low to High, Price: High to Low. |
| `widerSearch` | boolean | Default on. Also opens the search under SHEIN's other sort orders and its own price bands until your caps are met. |
| `minPrice`, `maxPrice` | integer | Price window in the storefront's currency. |
| **✂️ Refine results** (checked before delivery) | | |
| `onSaleOnly` | boolean | Only discounted products. |
| `minDiscountPercent` | integer | Only products at least this many percent off. |
| `minRating` | number | Only products rated at least this (0-5). |
| `minReviews` | integer | Only products with at least this many reviews. |
| `quickShipOnly` | boolean | Only Quick Ship products. |
| `includeKeywords`, `excludeKeywords` | array | Keep or drop products by words in the title. |
| **🔁 Monitoring** | | |
| `monitorMode` | boolean | Only products not delivered by earlier monitor runs of the same search. |
| `monitorPriceChanges` | boolean | In monitor mode, also deliver known products whose price changed. |
| `monitorStoreName` | string | Named key-value store that remembers what was delivered. Default `shein-product-monitor`. |
| **📦 Output** | | |
| `maxResults` | integer | Most products in the run. Default 50, prefill 20, `0` = no limit. |
| `maxResultsPerSearch` | integer | Most products per search, category or link. `0` = only `maxResults` applies. |
| `compact` | boolean | Core fields only, for AI and MCP pipelines. |
| **⚙️ Advanced** | | |
| `proxyConfiguration` | object | Default: the run's own connection, no proxy. Apify Proxy datacenter also works. |

#### Input JSON

```json
{
  "searchTerms": ["summer dress", "linen pants"],
  "country": "us",
  "sortBy": "recommended",
  "widerSearch": true,
  "onSaleOnly": false,
  "maxResults": 200
}
```

#### Expect 20 products per listing screen

SHEIN shows a script the first screen of a listing: 20 products. The rest of the listing and its deeper pages answer with SHEIN's verification, which this actor does not answer. **Wider search** opens the same search again under SHEIN's other sort orders, then under SHEIN's own price bands for that search. Each is a new first screen with mostly new products. In our test run, six sort orders of `summer dress` gave 120 different products.

#### One run reads about 12 listing screens

SHEIN served our test sessions 12 listing screens (10-12 in 5 long runs), then refused the next one. So one run delivers up to about 210-240 products per storefront. When SHEIN refuses a screen, the run stops for that storefront, delivers what it has, and lists the searches it did not reach in `RUN_SUMMARY`. For a large catalogue, split it across scheduled runs: several runs of a few searches each work better than one run of many.

#### Put links on the storefront you want

A link keeps its own storefront (`de.shein.com` reads Germany in EUR). Keywords and category ids use **Storefront**. Product-detail links (`...-p-123.html`) are not listings and are skipped without charge.

### ⬆️ Output

Each row is one SHEIN product. A real row from a test run (shortened lists):

```json
{
  "goodsId": "442164070",
  "sku": "sz260106184879272621831",
  "title": "Firerie Women's Chic Plum Purple V-Neck Metal Decor Halter Backless ... Maxi Dress",
  "url": "https://us.shein.com/Firerie-Women-s-Chic-Plum-Purple-...-p-442164070.html",
  "currency": "USD",
  "price": 15.46,
  "originalPrice": 23.49,
  "discountPercent": 34,
  "discountAmount": 8.03,
  "rating": 4.49,
  "reviewsCount": 201,
  "soldCountText": "3k+ sold",
  "fit": { "trueSize": "86%", "small": "6%", "large": "8%" },
  "category": "Women Midi Dresses",
  "brand": "Firerie",
  "storeCode": "8569638973",
  "rankLabel": "#5 Bestseller in Plain Women Midi Dresses",
  "dealEndsAt": "2027-06-30 23:59:59",
  "image": "https://img.ltwebstatic.com/v4/j/pi/2026/04/22/8d/1776840165565393850b40e60d8020e89e080d9ca3_thumbnail_405x552.jpg",
  "colorVariants": [{ "goodsId": "442164070", "image": "https://img.ltwebstatic.com/..." }],
  "searchQuery": "summer dress",
  "listingVariant": "sort top-rated"
}
```

#### Fields

Fill rates come from 238 products in two runs on the US storefront (2026-10-14).

| Field | Meaning | Filled |
|---|---|---|
| `goodsId`, `sku`, `spu`, `title`, `url` | SHEIN ids and product link | 100% |
| `price`, `originalPrice`, `priceFormatted`, `originalPriceFormatted`, `priceUsd`, `originalPriceUsd`, `currency` | Current and original price | 100% |
| `discountPercent`, `discountAmount`, `isOnSale` | Discount (null when not discounted) | 100% in this sample (every product was discounted) |
| `rating` | Average rating; null when the product has no reviews | 77% |
| `reviewsCount` | Number of reviews (0 when none) | 100% |
| `reviewsCountText` | Review count as SHEIN shows it ("100+") | 51% |
| `soldCountText` | Sales label ("3k+ sold") | 56% |
| `fit` | Shopper size fit: trueSize, small, large | 77% |
| `category`, `categoryId`, `parentCategoryIds` | Category | 100% |
| `brand`, `brandCode` | Brand or SHEIN series badge | 82% |
| `storeCode`, `mallCode` | Seller store and mall | 100% |
| `isMarketplaceSeller` | true when the card carries SHEIN's Marketplace label, otherwise null | 10% |
| `rankLabel` | Bestseller rank label | 16% |
| `promotions`, `dealEndsAt` | Promotions on the card and the earliest end time | 81% |
| `image`, `images` | Main image and the card's gallery | 100% |
| `colorImage`, `colorVariants` | Colour swatch and the other colours (goodsId only for the listed colour) | 98% / 60% |
| `quickShip`, `isClearance`, `isCustomizable`, `inStock` | Flags (`isClearance` was false on every measured row) | 100% |
| `searchQuery`, `sourceUrl`, `listingVariant`, `position`, `storefront`, `scrapedAt` | Where the row came from | 100% |
| `changeType`, `previousPrice` | Monitor mode only: NEW, PRICE_DROP, PRICE_UP | monitor runs |

`inStock` is true on every row because SHEIN leaves sold-out products off its listings.

### Use cases

- 💹 **Price monitoring:** schedule a search in monitor mode with **Also report price changes** and get PRICE_DROP rows with `previousPrice`.
- 🛍️ **Dropshipping and resale research:** find discounted, well-reviewed products with `minRating`, `minReviews` and `minDiscountPercent`.
- 📊 **Assortment and category analysis:** compare categories, brands and seller stores across storefronts.
- 🔥 **Trend tracking:** watch `New Arrivals` and `Most Popular` screens for a keyword every day.
- 🧵 **Fit and quality signals:** `fit` and `rating` show which products run small or large.
- 🤖 **AI and MCP pipelines:** `compact` output gives the core fields only.

### How much does it cost to scrape SHEIN?

SHEIN Product Scraper is pay per product: **$0.00063 per product delivered** ($0.63 per 1,000), with no start fee. Products your filters drop and listings SHEIN refuses are not charged.

| Products | Price |
|---|---|
| 20 (one listing screen) | $0.0126 |
| 100 | $0.063 |
| 200 | $0.126 |

Apify's free monthly credit covers a first test run.

### Integrations, API, scheduling and MCP

- **Schedules:** create an Apify schedule (for example daily at 8:00) with monitor mode on to receive only new products and price changes.
- **Webhooks:** trigger your own endpoint when a run finishes.
- **Make, Zapier, n8n, Google Sheets, Slack:** connect the dataset with Apify's integrations.
- **API:** start runs and read datasets with `apify-client` for [Python](https://apify.com/topapi/shein-product-scraper/api/python) or [JavaScript](https://apify.com/topapi/shein-product-scraper/api/javascript).
- **MCP:** call the actor from Claude, Cursor or any MCP client through the [MCP tab](https://apify.com/topapi/shein-product-scraper/api/mcp).

### More scrapers from TopApi

- 🏭 [1688.com Wholesale Scraper](https://apify.com/topapi/alibaba-1688-scraper) - use it to find the factory price behind a SHEIN-style product.
- 🛒 [Facebook Marketplace Scraper](https://apify.com/topapi/facebook-marketplace-scraper) - use it to check resale prices.
- 🎵 [TikTok Scraper](https://apify.com/topapi/tiktok-scraper) - use it to see which products trend in short videos.
- 📣 [TikTok Ads Library Scraper](https://apify.com/topapi/tiktok-ads-library-scraper) - use it to see which shops advertise a product.
- 📸 [Instagram Scraper](https://apify.com/topapi/instagram-scraper) - use it to follow fashion creators and hashtags.

### Limits and empty runs

- **20 products per listing screen, about 12 screens per run** (measured above). Wider search and scheduled runs cover more.
- **Product pages are not opened.** Fields that only exist on a product page (size chart, full description, review text, SKU stock by size) are not in the rows.
- **Storefronts:** US, Canada, Australia, Germany, Spain and the Netherlands served our tests. The UK, France, Italy and Mexico refused every test session on 2026-10-14, so they are not offered.
- **SHEIN sometimes refuses a session at its first listing** (7 of 35 US test sessions on 2026-10-14). The run then fails with a clear message and nothing is billed. Try again later: a retry 60-90 seconds later from the same connection did not help in our tests.
- A run of one search takes 20-60 seconds; a 12-screen run takes 3.5-5 minutes.

### ❓ FAQ

#### How much does SHEIN Product Scraper cost?

$0.00063 per product delivered, no start fee. A 20-product run costs $0.0126. Filtered-out products and refused listings are free.

#### How many products can SHEIN Product Scraper return?

20 per listing screen and about 12 screens per run per storefront, so roughly 200-240 products per run. Use several scheduled runs for more.

#### Why does SHEIN Product Scraper return only 20 products for my search?

That is one listing screen. Keep **Wider search** on and raise **Max products** to open the same search under other sort orders and price bands.

#### Can I monitor SHEIN prices with SHEIN Product Scraper?

Yes. Turn on monitor mode and **Also report price changes**, then schedule the run. Each run delivers new products and PRICE_DROP or PRICE_UP rows with `previousPrice`.

#### Which SHEIN storefronts does SHEIN Product Scraper support?

United States, Canada, Australia, Germany, Spain and the Netherlands.

#### Does SHEIN Product Scraper need a login or an API key?

No. It reads the public listings that any visitor sees.

#### Can I use SHEIN Product Scraper through the Apify API?

Yes. Start runs and read the dataset with the Apify API or `apify-client` for Python and JavaScript.

#### Can I use SHEIN Product Scraper with an MCP client?

Yes. Add it through Apify's MCP server from the actor's API tab; `compact` output keeps responses short.

#### Why did my SHEIN Product Scraper run return no products?

SHEIN refused the session at its first listing, or your filters dropped every product. The status message and `RUN_SUMMARY` say which. Nothing is billed for either.

#### Your feedback

Something missing or wrong? Open an issue on the [Issues tab](https://apify.com/topapi/shein-product-scraper/issues/open) and we will look at it.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search on SHEIN, one per line, e.g. "summer dress", "cargo pants", "phone case". Each term is its own search.

## `startUrls` (type: `array`):

SHEIN category, search or selection links, e.g. https://us.shein.com/Women-Dresses-c-1727.html or https://us.shein.com/pdsearch/hoodie/. Filters already in the link are kept.

## `categoryIds` (type: `array`):

SHEIN category ids: the number after -c- in a category link, e.g. 1727 (Women Short Dresses), 1766 (Women Tops).

## `country` (type: `string`):

Which SHEIN storefront to read for keywords and category ids. Prices and currency follow it. A link keeps its own storefront.

## `sortBy` (type: `string`):

SHEIN's own sort order for the listing.

## `widerSearch` (type: `boolean`):

SHEIN shows a script the first 20 products of a listing. On: also open the search under SHEIN's other sort orders and its own price bands (20 more each) until your caps are met.

## `minPrice` (type: `integer`):

Only products at or above this price, in the storefront's currency (e.g. 10). Empty = no minimum.

## `maxPrice` (type: `integer`):

Only products at or below this price, in the storefront's currency (e.g. 30). Empty = no maximum.

## `onSaleOnly` (type: `boolean`):

Only products whose price is below their original price.

## `minDiscountPercent` (type: `integer`):

Only products discounted by at least this many percent, e.g. 30. Empty = any.

## `minRating` (type: `number`):

Only products rated at least this (0-5), e.g. 4.5. Products with no rating are left out when set.

## `minReviews` (type: `integer`):

Only products with at least this many reviews, e.g. 100.

## `quickShipOnly` (type: `boolean`):

Only products SHEIN flags for Quick Ship (local warehouse).

## `includeKeywords` (type: `array`):

Keep a product only if its title contains one of these words, e.g. "linen", "maxi".

## `excludeKeywords` (type: `array`):

Drop a product whose title contains any of these words, e.g. "plus size".

## `monitorMode` (type: `boolean`):

Deliver only products not delivered by earlier monitor runs of the same search. Pairs with a daily schedule.

## `monitorPriceChanges` (type: `boolean`):

In monitor mode, also deliver a product seen before whose price changed (changeType PRICE_DROP / PRICE_UP with previousPrice).

## `monitorStoreName` (type: `string`):

Named key-value store that remembers delivered products between runs. Use a different name per project.

## `maxResults` (type: `integer`):

Most products to deliver in this run across all searches. 0 = no limit. SHEIN serves ~10 listing screens of 20 products per run (see README).

## `maxResultsPerSearch` (type: `integer`):

Most products per search term, category or link (wider search stops once it is reached). 0 = only Max products applies.

## `compact` (type: `boolean`):

Core fields only (id, title, link, prices, discount, rating, reviews, stock, category, brand, image) - trimmed for AI / MCP pipelines.

## `proxyConfiguration` (type: `object`):

Connection for the browser. Default: the run's own connection (no proxy). Apify Proxy datacenter also works. Residential is not needed; if chosen, its spend is capped.

## `debug` (type: `boolean`):

Save the browser's SHEIN request log to the key-value store (NETLOG\_<storefront>).

## Actor input object example

```json
{
  "searchTerms": [
    "summer dress"
  ],
  "country": "us",
  "sortBy": "recommended",
  "widerSearch": true,
  "onSaleOnly": false,
  "quickShipOnly": false,
  "monitorMode": false,
  "monitorPriceChanges": false,
  "monitorStoreName": "shein-product-monitor",
  "maxResults": 20,
  "maxResultsPerSearch": 0,
  "compact": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "debug": false
}
```

# Actor output Schema

## `products` (type: `string`):

The dataset: one row per SHEIN product.

## `summary` (type: `string`):

Per-search counts (read, filtered, delivered), pages opened, pages SHEIN refused.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "summer dress"
    ],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/shein-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["summer dress"],
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("topapi/shein-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "summer dress"
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call topapi/shein-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,topapi/shein-product-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/j2aakl9t3S625ctDc/builds/EPujRGrbkzGkkcAVx/openapi.json
