# TikTok User Search Scraper (`coregent/tiktok-user-search-scraper`) Actor

Search TikTok users by keyword, niche, name or brand. Export matching accounts with usernames, profile URLs, follower counts, verification, bios and search rank. Filter by follower range and verified accounts. No login or cookies.

- **URL**: https://apify.com/coregent/tiktok-user-search-scraper.md
- **Developed by:** [Delowar Munna](https://apify.com/coregent) (community)
- **Stats:** 8 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 user results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## TikTok User Search Scraper — Creators, Accounts, Followers, Bios & Search Rank

![TikTok User Search Scraper](https://raw.githubusercontent.com/coregentdevspace/tiktok-user-search-scraper-assets/main/thumbnail-tiktok-user-search-scraper.png)

Search TikTok **users and accounts** by keyword, niche, name or brand. For every query you get the accounts TikTok returns, in TikTok's own search order, with usernames, profile URLs, follower, following, like and video counts, verification and search rank, plus optional bios and bio links. Process many queries in one run and export clean JSON, CSV or Excel.

- 🔎 **Search accounts, not videos.** `fitness coach` → the creators TikTok ranks for it.
- 🏷️ **Query attribution + search rank** on every row.
- 🎯 **Exact follower filters** (min/max), TikTok's follower-range filter, and **verified-only**.
- 🔗 **Optional full profile details:** bio and bio link for every account.
- 🔐 **No TikTok login or cookies** — you never provide any credentials.
- 💸 **No duplicate billing:** duplicates, filtered-out accounts and failed queries are free.

### What can I search for?

Anything you would type into TikTok's account search:

| Use case | Example queries |
|---|---|
| Creator discovery | `fitness coach`, `beauty creator`, `food blogger`, `AI educator` |
| Local creators & businesses | `Sydney realtor`, `Canberra photographer`, `Melbourne cafe reviewer` |
| Brands & companies | `Nike`, `Canva`, `HubSpot` |
| Exact names / usernames | `MrBeast`, `charlidamelio` |
| Non-English niches | `recetas fáciles`, `Bangladesh food blogger` |

### Does this search users or videos?

**Users/accounts only.** One dataset row = one matched account for one query.
Looking for videos? Use the [TikTok Keyword Search Scraper](https://apify.com/coregent/tiktok-keyword-search-scraper).

### Input

| Field | Default | What it does |
|---|---|---|
| `searchQueries` | `["fitness coach"]` | One or more queries (up to 100 per run). Whitespace is tidied and duplicates removed. |
| `maxProfilesPerQuery` | `100` | Accounts to return per query, after filters (1–1,000). |
| `followerRange` | `ANY` | TikTok's own follower filter: 0–1K, 1K–10K, 10K–100K, 100K+. |
| `minFollowers` / `maxFollowers` | none | Exact follower limits, checked against each account's real count. |
| `verifiedOnly` | `false` | Only verified accounts. |
| `includePrivateAccounts` | `true` | Untick to drop accounts known to be private. |
| `includeProfileDetails` | `false` | Adds the bio link and bio, and fills in any counts search didn't return (one extra lookup per account, billed separately). |
| `providerRoute` | `AUTO` | Advanced. Leave on Auto. |

#### Example inputs

**Minimal**

```json
{
  "searchQueries": ["fitness coach"],
  "maxProfilesPerQuery": 100
}
```

**Multi-query**

```json
{
  "searchQueries": ["fitness coach", "skincare creator", "travel blogger"],
  "maxProfilesPerQuery": 200
}
```

**Follower filter (mid-tier creators, public only)**

```json
{
  "searchQueries": ["fitness coach"],
  "maxProfilesPerQuery": 500,
  "minFollowers": 10000,
  "maxFollowers": 250000,
  "includePrivateAccounts": false
}
```

**Two niches, 100 accounts each** (the run behind the samples below)

```json
{
  "searchQueries": ["fitness coach", "skincare creator"],
  "maxProfilesPerQuery": 100
}
```

**Verified brands with full profile details**

```json
{
  "searchQueries": ["Nike"],
  "maxProfilesPerQuery": 100,
  "verifiedOnly": true,
  "includeProfileDetails": true
}
```

### Output

One row per matched account per query. Results are grouped into four dataset views (tabs):

![TikTok User Search Scraper — Overview table view](https://raw.githubusercontent.com/coregentdevspace/tiktok-user-search-scraper-assets/main/tiktok-user-search-scraper-output-overview-table-view.png)

The samples below come from a real run of the **Two niches, 100 accounts each** input above. Avatar URLs are shortened here.

#### Overview

Query, rank, avatar, username, followers, verified and bio: the quick scan.

```json
{
  "query": "fitness coach",
  "rank": 60,
  "avatarUrl": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/7332827883875860486~...",
  "username": "eresfitness",
  "displayName": "EresFitness",
  "profileUrl": "https://www.tiktok.com/@eresfitness",
  "isVerified": true,
  "followersCount": 6801884,
  "videoCount": 1422,
  "bio": null
}
```

#### Profile Details

Bio, bio link, following, likes, videos and private status, plus the IDs for follow-up scraping.

```json
{
  "username": "cece.selfcare",
  "displayName": "Cece | Skincare Creator 🫧🎀🌸",
  "profileUrl": "https://www.tiktok.com/@cece.selfcare",
  "bio": null,
  "bioLink": null,
  "isVerified": false,
  "isPrivate": false,
  "followersCount": 23500,
  "followingCount": 74,
  "likesCount": 1693324,
  "videoCount": 301,
  "profileDetailsFetched": false,
  "userId": "7469023585106805766",
  "secUid": "MS4wLjABAAAAeG_ME0LnssQBpkMRMeXE3Xm-cpaD7SOoQ27y8SSOUHqIu6fZuBKlwjo90EgcClpw"
}
```

`bio` and `bioLink` are `null` here because this run didn't turn on **Include full profile details** (see below).

#### Query Status

Queries that return nothing, are rejected by TikTok, or fail get a free status row instead of silently disappearing. Every query in the sample run succeeded, so this example shows the row shape for a query whose filters matched nothing:

```json
{
  "rowType": "queryStatus",
  "query": "underwater basket weaving coach",
  "queryIndex": 2,
  "status": "NO_RESULTS",
  "message": "TikTok returned accounts, but none matched your filters.",
  "profilesSaved": 0
}
```

Possible `status` values: `NO_RESULTS`, `INVALID_QUERY`, `QUERY_REJECTED_BY_TIKTOK`, `RATE_LIMITED`, `PROVIDER_ERROR`, `PARTIAL_RESULT`, `TEMPORARY_TIKTOK_ERROR`.

#### Full Data

Every field:

```json
{
  "rowType": "user",
  "query": "fitness coach",
  "queryIndex": 0,
  "rank": 1,
  "userId": "6847967129938461702",
  "secUid": "MS4wLjABAAAA4VyoG3rOV8muibC3M649v0MjlI_YzzjhVt4DvJxpMFnSNUqs3Z6n9-cDrcxgpVh-",
  "username": "louise_fitcoach",
  "displayName": "louise",
  "profileUrl": "https://www.tiktok.com/@louise_fitcoach",
  "bio": null,
  "bioLink": null,
  "avatarUrl": "https://p16-common-sign.tiktokcdn-eu.com/tos-no1a-avt-0068c001-no/27741531e360ac86da3988da44f20889~...",
  "isVerified": false,
  "isPrivate": false,
  "followersCount": 327246,
  "followingCount": 71,
  "likesCount": 2722398,
  "videoCount": 282,
  "profileDetailsFetched": false,
  "searchSource": "TIKTOK",
  "provider": "TIKHUB",
  "searchRoute": "APP_V3",
  "input": "fitness coach",
  "scrapedAt": "2026-10-11T09:24:29.925Z"
}
```

Counts are real numbers (`327246`, not `"327K"`). `isVerified` reflects TikTok's verified badge (in this run, 16 of 200 accounts). When TikTok doesn't provide a value, the field is `null`, never guessed.

#### Which fields need full profile details?

| Included from search | Needs **Include full profile details** |
|---|---|
| `userId`, `secUid`, `username`, `displayName`, `profileUrl`, `avatarUrl`, `isVerified`, `followersCount`, `followingCount`, `likesCount`, `videoCount`, `isPrivate`, query and rank | `bio` and `bioLink` |

TikTok's account search doesn't return bios or bio links, so they come from a profile lookup. Turn on full profile details if you need them; it also fills in any count that search occasionally leaves out.

The key-value store also holds `RUN_SUMMARY` (per-query status, counts, duplicates skipped, filtered counts) and, when some queries failed temporarily, `RETRY_INPUT`, a ready-to-run input containing just those queries.

### FAQ

**Do I need a TikTok login or cookies?**
No. You never provide credentials, cookies or session tokens.

**How many accounts per query?**
Up to 1,000 per query. TikTok's search depth varies by query, and niche or local queries often have fewer matches. Filters narrow this further: combining `verifiedOnly` with a follower range can return only a handful of accounts (for example, 2 for "fitness coach", verified, 10K–100K followers). The run stops as soon as TikTok has no more matches. That's not an error.

**Are results ranked like TikTok search?**
Yes. `rank` is TikTok's own result order, starting at 1. If filters remove some accounts, the remaining ones keep their original rank, so you might see `1, 2, 5, 9…`. Search order can change over time.

**Are follower counts included?** Yes, as exact numbers, on every row.

**Can I filter by follower count?**
Yes. `minFollowers`/`maxFollowers` are exact. `followerRange` uses TikTok's own buckets. When your min/max fall inside one bucket, the Actor also uses TikTok's filter behind the scenes to fetch matches faster.

**Can I search verified accounts only?** Yes, with `verifiedOnly: true`. The Actor uses TikTok's own verified-accounts search filter, so every result is an account TikTok returns as verified, and `isVerified` is `true` on every row.

**Are bios and bio links included?**
Profile URLs and display names always are. Bios and bio links need **Include full profile details** (see the table above). External websites are never crawled.

**Can the same account appear for multiple queries?**
Yes, once per query it matches, so each row keeps its query and rank. Within a single query, an account is never returned or charged twice.

**Why did a query return no results?**
Either TikTok has no matching accounts, your filters excluded them all, or TikTok refused the keyword (common for sensitive or restricted terms). That query is marked `QUERY_REJECTED_BY_TIKTOK`, and the rest of the run carries on. When strict filters keep failing to match, the Actor stops paging that query early, so it doesn't spin on pages with no hits.

**How does pricing work?**
Pay per result:

- **`user-result`**: per unique account delivered for a query.
- **`profile-details`**: per account enriched with full profile details. Opt-in, and charged only for accounts that were actually enriched.

Duplicates, filtered-out accounts, failed or rejected queries, status rows and the run summary are free. There is no start fee, so an empty run costs nothing. See the **Pricing** tab for current rates (this README deliberately doesn't quote figures). Your Apify spending limit is respected: the run stops cleanly when it's reached.

**Can I schedule runs?** Yes. Use Apify Schedules to track how accounts rank for your niches over time.

**Can I use the API or MCP?**
Yes. Run the Actor through the [Apify API](https://docs.apify.com/api/v2), the JS/Python clients, or the Apify MCP server from AI agents:

```bash
curl -X POST "https://api.apify.com/v2/acts/coregent~tiktok-user-search-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["fitness coach"], "maxProfilesPerQuery": 50}'
```

**How do I enrich results further?**
Pass `username` or `profileUrl` on to:

- [TikTok Profile Scraper](https://apify.com/coregent/tiktok-profile-scraper) for richer profile and video data
- [TikTok Contact Extractor](https://apify.com/coregent/tiktok-contact-extractor) for public contact details

### Limitations

- TikTok's search results and order change over time and can vary between runs.
- Follower, like and video counts are a snapshot at scrape time.
- Some keywords are restricted by TikTok and return no results.
- Very deep result sets (hundreds of accounts per query) depend on how far TikTok lets the search page.

### Legal & privacy

This is an unofficial tool, not affiliated with or endorsed by TikTok. It collects **public account information only**, with no private-data access, messaging, following or account automation, and it does not infer sensitive attributes. You are responsible for processing the data lawfully, including under GDPR/CCPA where applicable.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords, niches, names or brands to search TikTok accounts for — one per line. Examples: fitness coach, skincare, Canberra realtor, Nike. Up to 100 queries per run; duplicates are removed.

## `maxProfilesPerQuery` (type: `integer`):

Maximum number of matching accounts to return for each query (after filters). Common values: 20, 50, 100, 500, 1000. Fewer may be returned if TikTok has fewer results.

## `followerRange` (type: `string`):

TikTok's own follower-count filter, applied at search time. Use 'Min/Max followers' below for exact limits.

## `minFollowers` (type: `integer`):

Only return accounts with at least this many followers (exact). 0 = no minimum.

## `maxFollowers` (type: `integer`):

Only return accounts with at most this many followers (exact). Leave empty for no maximum.

## `verifiedOnly` (type: `boolean`):

Return only accounts with TikTok's verified badge.

## `includePrivateAccounts` (type: `boolean`):

Untick to drop accounts known to be private.

## `includeProfileDetails` (type: `boolean`):

Look up each account's full public profile to add the bio link and bio text, and fill in any following, likes, video or private values that search didn't return. One extra lookup per account, billed as a separate 'profile-details' event — only for accounts that were enriched.

## `providerRoute` (type: `string`):

Auto uses TikTok's app search, which pages deepest and supports the native follower and verified filters. Web search is currently failing at the provider and is kept for troubleshooting only.

## `debug` (type: `boolean`):

Log extra detail about each search page.

## Actor input object example

```json
{
  "searchQueries": [
    "fitness coach",
    "skincare creator"
  ],
  "maxProfilesPerQuery": 100,
  "followerRange": "ANY",
  "minFollowers": 0,
  "verifiedOnly": false,
  "includePrivateAccounts": true,
  "includeProfileDetails": false,
  "providerRoute": "AUTO",
  "debug": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `profiles` (type: `string`):

No description

## `queryStatus` (type: `string`):

No description

## `full` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "fitness coach",
        "skincare creator"
    ],
    "maxProfilesPerQuery": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("coregent/tiktok-user-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": [
        "fitness coach",
        "skincare creator",
    ],
    "maxProfilesPerQuery": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("coregent/tiktok-user-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "fitness coach",
    "skincare creator"
  ],
  "maxProfilesPerQuery": 100
}' |
apify call coregent/tiktok-user-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,coregent/tiktok-user-search-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/3E0GaeA2nBHXkmWhh/builds/zHt9kkfs7l89Ukq04/openapi.json
