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.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | 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. |
countries | array | optional | One or more SHEIN storefronts to read. Each storefront returns its own products, local currency and USD comparison prices. |
maxItems | integer | optional | 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. |
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.
| Field | Type | Required | Description |
|---|---|---|---|
products | string | optional | Dataset 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) andall(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.
Example: US featured products
{
"mode": "featured",
"countries": ["US"],
"maxItems": 10
}
Example: richer home feed for three markets
{
"mode": "homeFeed",
"countries": ["US", "UK", "BR"],
"maxItems": 60
}
Example: compare featured and home-feed products
{
"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 IDtitle— product name from the feedurl— product page URL on the matching storefrontcountryCode— storefront code (US,UK,DE, …)currency— local ISO currency codemainImage— main product image URLimages— gallery image URLssalePrice/salePriceText— current price as a number and with its currency symbolretailPrice/retailPriceText— list price as a number and with its currency symbolpriceUsd/retailPriceUsd— SHEIN's USD equivalent for the sale and retail pricediscountPercentage— discount shown by SHEINcatId— SHEIN category IDbrand— brand name when the card carries oneproductSku— SKU code (home feed)spu— SPU identifier (home feed)rating— average customer rating when reviews existreviewCount— number of customer reviewssoldCount— units sold as shown on the card (home feed); a1.5k+ soldlabel becomes1500salesLabel— sales label such as800+ sold(home feed)isOnSale— on-sale flag (home feed)badges— promotional labels shown on the cardrecordType—featuredorhomeFeedposition— 1-based position in that storefront's returned records (home-feed records come first inallmode)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
/homepayload includes SKU, SPU, brand, rating, review count, sold count and a sales label. - When both feeds contain the same product in
allmode, the home-feed record is kept and the root duplicate is dropped. soldCountfollows the card's sold label, so800+ soldbecomes800; 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
homeFeedmode. - 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.
Source build NH8lgwIa6DUbH8qF5. Documentation is regenerated from the default published build; private drafts are not included.