# Shein New Arrivals & Best-Sellers Trend Scraper (`jungle_synthesizer/shein-new-arrivals-bestsellers-trend-scraper`) Actor

Scrape Shein category pages for new arrivals and best-sellers. Tracks rank,
first_seen_date, rank_movement, pricing, and flash sales per run. For fashion
trend forecasting and dropship research. Reliable access even though Shein
actively blocks most scraping tools.

- **URL**: https://apify.com/jungle_synthesizer/shein-new-arrivals-bestsellers-trend-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 14 total users, 7 monthly users, 71.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 record scrapeds

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/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

## Shein New Arrivals & Best-Sellers Trend Scraper

Scrape Shein category pages for new arrivals and best-sellers. Tracks rank, `first_seen_date`, `rank_movement`, pricing, and flash sale data per run. Designed for fashion trend forecasting and dropship research.

Reliable access through Shein's anti-bot system — handled for you.

### What you get

Each record represents one product's position in a Shein category listing at the time of the run:

| Field                      | Description                                                                                           |
|----------------------------|-------------------------------------------------------------------------------------------------------|
| `goods_id`                 | Shein's internal numeric product ID                                                                   |
| `product_name`             | Display title from the listing page                                                                   |
| `product_url`              | Full canonical product detail URL                                                                     |
| `image_url`                | Primary listing thumbnail URL                                                                         |
| `category` / `category_id` | Human-readable name + numeric `-c-<id>` extracted from the URL                                        |
| `rank`                     | 1-based position in the listing                                                                       |
| `first_seen_date`          | ISO 8601 date this product first appeared in a run for this category + feed type                      |
| `rank_movement`            | Position delta vs the previous run (positive = climbed, negative = fell, 0 = first seen or unchanged) |
| `sale_price`               | Current sale price (numeric)                                                                          |
| `retail_price`             | Original retail price before discount                                                                 |
| `discount_pct`             | Discount percentage (0–100)                                                                           |
| `currency`                 | ISO 4217 currency code (USD, GBP, EUR, …)                                                             |
| `is_flash_sale`            | `true` if currently on a limited-time flash sale                                                      |
| `flash_sale_price`         | Flash sale price if active — `null` otherwise                                                         |
| `flash_sale_end`           | ISO 8601 end timestamp of the flash sale — `null` if not active                                       |
| `region`                   | Storefront region derived from the category URL (`us`, `uk`, `de`, …)                                 |
| `feed_type`                | Which feed this product came from: `new_arrival` or `best_seller`                                     |

### How it works

Shein's anti-bot system stops most scraping tools dead. This actor clears it automatically and returns the full category feed — you configure none of it. Every run fetches live: results are never served from a cache, so rank and price always reflect what Shein shows right now.

Trend state (`first_seen_date`, previous rank) is persisted to the run's Key-Value store so that consecutive runs compute accurate `rank_movement` deltas.

### Inputs

#### Category URLs

Shein category page URLs to scrape. Must use the `-c-<id>.html` URL format:

```
https://us.shein.com/Women-Dresses-c-1727.html
https://us.shein.com/Women-Tops-c-1738.html
```

Leave this field empty to use the built-in default set: Women Dresses, Tops, Pants, and Sets on `us.shein.com`.

**Do not add `?sort=` manually.** The sort direction is controlled by the Feed Type input.

#### Feed Type

Which trend feed to scrape:

- **Both New Arrivals and Best Sellers** (default) — fetches each category URL twice, once with `sort=7` (newest) and once with `sort=8` (best-selling).
- **New Arrivals only** — sorted by newest additions (`sort=7`).
- **Best Sellers only** — sorted by sales volume / popularity (`sort=8`).

#### Region

Shein storefront region for currency context. Automatically derived from the category URL domain if left unset.

