{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Shop Scraper API — Products, Reviews, GMV | $20/mo",
    "description": "Scrape TikTok Shop in 6 markets (US, SG, MY, TH, VN, PH): keyword search, categories, full product details with variants, reviews one-per-row, store analytics with GMV estimates and creator profiles. Local prices and currencies. No login, no API key, no proxy setup. Clean JSON, CSV and Excel export.",
    "version": "0.4",
    "x-build-id": "Obt3sSW4MQESDikRH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pro100chok~tiktok-shop-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pro100chok-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/pro100chok~tiktok-shop-scraper/runs": {
      "post": {
        "operationId": "runs-sync-pro100chok-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/pro100chok~tiktok-shop-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-pro100chok-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",
        "required": [
          "scrapeType"
        ],
        "properties": {
          "region": {
            "title": "Region (marketplace)",
            "enum": [
              "us",
              "sg",
              "my",
              "th",
              "vn",
              "ph"
            ],
            "type": "string",
            "description": "Which TikTok Shop marketplace to scrape. It sets the storefront, the proxy country and the currency prices come back in.\n\nSearch, Product, Reviews and Category work in every market listed here, and Creator is global. Store pages exist only on the US marketplace.\n\nA URL that already names a market (e.g. https://shop.tiktok.com/th/...) wins over this dropdown.",
            "default": "us"
          },
          "scrapeType": {
            "title": "Scrape Type",
            "enum": [
              "search",
              "product",
              "reviews",
              "category",
              "store",
              "creator"
            ],
            "type": "string",
            "description": "What to scrape. Fill the matching field below — the others are ignored.\n\n• Search — products by keyword\n• Product — full product details by URL\n• Reviews — product reviews by URL (1 review = 1 output item)\n• Category — products from category page\n• Store — store info + products + GMV estimate\n• Creator — TikTok creator profile by username",
            "default": "search"
          },
          "searchKeywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "For Scrape Type: Search. Keywords, one per line (e.g. \"iphone\", \"lipstick\").",
            "items": {
              "type": "string"
            }
          },
          "productUrls": {
            "title": "Product URLs",
            "type": "array",
            "description": "For Scrape Type: Product. One URL per line.\nFormat: https://shop.tiktok.com/us/pdp/product-name/1234567890\n(or https://www.tiktok.com/shop/pdp/... — both work)",
            "items": {
              "type": "string"
            }
          },
          "reviewProductUrls": {
            "title": "Product URLs for reviews",
            "type": "array",
            "description": "For Scrape Type: Reviews. One URL per line; each review is pushed as a separate dataset item.\nFormat: https://shop.tiktok.com/us/pdp/product-name/1234567890",
            "items": {
              "type": "string"
            }
          },
          "categoryUrls": {
            "title": "Category URLs",
            "type": "array",
            "description": "For Scrape Type: Category. One URL per line.\nFormat: https://shop.tiktok.com/us/c/category-name/601450",
            "items": {
              "type": "string"
            }
          },
          "storeUrls": {
            "title": "Store URLs",
            "type": "array",
            "description": "For Scrape Type: Store. One URL per line.\nFormat: https://shop.tiktok.com/us/store/shop-name/1234567890",
            "items": {
              "type": "string"
            }
          },
          "creatorUsernames": {
            "title": "Creator usernames",
            "type": "array",
            "description": "For Scrape Type: Creator. TikTok usernames without @, one per line (e.g. \"hydrojug\").",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max items per query",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum items to scrape per query (0 = unlimited). Applies to Search, Category and Store products. Reviews use 'Max reviews per product' instead.\n\nSearch tops out at 199 products per keyword — that is TikTok's own cap on the search feed, so a higher value will not return more. Category and Store go deeper.",
            "default": 1000
          },
          "sortBy": {
            "title": "Sort by (search)",
            "enum": [
              "relevance",
              "best_sellers",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Sort order for search results.",
            "default": "relevance"
          },
          "includeReviews": {
            "title": "Include reviews in product output",
            "type": "boolean",
            "description": "When scraping products, also embed their reviews in the product record.",
            "default": false
          },
          "maxReviews": {
            "title": "Max reviews per product",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of reviews per product (0 = all). Also used when Include reviews is enabled on Product scrape.",
            "default": 30
          },
          "reviewsSortBy": {
            "title": "Reviews sort",
            "enum": [
              "recommended",
              "recent"
            ],
            "type": "string",
            "description": "Sort order for reviews.",
            "default": "recommended"
          },
          "reviewsFilterType": {
            "title": "Reviews filter",
            "enum": [
              "all",
              "verified",
              "with_media"
            ],
            "type": "string",
            "description": "Filter reviews by type.",
            "default": "all"
          },
          "reviewsStarRating": {
            "title": "Star rating filter",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Filter reviews by star rating (0 = all, 1-5 = only that rating).",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}