{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Shop Scraper: Products, Best Sellers, Reviews, US & Asia",
    "description": "Scrape TikTok Shop in the US, UK and South-East Asia: search by keyword, or read products, stores, creator showcases, categories and best sellers. Every SKU with stock and price for US products; price, sold count, rating and verified-purchase reviews in 10 markets. No login, no cookies.",
    "version": "0.0",
    "x-build-id": "RWrmfNhTlKwNDxiCA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~tiktok-shop-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~tiktok-shop-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~tiktok-shop-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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": {
          "keywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Search TikTok Shop like a shopper would, about 30 products per page; <b>Max products per keyword</b> below controls how deep it goes. Reads the US shop, the UK shop for United Kingdom, or the local shop for Malaysia, the Philippines, Singapore, Thailand and Vietnam (one page of 10 to 30 products per keyword there).",
            "items": {
              "type": "string"
            }
          },
          "productUrls": {
            "title": "Product URLs or IDs",
            "type": "array",
            "description": "<code>https://www.tiktok.com/view/product/1732282041767727408</code>, <code>…/shop/pdp/…</code>, a bare product id, or a share link (<code>vt.tiktok.com/…</code>). One row each — a single URL returns exactly one result.",
            "items": {
              "type": "string"
            }
          },
          "shopUrls": {
            "title": "Store URLs",
            "type": "array",
            "description": "A store's whole catalogue: <code>https://www.tiktok.com/shop/store/goli-nutrition/7495794203056835079</code> or the <code>shop.tiktok.com/…/store/…</code> form from a product page. Cursor-paginated.",
            "items": {
              "type": "string"
            }
          },
          "creatorHandles": {
            "title": "Creator handles",
            "type": "array",
            "description": "What a creator is selling from their profile showcase (US shop), e.g. <code>@handle</code>, <code>handle</code> or a profile link.",
            "items": {
              "type": "string"
            }
          },
          "categoryUrls": {
            "title": "Category URLs",
            "type": "array",
            "description": "A TikTok Shop category, e.g. <code>https://www.tiktok.com/shop/c/health/700645</code> or the <code>shop.tiktok.com/us/c/…</code> form. Each category page lists 15 products; the scraper then works down through its subcategories until <b>Max products per category</b>. Reads the US shop, or the local shop when <b>Region</b> is Indonesia, Malaysia, the Philippines, Singapore, Thailand, Vietnam, Japan or Mexico (the category id is the same in every market).",
            "items": {
              "type": "string"
            }
          },
          "includeBestSellers": {
            "title": "Best sellers of the region",
            "type": "boolean",
            "description": "Return the current best-selling products of the chosen <b>Region</b>, ranked, with units sold, price, rating and shop. Available for Indonesia, Malaysia, the Philippines, Singapore, Thailand, Vietnam, Japan and Mexico.",
            "default": false
          },
          "maxBestSellers": {
            "title": "Max best sellers",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many best sellers to return. 20 per page.",
            "default": 40
          },
          "region": {
            "title": "Region",
            "enum": [
              "US",
              "GB",
              "DE",
              "FR",
              "IT",
              "ES",
              "IE",
              "ID",
              "MY",
              "PH",
              "SG",
              "TH",
              "VN",
              "JP",
              "MX",
              "BR"
            ],
            "type": "string",
            "description": "Market to read. <b>Full product details and product URLs are US only.</b> Keyword search reads the US shop, the UK shop for GB, and the local shop for Malaysia, the Philippines, Singapore, Thailand and Vietnam. Category links and best sellers also read the local shop for those five plus Indonesia, Japan and Mexico. Products outside the US come back as listing rows with <code>detailed: false</code>: title, price, discount, units sold, rating, review count and shop, with reviews on request. The other regions apply to store catalogues (shopUrls) only. Creator showcases always read the US shop.",
            "default": "US"
          },
          "includeDetails": {
            "title": "Full product details",
            "type": "boolean",
            "description": "Read every product's own page: all SKUs with stock, price and discount, sold count, rating, images, seller and shop stats, the videos selling it. Off = the lighter listing row from search/store/showcase only.",
            "default": true
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Attach customer reviews to each product — rating, text, date, country, verified-purchase flag, photos, the SKU bought. 10 per page in the US, 20 per page in South-East Asia, Japan and Mexico.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Cap on reviews attached per product when reviews are on.",
            "default": 30
          },
          "includeSalesTrend": {
            "title": "Include sales trend",
            "type": "boolean",
            "description": "Add units sold over the trend window (weekly sales by default), units per day and growth percent, from our own daily history of each product's sold count, the same history the TikTok Shop Sales Scraper uses. Charged per product only when the figures are delivered: a product seen for the first time has no history yet, carries no trend and costs nothing extra.",
            "default": false
          },
          "trendLookbackDays": {
            "title": "Trend window (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "How far back the trend compares. 7 gives weekly sales. A product with less history is measured over the span that exists, reported in <code>trendWindowDays</code>.",
            "default": 7
          },
          "maxProductsPerKeyword": {
            "title": "Max products per keyword",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Search depth per keyword (about 30 per page).",
            "default": 40
          },
          "maxProductsPerShop": {
            "title": "Max products per store",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Catalogue depth per store URL.",
            "default": 100
          },
          "maxProductsPerCreator": {
            "title": "Max products per creator",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Showcase depth per creator handle.",
            "default": 100
          },
          "maxProductsPerCategory": {
            "title": "Max products per category",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "How many products to collect from each category link, 15 per category page, subcategories included.",
            "default": 50
          },
          "shopSortBy": {
            "title": "Store catalogue order",
            "enum": [
              "top",
              "new_releases"
            ],
            "type": "string",
            "description": "How a store's products are paged.",
            "default": "top"
          },
          "maxItems": {
            "title": "Max products total",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on dataset rows for the whole run — the run is never more expensive than this.",
            "default": 200
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Products resolved in parallel.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}