# SHEIN Products, Variants & Reviews Scraper (`automation-lab/shein-products-scraper`) Actor

Extract public SHEIN product details, prices, availability, variants, ratings, and review samples for recurring assortment monitoring.

- **URL**: https://apify.com/automation-lab/shein-products-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## SHEIN Products, Variants & Reviews Scraper

Extract public SHEIN product listings and product details into structured JSON, CSV, Excel, or API-ready records. The Actor is designed for recurring fashion assortment monitoring: capture current prices, availability, images, variants, ratings, and public review samples without maintaining a browser scraper.

### What does this SHEIN scraper do?

The Actor accepts SHEIN product URLs, product keywords, or both. It opens a coherent US SHEIN browser session, reads products exposed on the public discovery surface, and enriches reachable product pages from structured product data.

Each default-dataset row represents one product. When SHEIN challenges a detail page, keyword and currently featured URL inputs can still return a verified listing-level record rather than an invented or empty detail object. Fields that could not be verified are `null` or empty arrays.

### Who is it for

- **Retail and brand analysts** comparing prices and visible assortment.
- **Merchandising teams** taking repeatable category snapshots.
- **Market researchers** collecting product, rating, and review evidence.
- **Data engineers** feeding public product records into warehouses or spreadsheets.
- **Developers** integrating SHEIN product extraction through the Apify API.

### Why use this Actor?

- URL and keyword inputs can be combined in one run.
- Typed output separates missing data from empty strings.
- Variant and review samples are included when SHEIN exposes a reachable detail page.
- Stable product IDs support comparisons between scheduled runs.
- The Actor fails on invalid domains and unsupported URL shapes.
- A bounded maximum-product limit keeps run size predictable.

### What data can it extract?

| Field | Meaning |
| --- | --- |
| `productId` | SHEIN product identifier |
| `productGroupId` | Variant group identifier when exposed |
| `url` | Canonical or requested product URL |
| `name` | Public product name |
| `brand` | Brand when exposed on the detail page |
| `description` | Product description when exposed |
| `category` | Public category name or identifier |
| `color` | Product color when exposed |
| `price` | Current observed sale or offer price |
| `currency` | Price currency, usually USD for the US surface |
| `availability` | Public structured availability value |
| `rating` | Aggregate rating when exposed |
| `reviewCount` | Aggregate public review count |
| `images` | Product image URLs |
| `variants` | SKU, size, color, price, currency, and availability objects |
| `reviews` | Bounded public review samples |
| `scrapedAt` | UTC extraction timestamp |

### Getting started

1. Open the Actor input page.
2. Add one or more keywords, SHEIN product URLs, or both.
3. Choose `maxItems` and `maxReviewsPerProduct`.
4. Keep the low-cost direct default, or enable a sticky US residential proxy if direct detail requests are challenged.
5. Start the run.
6. Open the default dataset to export JSON, CSV, Excel, XML, or RSS.

A small first run is recommended because SHEIN may vary the products available on its public discovery surface.

### Input parameters

#### `startUrls`

An array of public `shein.com` product detail URLs. URLs must contain the normal `-p-<productId>.html` path. Other domains, search URLs, category URLs, and malformed URLs fail validation.

#### `keywords`

An array of 1–100 character product phrases. A product must contain every word of a phrase, case-insensitively. Keyword discovery covers products present on SHEIN's current public discovery surface; it is not a promise of complete site search.

#### `maxItems`

Maximum unique products saved. Allowed range: 1–500. Default: 20.

#### `maxReviewsPerProduct`

Maximum embedded public review samples retained per product. Allowed range: 0–100. Set it to `0` to omit review text. Aggregate rating fields can still be present.

#### `proxyConfiguration`

Standard Apify proxy configuration. Direct mode is the default and works for public homepage listing data, but it may receive more detail-page challenges. Enable a sticky US residential identity when needed.

### Example: find SHEIN products by keyword

