{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Shop Product Scraper",
    "description": "Scrape TikTok Shop products by keyword, category URL or product URL across 10 storefronts. Every row carries title, price, original_price, discount_percent, seller_name, rating, sold_count and the full category_path. Export JSON, CSV or Excel, or pull it from the API.",
    "version": "2.1",
    "x-build-id": "E9yAZmVSppXxYOpUf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/herus13~tiktok-shop-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-herus13-tiktok-shop-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/herus13~tiktok-shop-scraper/runs": {
      "post": {
        "operationId": "runs-sync-herus13-tiktok-shop-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/herus13~tiktok-shop-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-herus13-tiktok-shop-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": {
          "search_terms": {
            "title": "Search Terms",
            "type": "array",
            "description": "Keywords to search on TikTok Shop. Each term returns every matching product up to `max_results`, with price, seller, rating and sold count. Works on every supported storefront. Examples: `wireless earbuds`, `silk pillowcase`. Provide at least one of `search_terms`, `category_urls` or `product_urls`; leave empty to scrape only from the other two.",
            "items": {
              "type": "string"
            }
          },
          "product_urls": {
            "title": "Product URLs",
            "type": "array",
            "description": "Direct product page URLs, one per entry. Most regions: `https://shop.tiktok.com/{region}/pdp/{product_id}`. For `ID` (Tokopedia): `https://www.tokopedia.com/{shop}/{product-slug}`. Each URL returns one product with the full detail set: description, image gallery, variants and the complete category breadcrumb. Provide at least one of `search_terms`, `category_urls` or `product_urls`; leave empty to scrape only from the other two.",
            "items": {
              "type": "string"
            }
          },
          "category_urls": {
            "title": "Category URLs",
            "type": "array",
            "description": "Category browse URLs, one per entry. Most regions: `https://shop.tiktok.com/{region}/c/{slug}/{id}` (e.g. `https://shop.tiktok.com/us/c/beauty-personal-care/601450`). For `ID` (Tokopedia): `https://www.tokopedia.com/p/{slug}` (e.g. `https://www.tokopedia.com/p/handphone-tablet`). Each URL returns every product in that category up to `max_results`. Leave empty to scrape only from `search_terms` and `product_urls`.",
            "items": {
              "type": "string"
            }
          },
          "region": {
            "title": "Region",
            "enum": [
              "US",
              "GB",
              "VN",
              "TH",
              "PH",
              "MY",
              "SG",
              "JP",
              "MX",
              "BR",
              "ID"
            ],
            "type": "string",
            "description": "TikTok Shop storefront to scrape. It decides the catalogue, the language of the listings and the currency of every price. Default `US`. Supported: `US` United States, `GB` United Kingdom, `VN` Vietnam, `TH` Thailand, `PH` Philippines, `MY` Malaysia, `SG` Singapore, `JP` Japan, `MX` Mexico, `BR` Brazil, `ID` Indonesia. Indonesia is Tokopedia (search, category browse, product detail and reviews). France has no public web storefront.",
            "default": "US"
          },
          "max_results": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Most products returned per search term and per category URL. Default 100, minimum 1, maximum 1000. `product_urls` returns one product each and ignores this cap. A keyword feed usually runs out after 50-200 products, so a wider crawl means more search terms rather than a higher cap.",
            "default": 100
          },
          "scrape_product_details": {
            "title": "Scrape Product Details",
            "type": "boolean",
            "description": "Add the full detail set to every product found by a search term or a category URL: product description, full image gallery, variants, stock and the complete category breadcrumb root to leaf. Default `false`, which returns the listing fields only. Each enriched product is charged as a product detail instead of a search result. Products given in `product_urls` always carry the detail set, so this setting does not change them.",
            "default": false
          },
          "browser_endpoint": {
            "title": "Your own browser endpoint (optional)",
            "type": "string",
            "description": "WebSocket URL of a remote browser service you already pay for, used instead of the one this actor ships with. One URL, shaped `wss://user:password@host:9222`. Leave empty to use the browser included in the price of the run."
          },
          "proxyUrls": {
            "title": "Your own proxy URLs (optional)",
            "type": "array",
            "description": "Leave empty: the run uses the residential proxy this actor ships with, included in the price of the run. To route the run through your own provider instead, add one gateway URL per entry, for example `http://user:pass@host:port` — works with any provider that issues URLs (DataImpulse, Bright Data, Oxylabs, Smartproxy, or your own). When set, these are used exactly as entered and nothing else is.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}