{
  "openapi": "3.0.1",
  "info": {
    "title": "Shein Catalog Scraper - Product IDs, Titles & Images",
    "description": "One row per entry in Shein's public XML catalogue: product id, full title, product URL, image URL and the date Shein last changed it. Thirteen storefronts, millions of entries each. No prices - Shein publishes none anywhere this can read. Keyless, no browser.",
    "version": "0.1",
    "x-build-id": "d0x0u9nn1j3kbbeuh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dami_studio~shein-catalog-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dami_studio-shein-catalog-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/dami_studio~shein-catalog-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dami_studio-shein-catalog-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/dami_studio~shein-catalog-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dami_studio-shein-catalog-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": {
          "region": {
            "title": "Storefront",
            "enum": [
              "de",
              "uk",
              "it",
              "es",
              "pt",
              "nl",
              "pl",
              "fr",
              "ro",
              "at",
              "se",
              "ch",
              "tr"
            ],
            "type": "string",
            "description": "Which Shein storefront to read. These thirteen publish a catalogue file; the other nineteen checked answer 403, 404, 410 or nothing at all, so there is nothing to add to this list. Each storefront keeps its own ids, its own URLs, and titles in its own language."
          },
          "maxItems": {
            "title": "Maximum rows",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "How many rows to return. The run stops the moment it has this many and cancels the download in the middle of the file, so asking for 200 genuinely transfers about 200 rows' worth of bytes rather than the whole 12,000-entry file. Keep it low while you are testing - you pay per row."
          },
          "contentType": {
            "title": "What to read",
            "enum": [
              "products",
              "categories",
              "stores"
            ],
            "type": "string",
            "description": "Products is the catalogue itself, and the only one with titles and images. Category pages and store pages are the other two families of URL in the same index: far smaller, and carrying only a URL and a date, so their title is derived from the URL and their image is empty."
          },
          "titleContains": {
            "title": "Only titles containing one of these words",
            "minItems": 0,
            "maxItems": 20,
            "type": "array",
            "description": "Case-insensitive. A row is kept if its title or its URL contains any one of these. Up to 20 terms. Leave it empty to take everything.",
            "items": {
              "type": "string"
            }
          },
          "updatedSince": {
            "title": "Only entries stamped on or after this date",
            "type": "string",
            "description": "A date as YYYY-MM-DD. READ THIS BEFORE YOU SET IT: Shein re-stamps the whole catalogue at once, not each product when it changes. Measured on 2026-09-20: two files read end to end were 12,000 of 12,000 on a single date, all 440 files in the index carried that date, and samples from 24 files across the whole catalogue matched. So this is a gate on when Shein last regenerated the catalogue, not a list of what changed - set it to yesterday and you may get everything, set it to tomorrow and you will get nothing. To find genuine changes, pull the ids and diff them against your last pull. If a run drops every row to this filter it tells you which dates it actually saw."
          },
          "maxSitemapFiles": {
            "title": "Maximum catalogue files to open",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Shein splits the catalogue into files of 12,000 entries each. This caps how many one run opens, which is the real bound on how long a narrow filter can hunt before giving up, and on what a fruitless hunt costs. With no filter set one file is 12,000 rows, so nine files cover the 100,000-row limit. To look deeper than twenty files, move the start file forward and run again. The run stops at whichever it reaches first, this or the row limit, and the log says which."
          },
          "startFile": {
            "title": "Start at catalogue file number",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Where in the catalogue to begin. The files do not overlap - file 1 and file 221 were checked and share none of their 12,000 ids - so this is how you walk the whole catalogue across several runs without repeating yourself. Note the file your last row came from and start the next run there. A number past the end is refused before anything is downloaded, and the message tells you how many files that storefront actually has today."
          },
          "proxyUrls": {
            "title": "Your own proxy servers (optional)",
            "minItems": 0,
            "maxItems": 50,
            "type": "array",
            "description": "Leave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}