{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Discover Scraper By Account Name & Bio",
    "description": "Gather TikTok Discover insights fast — trending topics, challenges, sounds, and creator highlights. Clean, structured output makes it perfect for marketing teams, analysts, and researchers tracking viral shifts.",
    "version": "0.1",
    "x-build-id": "XrqriMQVJlExOCaou"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simpleapi~tiktok-discover-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simpleapi-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/simpleapi~tiktok-discover-scraper/runs": {
      "post": {
        "operationId": "runs-sync-simpleapi-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/simpleapi~tiktok-discover-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-simpleapi-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": "🔍 Search terms (brand, niche, person, @handle)",
            "type": "array",
            "description": "Examples: `nike` · `dermatologist` · `@charlidamelio` · `https://www.tiktok.com/search?q=running%20coach`\n\nEach term is searched separately and every returned row carries the term that produced it in `account.matchedQuery`.",
            "items": {
              "type": "string"
            }
          },
          "maxAccountsPerQuery": {
            "title": "👤 Accounts to return per search term",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How many account rows to keep for each term. Set `0` to skip accounts entirely and get only video rows.\n\nEach account costs one extra profile-page load, so large numbers make the run longer.",
            "default": 10
          },
          "accountsOnly": {
            "title": "🚫 Accounts only — skip the video rows",
            "type": "boolean",
            "description": "ON = the dataset contains account rows only (one row per profile, no video rows).\n\nOFF = you also get the keyword's video rows in the original scraper's shape, so this actor stays a drop-in replacement.\n\nNote: with this ON the actor may still *read* the keyword's video results, because their creators are how accounts are discovered when TikTok's account-search endpoint is unavailable — it simply does not write those videos to your dataset, and does not charge for them.",
            "default": false
          },
          "discoverAccountsViaVideos": {
            "title": "🎥 Fall back to the creators behind the term's videos",
            "type": "boolean",
            "description": "ON (recommended) = when TikTok's account-search endpoint returns nothing to this run's IP, the actor takes the unique creators of the keyword's top videos and loads each of their profile pages for the real bio, bio link and follower/like counts. Those rows are tagged `account.source = \"video_author\"`.\n\nOFF = account rows come only from TikTok's account search. If that endpoint is refused, you get zero account rows and the run reports the block instead.",
            "default": true
          },
          "requireKeywordInNameOrBio": {
            "title": "🔤 Keep only accounts whose @handle, name or bio contains the keyword",
            "type": "boolean",
            "description": "ON = an account is kept only if the search term literally appears in its @handle, display name or bio (`account.matchedIn` is then never empty). Use this for brand-impersonation sweeps.\n\nOFF (default) = keep every account found for the term, including creators discovered through their content whose profile text does not repeat the keyword.",
            "default": false
          },
          "minAccountFollowers": {
            "title": "📊 Minimum follower count",
            "minimum": 0,
            "type": "integer",
            "description": "Drop accounts below this follower count. `0` keeps everything. When a floor is set the actor pages deeper so the cap above can still be filled after filtering.\n\nThe log line `accounts kept=… of … fetched (dropped below N followers: …)` shows exactly how many rows the filter removed.",
            "default": 0
          },
          "disclaimerKeywords": {
            "title": "⚠️ Bio disclaimer phrases",
            "type": "array",
            "description": "Case-insensitive phrases that mark an account as self-declared unofficial. Matching phrases are listed per row in `account.disclaimerTermsMatched`.\n\nLeave empty to use the built-in list (not affiliated, fan account, parody, unofficial, …). `bioMentionsDisclaimer` is `null` — not `false` — when an account has no bio text to test.",
            "items": {
              "type": "string"
            }
          },
          "mergeVideoSearchAccountCards": {
            "title": "➕ Merge the free account card from the video search",
            "type": "boolean",
            "description": "TikTok's video search returns one extra account card alongside the clips. When video rows are enabled, this folds that card into the account rows for free (deduplicated on `uid`, tagged `account.source = \"video_search_card\"`).\n\nIgnored when 'Accounts only' is ON.",
            "default": true
          },
          "maxItems": {
            "title": "🎥 Max videos per search term",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Video rows per term, in the original output shape (caption, stats, music, author, hashtags).\n\n`0` = go as deep as TikTok serves, with a hard stop at 200 videos per term.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "🌍 Apify Proxy settings",
            "type": "object",
            "description": "Pick Apify Proxy groups if you already know you need them."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}