Vexaloom Labs

Shein Homepage Featured Products Scraper

Collect the featured products shown on a Shein regional homepage: title, product URL, sale and retail price, discount percentage and images in local currency, for 22 countries.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringoptionalWhich server-rendered SHEIN feed to collect. The home feed is richer (20 products with SKU, SPU, brand, rating, sold count) and is available for US, UK, AU, BR, CA, MX, PH, SG, MY, NZ and ZA; other markets fall back to their root homepage.
countriesarrayoptionalOne or more SHEIN storefronts to read. Each storefront returns its own products, local currency and USD comparison prices.
maxItemsintegeroptionalHard cap on records across all selected storefronts. A root homepage carries 6-14 products and a home feed carries 20; the cap trims records after each storefront is read and stops requesting the remaining storefronts once it is reached.

Download the published input schema

View complete JSON
{
  "properties": {
    "countries": {
      "default": [
        "US"
      ],
      "description": "One or more SHEIN storefronts to read. Each storefront returns its own products, local currency and USD comparison prices.",
      "editor": "select",
      "items": {
        "enum": [
          "US",
          "UK",
          "CA",
          "AU",
          "NZ",
          "MX",
          "BR",
          "CL",
          "CO",
          "PE",
          "DE",
          "FR",
          "ES",
          "IT",
          "NL",
          "PT",
          "AT",
          "PL",
          "SE",
          "CH",
          "IL",
          "SA",
          "JP",
          "KR",
          "TW",
          "TH",
          "VN",
          "IN",
          "PH",
          "SG",
          "MY",
          "ZA"
        ],
        "enumTitles": [
          "United States (USD)",
          "United Kingdom (GBP)",
          "Canada (CAD)",
          "Australia (AUD)",
          "New Zealand (NZD)",
          "Mexico (MXN)",
          "Brazil (BRL)",
          "Chile (CLP)",
          "Colombia (COP)",
          "Peru (PEN)",
          "Germany (EUR)",
          "France (EUR)",
          "Spain (EUR)",
          "Italy (EUR)",
          "Netherlands (EUR)",
          "Portugal (EUR)",
          "Austria (EUR)",
          "Poland (PLN)",
          "Sweden (SEK)",
          "Switzerland (CHF)",
          "Israel (ILS)",
          "Saudi Arabia (SAR)",
          "Japan (JPY)",
          "South Korea (KRW)",
          "Taiwan (TWD)",
          "Thailand (THB)",
          "Vietnam (VND)",
          "India (USD)",
          "Philippines (PHP)",
          "Singapore (SGD)",
          "Malaysia (MYR)",
          "South Africa (ZAR)"
        ],
        "type": "string"
      },
      "minItems": 1,
      "prefill": [
        "US"
      ],
      "title": "Storefronts",
      "type": "array",
      "uniqueItems": true
    },
    "maxItems": {
      "default": 100,
      "description": "Hard cap on records across all selected storefronts. A root homepage carries 6-14 products and a home feed carries 20; the cap trims records after each storefront is read and stops requesting the remaining storefronts once it is reached.",
      "editor": "number",
      "maximum": 500,
      "minimum": 1,
      "prefill": 1,
      "title": "Max Items",
      "type": "integer"
    },
    "mode": {
      "default": "featured",
      "description": "Which server-rendered SHEIN feed to collect. The home feed is richer (20 products with SKU, SPU, brand, rating, sold count) and is available for US, UK, AU, BR, CA, MX, PH, SG, MY, NZ and ZA; other markets fall back to their root homepage.",
      "editor": "select",
      "enum": [
        "featured",
        "homeFeed",
        "all"
      ],
      "enumTitles": [
        "Featured products (root homepage)",
        "Home feed (richer, 20 products)",
        "Both feeds"
      ],
      "prefill": "featured",
      "title": "Feed",
      "type": "string"
    }
  },
  "required": [],
  "schemaVersion": 1,
  "title": "Shein Homepage & Home Feed Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
productsstringoptionalDataset containing all scraped SHEIN storefront products.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "One record per SHEIN featured or home-feed product, with local and USD pricing, ratings, sold counts, brand, SKU, images and storefront metadata.",
  "properties": {
    "products": {
      "description": "Dataset containing all scraped SHEIN storefront products.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Shein products",
      "type": "string"
    }
  },
  "title": "Shein Homepage & Home Feed Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "fields": {
    "properties": {
      "badges": {
        "description": "Promotional labels shown on the product card.",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "brand": {
        "description": "Brand name when the feed carries one.",
        "nullable": true,
        "type": "string"
      },
      "catId": {
        "description": "SHEIN category ID.",
        "nullable": true,
        "type": "string"
      },
      "countryCode": {
        "description": "Storefront code the record came from (US, UK, DE, ...).",
        "type": "string"
      },
      "currency": {
        "description": "ISO currency code of the storefront.",
        "type": "string"
      },
      "discountPercentage": {
        "description": "Discount percentage shown by SHEIN.",
        "nullable": true,
        "type": "integer"
      },
      "images": {
        "description": "Gallery image URLs when the feed provides them.",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "isOnSale": {
        "description": "Whether SHEIN marks the product as on sale (home feed only).",
        "nullable": true,
        "type": "boolean"
      },
      "mainImage": {
        "description": "Main product image URL.",
        "nullable": true,
        "type": "string"
      },
      "position": {
        "description": "1-based position in that storefront's returned records (home-feed records come first in all mode).",
        "type": "integer"
      },
      "priceUsd": {
        "description": "SHEIN's USD equivalent of the sale price.",
        "nullable": true,
        "type": "number"
      },
      "productId": {
        "description": "SHEIN goods ID.",
        "type": "string"
      },
      "productSku": {
        "description": "SHEIN SKU code (home feed only).",
        "nullable": true,
        "type": "string"
      },
      "rating": {
        "description": "Average customer rating when the product has reviews.",
        "nullable": true,
        "type": "number"
      },
      "recordType": {
        "description": "Which feed produced the record.",
        "enum": [
          "featured",
          "homeFeed"
        ],
        "type": "string"
      },
      "retailPrice": {
        "description": "Retail (list) price in the local currency.",
        "nullable": true,
        "type": "number"
      },
      "retailPriceText": {
        "description": "Retail price formatted with the local currency symbol.",
        "nullable": true,
        "type": "string"
      },
      "retailPriceUsd": {
        "description": "SHEIN's USD equivalent of the retail price.",
        "nullable": true,
        "type": "number"
      },
      "reviewCount": {
        "description": "Number of customer reviews when available.",
        "nullable": true,
        "type": "integer"
      },
      "salePrice": {
        "description": "Current sale price in the local currency.",
        "nullable": true,
        "type": "number"
      },
      "salePriceText": {
        "description": "Sale price formatted with the local currency symbol.",
        "nullable": true,
        "type": "string"
      },
      "salesLabel": {
        "description": "Sales label shown by SHEIN, e.g. 800+ sold.",
        "nullable": true,
        "type": "string"
      },
      "scrapedAt": {
        "description": "UTC timestamp of the scrape in ISO 8601 format.",
        "type": "string"
      },
      "soldCount": {
        "description": "Units sold as shown on the card (home feed only); a 1.5k+ sold label becomes 1500.",
        "nullable": true,
        "type": "integer"
      },
      "spu": {
        "description": "SHEIN SPU identifier (home feed only).",
        "nullable": true,
        "type": "string"
      },
      "title": {
        "description": "Product name exactly as shown on the feed.",
        "type": "string"
      },
      "url": {
        "description": "Product URL on the matching storefront. Uses the canonical slug when the feed provides one.",
        "type": "string"
      }
    },
    "type": "object"
  },
  "title": "Shein Homepage & Home Feed Products"
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Shein Homepage & Home Feed Scraper

Read what SHEIN is promoting in 32 storefronts without a login, cookie or proxy setup. The actor collects two server-rendered surfaces: the featured products on each regional homepage and the richer /home feed, which adds SKU, SPU, brand, rating, review count, sold count and a sales label. It does not offer keyword search, category browse or product detail pages; SHEIN blocks those anonymous routes (see Limitations).

What this actor does

  • Three feed modes: featured (root homepage, 32 markets), homeFeed (20 richer products in 11 markets, root fallback elsewhere) and all (both, deduplicated per market).
  • Local and USD pricing: sale price, retail price, discount percentage, plus SHEIN's own USD equivalent for cross-market comparison.
  • Rich home-feed fields: brand, SKU, SPU, rating, review count, units sold, sales label and on-sale flag when the feed provides them.
  • Product links and imagery: canonical product URLs when the feed has a slug, main image and gallery images.
  • Empty fields are omitted. A field SHEIN does not publish for a particular card is left out rather than sent as null.

Services

  • Storefront snapshots: capture the current featured assortment for one market or all 32 in a single run.
  • Cross-market price checks: compare local prices and SHEIN's USD equivalent across storefronts.
  • Promotion monitoring: track discount depth, sales labels and on-sale flags over time.
  • Catalogue seeding: collect product IDs, titles, links, prices and images for a lightweight starter catalogue.
  • Assortment research: see which products each regional storefront chooses to promote.

How it works

The actor requests the public storefront page, reads the product data that SHEIN renders into that page, and returns one record per product. No account is used, no cookies are passed in, and no browser is required. If a page is temporarily challenged, the actor retries and then tries a different Apify connection automatically; it never asks you for proxy settings.

Input

Field Type Default Description
mode string featured featured reads the root homepage; homeFeed reads the richer /home feed; all reads both and keeps one record per product.
countries array ["US"] Storefronts to read. Choose any of the 32 supported markets; each returns local prices and its own currency.
maxItems integer 100 Hard cap on records across all selected storefronts (1–500). Each storefront is read once, then the cap trims the result; once reached, remaining storefronts are not requested.

Every field has a default, so a run can start with no changes. Existing tasks that still send the old country value keep working: the actor maps it to countries in code.

{
    "mode": "featured",
    "countries": ["US"],
    "maxItems": 10
}

Example: richer home feed for three markets

{
    "mode": "homeFeed",
    "countries": ["US", "UK", "BR"],
    "maxItems": 60
}
{
    "mode": "all",
    "countries": ["US", "DE", "JP"],
    "maxItems": 200
}

Example: legacy input from an existing task

{
    "country": "UK",
    "maxItems": 5
}

Output per product

  • productId — SHEIN goods ID
  • title — product name from the feed
  • url — product page URL on the matching storefront
  • countryCode — storefront code (US, UK, DE, …)
  • currency — local ISO currency code
  • mainImage — main product image URL
  • images — gallery image URLs
  • salePrice / salePriceText — current price as a number and with its currency symbol
  • retailPrice / retailPriceText — list price as a number and with its currency symbol
  • priceUsd / retailPriceUsd — SHEIN's USD equivalent for the sale and retail price
  • discountPercentage — discount shown by SHEIN
  • catId — SHEIN category ID
  • brand — brand name when the card carries one
  • productSku — SKU code (home feed)
  • spu — SPU identifier (home feed)
  • rating — average customer rating when reviews exist
  • reviewCount — number of customer reviews
  • soldCount — units sold as shown on the card (home feed); a 1.5k+ sold label becomes 1500
  • salesLabel — sales label such as 800+ sold (home feed)
  • isOnSale — on-sale flag (home feed)
  • badges — promotional labels shown on the card
  • recordType — featured or homeFeed
  • position — 1-based position in that storefront's returned records (home-feed records come first in all mode)
  • scrapedAt — UTC scrape timestamp

Use cases

  • Merchandising teams — snapshot what each storefront is promoting today.
  • Pricing analysts — compare local prices against SHEIN's USD equivalent across markets.
  • Promotion trackers — monitor discount depth and sales labels around seasonal events.
  • Market researchers — study assortment differences between mature and emerging storefronts.
  • Data teams — seed a product catalogue with stable IDs, titles, links and images.

Usage cost

You pay for Apify platform usage (run time and memory). There is no per-record charge from this actor and no paid proxy is required. A typical run reads one page per selected storefront, so keeping countries focused keeps both runtime and cost down.

FAQ

Can I search SHEIN by keyword or browse a category with this actor? No. Keyword search, category pages and product detail pages currently answer anonymous requests with a SHEIN risk challenge. This actor deliberately stays on the two storefront feeds that work without a login and documents that boundary instead of returning partial or fabricated detail data.

Why does a market return fewer products than maxItems? Each root homepage carries 6–14 products and each home feed carries 20. maxItems is a cap, not a quota; the actor never invents products that are not on the page.

Why are brand, rating, sold count or SKU missing on some records? Those fields live on the richer home feed. Root-homepage cards do not carry them, and even on the home feed a card may omit a brand, rating or sales label. Missing values are omitted.

Why does homeFeed return featured records for some countries? The /home feed is available for US, UK, AU, BR, CA, MX, PH, SG, MY, NZ and ZA. For other markets, and when a feed is temporarily empty, the actor reads the root homepage and labels those records featured.

Are prices live? Yes. Every run reads the storefront at run time. Local prices, discounts and USD equivalents reflect that moment.

Does the featured set change between runs? SHEIN can change its storefront merchandising at any time, but within a short test window the feed is usually stable. Do not assume a new set on every run; schedule the actor at the cadence your use case needs.

Do I need a proxy or a SHEIN account? No. The actor works without user credentials and chooses a working connection automatically.

Is this affiliated with SHEIN? No. This is an independent third-party actor that reads publicly available storefront pages. It is not affiliated with or endorsed by SHEIN.

Notes

  • 32 storefronts are supported; each record carries the correct local currency and SHEIN's USD equivalent.
  • Home-feed records are richer because the /home payload includes SKU, SPU, brand, rating, review count, sold count and a sales label.
  • When both feeds contain the same product in all mode, the home-feed record is kept and the root duplicate is dropped.
  • soldCount follows the card's sold label, so 800+ sold becomes 800; SHEIN's separate internal counter is used only when no label is shown.
  • Records are deduplicated per product and storefront; the same product can appear once for each market.
  • Fields are omitted when empty, so downstream code should treat every optional field as optional.

Limitations

  • No keyword search, category browse or product detail. Those routes return a SHEIN risk challenge to anonymous requests from every tested connection, so the actor does not offer them. It is a storefront-feed collector, not a full catalogue scraper.
  • No variants, sizes, stock or review text. Those data points exist only on product detail pages, which are part of the same blocked surface.
  • Fixed row ceiling. A storefront provides one feed screen: 6–14 root products and 20 home-feed products. There is no reliable anonymous pagination, so a single market tops out at about 34 products; in testing the 32 root pages plus 11 home feeds held about 580 product-and-storefront records (499 unique product IDs).
  • Home feed is not universal. The 11 listed markets have the rich feed; other markets return root-homepage records even in homeFeed mode.
  • Conditional fields. Rating, brand, sales label and gallery images appear only when SHEIN includes them on a card.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build NH8lgwIa6DUbH8qF5. Documentation is regenerated from the default published build; private drafts are not included.