{
  "openapi": "3.0.1",
  "info": {
    "title": "🎥 TikTok Shop Data Scraper : Creator Video Details",
    "description": "TikTok Shop Data Scraper: Extract creator video details, product information, prices, links, views, likes, comments, shares, and engagement metrics. Analyze product content, creator performance, promotional trends, and TikTok Shop strategies for market and competitor research.",
    "version": "0.1",
    "x-build-id": "835fVNNYRCBVUvB6D"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~tiktok-shop-data-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-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/api-empire~tiktok-shop-data-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-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/api-empire~tiktok-shop-data-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-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": {
          "searchKeywords": {
            "title": "🔍 Search Keywords",
            "type": "array",
            "description": "Keywords to search TikTok Shop for (e.g. 'shoes', 'phone case', 'skincare'). Each keyword runs its own search.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "🔗 TikTok Shop URLs",
            "type": "array",
            "description": "Paste TikTok Shop URLs to scrape — the type is auto-detected: 🛒 Product (/pdp/), 🗂️ Category (/c/), or 🏪 Seller/Store (/store/). 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/.*"
            }
          },
          "maxProducts": {
            "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 in live, row by row — this only saves an extra sorted-order snapshot (id + sold count) to the key-value store.",
            "default": "none"
          },
          "includeCreatorVideos": {
            "title": "🎥 Include Full Creator Video Records",
            "type": "boolean",
            "description": "Output the full per-video creator/affiliate record for every promo video (playable content URL, cover image, caption, duration, upload date) as its own dataset view — not just the aggregated top-5 creator summary. Turn off to keep only the base aggregated creator stats.",
            "default": true
          },
          "maxCreatorVideosPerProduct": {
            "title": "🎬 Max Creator Videos per Product",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Cap on how many full per-video creator records are kept per product (1–500). Ranking and total-reach figures are still computed from every promo video fetched, regardless of this cap.",
            "default": 50
          },
          "minCreatorVideoPlays": {
            "title": "📈 Minimum Plays per Creator Video",
            "minimum": 0,
            "type": "integer",
            "description": "Only include a creator's promo video in the full video record list if it has at least this many plays. Set to 0 to include every promo video. Computed locally — no extra requests.",
            "default": 0
          },
          "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
          },
          "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}