{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopee Product Scraper",
    "description": "Scrape Shopee products in 8 markets (SG, ID, MY, PH, TH, VN, TW, BR) by keyword or URL: price, discount, rating, seller location, labels. Optional full product details and seller profile. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "wWsOmsbu0EoxrG51h"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~shopee-product-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-shopee-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/nice_dev~shopee-product-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-shopee-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/nice_dev~shopee-product-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-shopee-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": {
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 1000,
            "type": "array",
            "description": "Shopee URLs from any of the 8 markets: search results (`https://shopee.sg/search?keyword=iphone&minPrice=500`, the filters set on the site are kept), category pages (`https://shopee.co.id/Laptop-cat.11044364.11044440`), shops (`https://shopee.sg/shop/454919755`) or single products (`https://shopee.com.br/...-i.1653322439.58213403669`). The market is read from each URL. When this list is not empty, the keyword fields below are ignored; filters, caps and monitoring still apply. Max 1 000 URLs.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "country": {
            "title": "Market",
            "enum": [
              "SG",
              "ID",
              "MY",
              "PH",
              "TH",
              "VN",
              "TW",
              "BR"
            ],
            "type": "string",
            "description": "Shopee market searched by the keywords below (start URLs carry their own market).",
            "default": "SG"
          },
          "query": {
            "title": "Search keyword",
            "maxLength": 200,
            "type": "string",
            "description": "Product search, exactly as typed on Shopee (e.g. `iphone 15`)."
          },
          "searchQueries": {
            "title": "More search keywords",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several keywords in one run: one search per keyword (times each location below). Added to **Search keyword**; products found by several searches are saved once.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Ships from",
            "maxLength": 200,
            "type": "string",
            "description": "Seller location, written as Shopee's location filter lists it for the market (e.g. `Singapore` or `Mainland China` in Singapore, `Jakarta Barat` in Indonesia, `São Paulo` in Brazil), not the `location` column of the results. Sent to Shopee's own location filter. Empty = everywhere."
          },
          "locations": {
            "title": "More seller locations",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several seller locations in one run: every keyword is searched in every location (3 keywords × 4 locations = 12 searches, max 500). Added to **Ships from**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max products",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of products to save for the whole run (after deduplication and filters). 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max products per search",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap for EACH search (keyword × location, or start URL), so that the first search cannot use up the whole **Max products** budget. 0 = no per-search cap.",
            "default": 0
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "best_selling",
              "newest",
              "price_low_to_high",
              "price_high_to_low"
            ],
            "type": "string",
            "description": "Shopee sort order. It orders the page of about 40 products Shopee gives for the search, picked among its top results: not a ranking of all of Shopee (Price: low to high gives the cheapest products of that page, not of the whole market). With **Deep search** on, the Actor also reads the other orders and price bands when your cap asks for more products than one page gives; the sort chosen here is read first. Keyword searches only: a start URL keeps its own filters.",
            "default": "relevance"
          },
          "deepSearch": {
            "title": "Deep search (more products per keyword)",
            "type": "boolean",
            "description": "Shopee shows about 40 products per search page and no real page 2. On: the Actor re-reads the search with every sort order and with narrower and narrower price bands until no new product comes up (hundreds of products per keyword). Off: one page per search (about 40 products, fastest). Same price per product either way.",
            "default": true
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "maximum": 100000000000,
            "type": "integer",
            "description": "Lowest price, in the market's currency (SGD, IDR, BRL…), whole units. Sent to Shopee and checked on each product."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "maximum": 100000000000,
            "type": "integer",
            "description": "Highest price, in the market's currency, whole units. Sent to Shopee and checked on each product."
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "any",
              "new",
              "used"
            ],
            "type": "string",
            "description": "New or used products. Read on the product page: choosing New or Used turns on Product details (the details fee applies) and drops the other products (filter fee).",
            "default": "any"
          },
          "officialShopOnly": {
            "title": "Official shops only (Shopee Mall)",
            "type": "boolean",
            "description": "Only products sold by Shopee Mall / official brand stores, the shops behind Shopee's 100% Authentic guarantee (Shopee's own filter). Keyword searches only: a start URL keeps its own filters.",
            "default": false
          },
          "extractDetails": {
            "title": "Full product details (paid option)",
            "type": "boolean",
            "description": "Open each product page for: every variant (id, name, pre-order), full description, specifications, brand, category path, all photos and videos, creation date, shipping days, vouchers. Charged per product delivered with details (see Pricing). Shopee hides prices, units sold and ratings on product pages for visitors who are not logged in: those come from the search card.",
            "default": false
          },
          "includeShopProfile": {
            "title": "Seller profile (paid option)",
            "type": "boolean",
            "description": "Add the seller's shop name, shop rating, number of shop ratings and followers to each product (one shop page read per seller, charged once per seller per run).",
            "default": false
          },
          "minRating": {
            "title": "Min rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only products whose product rating (1-5) is at least this value. Products without a product rating (new, or only a shop rating shown) are dropped."
          },
          "discountedOnly": {
            "title": "Discounted products only",
            "type": "boolean",
            "description": "Only products showing a discount.",
            "default": false
          },
          "brand": {
            "title": "Brand",
            "maxLength": 100,
            "type": "string",
            "description": "Only products of this brand (as written on the product page, case ignored). Read on the product page: turns on Product details."
          },
          "withVideoOnly": {
            "title": "Products with a video only",
            "type": "boolean",
            "description": "Only products whose page has a video. Read on the product page: turns on Product details.",
            "default": false
          },
          "wholesaleOnly": {
            "title": "Wholesale offers only",
            "type": "boolean",
            "description": "Only products with wholesale (quantity) prices. Read on the product page: turns on Product details.",
            "default": false
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the products whose name contains one of these words (case and accents ignored).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Only new products",
            "type": "boolean",
            "description": "Skip the products that a previous run (same **Memory key**) already delivered: they are not saved and not charged, and their page is not even opened. First run = everything is new.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new products**. Give each schedule / task its own key (e.g. `sg-iphone`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every product again. Untick it afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies, used for search, category and shop pages. Keep the default: it is included in the price. Product details always go through our own residential proxy in the product's country (included in the details price). The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel.",
            "default": 8
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Most requests to the site in any 60 seconds, all of them counted: search pages, shop pages and product pages. A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if the site answers HTTP 429 / 403 in the log.",
            "default": 120
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap.",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed. Behind a proxy, a request the site turns away is also retried on a new proxy session up to 10 times without using up these retries.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}