{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Shop Scraper: Products, Sales & Prices, No Login",
    "description": "Collect TikTok Shop products, prices, units sold, ratings, variants, shipping and shop stats from keywords, categories or links. Find what sells and track price and sales changes between runs. No login or cookies.",
    "version": "0.1",
    "x-build-id": "fI6AfMFh1sHhWmVP5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cliqtomedia~tiktok-shop-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cliqtomedia-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/cliqtomedia~tiktok-shop-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cliqtomedia-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/cliqtomedia~tiktok-shop-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cliqtomedia-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "product",
              "category",
              "shop"
            ],
            "type": "string",
            "description": "Choose what to start from. Search uses Search keywords. Links in the fields below always run too, in any mode. Default: Search by keywords.",
            "default": "search"
          },
          "keywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Words to search in TikTok Shop, one phrase per line. Example: phone stand. Used only in Search mode. Leave empty with no links to search for phone stand.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum products",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after saving this many products across all inputs. Example: 50. Default: 10.",
            "default": 10
          },
          "scanLimit": {
            "title": "Products to check per input",
            "minimum": 1,
            "type": "integer",
            "description": "How many products to look through for each input when filters, sorting or Only changed products need more than Maximum products. Example: 300. Default: 100. Maximum products is used if it is higher. Each results page is a paid page check.",
            "default": 100
          },
          "includeProductDetails": {
            "title": "Full product details",
            "type": "boolean",
            "description": "Open each product for its description, variants, stock, shipping and public review sample. Each opened product is one more paid page check and takes about 3 seconds. Turn off for faster, cheaper lists. Default: on.",
            "default": true
          },
          "regions": {
            "title": "Markets",
            "type": "array",
            "description": "Storefront markets as two-letter codes. Example: US. Only US works in this release. Any other market stops the run with an error.",
            "items": {
              "type": "string"
            }
          },
          "monitor": {
            "title": "Track changes",
            "type": "boolean",
            "description": "Keep a baseline in a named store and compare price, units sold and stock with the previous run. Default: off.",
            "default": false
          },
          "stateName": {
            "title": "Monitor name",
            "pattern": "^[a-zA-Z0-9-]{1,63}$",
            "type": "string",
            "description": "Use the same name to compare repeated runs. Letters, numbers and dashes, up to 63 characters. Example: phone-stands-daily. Leave empty to name it from the inputs."
          },
          "onlyChanges": {
            "title": "Only changed products",
            "type": "boolean",
            "description": "With Track changes, save new and changed products only. Page checks are still paid. Default: off.",
            "default": false
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "nested",
              "flat"
            ],
            "type": "string",
            "description": "Nested JSON keeps lists and objects. Flat cells store them as JSON text, which suits spreadsheets. Default: Nested JSON.",
            "default": "nested"
          },
          "sortBy": {
            "title": "Sort products",
            "enum": [
              "relevance",
              "sales",
              "priceAscending",
              "priceDescending"
            ],
            "type": "string",
            "description": "Rank the products checked for each input (see Products to check per input), then save the top ones. This does not rank the whole TikTok Shop catalogue. Default: TikTok Shop order.",
            "default": "relevance"
          },
          "productUrls": {
            "title": "Product links",
            "type": "array",
            "description": "One public link per line. Example: https://shop.tiktok.com/us/pdp/product/1730860052779143503",
            "items": {
              "type": "string"
            }
          },
          "categoryUrls": {
            "title": "Category links",
            "type": "array",
            "description": "One public link per line. Example: https://shop.tiktok.com/us/c/cases-screen-protectors-stickers/601925",
            "items": {
              "type": "string"
            }
          },
          "shopUrls": {
            "title": "Shop links",
            "type": "array",
            "description": "One public link per line. Example: https://shop.tiktok.com/us/store/putare/7495880414145841487",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "number",
            "description": "Keep products at this price or higher. Example: 10. Products without this value are left out."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "number",
            "description": "Keep products at this price or lower. Example: 30. Products without this value are left out."
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "type": "number",
            "description": "Keep products with this rating or higher, from 1 to 5. Example: 4.5. Products without this value are left out."
          },
          "minSoldCount": {
            "title": "Minimum units sold",
            "minimum": 0,
            "type": "number",
            "description": "Keep products with at least this many units sold. Example: 1000. Products without this value are left out."
          },
          "titleContains": {
            "title": "Title must contain",
            "type": "array",
            "description": "Keep products whose title has all of these words. Upper or lower case does not matter. Example: magnetic.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude title words",
            "type": "array",
            "description": "Leave out products whose title has any of these words. Upper or lower case does not matter. Example: case.",
            "items": {
              "type": "string"
            }
          },
          "region": {
            "title": "Primary market",
            "enum": [
              "US"
            ],
            "type": "string",
            "description": "Used when Markets is empty. US is the only verified storefront. Default: US.",
            "default": "US"
          },
          "deliveryConnector": {
            "title": "Send results to (optional)",
            "type": "string",
            "description": "Your Slack, Notion or other MCP connector. After the run the Actor posts a short summary there. Connect services once in Apify Console → MCP connectors."
          },
          "deliveryTarget": {
            "title": "Notion page or channel (optional)",
            "type": "string",
            "description": "Where to post the summary: a Notion page link (each run is added on top of that page) or a Slack channel ID. Leave empty to let the connector decide."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}