```json
{
  "keywords": ["t-shirt"],
  "maxItems": 5,
  "maxReviewsPerProduct": 3,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

### Example: extract a product URL

```json
{
  "startUrls": [
    { "url": "https://us.shein.com/1pc-Coconut-Oil-Scented-Slow-Rebound-Squishy-Stress-Ball-p-482705721.html" }
  ],
  "maxItems": 1,
  "maxReviewsPerProduct": 10
}
```

### Example output

This shortened record reflects current listing-level behavior. Detail-only fields remain nullable when SHEIN challenges enrichment.

```json
{
  "productId": "482705721",
  "productGroupId": null,
  "url": "https://us.shein.com/1pc-Coconut-Oil-Scented-Slow-Rebound-Squishy-Stress-Ball-p-482705721.html",
  "name": "1pc Coconut Oil Scented Slow Rebound Squishy Stress Ball",
  "brand": null,
  "description": null,
  "category": "7216",
  "color": null,
  "price": 2.55,
  "currency": "USD",
  "availability": null,
  "rating": null,
  "reviewCount": null,
  "images": ["https://img.ltwebstatic.com/v4/j/spmp/2026/05/23/43/1779541272b6df9710c2fde88e99a793b028f95b97_thumbnail_405x552.jpg"],
  "variants": [],
  "reviews": [],
  "scrapedAt": "2026-07-29T00:00:00.000Z"
}
```

Image hosts and paths change over time. Do not use the shortened example URL as a permanent asset reference.

### Product variants and SHEIN reviews

When a detail page is reachable, `variants` contains normalized SKU-level size, color, offer price, currency, availability, and URL values. `reviews` contains a bounded sample with author, rating, title, body, date, and public attributes.

Listing fallback rows contain empty `variants` and `reviews` arrays. The Actor never presents guessed variants or reviews as source data.

### How much does it cost to extract SHEIN products?

The Actor uses pay-per-event pricing:

- a **$0.0049 start event** once per run;
- a tiered **item event** for each product saved;
- the BRONZE item rate is **$0.003196 per product**, with lower rates at higher usage tiers.

At the BRONZE rate, 10 saved products cost about **$0.0369**, 100 products about **$0.3245**, and 500 products about **$1.6029**, excluding any separate Apify proxy charges included in your platform plan. Actual tier and platform usage can differ by account.

Failed, duplicate, rejected, or unsaved records are not charged as items.

### Recurring assortment monitoring

Schedule the Actor daily or weekly with the same keywords. Export each dataset to your warehouse and compare rows by `productId` to identify:

- newly visible products;
- products no longer present on the sampled discovery surface;
- observed price changes;
- rating or review-count changes;
- variant and availability changes when detail enrichment succeeds.

The Actor produces snapshots; it does not maintain history, send alerts, or compare runs by itself.

### Export and integrations

The default dataset works with Apify integrations for Google Sheets, Make, Zapier, webhooks, and cloud storage. For data pipelines, use the dataset items API after the run finishes. Preserve `productId` and `scrapedAt` when loading snapshots.

### Run through the API with cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~shein-products-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["dress"],"maxItems":5,"maxReviewsPerProduct":3}'
```

### Run with JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/shein-products-scraper').call({
  keywords: ['dress', 't-shirt'],
  maxItems: 20,
  maxReviewsPerProduct: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Run with Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/shein-products-scraper').call(run_input={
    'keywords': ['dress'],
    'maxItems': 10,
    'maxReviewsPerProduct': 5,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use with Apify MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/shein-products-scraper"
```

Claude Desktop, Cursor, and VS Code can use this MCP server configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/shein-products-scraper"
    }
  }
}
```

Example prompts:

- "Run the SHEIN scraper for summer dress and return five records."
- "Extract this public SHEIN product URL and summarize its visible variants."
- "Collect a SHEIN assortment snapshot for dresses, shirts, and phone cases."

### Limits and source behavior

SHEIN uses risk challenges and changes its public application structure. The Actor uses a coherent browser session and structured source data, but no route can guarantee that every product detail page is reachable on every run.

Keyword coverage is limited to products currently exposed on the public US discovery surface. This first release does not claim complete keyword search, category pagination, coupon extraction, historical data, login-only data, or full review pagination.

The keyword `shein reviews` has measured search demand, but this Actor extracts product review samples only. It does not scrape company or service reviews.

### Troubleshooting

#### The run returned no keyword matches

Use a more general product term or try again after the discovery surface changes. A successful zero-row keyword run means none of the currently exposed products matched every word; it does not mean the full SHEIN catalog has no match.