| Value | Storefront         |
|-------|--------------------|
| `us`  | us.shein.com (USD) |
| `uk`  | shein.co.uk (GBP)  |
| `de`  | shein.de (EUR)     |
| `fr`  | shein.fr (EUR)     |
| `au`  | shein.com.au (AUD) |
| `ca`  | shein.ca (CAD)     |

#### Max Items

Maximum number of product records to emit across all pages and feeds combined. Set to `0` for no limit. Default: 100.

### Example output

```json
{
  "goods_id": "414605698",
  "product_name": "Fashionable Digital Printed Milk Silk Fabric, Cool Summer Maxi Dress",
  "product_url": "https://us.shein.com/p-414605698.html",
  "image_url": "https://img.ltwebstatic.com/images3_spmp/...",
  "category": "Women Dresses",
  "category_id": "1727",
  "rank": 1,
  "first_seen_date": "2026-07-05",
  "rank_movement": 0,
  "sale_price": 8.93,
  "retail_price": 14.99,
  "discount_pct": 40,
  "currency": "USD",
  "is_flash_sale": false,
  "flash_sale_price": null,
  "flash_sale_end": null,
  "region": "us",
  "feed_type": "new_arrival"
}
```

### Performance and cost

Each Shein category page is one billed request. A standard run with 4 categories on both feeds = 8 requests.

### Trend tracking across runs

Run this actor on a schedule (daily or hourly) for the same category URLs. On each run it:

1. Reads the previous run's rank state from the Key-Value store.
2. Computes `rank_movement` per product.
3. Records `first_seen_date` the first time a `goods_id` appears.
4. Persists updated state for the next run.

The state key is `category_id:feed_type:goods_id`, so multiple categories and feed types are tracked independently.

### Anti-bot notes

Shein occasionally returns a challenge page instead of real content. The actor detects this automatically and retries; a page that still fails is skipped with a warning so the rest of the run completes.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `categoryUrls` (type: `array`):

Shein category page URLs to scrape (must use the -c-<id>.html format,
e.g. https://us.shein.com/Women-Dresses-c-1727.html). Leave empty to use the
built-in default set of top US Shein categories (Women Dresses, Tops, Pants, Sets).
Sort direction is controlled by feedTypes — do not add ?sort= manually.

## `feedType` (type: `string`):

Which trend feed to scrape. new_arrival = sorted by newest; best_seller = sorted by sales/popularity; both = fetch each category URL twice (default).

## `region` (type: `string`):

Shein storefront region for currency context. Derived from the URL domain if omitted.

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

Maximum number of product records to emit per run (0 = no limit). Applies across all pages/feeds combined.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "categoryUrls": [
    {
      "url": "https://us.shein.com/Women-Dresses-c-1727.html"
    },
    {
      "url": "https://us.shein.com/Women-Tops-c-1738.html"
    }
  ],
  "feedType": "both",
  "region": "us",
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "categoryUrls": [
        {
            "url": "https://us.shein.com/Women-Dresses-c-1727.html"
        },
        {
            "url": "https://us.shein.com/Women-Tops-c-1738.html"
        }
    ],
    "feedType": "both",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/shein-new-arrivals-bestsellers-trend-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "categoryUrls": [
        { "url": "https://us.shein.com/Women-Dresses-c-1727.html" },
        { "url": "https://us.shein.com/Women-Tops-c-1738.html" },
    ],
    "feedType": "both",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/shein-new-arrivals-bestsellers-trend-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "categoryUrls": [
    {
      "url": "https://us.shein.com/Women-Dresses-c-1727.html"
    },
    {
      "url": "https://us.shein.com/Women-Tops-c-1738.html"
    }
  ],
  "feedType": "both",
  "maxItems": 20
}' |
apify call jungle_synthesizer/shein-new-arrivals-bestsellers-trend-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/shein-new-arrivals-bestsellers-trend-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/1o5JaY9boiii9T7kg/builds/1Mzk3KBGUtSbmtmCa/openapi.json
