{
  "openapi": "3.0.1",
  "info": {
    "title": "SHEIN Scraper - Products, Prices, Discounts & Ratings",
    "description": "Scrape SHEIN product listings by keyword or from any category, sale or search link. Returns product ID, SKU, title, link, category, current price, genuine was-price and discount, star rating, review count, stock, flash-sale and clearance flags, and images. Nine regional storefronts.",
    "version": "0.1",
    "x-build-id": "WqeyE2upkKVFI6P9F"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~shein-product-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-shein-product-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/abotapi~shein-product-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-shein-product-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/abotapi~shein-product-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-shein-product-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "urls": {
            "title": "Listing URLs",
            "type": "array",
            "description": "SHEIN listing links. Three link shapes are read, one example of each is pre-filled (two RecommendSelection examples): RecommendSelection listings (e.g. https://au.shein.com/RecommendSelection/Home-Kitchen-sc-017185546.html), search results pages (e.g. https://au.shein.com/pdsearch/summer%20dress/) and category pages (e.g. https://au.shein.com/Women-Dresses-c-1727.html). Links are read in order and each returns up to about 120 products (SHEIN's first listing page), so with the default 'Maximum products' only the first link is needed. Leave this field untouched and the three example links (one RecommendSelection listing, one search page, one category page) are scraped; a run that sets only 'Search keywords' does not use them. Paste several links for larger pulls: every usable link is read in the same run and results are deduplicated across them. Links on www.shein.com or the m.shein.com mobile site are opened on the selected storefront's own site with the same path. Product, daily-new, sale, store, brand and share links are not listings; a run with a mix skips those with a warning naming each one and still reads the rest. The storefront (Australia/Singapore/Canada) is detected from the link's own host, or from the mobile site's /au/, /sg/ or /ca/ prefix, when 'Storefront' below is left on its default.",
            "default": [
              "https://au.shein.com/RecommendSelection/Women-Clothing-sc-017172961.html",
              "https://au.shein.com/pdsearch/summer%20dress/",
              "https://au.shein.com/Women-Dresses-c-1727.html"
            ],
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Optional. Plain keywords, one per line (e.g. summer dress). Each keyword is searched on the selected storefront exactly like SHEIN's own search box and returns up to about 120 products. Use with or instead of listing links. A SHEIN link typed here is read as a link.",
            "items": {
              "type": "string"
            }
          },
          "storefront": {
            "title": "Storefront",
            "enum": [
              "au",
              "sg",
              "ca"
            ],
            "type": "string",
            "description": "Which regional storefront to read. This sets the catalogue, language and currency of the results, and where keywords are searched. Left on the default, it is auto-detected from the pasted link's own host (au./sg./ca.) when that host is one of the three supported storefronts; set it explicitly to override that detection.",
            "default": "au"
          },
          "includeOutOfStock": {
            "title": "Include out-of-stock products",
            "type": "boolean",
            "description": "Keep products that are sold out. Turn off to return only products currently available.",
            "default": true
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "most_popular",
              "new_arrivals",
              "top_rated",
              "price_asc",
              "price_desc",
              "rating_desc",
              "reviews_desc",
              "discount_desc"
            ],
            "type": "string",
            "description": "Order of the results. The first five are SHEIN's own sort orders: the listing is opened already sorted, so with a 'Maximum products' cap you get e.g. the cheapest or newest products of the whole listing, not just the default ones re-ordered. The last three have no SHEIN equivalent: they only re-order the products the listing returned. Applies to every link and keyword.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "number",
            "description": "Lowest current price, in the storefront's currency (AU$, S$ or CA$). Sent to SHEIN's own price filter, so the listing returns products in range, and checked again on every product, so every published price is inside the range. Leave empty for no minimum. Applies to every link and keyword."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "number",
            "description": "Highest current price, in the storefront's currency. Works like 'Minimum price'. Leave empty for no maximum."
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "number",
            "description": "Keep only products rated at least this many stars (1 to 5). SHEIN has no rating filter, so this is applied after fetching: products below it, or not rated yet, are removed from what the listing returned, and a run can return fewer than 'Maximum products'. Leave empty for no filter."
          },
          "onSaleOnly": {
            "title": "Discounted products only",
            "type": "boolean",
            "description": "Keep only products with a genuine was-price above the current price. Applied after fetching, so a run can return fewer than 'Maximum products'.",
            "default": false
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Optional. Keep only products in these categories, one per line. Type a plain category name or part of one (e.g. dresses keeps Women Short Dresses and Women Midi Dresses; matched case-insensitively against each product's category name), or a SHEIN category number (e.g. 1727, which also keeps every sub-category under it). A product matching any line is kept. Applied after fetching, so a run can return fewer than 'Maximum products'; to read one whole category, paste its category page link above instead.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum products",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many products in total, across all listing URLs. Set 0 for no limit.",
            "default": 20
          },
          "maxPages": {
            "title": "Maximum listing pages per URL",
            "minimum": 0,
            "type": "integer",
            "description": "How many listing pages to read for each listing URL. Set 0 for no limit.",
            "default": 0
          },
          "enableLegacyBrowserLane": {
            "title": "Enable legacy browser lane",
            "type": "boolean",
            "description": "Retired option kept so saved inputs keep validating. It has no effect.",
            "default": false
          },
          "proxy": {
            "title": "Connection",
            "type": "object",
            "description": "Connection used to reach the site. The default works for most runs. When left on the default (Apify Proxy, residential group, no country) the actor starts on Apify's datacenter pool, which cleared the site's check in testing while Apify residential mostly did not, then tries Apify residential and its own backup connections. Other Apify Proxy choices are tried first as entered, then backup connections; your own proxy URLs or no proxy are used alone, with no backup.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "resumeFromRunId": {
            "title": "Resume from run ID",
            "type": "string",
            "description": "Continue an interrupted run: paste its run ID and products it already returned are skipped."
          },
          "incrementalMode": {
            "title": "Incremental mode",
            "type": "boolean",
            "description": "For recurring runs of the same listing URLs: remembers what was seen last time and returns only new and changed products. Compared: price, original price, in-stock flag, title, link, category and the other catalogue details (a change is reported as UPDATED with the changed field names). Never compared, still returned on every row: rating, review count, sold count, fit split, stock count, USD price, pictures, flash-sale flag, card labels, promotions and deal timing, the coupon-estimated price, formatted price strings, and brand and store display names. Add more with the ignore-fields option below.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Name the saved state used by incremental mode. Leave empty to derive one from the listing URLs."
          },
          "emitUnchanged": {
            "title": "Also return unchanged products",
            "type": "boolean",
            "description": "In incremental mode, also return products whose details have not changed since the last run.",
            "default": false
          },
          "emitExpired": {
            "title": "Also return delisted products",
            "type": "boolean",
            "description": "In incremental mode, also return products that were seen before but have now disappeared from the listing.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Optional. Field names to exclude from UPDATED change detection, in addition to the built-in handling. Built in, these never trigger an UPDATED by themselves: rating, review count and its rounded text, the sold-count text and the fit split (they move as shoppers buy and review); stock count, the USD-converted price, image links (image, images, full-size images, colour images and colour variants), the flash-sale flag, card labels (badges, rank label), deal end time, promotions, the coupon-estimated price, the formatted price strings and the brand and store names (whose codes stay tracked) (marketing timing, exchange rates and CDN hosting rather than a real catalogue change; the price itself is still tracked). Use this if another field in your setup turns out to be noisy.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a page per product; other connectors get a best-effort write. Leave empty to skip. Never changes the dataset output."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which product pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on products written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}