OrbTop

Shein Price & Stock Monitor

ECOMMERCEAUTOMATION

Shein Price & Stock Monitor

Monitor Shein product prices and stock from a watchlist of product page URLs. Each run fetches the current sale price, retail price, discount percentage, flash-sale status, and per-variant stock for every URL in your list. Price changes are detected by comparing to the previous run.

Built for dropshippers, resellers, and pricing analysts running scheduled monitoring workflows.

What it does

  • Fetches each Shein product detail page (PDP) via Bright Data Web Unlocker — the only path that clears Shein's Halo anti-bot server-side
  • Extracts sale price, retail price, discount percentage, flash-sale price and end time, in-stock status, per-variant stock map, and low-stock hints
  • Detects price changes by comparing sale_price to the previous run's recorded price (stored in the run's Key-Value store)
  • Emits one dataset record per URL with price_changed (bool) and price_delta (number) fields

Input

Field Type Description
watchlistUrls URL list Shein product page URLs to monitor. Must end in -p-<id>.html. Example: https://us.shein.com/some-product-p-1234567.html
region select Storefront region for currency context (us, uk, de, fr, au, ca). Defaults to us.
maxItems integer Maximum records per run. Default 10. Set to 0 for no limit.

Note: Only product detail URLs (containing -p-<id>.html) are accepted. Category pages, search results, and collection pages are not supported.

Output

Each record includes:

Field Type Description
goods_id string Shein's numeric product identifier
product_url string The product page URL
product_name string Product display title
checked_at string ISO 8601 timestamp of this reading
sale_price number Current discounted sale price
retail_price number Original retail price before discount
discount_pct number Discount percentage (0-100)
currency string ISO 4217 currency code (e.g. USD, GBP)
price_changed boolean True if sale price differs from previous run
price_delta number Price change from previous run (positive = rose, negative = dropped)
in_stock boolean True if at least one variant is available
stock_level_hint string Low-stock text shown on the page, or null
variants_in_stock string JSON map of variant label to availability
variants_out_of_stock string Pipe-separated list of sold-out variant labels
is_flash_sale boolean True if a flash or limited-time sale is active
flash_sale_price number Flash sale price if active, otherwise null
flash_sale_end string ISO 8601 end time of the flash sale, or null
coupon_applied string Coupon or promo label on the page, or null
region string Storefront region code

Example output record

{
  "goods_id": "26507001",
  "product_url": "https://us.shein.com/SHEIN-Solid-Color-Short-Sleeve-T-Shirt-p-26507001-cat-1738.html",
  "product_name": "Pearl Letter Fashion Earrings",
  "checked_at": "2026-07-05T00:46:11.000Z",
  "sale_price": 1.4,
  "retail_price": 2.0,
  "discount_pct": 30,
  "currency": "USD",
  "price_changed": false,
  "price_delta": 0,
  "in_stock": false,
  "stock_level_hint": null,
  "variants_in_stock": "{\"one-size\":false}",
  "variants_out_of_stock": "one-size",
  "is_flash_sale": false,
  "flash_sale_price": null,
  "flash_sale_end": null,
  "coupon_applied": null,
  "region": "us"
}

Scheduling for continuous monitoring

This actor is designed to be run on a schedule (e.g. every 6 or 24 hours). Each run compares prices to the previous run's values and populates price_changed and price_delta. Use Apify's built-in scheduler or an external cron job to automate.

On the first run, price_changed will be false and price_delta will be 0 for all records (no previous data to compare against).

Region support

The region input controls the currency code in the currency output field. URLs must match the selected region's Shein domain (e.g. us.shein.com for us, shein.co.uk for uk). The actor auto-detects the region from the URL hostname if not specified.

Supported regions: us (USD), uk (GBP), de / fr / es / it (EUR), au (AUD), ca (CAD).

Limitations

  • Only product detail pages (PDP) are supported — not category or search pages
  • Each URL consumes one Bright Data Web Unlocker request
  • Price history is limited to the previous run's values; longer history requires external storage