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

Search TikTok users by keyword with deep pagination: username, nickname, followers, following, hearts, videos, bio, bio link, verified and private flags. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/tiktok-user-search-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.40 / 1,000 result items

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🔎 TikTok User Search Scraper

> 🚀 **Export TikTok users by keyword in seconds.** 25 fields per user, page after page of search results, with exact followers, following, hearts, video count, bio, bio link and verified flag, no login needed.

Type a keyword the way you would in TikTok's own user search and get the accounts it returns as a clean table: username, nickname, profile link, avatar, bio, bio link, followers, following, hearts, videos, verified and private flags, language, seller flags and the account creation date. Every row carries a `username` and `profileUrl` that can be pasted straight into the TikTok Profile Scraper for the next step.

Coverage: in a 120 user cloud test across two queries (fitness coach and yoga) every row carried a username, followers, hearts and avatar, and 109 of 120 also carried following, videos, language and account age from the full profile page. TikTok returns about 240 users for one keyword at most, so the Actor pages through all of them and you widen a search by adding related keywords.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| 🔍 Influencer marketing agencies | Build creator shortlists for a niche in minutes |
| 🛍 Brands and DTC teams | Find creators and shops that talk about your product |
| 📈 Social media analysts | Map who owns a topic, with follower and heart counts |
| 🤝 Partnership and sales teams | Spot business accounts with a bio link to reach out to |
| 🤖 Data teams | Feed keyword-driven creator lists into a warehouse or CRM |
| 🎓 Researchers | Study communities around a hashtag, brand or subject |

### 📋 What the TikTok User Search Scraper does

Give it one or more search queries. For each query it walks TikTok's user search results page by page, removes users it has already seen, reads each user's public profile page and writes one row per user.

- 🔎 **Any query TikTok understands.** Names, niches, brands, cities, hashtags.
- 📄 **Real pagination.** Ten users per page, page after page, up to the roughly 240 users TikTok shows for a keyword.
- 🔗 **Ready to chain.** `username` and `profileUrl` are valid input for the `profiles` field of the TikTok Profile Scraper.
- 👥 **Audience numbers.** Followers, following, hearts (total likes), video count and friends.
- ✅ **Account signals.** Verified, private, organization, commerce and TikTok Shop seller flags, live-now flag and language.
- 🎚 **Filters that save money.** Minimum followers and verified-only are applied before a user is delivered, so skipped users are never charged.
- 🔒 **Privacy by default.** Phone numbers, emails and messenger handles in bios are replaced with \[removed] unless you switch them on.

> 💡 **Why it matters:** the first step of any TikTok creator project is finding the right accounts. A keyword search that returns exact numbers and a bio link turns hours of scrolling into one export.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

| Field | Description |
| --- | --- |
| 🖼 imageUrl | Avatar |
| 👤 username | TikTok handle without the @ |
| 📛 nickname | Display name |
| 🔗 profileUrl | Profile link |
| 🆔 userId | Numeric TikTok user ID |
| 🔐 secUid | Secure user ID used by TikTok |
| ✅ verified | Verified badge (Yes or No) |
| 🔒 isPrivate | Private account (Yes or No) |
| 👥 followerCount | Followers |
| ➡️ followingCount | Accounts followed |
| ❤️ heartCount | Total likes received |
| 🎬 videoCount | Videos posted |
| 🤝 friendCount | Mutual follows |
| 📝 signature | Bio, with contact details replaced by \[removed] |
| 🌐 bioLink | Link in the bio, or N/A |
| 🗣 language | Account language code |
| 🏢 isOrganization | Organization account |
| 🛍 isCommerceUser | Commerce account |
| 🛒 isTtSeller | TikTok Shop seller |
| 🔴 isLiveNow | Live at scrape time |
| 📅 accountCreatedAt | Account creation date |
| 🔎 searchQuery | Query that found the user |
| #️⃣ searchRank | Position in that query's results |
| 🕒 scrapedAt | Time the row was collected |
| ❌ error | Error message, null on success |

