# TikTok User Search Scraper - Find Creators \[NO LOGIN] ✅ (`unseenuser/tiktok-user-search-scraper`) Actor

Search TikTok users and creators by keyword. Get handles, bios, follower counts, and recent videos. Built for creator discovery, influencer research, and lead generation by topic or niche. No login, no cookies. Pair with our Followers Scraper to map full audiences.

- **URL**: https://apify.com/unseenuser/tiktok-user-search-scraper.md
- **Developed by:** [Unseen User](https://apify.com/unseenuser) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$5.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🔍 TikTok User Search - Find Creators by Keyword (No Login)

> **Search TikTok creators by keyword or name. Returns user profiles with bio, follower counts, recent video samples. Built for influencer marketing and creator discovery.**
>
> **Tier:** Tier 2 - Solid Niche

---

### 🧭 The creator-intelligence funnel

Find creators by keyword -> see where their audience lives (Audience Geography) -> see who follows them (Followers & Following) -> understand what they say (Transcript Extraction). Three companion Actors, one complete influencer-intelligence pipeline.

This Actor is **step 1**: the wide funnel that turns a keyword into a structured shortlist of creators worth evaluating.

````

+---------------------+      +-----------------------+      +----------------------+      +-----------------------+
|  TikTok User Search |  ->  |   Audience Geography  |  ->  | Followers & Following|  ->  | Transcript Extraction |
|   (this Actor)      |      | (qualify by region)   |      |  (audience map)      |      |  (content signal)     |
+---------------------+      +-----------------------+      +----------------------+      +-----------------------+
keyword                  top-country split               who follows them               what they say

````

A concrete buyer journey: marketer types `fitness` -> shortlist of 50 handles -> qualify the top 50 in Audience Geography -> deep-map the best 10 in Followers & Following -> pull transcripts of their best videos.

---

### 🎯 Hero use case: fitness creators in Southeast Asia, under $10

A brand wants fitness creators whose audience is concentrated in Southeast Asia.

**Step 1 - Search the keyword `fitness`.** Run this Actor with:

```json
{ "queries": ["fitness"], "max_pages": 5, "min_follower_count": 50000 }
````

You get a shortlist of ~50-150 fitness creators ranked by TikTok's "best match" relevance, each with handle, bio, follower count, verified flag, avatar, and a sample of recent videos.

**Step 2 - Filter by region.** TikTok's search endpoint does not expose a region filter, so do this on the dataset:

- Keep rows whose `signature` mentions a Southeast Asian city or country (Jakarta, Manila, Bangkok, KL, Singapore, Bali, HCM, Hanoi, "SEA", "ASEAN").
- Optionally narrow to creators whose `nickname` is in Bahasa, Tagalog, Thai, or Vietnamese.

**Step 3 - Confirm with Audience Geography.** Feed the top 50 surviving handles into **TikTok Audience Geography**. That Actor returns each creator's audience split by country, so you can drop anyone whose audience is actually US/EU-skewed despite the bio.

**Total cost: under $10 for a 50-creator vetted shortlist.** That replaces ~3 hours of manual TikTok scrolling per analyst.

***

### ⚡ Why this Actor?

Atomic actor: input a search keyword (creator name, bio keyword, or topic), get back TikTok user profiles matching. Each result includes user info (handle, nickname, bio/signature, follower/following counts, avatar) plus recent video samples for vetting.

#### This Actor vs. manual TikTok search

| Capability | Manual TikTok search | This Actor |
|---|---|---|
| Bulk scale | Hand-click each result | Hundreds of profiles per run, hundreds of queries in bulk mode |
| Integration | Copy-paste only | JSON / CSV / XLSX / Apify API / webhooks |
| Structured output | None - free text on screen | Typed fields: handle, bio, followers, following, verified, items\[] |
| Time saved per 100 creators | ~3 hours | ~3 minutes |
| Repeatable / scheduled | No | Yes (Apify schedules + webhooks) |
| Feeds downstream Actors | No | Yes (handles -> Audience Geography / Followers / Transcript) |
| Free plan trial | n/a | 50 results / run free, no card required |

***

### 📊 Sample output

Five abbreviated dataset rows (fields trimmed for readability):

```json
[
  {
    "unique_id": "fit.sarah",
    "nickname": "Sarah | Home Workouts",
    "signature": "Daily 10-min routines. PT, NASM. Jakarta + Bali.",
    "follower_count": 412000,
    "following_count": 318,
    "verified": false,
    "avatar": "https://p16-sign-va.tiktokcdn.com/.../sarah.jpeg",
    "profile_url": "https://www.tiktok.com/@fit.sarah",
    "items": [
      { "id": "7312...", "desc": "10-min ab burner", "play_count": 1840000, "digg_count": 92000 }
    ],
    "_metadata": { "page": 1, "fetched_at": "2026-06-01T12:00:00.000Z", "input_identifier": "fitness" }
  },
  {
    "unique_id": "leanwithleo",
    "nickname": "Leo Tan",
    "signature": "Singapore lifter. Form > ego. DM for coaching.",
    "follower_count": 188500,
    "following_count": 71,
    "verified": true,
    "avatar": "https://p16-sign-va.tiktokcdn.com/.../leo.jpeg",
    "profile_url": "https://www.tiktok.com/@leanwithleo",
    "items": [
      { "id": "7301...", "desc": "Bench press fixes", "play_count": 920000, "digg_count": 41000 }
    ],
    "_metadata": { "page": 1, "fetched_at": "2026-06-01T12:00:01.000Z", "input_identifier": "fitness" }
  },
  {
    "unique_id": "yoga.with.maya",
    "nickname": "Maya",
    "signature": "Slow flow yoga. Manila based. Beginners welcome.",
    "follower_count": 96200,
    "following_count": 112,
    "verified": false,
    "avatar": "https://p16-sign-va.tiktokcdn.com/.../maya.jpeg",
    "profile_url": "https://www.tiktok.com/@yoga.with.maya",
    "items": [
      { "id": "7298...", "desc": "5-min morning stretch", "play_count": 410000, "digg_count": 18000 }
    ],
    "_metadata": { "page": 1, "fetched_at": "2026-06-01T12:00:02.000Z", "input_identifier": "fitness" }
  },
  {
    "unique_id": "hiit.daddy",
    "nickname": "Coach Ravi",
    "signature": "HIIT in 7 mins. KL, Malaysia. Brand: ravi@example.com",
    "follower_count": 612000,
    "following_count": 22,
    "verified": true,
    "avatar": "https://p16-sign-va.tiktokcdn.com/.../ravi.jpeg",
    "profile_url": "https://www.tiktok.com/@hiit.daddy",
    "items": [
      { "id": "7287...", "desc": "Fat-burn finisher", "play_count": 2200000, "digg_count": 140000 }
    ],
    "_metadata": { "page": 1, "fetched_at": "2026-06-01T12:00:03.000Z", "input_identifier": "fitness" }
  },
  {
    "unique_id": "runrun.bangkok",
    "nickname": "Run Run BKK",
    "signature": "Bangkok runner. 10K every Sunday. Brand collabs open.",
    "follower_count": 54300,
    "following_count": 480,
    "verified": false,
    "avatar": "https://p16-sign-va.tiktokcdn.com/.../runrun.jpeg",
    "profile_url": "https://www.tiktok.com/@runrun.bangkok",
    "items": [
      { "id": "7275...", "desc": "Lumphini Park 10K", "play_count": 145000, "digg_count": 6800 }
    ],
    "_metadata": { "page": 2, "fetched_at": "2026-06-01T12:00:04.000Z", "input_identifier": "fitness" }
  }
]
```

Notice the rich combination: handle + bio (for region filtering) + follower count (for tier sorting) + verified flag (for authority) + sample video metrics (for engagement vetting), all in one row.

***

### 🎯 Use cases

- **Influencer agency creator scouting** - generate weekly shortlists by niche and tier for the agency roster team.
- **B2B lead generation by niche** - find creators in a target vertical (SaaS, fintech, real-estate edu) and route to sales outreach with proper consent.
- **Brand partnership research** - validate that a creator's bio, follower band, and recent video themes match a campaign brief before pitching.
- **Market sizing per category** - count how many creators per keyword exist across niches to scope a campaign budget or a category bet.
- **Creator database building (lawful, with consent)** - seed a creator CRM with handles and bios; layer Audience Geography and Followers later.
- **Competitive monitoring** - find creators who mention competitor brands in their bio or recent videos.
- **Recruiter sourcing** - find creators with specific bio characteristics (location, language, niche) for opportunities.
- **Verification** - confirm a creator's identity when given a partial name or alias from another source.

***

### 🔗 n8n integration: shortlist to Airtable

The storytelling: a marketer schedules a weekly run, the workflow enriches each new creator with Audience Geography, and an Airtable shortlist refills itself every Monday morning. Here is the minimal n8n graph:

```
Manual / Cron trigger -> HTTP: Run User Search -> Split in batches (1)
                                                  -> HTTP: Audience Geography (per handle)
                                                     -> Airtable: append row
```

Workflow JSON:

```json
{
  "name": "TikTok creator shortlist -> Airtable",
  "nodes": [
    {
      "name": "Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [200, 300]
    },
    {
      "name": "Run User Search",
      "type": "n8n-nodes-base.httpRequest",
      "position": [440, 300],
      "parameters": {
        "method": "POST",
        "url": "https://api.apify.com/v2/acts/UnseenUser~tiktok-user-search-scraper/run-sync-get-dataset-items",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"queries\": [\"fitness\"],\n  \"max_pages\": 5,\n  \"min_follower_count\": 50000\n}"
      }
    },
    {
      "name": "Split shortlist",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [680, 300],
      "parameters": { "batchSize": 1 }
    },
    {
      "name": "Enrich with Audience Geography",
      "type": "n8n-nodes-base.httpRequest",
      "position": [920, 300],
      "parameters": {
        "method": "POST",
        "url": "https://api.apify.com/v2/acts/UnseenUser~tiktok-audience-geography-scraper/run-sync-get-dataset-items",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"handle\": \"={{ $json.unique_id }}\"\n}"
      }
    },
    {
      "name": "Append to Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [1160, 300],
      "parameters": {
        "operation": "append",
        "application": "appXXXXXXXXXXXXXX",
        "table": "Creator Shortlist",
        "fields": "unique_id,nickname,follower_count,top_country,profile_url"
      }
    }
  ],
  "connections": {
    "Trigger": { "main": [[{ "node": "Run User Search", "type": "main", "index": 0 }]] },
    "Run User Search": { "main": [[{ "node": "Split shortlist", "type": "main", "index": 0 }]] },
    "Split shortlist": { "main": [[{ "node": "Enrich with Audience Geography", "type": "main", "index": 0 }]] },
    "Enrich with Audience Geography": { "main": [[{ "node": "Append to Airtable", "type": "main", "index": 0 }]] }
  }
}
```

Drop your Apify token into the HTTP Header Auth credential as `Authorization: Bearer <APIFY_TOKEN>`, swap your Airtable base and table IDs, and the workflow is ready to schedule weekly. Same pattern works for Make, Zapier, Pipedream, Retool, or a plain cron + curl.

***

### ⚙️ Inputs Overview

| Input | Type | Required | Description | Example / Allowed Values |
|---|---|---|---|---|
| `queries` | array of strings | yes | One or more keywords or usernames to search. Add a single entry for a one-off search, or many entries to run them all in one bulk run. Leading `@` is stripped. Duplicates are removed. | `["fashion influencer"]` or `["fashion influencer", "vegan recipes", "@charlidamelio"]` |
| `max_pages` | integer | no | Max pages of results to fetch **per query**. Each page returns ~10-20 creators. Default 20 (about 200-400 creators per query). Raise to 100 if you want exhaustive coverage. | `20` |
| `min_follower_count` | integer | no | Filter out users with fewer followers than this. Default 0 (no filter) | `1000` |
| `exclude_unverified` | boolean | no | If true, exclude unverified accounts. Default false | `false` |
| `auto_expand_query` | boolean | no | Default `false`. Turn on to automatically expand each base query into ~60 variants (niche modifiers + city modifiers + `@handle` form). Results are de-duped by `@handle` across the whole run, so you typically get 10x-30x more unique creators per base query. Use it when a single keyword like `Michael` plateaus at ~60-100 results. | `true` |
| `deep_search` | boolean | no | Default `false`. Turn on to run each query against THREE different TikTok search endpoints (user search + keyword video search + Top search), extract unique authors from each, and merge them into one de-duplicated result set. Typically lifts unique-creator yield 10x-50x per query. Each row's `_metadata.source` tells you which pool surfaced it. Cost ~3x credits per query. Combine with `auto_expand_query` for maximum coverage. | `true` |
| `allow_duplicates` | boolean | no | Debug flag. Default `false` (de-dupes by `@handle` across pages and across queries). Turn on to see the raw upstream rows including repeats and to keep paging even when every result on a page is a duplicate. Useful for diagnosing why a query plateaued. | `false` |

#### One input, single or bulk

`queries` covers both modes:

- **Single search:** pass a one-element array, e.g. `["fashion influencer"]`.
- **Bulk search:** pass many entries, e.g. `["fashion influencer", "vegan recipes", "@charlidamelio"]`. The Actor runs a paginated search for each entry sequentially. Each output row's `_metadata.input_identifier` records which query produced it, so you can group results downstream. The free-plan 50-result cap applies across the **whole run**, not per query.

#### Deep search across three pools

TikTok exposes several search surfaces. User search is just one of them, and it caps at ~60-100 best-match results per keyword. **`deep_search`** runs each query through three different endpoints and merges-and-dedupes the unique creators:

1. **User search** (`/v1/tiktok/search/users`) - what the Actor does by default.
2. **Keyword video search** (`/v1/tiktok/search/keyword`) - returns videos for the keyword; the Actor extracts unique authors.
3. **Top search** (`/v1/tiktok/search/top`) - TikTok's "Top" tab with videos and photo carousels; the Actor extracts unique authors.

Each pool ranks results differently, so the same keyword pulls a different set of creators from each. Combining them typically delivers **10x-50x more unique creators per query** without any new API provider or cookies. Each output row carries `_metadata.source` so you can filter by where the creator was found.

Caveat: creators surfaced through the video pools may have `follower_count: 0` or empty `signature` - TikTok's embedded author object is leaner than the user-search response. If you need rich data on those, run them through a profile scraper afterwards.

Combine `deep_search` with `auto_expand_query` for the deepest coverage: 60 variants x 3 pools = up to 180 search pools per base query, all merged into one deduped dataset.

#### Auto-expand to break through the search cap

TikTok's no-login user search is a "best match" ranker that caps at roughly 50-100 results per query no matter how many pages you walk. A single keyword like `Michael` returns the same ~60-100 creators every time, even though there are millions of Michaels on TikTok.

Turn on **`auto_expand_query`** to bypass that cap. The Actor turns each base query into ~60 variants:

- `Michael` (the original)
- `@Michael` (handle form)
- `Michael fashion`, `Michael fitness`, `Michael food`, `Michael music`, `Michael gaming`, `Michael tech`, `Michael comedy`, `Michael travel`, ... (niche modifiers)
- `Michael nyc`, `Michael la`, `Michael london`, `Michael tokyo`, `Michael singapore`, ... (city modifiers)

Each variant is a separate "best match" pool, so together they uncover 10x-30x more unique creators. Results are de-duplicated by `@handle` across the whole run, so even though the same big-name Michael appears in five variants, you only see them once in the output. Cost scales linearly with the number of variants - each one runs the same pagination as a normal query.

***

### 📤 Output

Each dataset row is a TikTok creator profile with these fields:

- `unique_id` - the creator's @handle
- `nickname` - display name
- `signature` - bio text (passed through unchanged; may contain emojis, line breaks, and contact info)
- `follower_count`, `following_count` - integer counts
- `verified` - boolean
- `avatar` - avatar image URL
- `profile_url` - `https://www.tiktok.com/@handle`
- `items` - array of recent videos for content vetting (id, desc, play\_count, etc.)
- `_metadata` - `{ page, fetched_at, input_identifier }` so you can trace which query and page each row came from

Failed page requests are emitted as rows with an `error` field rather than crashing the run.

***

### 🔒 Free plan limit

Free Apify users get up to **50 results per run**. Paying users are not affected and receive results normally.

This limit was set by the Actor developer, not by Apify. To remove it and receive unlimited results, upgrade to any paid Apify plan: https://apify.com/pricing

When a free plan run hits the cap, the Actor finishes successfully (status `SUCCEEDED`) and the run's status message explains what happened. No error is raised, so the first 50 results are fully usable as normal.

***

### 💰 Pricing

Pay-per-event model on Apify. See exact per-event pricing on the Actor's Apify page. Free Apify users can trial the Actor up to the 50-result cap described above at no cost.

***

### 🚀 Quick Start

1. Click **Try for free** on this Actor's page.
2. Enter the required identifier (see Inputs Overview above).
3. Run the Actor.
4. Download results as JSON, CSV, or XLSX, or pull via Apify API / webhook.

***

### ❓ FAQ

**Q: How many results do I get per query?**
A: It depends on the keyword and `max_pages`. Each page returns roughly 10-20 creators. The default `max_pages = 20` typically yields 200-400 unique creators per query. Highly generic keywords plateau when TikTok's search runs out of "best match" results, and the Actor stops automatically when that happens (no cursor, all duplicates, or upstream signals no more). Raise `max_pages` to 100 for exhaustive coverage of niche queries. Free Apify users are additionally capped at 50 results per run (see "Free plan limit" above).

**Q: Does the Actor handle cursor pagination?**
A: Yes. The Actor carries both the `cursor` and the `search_id` session token forward between pages (TikTok's search endpoint needs both - cursor alone often re-returns page 1). It also de-duplicates by `unique_id` across pages so a flaky upstream cannot waste your free-plan cap on the same handles, and it stops the moment a page returns zero new creators or the cursor refuses to advance. You set `max_pages` and never deal with cursors yourself.

**Q: What does "trim" mean for the `signature` field?**
A: `signature` is the creator's bio text exactly as TikTok stores it. Some bios contain emojis, line breaks, hashtags, and contact info. The Actor passes the value through unchanged - any trimming, regex extraction (e.g. emails out of bios), or normalization is up to you downstream. Trimming nothing is intentional: we do not want to lose information.

**Q: How do I filter results by region?**
A: TikTok's user search endpoint does not expose a region filter directly. Two practical options:

1. Filter on `signature` text post-run (city / country / language keywords).
2. Feed handles into **TikTok Audience Geography** to confirm where the audience actually lives.
   Region filtering by audience is more reliable than by creator location, because creators travel and lie in bios.

**Q: Are there rate limits?**
A: The Actor retries transient 429/502/503/504 responses up to 3 times with exponential backoff (1s, 2s, 4s), so brief throttles are handled automatically. If you run many heavy queries back-to-back, prefer bulk mode (`queries` array) so the Actor paces requests in a single run.

**Q: Can I look up a specific handle?**
A: Yes - put the handle (with or without the `@`) in the `queries` array, e.g. `["@charlidamelio"]`. The endpoint returns "best match" results, so the exact handle is typically the first row.

**Q: Is this legal?**
A: Your downstream use of the data is your responsibility - see the full Terms of Service and the Actor-Specific Addendum below for details.

**Q: Do I need any third-party account?**
A: No. UnseenUser holds the necessary backend credentials. You only need an Apify account.

**Q: What about TikTok's anti-scraping enforcement?**
A: TikTok's Terms restrict automated extraction. The underlying data-collection layer bears responsibility for its architecture's lawfulness. Your downstream use must comply with TikTok's Terms.

**Q: What if TikTok sends a cease-and-desist?**
A: Notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser) and cease using this Actor immediately.

**Q: Can I use this data to train AI?**
A: NO. TikTok's Terms explicitly prohibit AI training on TikTok data, and creators retain copyright in their content.

**Q: What about minors?**
A: TikTok has many under-18 users. This Actor's Terms strictly prohibit using data of users you know or suspect are minors. See the Addendum (Section H) for details.

***

### ➡️ Next step in the pipeline

Once you have shortlisted creators with this Actor, evaluate them properly with our **TikTok Audience Geography Scraper** - that is where you confirm whether a creator's audience matches your campaign region, language, and demographic. User Search opens the funnel; Audience Geography qualifies it; Followers & Following maps it.

***

### 🌐 Related scrapers

Build the complete creator-intelligence pipeline:

- [TikTok Audience Geography](https://apify.com/UnseenUser/tiktok-audience-geography-scraper) - evaluate shortlisted creators (the FLAGSHIP)
- [TikTok Followers & Following](https://apify.com/UnseenUser/tiktok-followers-following-scraper) - map the audience of qualified creators
- [TikTok Live Status Checker](https://apify.com/UnseenUser/tiktok-live-status-scraper) - monitor your final shortlist for live events

[See all scrapers by UnseenUser](https://apify.com/UnseenUser)

***

### 🔎 Target keywords

tiktok user search, tiktok creator discovery, find tiktok creators, tiktok user search api, influencer discovery tiktok, b2b creator lead gen, search tiktok users by keyword, tiktok influencer database

***

### 🔧 Technical Details

- Output: streamed via Apify dataset
- Formats: JSON, CSV, XLSX, or via Apify API / webhooks
- Retries: 3 with exponential backoff on 429/502/503/504
- Pagination: cursor-based, handled internally
- User-Agent: `OpusScale-Apify/1.0`

***

## ⚖️ Apify Actor - Terms of Service

**Version:** 4.0
**Effective Date:** May 5, 2026

***

### 0. ACCEPTANCE BY USE - IMPORTANT

**Read this section first.**

These Terms of Service ("Terms") form a binding legal agreement between you ("User," "you," "your") and UnseenUser, the Publisher of this Apify actor ("UnseenUser," "the Publisher," "we," "us," "our").

#### 0.1 How You Accept These Terms

You accept these Terms by **any of the following actions**, each of which constitutes a clear, affirmative act of acceptance:

- (a) **Running the Actor** - Initiating any execution of the Actor on the Apify platform
- (b) **Using any output** returned by the Actor for any purpose
- (c) **Continuing to access** the Actor's listing or documentation after these Terms are visible

#### 0.2 Continuing Acceptance

Each time you run the Actor or use its outputs, you reaffirm your acceptance of the then-current Terms. If you do not agree to these Terms or any subsequent update, you must stop using the Actor immediately.

#### 0.3 No Anonymous Acceptance

You cannot disclaim acceptance by:

- Failing to read these Terms before running the Actor
- Running the Actor through automated systems
- Sharing your Apify account with others who may not have read these Terms

By the act of running the Actor on Apify, you bind yourself, your organization (if applicable), and any individuals or systems acting on your behalf or under your authority.

#### 0.4 If You Do Not Accept

**If you do not agree to these Terms, you must not run the Actor.** No use is authorized without acceptance.

***

### PREAMBLE - UNDERSTANDING THE ARCHITECTURE

Before using the Actor, please understand the technical architecture of the service:

#### The Data Flow

```
You (User) -> Apify Platform -> Actor (software) -> Third-Party API -> Source Platform
                                                          |
You (User) <- Apify Platform <- Actor (software) <- Third-Party API
```

#### What Each Party Does

- **You (the User):** Run the Actor on the Apify platform with input parameters you choose.
- **Apify:** Operates the cloud infrastructure that hosts and executes Actors. Apify is a Czech-incorporated company (Apify Technologies s.r.o.) governed by its own Terms of Service.
- **The Publisher (us):** Publishes software code (the Actor) on Apify's platform. The Actor is a thin wrapper that translates your input into requests to a third-party API and returns the responses to you. **The Publisher does not operate scraping infrastructure. The Publisher does not store or retain data returned by the Actor. The Publisher does not see, log, or process the personal data of any individuals returned in the Actor's outputs beyond what is incidental to passing the data through.**
- **Third-Party API Provider:** An independent third-party company that operates scraping infrastructure and returns data from source platforms.
- **Source Platform:** TikTok, and other publicly visible platforms, whose publicly visible data is accessed by the Third-Party API Provider.

#### Why This Matters

Your relationship with the Publisher is that of a **software user** to a **software vendor**. The Publisher has the responsibilities of a software vendor (functional code, accurate documentation) and the limits of one (the Publisher is not responsible for how you use the data you obtain).

These Terms operate alongside but do not replace:

- Apify's Terms of Service and Acceptable Use Policy (governing your relationship with Apify)
- The Third-Party API Provider's Terms of Service (governing the underlying data infrastructure)
- Source Platform terms (TikTok, etc.) governing the public data accessed
- Applicable law in your jurisdiction and the jurisdictions of data subjects

These Terms incorporate the actor-specific addendum published below ("Addendum"). In the event of a conflict, the more restrictive provision applies.

***

### 1. NATURE OF THE SERVICE

#### 1.1 What the Actor Is

The Actor is a software program published on the Apify platform. The Actor:

- (a) Accepts structured input from you on the Apify platform
- (b) Translates that input into HTTP requests to a Third-Party API
- (c) Receives HTTP responses from that Third-Party API
- (d) Returns the response data to you in a structured format on the Apify platform

The Actor's source code is hosted on Apify's infrastructure. The Actor runs in Apify's cloud, not on the Publisher's servers. The Publisher operates no servers running the Actor.

#### 1.2 What the Actor Is Not

The Actor is **not**:

- (a) A scraping tool - the Publisher does not operate scraping infrastructure, proxies, headless browsers, or fake accounts
- (b) A direct connection to any source platform - connections to source platforms are made by the Third-Party API Provider
- (c) A data storage or data retention service - the Publisher does not maintain a database of any data the Actor returns
- (d) A licensed access channel to TikTok or any other source platform
- (e) Affiliated with, endorsed by, sponsored by, or authorized by any source platform

#### 1.3 The Publisher's Limited Role

The Publisher's role is limited to:

- (a) Designing and writing the Actor's source code
- (b) Publishing the Actor on the Apify Store
- (c) Maintaining the Actor (updating it when upstream schemas change)
- (d) Providing documentation and customer support via Apify's contact mechanism

The Publisher is a software vendor, similar to a developer who publishes an app on the Apple App Store or Google Play Store. The Publisher is not a data provider, data broker, data processor, or data controller for purposes of GDPR, CCPA, Israel's Privacy Protection Law, or equivalent.

#### 1.4 The Third-Party API Provider's Role

The Third-Party API Provider is an independent third-party company. They:

- (a) Operate the actual data scraping infrastructure
- (b) Maintain relationships with source platforms (or accept the operational risk of accessing public data without such relationships)
- (c) Provide their own Terms of Service governing their operations
- (d) Are responsible for compliance obligations relating to the data collection itself

The Publisher is a customer of this provider. The Publisher is not their agent, partner, or representative.

***

### 2. WHO MAY USE THE ACTOR

#### 2.1 Eligibility

You may use the Actor only if:

- (a) You are at least 18 years old or the age of majority in your jurisdiction
- (b) You have legal capacity to enter into binding contracts
- (c) You are not located in or resident of a country subject to comprehensive sanctions by the United States, European Union, United Kingdom, or Israel
- (d) You are not on any prohibited persons list

#### 2.2 User Representations

By using the Actor, you represent and warrant that:

- (a) **Truthful identity:** Information you provide about your identity and intended use is accurate
- (b) **Lawful intent:** Your intended use complies with applicable law in your jurisdiction
- (c) **Source platform compliance:** You will independently comply with the Terms of Service of any source platform whose data you obtain through the Actor
- (d) **Data subject rights:** Where Actor outputs include personal data, you will respect data subject rights under applicable law
- (e) **No prohibited use:** You will not use the Actor for any of the purposes prohibited in Section 4

These representations are continuous - they must remain true throughout your use.

***

### 3. PERMITTED USES

The Actor may be used for any lawful purpose, including:

- Market research and competitive analysis
- Academic research
- Journalism and investigative reporting
- Internal business intelligence
- Brand monitoring
- Recruitment research where consistent with applicable employment law
- Building products that further process publicly available information lawfully

Specific permitted uses for this Actor are described in the Addendum below.

***

### 4. PROHIBITED USES

You may not use the Actor for any of the following:

#### 4.1 Illegal Activity

Activity illegal under the law of your jurisdiction, the User's jurisdiction, or the jurisdiction of any data subjects.

#### 4.2 Harassment, Stalking, and Personal Targeting

- Compiling profiles for harassment, stalking, or doxxing
- Tracking individuals' movements or activities without their knowledge
- Building profiles of journalists, activists, dissidents, or vulnerable populations for retaliatory purposes

#### 4.3 Discrimination

- Using outputs for discriminatory employment, lending, housing, or insurance decisions based on protected characteristics
- Building lists for discriminatory purposes

#### 4.4 Spam and Unsolicited Commercial Communication

- Sending unsolicited marketing in violation of CAN-SPAM, CASL, GDPR, PECR, Israeli Anti-Spam Law, or equivalent laws
- Building "lead lists" from scraped contacts without proper consent infrastructure
- Reselling contact data for spam purposes

#### 4.5 Fraud and Deception

- Identity theft or impersonation
- Generation of fake reviews, testimonials, or coordinated inauthentic behavior
- Election interference or political disinformation
- Securities fraud

#### 4.6 Source Platform Abuse

- Using outputs to circumvent technical protection measures of source platforms
- Creating fake accounts on source platforms based on Actor outputs
- Vote manipulation, engagement manipulation, or platform algorithm gaming
- Building services that competitively substitute for source platforms

#### 4.7 Reselling the Actor's Service

- Reselling raw Actor outputs as your own data product or scraping-as-a-service
- Sharing your Apify credentials to provide third parties indirect access
- Building competing API services using Actor outputs

#### 4.8 AI Training Without Authorization

- Using Actor outputs as training data for commercial AI/ML models without separate licensing authority from the source platform

#### 4.9 Sensitive Targeting

- Specifically targeting or profiling based on health conditions, sexual orientation, religious beliefs, political opinions, or other sensitive characteristics
- Targeting children under 16 (or local age of consent for data processing)

#### 4.10 Privacy Law Violations

- Processing personal data of EU/UK/California/Israeli residents without complying with applicable privacy law
- Failing to honor data subject access, deletion, or objection requests
- Processing data for purposes incompatible with its publication context

***

### 5. SOURCE PLATFORM TERMS - YOUR RESPONSIBILITY

#### 5.1 Acknowledgment

The Actor accesses publicly visible data on third-party platforms ("Source Platforms"), in this case TikTok, through the Third-Party API Provider.

#### 5.2 Your Sole Responsibility

You acknowledge:

- (a) **You are solely responsible for ensuring your downstream use of data obtained through the Actor complies with the Source Platform's Terms of Service**
- (b) The Publisher makes no representation that any specific use is permitted under any Source Platform's terms
- (c) The Third-Party API Provider, not the Publisher, bears responsibility for the lawfulness of the data collection itself
- (d) You should review Source Platform terms before commercial use:
  - TikTok: https://www.tiktok.com/legal/page/global/terms-of-service/en

#### 5.3 Cease-and-Desist Compliance

If you receive a cease-and-desist letter or other legal demand from a Source Platform regarding your use of Actor outputs, you must:

- (a) Cease the contested use immediately
- (b) Notify UnseenUser within 48 hours via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser)
- (c) Cooperate with the Publisher as needed to mitigate
- (d) Not assert against the Publisher any claim arising from your inability to use the Actor for that Source Platform

***

### 6. DATA PROTECTION - REFLECTING ACTUAL ARCHITECTURE

#### 6.1 Roles Under Privacy Law

For purposes of GDPR, UK GDPR, CCPA, Israel's Privacy Protection Law (PPL) including Amendment 13, and equivalents:

- **You (the User) are the Data Controller** of any personal data you obtain through the Actor and subsequently process for your own purposes
- **The Third-Party API Provider** collects data from source platforms - they bear the responsibilities of data processors or controllers (depending on context) for the collection itself
- **The Publisher acts solely as a software vendor**, not as a data controller or processor, because the Publisher does not store, retain, or substantively process personal data - the Actor merely passes responses through

#### 6.2 No Data Retention by the Publisher

The Publisher confirms:

- (a) The Publisher does not maintain a database of personal data obtained through the Actor
- (b) The Actor passes data directly to you on the Apify platform - data does not flow through the Publisher's infrastructure
- (c) Apify's standard execution and operational logging may include limited information about Actor runs (input parameters, run duration, data volume) - this is governed by Apify's own privacy practices
- (d) The Publisher does not access, view, or analyze your Actor outputs except as needed for technical support if you specifically share them with the Publisher

#### 6.3 Your Obligations as Data Controller

Where your use of the Actor involves processing personal data, you are responsible for:

- (a) Establishing a lawful basis for your processing (consent, legitimate interest with documented balancing test, contract, etc.)
- (b) Providing transparent notice to data subjects as required by applicable law
- (c) Honoring data subject access, rectification, erasure, restriction, and portability requests
- (d) Implementing appropriate security measures
- (e) Conducting Data Protection Impact Assessments where required
- (f) Appointing a Data Protection Officer if your operations require one
- (g) Registering databases with applicable supervisory authorities
- (h) Honoring opt-out requests for direct marketing
- (i) Cross-border transfer safeguards where data crosses borders

#### 6.4 Israel's Amendment 13 - User Compliance

If your use of the Actor involves Israeli residents' personal data, you must comply with the Privacy Protection Law as amended (Amendment 13, effective August 14, 2025). These obligations are yours as the data controller, not the Publisher's as the software vendor.

#### 6.5 Sensitive Data Targeting Restrictions

You will not use the Actor to specifically target, profile, or build datasets focused on:

- Health or medical conditions
- Religious beliefs
- Political opinions
- Sexual orientation or gender identity
- Genetic or biometric data
- Criminal history
- Children under 16

***

### 7. INTELLECTUAL PROPERTY

#### 7.1 Actor Code

The Actor's source code, schemas, documentation, and branding are owned by the Publisher. You receive a limited, non-exclusive, non-transferable, revocable license to use the Actor for permitted purposes during your active subscription/run with Apify.

#### 7.2 Output Data

The Publisher claims no ownership over the public data the Actor returns. Source Platforms may have copyright, database rights, or other rights in their data; data subjects may have copyright in user-generated content. Your use of output data must respect these rights independently.

#### 7.3 Restrictions

You may not reverse engineer, decompile, or reuse the Actor's code in a competing actor.

#### 7.4 Feedback

Feedback you provide may be used by the Publisher to improve products without compensation to you.

***

### 8. PRICING AND PAYMENT

#### 8.1 Apify Platform Billing

Pricing is administered through Apify's pricing models. Apify processes all payments. Apify's payment terms govern refunds and disputes.

#### 8.2 Pricing Changes

The Publisher may change Actor pricing with at least 14 days' notice via the Actor's Apify listing.

#### 8.3 No Refunds for Misuse

If your access is suspended or terminated for breach of these Terms, you forfeit any unused balance and are not entitled to refunds.

***

### 9. SERVICE AVAILABILITY AND CHANGES

#### 9.1 No Uptime Guarantee

The Actor depends on:

- (a) The Apify platform
- (b) The underlying Third-Party API Provider
- (c) Source Platforms' continued public accessibility

Any of these may change behavior, restrict access, or become unavailable without notice. The Publisher makes no uptime guarantees.

#### 9.2 Service Discontinuation

The Publisher may discontinue the Actor at any time. Reasonable notice will be provided when feasible.

***

### 10. DISCLAIMERS

#### 10.1 "AS IS" Service

THE ACTOR IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR PURPOSE, NON-INFRINGEMENT, OR ACCURACY OF DATA.

#### 10.2 No Representation of Lawfulness

The Publisher makes no representation that your specific use of the Actor or the data it returns is lawful in your jurisdiction or under any Source Platform's terms. The burden of determining lawfulness for your use case is yours.

#### 10.3 No Endorsement of Source Content

Content returned by the Actor was created by third parties. The Publisher does not endorse, verify, or take responsibility for it.

***

### 11. LIMITATION OF LIABILITY

#### 11.1 Aggregate Liability Cap

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE AGGREGATE LIABILITY OF THE PUBLISHER FOR ALL CLAIMS RELATING TO THE ACTOR EXCEED THE GREATER OF:

- (a) ONE HUNDRED U.S. DOLLARS (US $100), OR
- (b) THE AMOUNTS YOU PAID THROUGH APIFY FOR USE OF THE ACTOR IN THE THREE (3) MONTHS IMMEDIATELY PRECEDING THE EVENT

#### 11.2 Excluded Damages

THE PUBLISHER IS NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR FOR LOSS OF PROFITS, REVENUE, OR DATA, EVEN IF ADVISED OF THE POSSIBILITY.

#### 11.3 Time Limit

Any claim must be brought within one (1) year of the event.

***

### 12. INDEMNIFICATION

#### 12.1 Your Indemnification of the Publisher

You agree to defend, indemnify, and hold harmless the Publisher from any:

- Claims arising from your use of the Actor
- Claims arising from your violation of these Terms
- Claims arising from your violation of any law (including privacy law)
- Claims arising from your violation of any Source Platform's Terms of Service
- Claims arising from your processing of personal data obtained through the Actor
- Reasonable attorneys' fees and costs of defending such claims

#### 12.2 Defense

The Publisher may assume defense at your expense. You will cooperate with the Publisher's defense.

#### 12.3 Scope

The indemnification covers reasonable, foreseeable third-party claims arising from your use. It does not extend to:

- Claims arising from the Publisher's gross negligence or willful misconduct
- Claims regarding the Actor's source code itself (those are the Publisher's responsibility)
- Claims regarding the Third-Party API Provider's data collection (those are their responsibility)

***

### 13. SUSPENSION AND TERMINATION

#### 13.1 Termination by the Publisher

The Publisher may terminate your access for material breach, illegal use, breach of warranty, or upon credible legal demand.

#### 13.2 Effects of Termination

Your license ends, you must cease use, and applicable provisions survive.

#### 13.3 Termination by You

You may stop using the Actor at any time on Apify.

***

### 14. DISPUTE RESOLUTION

#### 14.1 Informal Resolution First

Send a detailed written description of the dispute via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) and wait 60 days for resolution attempt before any formal claim.

#### 14.2 Governing Law

These Terms are governed by the substantive laws of the State of Israel, without regard to conflict of law principles.

#### 14.3 Exclusive Jurisdiction

Any dispute shall be brought exclusively in the competent civil courts of Tel Aviv-Jaffa, Israel.

#### 14.4 No Class Actions

You agree to bring claims only in your individual capacity.

#### 14.5 Attorneys' Fees

The prevailing party recovers reasonable attorneys' fees.

***

### 15. MISCELLANEOUS

#### 15.1 Entire Agreement

These Terms (with Addendum and incorporated documents) are the entire agreement.

#### 15.2 Severability

Unenforceable provisions are reformed to the minimum extent or severed.

#### 15.3 Assignment

You may not assign without the Publisher's consent. The Publisher may assign to affiliates, successors, or acquirers.

#### 15.4 Force Majeure

Neither party is liable for failure due to events beyond reasonable control, including changes by Source Platforms or the Third-Party API Provider, or actions by Apify.

#### 15.5 Third-Party Beneficiaries

Apify and the Third-Party API Provider are intended third-party beneficiaries of Sections 4 (Prohibited Uses), 5 (Source Platform Compliance), and 12 (Indemnification).

#### 15.6 Survival

Sections 0 (Acceptance), 4, 5, 6, 7, 10, 11, 12, 14, and 15 survive termination.

#### 15.7 Language

English controls. Translations are for convenience only.

#### 15.8 Publisher Identification for Legal Process

The Publisher operates on the Apify platform under the username **UnseenUser** (apify.com/UnseenUser). The Publisher is a registered legal entity. Upon receipt of valid legal process (subpoena, court order, or equivalent) directed through Apify's official channels, the Publisher's full legal identity may be disclosed as required by law. This Section ensures that you have a valid path to legal recourse if needed.

***

### 16. ACKNOWLEDGMENT

By using the Actor, you acknowledge that:

- (a) You have read these Terms
- (b) You understand the architecture: you are using software (the Actor) on Apify's platform that calls a third-party API
- (c) You accept responsibility for your use, including for compliance with Source Platform terms
- (d) Your indemnification obligations cover third-party claims arising from your use
- (e) Disputes are resolved in Israeli courts
- (f) The Publisher's identity, while not publicly disclosed in this listing, can be obtained through valid legal process via Apify

For questions, use UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) before running the Actor.

***

## 🛡️ Actor-Specific ToS Addendum - 🔍 TikTok User Search

This addendum supplements the Master Terms of Service V4.0 above. By running this Actor, you accept both the Master ToS and this addendum.

#### A. Architectural Disclosure

This Actor is a software wrapper. It accepts your input parameters, calls a single TikTok user-search endpoint via the Third-Party API Provider, and returns the response data to you on the Apify platform. UnseenUser does not store, log, or substantively process the data returned. The data flows from the Third-Party API Provider through Apify's runtime directly to you.

#### B. Nature of Data Returned

This Actor returns TikTok user profiles matching the search keyword. Each user includes: `unique_id` (@handle), `nickname`, `signature`/bio, `follower_count`, `following_count`, `avatar` URLs, plus an array of recent video items (`items[]`) for content vetting.

Where the Actor's output includes individual people's names, photos, contact details, or content authored by them, that data constitutes **personal data** subject to GDPR, CCPA, Israeli Privacy Protection Law (including Amendment 13), and equivalent privacy laws in your downstream processing - but **only in your hands as the data controller**, not in UnseenUser's hands as the software vendor.

#### C. Permitted Use Cases

You may use this Actor for the following purposes (non-exhaustive list):

- **Influencer marketing** - find creators in specific niches by keyword
- **Creator discovery** - research creators by name when you only have a partial match
- **Lead generation** - find creators who match your brand's target persona
- **Recruiter sourcing** - find creators with specific bio characteristics for opportunities
- **Competitive monitoring** - find creators who mention competitor brands in their bio
- **Verification** - confirm a creator's identity when given a name from another source

#### D. Specifically Prohibited Uses

In addition to Master ToS Section 4 prohibitions, you may NOT:

- Build mass cold-DM tools targeting every creator returned by a search
- Use search results to identify and harass creators whose content you disagree with
- Aggregate user search results across many queries to build a 'TikTok creator database' for resale (data broker activity)
- Use search for sensitive keywords (illness, mental health, vulnerable populations) to identify and target vulnerable creators
- Republish creator profile data as a substitute for TikTok's own platform
- Build 'people search' websites where creators can be looked up by real-world identity without consent

#### E. Platform Terms of Service Considerations

TikTok's Terms of Service prohibit automated extraction. TikTok has many minor creators - search may surface them. If TikTok issues a cease-and-desist, notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser).

#### F. Creator Profile Data - Personal Data

User search returns creator profiles. For individual creators (most of TikTok), this is personal data. Apply standard data protection:

- Document lawful basis under GDPR Article 6
- Honor data subject rights (access, deletion, objection)
- Comply with anti-spam laws for outreach (GDPR/PECR, Israeli Anti-Spam, CAN-SPAM, CASL)

#### G. Influencer Outreach Compliance

If you use this Actor for influencer outreach (the most common use case):

- Use creators' public business contact info (bio links, email in bio) - do not scrape email from elsewhere
- Disclose how you found them in your first message when asked
- Honor opt-outs immediately
- For EU/Israeli creators, you need stronger lawful basis - prior consent is safest

#### H. Minor Creators - Heightened Protection

TikTok has significant under-18 creators. Search results may include minors. You MUST:

- Filter out minor creators from your downstream commercial use unless you have valid parental consent
- Treat any creator with signals of minor status (school references, age-related content, "13" in bio) as minor by default
- Do not reach out to suspected minors for commercial purposes (COPPA, GDPR Article 8, Israeli Privacy Law)

#### I. Recent Videos Sample

Each search result includes `items[]` with the creator's recent videos. This is video content data with separate copyright considerations:

- Do not republish video content
- Do not train AI on the videos
- Aggregated metrics (follower count, engagement rate) are fine - these are facts

#### J. Search Result Reliability

User search returns "best match" results, not exhaustive matches. Limitations:

- Some highly-followed creators may not appear for generic keywords (TikTok's search algorithm)
- Recent creators may rank higher than relevance suggests
- Verification status is shown but does not guarantee authenticity (parody accounts, verified scammers exist)

Do not represent search results as authoritative "is this the real person" verification.

#### K. Aggregation Limit

| Use | Status |
|---|---|
| Search for "fashion influencer" to find candidates | Permitted |
| Search across 50 keywords and aggregate ~500 creators for influencer database | Permitted with lawful basis |
| Building a comprehensive TikTok creator search engine that competes with TikTok | Likely violates TikTok ToS |
| Selling "creator databases" with names, contacts, and engagement data | Data broker activity - high exposure |

***

### 📑 Appendix - Document Version History

| Version | Date | Summary |
|---------|------|---------|
| 1.0 | May 5, 2026 | Initial publication |
| 2.0 | May 5, 2026 | Hardened (over-broad - treated User as data broker) |
| 3.0 | May 5, 2026 | Architecturally accurate - Publisher as software vendor |
| 4.0 | May 5, 2026 | **Anonymous Publisher.** All personally identifying information removed. Acceptance-by-Use mechanism formalized. |

***

*These Terms reflect best practices for anonymous Apify actor publishing as of May 2026. Not a substitute for legal advice. Consult qualified Israeli commercial counsel before deploying.*

For questions, use UnseenUser's Apify profile contact form: https://apify.com/UnseenUser

# Actor input Schema

## `queries` (type: `array`):

One or more keywords or usernames to search. Add a single entry for a one-off search, or many entries to run them all in one bulk run. Leading '@' is stripped automatically. Duplicates are removed.

## `max_pages` (type: `integer`):

Maximum pages of results to fetch per query. Each page returns roughly 10-20 creators. Default 20 (about 200-400 creators per query).

## `min_follower_count` (type: `integer`):

Filter out users with fewer followers than this value. Default 0 means no filter.

## `exclude_unverified` (type: `boolean`):

If true, exclude unverified accounts from the results.

## `auto_expand_query` (type: `boolean`):

TikTok's no-login user search caps at roughly 50-100 best-match results per query. Turn this ON to automatically run each base query against ~60 variants (e.g. 'Michael' becomes 'Michael fitness', 'Michael fashion', 'Michael nyc', 'Michael london', '@Michael', etc.). Results are de-duplicated by @handle across the whole run, so you typically get 10x-30x more unique creators per base query. Cost scales with the number of variants - each variant runs the same pagination as a normal query.

## `deep_search` (type: `boolean`):

Default false. When ON, each query is run against THREE different TikTok search endpoints in sequence: (1) user search, (2) keyword video search (extracting unique authors), (3) 'Top' search (extracting unique authors). Each endpoint exposes a different pool of best-match results, so combining them typically yields 10x-50x more unique creators per query than user search alone. Results are de-duplicated by @handle across all pools. Each \_metadata.source field on every output row tells you which pool surfaced that creator ('user\_search' | 'keyword\_video' | 'top\_search'). Note: creators discovered via video pools may have less rich data (follower\_count is often 0) because the author object embedded in a video is leaner than the user-search response. Cost scales linearly - deep\_search uses roughly 3x more credits per query.

## `allow_duplicates` (type: `boolean`):

Default false. When false, the Actor de-duplicates by @handle across pages so each creator appears at most once. Turn ON only if you suspect pagination is stuck and want to see the raw upstream rows including repeats. With this flag on, the Actor will not stop early when a page returns only duplicates.

## Actor input object example

```json
{
  "queries": [
    "fashion influencer",
    "vegan recipes",
    "@charlidamelio"
  ],
  "max_pages": 20,
  "min_follower_count": 0,
  "exclude_unverified": false,
  "auto_expand_query": false,
  "deep_search": false,
  "allow_duplicates": false
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("unseenuser/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 = {}

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

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

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

```

## CLI example

```bash
echo '{}' |
apify call unseenuser/tiktok-user-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=unseenuser/tiktok-user-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok User Search Scraper - Find Creators [NO LOGIN] ✅",
        "description": "Search TikTok users and creators by keyword. Get handles, bios, follower counts, and recent videos. Built for creator discovery, influencer research, and lead generation by topic or niche. No login, no cookies. Pair with our Followers Scraper to map full audiences.",
        "version": "0.0",
        "x-build-id": "mufGFJNd9nvNgSuoj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/unseenuser~tiktok-user-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-unseenuser-tiktok-user-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/unseenuser~tiktok-user-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-unseenuser-tiktok-user-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/unseenuser~tiktok-user-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-unseenuser-tiktok-user-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",
                "required": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Search queries / usernames",
                        "minItems": 1,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "One or more keywords or usernames to search. Add a single entry for a one-off search, or many entries to run them all in one bulk run. Leading '@' is stripped automatically. Duplicates are removed.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "max_pages": {
                        "title": "Max pages per query",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum pages of results to fetch per query. Each page returns roughly 10-20 creators. Default 20 (about 200-400 creators per query).",
                        "default": 20
                    },
                    "min_follower_count": {
                        "title": "Minimum follower count",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Filter out users with fewer followers than this value. Default 0 means no filter.",
                        "default": 0
                    },
                    "exclude_unverified": {
                        "title": "Exclude unverified accounts",
                        "type": "boolean",
                        "description": "If true, exclude unverified accounts from the results.",
                        "default": false
                    },
                    "auto_expand_query": {
                        "title": "Auto-expand each query into many variants",
                        "type": "boolean",
                        "description": "TikTok's no-login user search caps at roughly 50-100 best-match results per query. Turn this ON to automatically run each base query against ~60 variants (e.g. 'Michael' becomes 'Michael fitness', 'Michael fashion', 'Michael nyc', 'Michael london', '@Michael', etc.). Results are de-duplicated by @handle across the whole run, so you typically get 10x-30x more unique creators per base query. Cost scales with the number of variants - each variant runs the same pagination as a normal query.",
                        "default": false
                    },
                    "deep_search": {
                        "title": "Deep search (combine user + video + top-search pools)",
                        "type": "boolean",
                        "description": "Default false. When ON, each query is run against THREE different TikTok search endpoints in sequence: (1) user search, (2) keyword video search (extracting unique authors), (3) 'Top' search (extracting unique authors). Each endpoint exposes a different pool of best-match results, so combining them typically yields 10x-50x more unique creators per query than user search alone. Results are de-duplicated by @handle across all pools. Each _metadata.source field on every output row tells you which pool surfaced that creator ('user_search' | 'keyword_video' | 'top_search'). Note: creators discovered via video pools may have less rich data (follower_count is often 0) because the author object embedded in a video is leaner than the user-search response. Cost scales linearly - deep_search uses roughly 3x more credits per query.",
                        "default": false
                    },
                    "allow_duplicates": {
                        "title": "Allow duplicate creators across pages (debug)",
                        "type": "boolean",
                        "description": "Default false. When false, the Actor de-duplicates by @handle across pages so each creator appears at most once. Turn ON only if you suspect pagination is stuck and want to see the raw upstream rows including repeats. With this flag on, the Actor will not stop early when a page returns only duplicates.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
