{
  "openapi": "3.0.1",
  "info": {
    "title": "🛍️ TikTok Shop Data Scraper & Seller Profile Scraper",
    "description": "Scrape TikTok Shop data including products, prices, ratings, sales, discounts, seller details, categories, images, reviews, and product URLs. Perfect for product research, competitor monitoring, price tracking, trend analysis, and e-commerce intelligence.",
    "version": "0.1",
    "x-build-id": "sFaOynRkUJQKaJfyB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapio~tiktok-shop-data-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapio-tiktok-shop-data-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/scrapio~tiktok-shop-data-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapio-tiktok-shop-data-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/scrapio~tiktok-shop-data-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapio-tiktok-shop-data-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": {
          "productKeywords": {
            "title": "🔍 Product Keywords (Seller Discovery)",
            "type": "array",
            "description": "Keywords to search TikTok Shop for (e.g. 'shoes', 'phone case', 'skincare'). Each keyword runs its own search and every seller behind the matching products is profiled. Each keyword runs its own search.",
            "items": {
              "type": "string"
            }
          },
          "shopUrls": {
            "title": "🔗 Product / Category / Seller-Store URLs",
            "type": "array",
            "description": "Paste TikTok Shop URLs to scrape — the type is auto-detected: 🛒 Product (/pdp/), 🗂️ Category (/c/), or 🏪 Seller/Store (/store/). A seller-store URL is the fastest way to profile one specific seller. Examples: https://shop.tiktok.com/us/pdp/123, https://shop.tiktok.com/us/c/electronics/456, https://shop.tiktok.com/us/store/seller/789",
            "items": {
              "type": "string",
              "pattern": "^https://shop\\.tiktok\\.com/.*"
            }
          },
          "maxProductsPerSeller": {
            "title": "📦 Maximum Products",
            "minimum": 10,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of products to fetch per search keyword / category / seller (10-100000, default 10)."
          },
          "includeReviews": {
            "title": "📝 Include Reviews",
            "type": "boolean",
            "description": "Fetch product reviews too. Note: not every product exposes accessible reviews.",
            "default": false
          },
          "maxReviews": {
            "title": "💬 Maximum Reviews",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum number of reviews to fetch per product (1–100).",
            "default": 10
          },
          "sortBySoldCount": {
            "title": "📊 Sort by Sold Count",
            "enum": [
              "none",
              "highest_first",
              "lowest_first"
            ],
            "type": "string",
            "description": "Order products by units sold. '🔥 Highest first' surfaces best-sellers; '🌱 Lowest first' surfaces fewer-sold items. The Output table still fills live in discovery order — the sorted order is also saved to the run's Key-Value Store (SORTED_PRODUCT_IDS).",
            "default": "none"
          },
          "includeSellerProfile": {
            "title": "🏪 Include Seller/Shop Profile",
            "type": "boolean",
            "description": "Surface each product's full seller profile — rating, followers, on-sell product count, lifetime sold count, review count, region and shop URL — and mirror one deduped row per unique seller into a separate per-run 'sellers' dataset for a seller-scoped, aggregatable view.",
            "default": true
          },
          "includeBusinessCompliance": {
            "title": "🧾 Include Business Compliance & Badges",
            "type": "boolean",
            "description": "Include the seller's REAL registered business name + address (genuine B2B contact data as published by TikTok Shop's own compliance disclosure, never guessed or fabricated), plus promo-badge and compliance-warning history per product/seller.",
            "default": true
          },
          "maxRetries": {
            "title": "🔁 Max Retries",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum retry attempts per request before giving up (1–10).",
            "default": 5
          },
          "requestDelay": {
            "title": "⏱️ Request Delay (ms)",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "Delay between requests in milliseconds. Lower = faster, but may trigger rate limits (0–2000).",
            "default": 0
          },
          "maxConcurrency": {
            "title": "⚡ Max Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum concurrent requests. Higher = faster but uses more resources (1–20).",
            "default": 20
          },
          "timeout": {
            "title": "⌛ Request Timeout (s)",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "Per-request timeout in seconds. Increase if using slow proxies (10–300).",
            "default": 60
          },
          "searchKeywords": {
            "title": "🔍 Search Keywords (legacy alias)",
            "type": "array",
            "description": "Legacy alias of productKeywords, kept for backward compatibility with the base actor's input. Used only when productKeywords is not set.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "🔗 TikTok Shop URLs (legacy alias)",
            "type": "array",
            "description": "Legacy alias of shopUrls, kept for backward compatibility. Used only when shopUrls is not set.",
            "items": {
              "type": "string",
              "pattern": "^https://shop\\.tiktok\\.com/.*"
            }
          },
          "maxProducts": {
            "title": "📦 Maximum Products (legacy alias)",
            "minimum": 10,
            "maximum": 100000,
            "type": "integer",
            "description": "Legacy alias of maxProductsPerSeller, kept for backward compatibility. Used only when maxProductsPerSeller is not set (10–100000)."
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy Configuration",
            "type": "object",
            "description": "By default the scraper connects directly (no proxy) and automatically escalates to a 🛡️ Datacenter proxy and then a 🏠 Residential (US) proxy for maximum reliability. For the most reliable results, select Residential proxies in the US.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}