Three real rows from the cloud test with default settings:

```json
[
  {
    "imageUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/7340904144862986286~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=b4e74a58&x-expires=1790820000&x-signature=Owl8%2BcSJCu5rHqyaUkRP%2FUJD1ps%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast8",
    "username": "ironsanctuary",
    "nickname": "Ironsanctuary | Online coach",
    "profileUrl": "https://www.tiktok.com/@ironsanctuary",
    "userId": "6633942803008536582",
    "secUid": "MS4wLjABAAAAAPgCe6LHXUR3I5MW4z-M5GB9jZjiFDct5TNG5s3KIb-TbVxM_av3NEr4-6YZbrKB",
    "verified": "Yes",
    "isPrivate": "No",
    "followerCount": 6979427,
    "followingCount": 4393,
    "heartCount": 484724852,
    "videoCount": 4543,
    "friendCount": 2040,
    "signature": "Mental Health | Fitness Coach | Apparel \nClothing + Coaching links below \n⬇️\n\nBaby Parker go fund me",
    "bioLink": "https://gofund.me/e5f1e783e",
    "language": "en",
    "isOrganization": "No",
    "isCommerceUser": "Yes",
    "isTtSeller": "Yes",
    "isLiveNow": "No",
    "accountCreatedAt": "2019-06-24T04:10:10.000Z",
    "searchQuery": "fitness coach",
    "searchRank": 40,
    "scrapedAt": "2026-09-29T02:21:00.660Z",
    "error": null
  },
  {
    "imageUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-alisg-avt-0068/a835a7e6a4af8dea15e28174daff8e97~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=91ac1269&x-expires=1790820000&x-signature=Jdo2DA60gqhaniCl8NMEu9KuZZo%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast8",
    "username": "yoga_go_app",
    "nickname": "Yoga-Go",
    "profileUrl": "https://www.tiktok.com/@yoga_go_app",
    "userId": "7339917952957367301",
    "secUid": "MS4wLjABAAAAbQvo1-fM6EtWQbWZxQYTwXqvxZ6l3UZnM6CJ35xeknVuX0U0egnZGKIAxRdVlv6k",
    "verified": "Yes",
    "isPrivate": "No",
    "followerCount": 111240,
    "followingCount": 0,
    "heartCount": 496057,
    "videoCount": 195,
    "friendCount": 0,
    "signature": "💪🏽Start doing your own yoga practices✨\nGet a personal plan ⬇️\nJoin us on IG",
    "bioLink": "https://go.yoga-go.io/4asbG8K",
    "language": "uk",
    "isOrganization": "Yes",
    "isCommerceUser": "Yes",
    "isTtSeller": "No",
    "isLiveNow": "No",
    "accountCreatedAt": "2024-02-26T14:30:50.000Z",
    "searchQuery": "yoga",
    "searchRank": 5,
    "scrapedAt": "2026-09-29T02:21:17.110Z",
    "error": null
  },
  {
    "imageUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/6d511d7152324988abf5ca64901e182f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=856cdb97&x-expires=1790820000&x-signature=YpnJyl36kwJIgKjyRkyNVF%2B2rKk%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5",
    "username": "trainwithjk",
    "nickname": "Justin Kelly",
    "profileUrl": "https://www.tiktok.com/@trainwithjk",
    "userId": "6757010611248366597",
    "secUid": "MS4wLjABAAAACAWpBwEGy8LpvY25DnSRgX4HNoDxkSc__pkYDmpdYdL-knFtQ66lR2QQkfj1i9aX",
    "verified": "No",
    "isPrivate": "No",
    "followerCount": 1084043,
    "followingCount": 84,
    "heartCount": 35901781,
    "videoCount": 2788,
    "friendCount": 53,
    "signature": "N/A",
    "bioLink": "https://PRSPRWELLNESS.COM",
    "language": "en",
    "isOrganization": "No",
    "isCommerceUser": "Yes",
    "isTtSeller": "No",
    "isLiveNow": "No",
    "accountCreatedAt": "2019-11-08T10:52:46.000Z",
    "searchQuery": "fitness coach",
    "searchRank": 51,
    "scrapedAt": "2026-09-29T02:21:09.035Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- 📄 **It really paginates.** Ten users per page until TikTok runs out, not just the first page.
- 🧩 **Chains into the ParseForge TikTok Profile Scraper.** The shared fields (username, profileUrl, nickname, verified, followerCount, followingCount, heartCount, videoCount, signature, bioLink) use the same names; the avatar column is called `imageUrl` here and `avatarUrl` there, and "verified" is Yes or No here.
- 🎯 **Full profile data in the same run.** Following, videos, bio link, private flag and account age come from the profile page, not only the search card.
- 🧹 **Clean values.** Whole numbers, Yes or No flags and a stated value instead of a blank when TikTok withholds something.
- 🔁 **No duplicates.** A user found by several of your queries is delivered once.

### 📈 How it compares to alternatives

| | This Actor | Typical keyword-search Actor |
| --- | --- | --- |
| Pages of results | All pages TikTok shows (about 240 users per keyword) | Often stops at the first pages |
| Following, videos, bio link | Yes, from the profile page | Some fields missing |
| Private and verified flags | Yes | Yes |
| Language, seller flags, account age | Yes | Rare |
| Duplicates across queries | Removed | Repeated |
| Filters before delivery | Minimum followers, verified only | None |
| Bio contact details | Removed by default | Left in |
| Login needed | No | No |

TikTok itself stops returning users for one keyword after about 240 results, and it does not expose a country field for a user. Use several related keywords to go wider.

### 🚀 How to use

1. 🆓 [Create a free Apify account](https://console.apify.com/sign-up?fpr=vmoqkp) and get $5 of credit.
2. 🔎 Open the Actor and type one search query per line.
3. 🎚 Set how many users you want in total and per query, and add a follower or verified filter if you need one.
4. ▶️ Press Start.
5. 📥 Download the dataset as CSV, Excel, JSON or XML, or read it through the API.

### 💼 Business use cases

#### 🔍 Influencer discovery

Search a niche such as "fitness coach", filter to 100,000 followers and up, and hand the shortlist to your outreach team with the bio link already in the row.

#### 🛍 Brand and competitor monitoring

Search your brand and your competitors' names to see which accounts use them, how big they are and whether they sell through TikTok Shop.

#### 🤝 Lead lists

Business accounts often put a website or shop in their bio link. Filter on `isCommerceUser` and `bioLink` to build a prospect list for a service or a product.

#### 📊 Market maps

Run twenty related keywords, merge the rows and rank creators by hearts to see who leads a topic.

### 🔌 Automating TikTok User Search Scraper

- ⏰ **Schedules.** Refresh a niche list every week.
- 🔗 **Make and Zapier.** Send rows to Google Sheets, Airtable or your CRM.
- 💬 **Slack.** Alert your team when a new large account appears for a keyword.
- 🔄 **Airbyte.** Load creators into your warehouse.
- 🐙 **GitHub Actions.** Trigger runs from your pipeline through the API.
- 📁 **Google Drive.** Export each run as a spreadsheet automatically.

### 🌟 Beyond business use cases

- 🎓 **Research.** Study which accounts define a topic or a community.
- 🙋 **Personal.** Find creators to follow in a hobby you are learning.
- 🤝 **Non-profit.** Map public voices around a cause.
- 🧪 **Experimentation.** Build a creator dataset for modelling or ranking.

### 🤖 Ask an AI assistant about this scraper

Paste this page into ChatGPT, Claude or Gemini and ask things like "Which of these creators has the most hearts per follower?" or "How do I send the profileUrl column into the TikTok Profile Scraper?".

### ❓ Frequently Asked Questions

#### 🔑 Do I need a TikTok account or cookies?

No. The Actor reads public search results and public profile pages as a visitor who is not logged in.

#### 📄 How many users can I get for one keyword?

About 240. TikTok stops returning results for a keyword after roughly that many. Add related keywords to collect more, duplicates are removed for you.

#### 🔗 How do I use the output with the TikTok Profile Scraper?

Copy the `username` or `profileUrl` column into the Profile Scraper's profiles input. Both are accepted.

#### 🎚 What do the filters do?

Minimum followers and verified only are applied before a user is delivered. Users that do not match are skipped and not charged.

#### ⚡ What does "Add profile page details" change?

With it on (the default) each user's profile page is read for following, videos, bio link, private flag, language, seller flags and account age. Turn it off for the fastest run with the search card fields only; the extra columns then read Not Requested.

#### 🔒 Are contact details in bios included?

No. Phone numbers, emails and messenger handles are replaced with \[removed] unless you switch on **Keep contact details in bios**. Some handles written without a label can remain, so treat bios as public text.

#### 🌍 Why is there no country column?

TikTok does not expose a user's country on the profile page a visitor sees, only the language of the account, so the Actor reports language instead of inventing a region.

#### 🧾 Am I charged for errors?

No. A query TikTok did not answer is written as an error row and is never charged.

#### 🛡️ Do I need a proxy?

The Actor uses residential proxies by default because TikTok answers logged-out searches from only some countries. Leave the default, or fix the country to Canada, Australia, Mexico or Brazil.

#### ⏱ How long does a run take?

About a minute to open the search session, then a few seconds per page of ten users.

#### 🔁 Will a user show up twice?

No. A user found by several queries is delivered once, with the first query that found them.

#### 📉 Why do some rows say Not Disclosed?

A profile page can be unavailable for a moment. The row is still delivered with the search card fields, and the missing columns say Not Disclosed.

### 🔌 Integrate with any app

Use the Apify API, the JavaScript and Python clients, webhooks, or ready-made integrations for Make, Zapier, Slack, Google Sheets, Airbyte and more to send TikTok user data wherever you need it.

### 🔗 Recommended Actors

- [TikTok Profile Scraper](https://apify.com/parseforge/tiktok-profile-scraper) for a creator's profile, videos and comments.
- [TikTok Comments Scraper](https://apify.com/parseforge/tiktok-comments-scraper) for every comment under a TikTok video (takes video links).
- [TikTok Shop Scraper](https://apify.com/parseforge/tiktok-shop-scraper) for TikTok Shop products.
- [RedNote Notes Scraper](https://apify.com/parseforge/rednote-notes-scraper) for Xiaohongshu posts.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more social media Actors.

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** independent tool, not affiliated with TikTok or ByteDance; only publicly available data is collected.

# Actor input Schema

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

Keywords to search among TikTok users, one per line. Any query that works in TikTok's own user search works here (names, niches, brands, hashtags).

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

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

Maximum users to collect for each search query (TikTok stops at roughly 240 per query).

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

Skip users with fewer followers than this. Skipped users are not charged.

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

Keep only accounts with a verified badge.

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

Read each user's profile page for following, video count, bio link, private flag, language, seller flags and creation date. Turn off for the fastest run with search-card fields only.

## `includeContactDetails` (type: `boolean`):

Bios often hold phone numbers, emails and messenger handles. They are replaced with \[removed] unless you switch this on.

## `proxyConfiguration` (type: `object`):

Apify proxy settings. Residential is required for the search. Pick Canada, Australia, Mexico or Brazil to fix the exit country; leave the country empty to rotate them.

## Actor input object example

```json
{
  "searchQueries": [
    "coffee shop"
  ],
  "maxItems": 10,
  "maxProfilesPerQuery": 50,
  "minFollowers": 0,
  "verifiedOnly": false,
  "includeProfileDetails": true,
  "includeContactDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Key fields

## `fullData` (type: `string`):

Complete dataset with all 25 fields

# 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": [
        "coffee shop"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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": ["coffee shop"],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/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": [
    "coffee shop"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parseforge/tiktok-user-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/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/tiesKih7JhRwrli1C/builds/NunQwQcfzhRzo3pM0/openapi.json
