{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok User Search Scraper: TikTok Creator & Influencer Search",
    "description": "TikTok user search scraper: find TikTok influencers and creators by keyword. One row per account TikTok's Users tab lists, in TikTok's order, with rank, handle, user id, secUid, bio, emails, verified badge and follower count; up to about 250 a keyword; only new creators on a schedule. No login.",
    "version": "0.1",
    "x-build-id": "j0oMrfzv73RzFactL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hyperbach~tiktok-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hyperbach-tiktok-search-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/hyperbach~tiktok-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-hyperbach-tiktok-search-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/hyperbach~tiktok-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-hyperbach-tiktok-search-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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Search terms, one per line, as you would type them into TikTok's search box: a word or phrase (notion templates), a #tag (searched as text), or a TikTok search URL (https://www.tiktok.com/search/user?q=notion). Case does not matter; a term given twice is read once.",
            "items": {
              "type": "string",
              "pattern": "^\\s*\\S[\\s\\S]{0,499}$"
            },
            "default": []
          },
          "readCountry": {
            "title": "Read from",
            "enum": [
              "DE",
              "GB",
              "FR",
              "US"
            ],
            "type": "string",
            "description": "The country the search is read from. TikTok's Users tab ranks accounts per country and, logged out, serves up to about 250 accounts a keyword from Germany, the United Kingdom and France and about 60 to 70 from the United States; every row says which country read it (read_country).",
            "default": "DE"
          },
          "maxUsersPerKeyword": {
            "title": "Accounts per keyword",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How many accounts to deliver per keyword, in TikTok's order; 0 = everything TikTok serves logged out (up to about 250 from DE, GB or FR, about 60 to 70 from US; the keyword row then says COMPLETE at TikTok's end of the list, or SOURCE-LIMIT with the count when TikTok's page stopped serving earlier). Exact: 25 asked = 25 delivered and charged. With onlyNew the cap is the depth read (the top 25 are compared with the memory on every run). A run that reads past 100 accounts a keyword gets 4,096 MB by default, others 2,048 MB.",
            "default": 0
          },
          "minFollowers": {
            "title": "Min followers",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Deliver only accounts with at least this many followers; 0 = no filter.",
            "default": 0
          },
          "maxFollowers": {
            "title": "Max followers",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Deliver only accounts with at most this many followers; 0 = no filter.",
            "default": 0
          },
          "verifiedOnly": {
            "title": "Verified accounts only",
            "type": "boolean",
            "description": "Deliver only accounts with TikTok's verified badge.",
            "default": false
          },
          "withEmailOnly": {
            "title": "Accounts with an e-mail in the bio only",
            "type": "boolean",
            "description": "Deliver only accounts whose bio carries an e-mail address (bio_emails). Extraction from the bio text only; no contact finding.",
            "default": false
          },
          "bioKeywords": {
            "title": "Bio keywords",
            "type": "array",
            "description": "Deliver only accounts whose bio, display name or handle contains one of these words (case-insensitive). Empty = no filter.",
            "items": {
              "type": "string",
              "maxLength": 100
            },
            "default": []
          },
          "dedupeAcrossKeywords": {
            "title": "One row per account across keywords",
            "type": "boolean",
            "description": "An account found by a second keyword of the same run is delivered once (under the first keyword) and not charged again; the keyword row counts it (users_duplicate). Off: every keyword delivers its own full list.",
            "default": true
          },
          "includeProfileDetails": {
            "title": "Profile details per found account",
            "type": "boolean",
            "description": "Read each delivered account's own profile page too (one request per row) for its exact follower, following, like and video counts, bio link, created date, language, private flag and TikTok Shop and business flags. Charged per row as a profile_detail event, besides the row. TikTok shows no region to a logged-out reader, so none is given.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new accounts since the last run",
            "type": "boolean",
            "description": "Deliver only the accounts no earlier run of the same memory delivered, whichever keyword found them, and nothing when none is new (0 rows, $0). The first run with this on delivers the lists as the baseline. The memory is kept under stateStoreName, or under one default memory of your Apify account. With maxUsersPerKeyword the same top N is compared on every run.",
            "default": false
          },
          "stateStoreName": {
            "title": "Memory name",
            "pattern": "^[A-Za-z0-9._-]{1,100}$",
            "type": "string",
            "description": "The name of the memory onlyNew uses between runs (the account ids delivered). Empty = one default memory for your Apify account; give a name to keep two tasks apart."
          },
          "maxItems": {
            "title": "Max charged rows",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many charged account rows across all keywords; 0 = no limit. Free rows (the keyword rows) do not count. The run also stops inside your maximum charge and says so.",
            "default": 0
          },
          "runTag": {
            "title": "Run tag",
            "maxLength": 200,
            "type": "string",
            "description": "A label copied onto every row (run_tag), to tell runs apart in a shared dataset."
          },
          "proxyUrl": {
            "title": "Proxy URL",
            "type": "string",
            "description": "Empty (recommended): TikTok is read through the Actor's own residential exit in the country of readCountry, at no extra cost to you. Your own proxy URL (scheme://user:pass@host:port) carries the browser instead; the read country is then your proxy's. The word none runs without any proxy, from the Apify worker's own IP (for tests; TikTok may refuse a datacenter address)."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}