#### A product URL could not be extracted

Confirm that it is a public `shein.com` product URL containing `-p-<id>.html`. Direct access is the default; if it is challenged, optionally retry with a sticky US residential proxy. Explicit URLs fail closed when neither detail data nor a current listing fallback is available.

#### Variants or reviews are empty

The product may not expose those values, `maxReviewsPerProduct` may be zero, or SHEIN may have challenged detail enrichment. Inspect the other fields to determine whether the row is listing-level.

#### The run times out

Reduce `maxItems`, keep one coherent proxy session, and avoid very large batches. Smaller scheduled snapshots are more reliable than one large request against a protected storefront.

### Legality

Only collect public information you are authorized to use. Follow SHEIN's terms, applicable privacy and database laws, and your organization's compliance requirements. Do not use review text to identify, profile, or contact individuals. Configure retention and exports appropriately.

This Actor is an independent extraction tool and is not affiliated with, endorsed by, or sponsored by SHEIN.

### FAQ

#### Does it need a SHEIN account?

No. It is designed for public anonymous product surfaces.

#### Can it scrape the complete SHEIN catalog?

No. Keyword discovery is bounded to the current public discovery surface. Use product URLs when you already know the products of interest.

#### Does it extract coupon codes?

No. Coupon-related terms appeared in demand research, but coupon extraction is not implemented and is intentionally not claimed.

#### Are all reviews included?

No. The Actor retains up to `maxReviewsPerProduct` review samples embedded in reachable product detail data.

#### Can I schedule it?

Yes. Apify schedules can run the same input repeatedly. Store each dataset snapshot externally if you need history or change detection.

#### What happens when SHEIN shows a challenge?

A keyword-discovered or currently featured product can use verified listing data as a fallback. An unsupported explicit product fails rather than returning fabricated details.

### Related Automation Labs Actors

For wider retail monitoring, explore the other e-commerce extraction Actors published by [Automation Labs](https://apify.com/automation-lab). Only choose a related Actor whose source and output contract match your workflow.

### Support

For reproducible problems, open an Actor issue with the run URL, redacted input, expected result, and one affected public product URL. Do not include credentials or private data.

# Actor input Schema

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

One or more public SHEIN product detail URLs. You can combine these with keywords.

## `keywords` (type: `array`):

Find matching products on SHEIN's current public discovery surface. Use specific product terms such as dress, bikini, or shoes.

## `maxItems` (type: `integer`):

Stop after saving this many unique product records.

## `maxReviewsPerProduct` (type: `integer`):

Maximum public review samples included in each product record. Set to 0 to omit review text.

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

Optional proxy settings. Direct mode is the low-cost default; enable a sticky US residential session when direct detail requests are challenged.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://us.shein.com/1pc-Coconut-Oil-Scented-Slow-Rebound-Squishy-Stress-Ball-p-482705721.html"
    }
  ],
  "keywords": [
    "t-shirt"
  ],
  "maxItems": 20,
  "maxReviewsPerProduct": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Open product IDs, prices, availability, images, variants, ratings, and public review samples in the default dataset.

# 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 = {
    "startUrls": [
        {
            "url": "https://us.shein.com/1pc-Coconut-Oil-Scented-Slow-Rebound-Squishy-Stress-Ball-p-482705721.html"
        }
    ],
    "keywords": [
        "t-shirt"
    ],
    "maxItems": 20,
    "maxReviewsPerProduct": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/shein-products-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 = {
    "startUrls": [{ "url": "https://us.shein.com/1pc-Coconut-Oil-Scented-Slow-Rebound-Squishy-Stress-Ball-p-482705721.html" }],
    "keywords": ["t-shirt"],
    "maxItems": 20,
    "maxReviewsPerProduct": 10,
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://us.shein.com/1pc-Coconut-Oil-Scented-Slow-Rebound-Squishy-Stress-Ball-p-482705721.html"
    }
  ],
  "keywords": [
    "t-shirt"
  ],
  "maxItems": 20,
  "maxReviewsPerProduct": 10
}' |
apify call automation-lab/shein-products-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/shein-products-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/ePCvB6VLVRuLWJmic/builds/gaPBWuOqPLEt6iIJS/openapi.json
