{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Discover Scraper: Sound Finder by keyword",
    "description": "This TikTok Discover Scraper extracts real-time Discover trends, viral topics, popular sounds, and creator rankings. Ideal for tracking what's trending globally or locally to enhance strategic decision-making.",
    "version": "0.1",
    "x-build-id": "FVCxjX0e6Ps3EQVOb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapier~tiktok-discover-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapier-tiktok-discover-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/scrapier~tiktok-discover-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapier-tiktok-discover-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/scrapier~tiktok-discover-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapier-tiktok-discover-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": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "🎼 Topics / keywords (one per line)",
            "type": "array",
            "description": "Examples:\n\n• `phonk`\n• `skincare routine`\n• `#gymtok` (the `#` is stripped)\n• `https://www.tiktok.com/search?q=lofi` → searches `lofi`\n• `https://www.tiktok.com/music/Lalala-Phonk-7195227075836381185` → searches `Lalala Phonk`\n\nEach line is searched separately and its sounds are deduplicated on sound ID.",
            "items": {
              "type": "string"
            }
          },
          "maxSoundsPerQuery": {
            "title": "🔢 Sounds to keep per topic",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "How many sounds to keep for each line above, **after** the filters below have run. Leave empty to fall back to the legacy `maxItems` value. `0` = keep everything the page budget returns.\n\nTikTok serves 20 sounds per page; 160 unique sounds over 8 pages was the deepest measured."
          },
          "maxPagesPerQuery": {
            "title": "📄 How deep to page (20 sounds per page)",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Page budget per topic. Raise it when your filters are strict, because filtered-out sounds still consume pages. Measured ceiling: 8 pages = 160 unique sounds, still `has_more: 1`.",
            "default": 8
          },
          "maxItems": {
            "title": "🧩 Legacy cap (`maxItems`)",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Kept for backwards compatibility with the original Discover actor and its saved tasks. It is used **only when `Sounds to keep per topic` is left empty**. `0` here means \"keep everything the page budget returns\" — unlike the old actor, that no longer disables paging.",
            "default": 10
          },
          "minSoundVideoCount": {
            "title": "📈 Minimum videos using the sound",
            "minimum": 0,
            "type": "integer",
            "description": "Drops one-off tracks. Applied to TikTok's own `user_count`. On a single measured page the range was 70 → 599 842 videos, so `10000` already cuts most of the long tail.\n\n`0` = keep every sound.",
            "default": 0
          },
          "onlyCommerciallyUsable": {
            "title": "💼 Only sounds cleared for business accounts",
            "type": "boolean",
            "description": "Keeps only sounds where TikTok reports `has_commerce_right = true` (commercial-right code 2). Measured 6/20 on `phonk` and 11/20 on `skincare` — expect this to remove roughly half the results.",
            "default": false
          },
          "soundLanguages": {
            "title": "🗣️ Keep only these sound languages",
            "type": "array",
            "description": "TikTok's own language label on the track, e.g. `English`, `Korean`, `Spanish`. Leave empty to keep every language.\n\n⚠️ The label is present on ~19 of 20 sounds; a sound with no language label is dropped while this filter is on.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sortSoundsBy": {
            "title": "↕️ Order the kept sounds by",
            "enum": [
              "relevance",
              "videoCount",
              "newest",
              "oldest",
              "longest"
            ],
            "type": "string",
            "description": "Re-orders the sounds this run fetched. It does **not** ask TikTok for a different ranking — `relevance` is TikTok's own order, everything else is applied to the rows in hand.",
            "default": "relevance"
          },
          "proxyConfiguration": {
            "title": "🛰️ Apify Proxy",
            "type": "object",
            "description": "Left off, the run tries a direct connection first and only escalates to datacenter, then residential, if TikTok's WAF challenges the exit IP. Turn it on to pin your own group instead."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}