{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Shop Seller & Competitor Monitor",
    "description": "Find and track TikTok Shop sellers by store URL, seller ID, or product niche. Compare public store metrics, catalog signals, sales footprint, rankings, product changes, and competitor movement across recurring runs.",
    "version": "0.1",
    "x-build-id": "9ygde0prwXeh9evJ3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nexascout~tiktok-shop-seller-competitor-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nexascout-tiktok-shop-seller-competitor-monitor",
        "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/nexascout~tiktok-shop-seller-competitor-monitor/runs": {
      "post": {
        "operationId": "runs-sync-nexascout-tiktok-shop-seller-competitor-monitor",
        "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/nexascout~tiktok-shop-seller-competitor-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-nexascout-tiktok-shop-seller-competitor-monitor",
        "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": {
          "sellerUrls": {
            "title": "TikTok Shop seller URLs",
            "maxItems": 20,
            "type": "array",
            "description": "Optional public TikTok Shop store URLs to inspect or monitor. Keep the same watchlist across recurring runs for comparable history.",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "title": "Seller store URL",
                  "description": "A public URL such as https://shop.tiktok.com/us/store/store-name/7490000000000000000."
                }
              },
              "required": [
                "url"
              ]
            },
            "default": []
          },
          "sellerIds": {
            "title": "TikTok Shop seller IDs",
            "maxItems": 20,
            "type": "array",
            "description": "Optional numeric seller IDs. Use this when an agent or workflow already has TikTok Shop seller identifiers but not store URLs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Product niches for competitor discovery",
            "maxItems": 10,
            "type": "array",
            "description": "Specific product phrases for competitor discovery, such as jump starter, vitamin C serum, vegetable chopper, or dog grooming brush. Avoid broad departments when comparing a supplied seller because broad queries can mix unrelated product categories.",
            "default": [
              "car accessories"
            ],
            "items": {
              "type": "string"
            }
          },
          "matchDirectSellerCatalog": {
            "title": "Require competitor catalog similarity",
            "type": "boolean",
            "description": "When seller URLs or IDs and search queries are supplied together, retain discovered competitors only when their product titles share a repeated two-word product phrase with the direct seller catalog. Disable only for broad market mapping.",
            "default": true
          },
          "trackerName": {
            "title": "Competitor tracker name",
            "minLength": 1,
            "maxLength": 80,
            "type": "string",
            "description": "Stable monitoring-job identifier. Reuse the exact name, region, URLs, IDs, and queries on recurring runs so the Actor can compare observations.",
            "default": "daily-competitor-watch"
          },
          "trackingEnabled": {
            "title": "Save history and calculate seller changes",
            "type": "boolean",
            "description": "Store a private snapshot in the caller's Apify account and compare it with later runs. Disable for a one-off seller snapshot.",
            "default": true
          },
          "resetHistory": {
            "title": "Reset this competitor tracker",
            "type": "boolean",
            "description": "Ignore the previous snapshot and create a new baseline. The old record is replaced only after a successful observation.",
            "default": false
          },
          "minimumTrackingHours": {
            "title": "Minimum hours before measuring changes",
            "minimum": 1,
            "maximum": 168,
            "type": "integer",
            "description": "Avoids unstable daily estimates when runs happen too close together. Six hours is the minimum; daily schedules are recommended.",
            "default": 6
          },
          "retainMissingDays": {
            "title": "Days to retain missing sellers",
            "minimum": 7,
            "maximum": 90,
            "type": "integer",
            "description": "Keeps recently missing sellers in private tracker history so their first-seen date is preserved if they return.",
            "default": 30
          },
          "region": {
            "title": "TikTok Shop region",
            "enum": [
              "US"
            ],
            "type": "string",
            "description": "TikTok Shop market code. This release supports the United States.",
            "default": "US"
          },
          "maxSellersPerQuery": {
            "title": "Maximum sellers per niche",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum billable seller rows returned for each keyword. The default of three keeps automated health checks fast and inexpensive.",
            "default": 3
          },
          "maxProductsPerSeller": {
            "title": "Maximum sampled products per seller",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Limits the public catalog sample used to calculate seller-level sales, reviews, ratings, price ranges, and catalog changes.",
            "default": 5
          },
          "sortBy": {
            "title": "Sort seller results by",
            "enum": [
              "COMPETITOR_SCORE",
              "SALES_GROWTH",
              "CATALOG_GROWTH",
              "FOLLOWER_GROWTH",
              "TOTAL_SALES",
              "FOLLOWERS"
            ],
            "type": "string",
            "description": "Competitor score works on the first run. Growth options become meaningful after a later observation with the same tracker scope.",
            "default": "COMPETITOR_SCORE"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "US residential proxy is recommended because TikTok Shop is geo-sensitive and rate-limits data-center traffic.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          },
          "maxConcurrency": {
            "title": "Maximum extraction concurrency",
            "minimum": 1,
            "maximum": 2,
            "type": "integer",
            "description": "Keep this at one or two to reduce TikTok security challenges and residential proxy traffic.",
            "default": 2
          },
          "navigationTimeoutSecs": {
            "title": "Navigation timeout (seconds)",
            "minimum": 15,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum time allowed for each HTTP or browser navigation.",
            "default": 45
          },
          "includeRawData": {
            "title": "Include raw sampled product data",
            "type": "boolean",
            "description": "Retain the best raw TikTok product objects during extraction. The seller dataset stays normalized; use this only for debugging future releases.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}