# Douyin User Search Scraper (抖音用户搜索) (`quarra/douyin-user-search-scraper`) Actor

Find Douyin (抖音) accounts by keyword: nickname, Douyin ID, followers, verification, live status, and the full public profile included (bio, total likes, videos, following, shop). Chinese or English keywords, follower and verified filters. No login or API key needed.

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

## Pricing

from $3.00 / 1,000 accounts

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

## Douyin User Search Scraper (抖音用户搜索)

Search Douyin (抖音) accounts by keyword, without a Douyin account, login or API key. Type one or more keywords, in
Chinese or English; the run reads Douyin's account results page after page and delivers each account with its link,
name, Douyin ID, follower count and verification, then opens its public profile for the bio, total likes received,
number of videos, following count and shop. Export as JSON, CSV or Excel, or read it through the Apify API.

**$3 per 1,000 accounts, full profile included**, plus a small start fee per run. An account whose profile Douyin did
not serve is delivered free. Accounts removed by your filters, duplicates and failed searches are not charged.

### How deep it goes

Measured on Apify on 17 October 2026, **Max results per keyword** 100, with full profiles:

| Keyword | Accounts delivered |
|---|---|
| 咖啡 | 42 |
| 健身教练 | 90 |
| fashion | 85 |
| 美妆 | 59 |
| **4 keywords in one run, 65 s** | **276**, every profile read |

Douyin decides where its account search ends, and the end moves from one run to the next: the same four keywords
gave 269 to 325 accounts over four runs that day.

Douyin's web search shows a limited number of accounts per keyword, then says there are no more. To go further, turn
on **Search related keywords**: when a keyword runs out, the run also searches the related searches Douyin suggests for
it (up to 5), and each account says which search found it (`searchedAs`).

### Quick start

1. Type one or more keywords in **Keywords**, one per line (`咖啡`, `健身教练`, `fashion`).
2. Set **Max results per keyword** (50 by default).
3. Click **Start** and read the accounts in the run's **Output** tab.

Like any Apify Actor, it can also be run and read through the Apify API, scheduled, and connected to webhooks, Make,
Zapier, n8n or Apify's MCP server for AI agents.

### Inputs

- **Keywords**: one per line, in Chinese or English. A Douyin search link works too. The same keyword entered more than
  once is searched once.
- **Max results per keyword**: in Douyin's order, the most relevant first.
- **Search related keywords** (off by default): see above.
- **Include profile details** (on by default): bio, likes received, video count, following count, playlists, shop.
  Turn it off for a faster run with the search data only; an account costs the same with or without it.
- **Min followers**: only accounts with at least this many followers (checked again on the profile's count when the
  profile is read).
- **Verified only**: only accounts that show a Douyin certification badge (a person, a brand, a shop, a media).
- **Max results**: total accounts the run delivers, all keywords together, counted exactly.

Example, through the API:

```json
{
  "keywords": ["咖啡", "健身教练", "fashion"],
  "maxResultsPerKeyword": 50,
  "includeProfileDetails": true,
  "minFollowers": 10000,
  "maxItems": 150
}
```

### Output

One record per account. A real one, from 17 October 2026:

```json
{
  "type": "account",
  "status": "ok",
  "keyword": "fashion",
  "position": 4,
  "userId": "92559053286",
  "secUid": "MS4wLjABAAAAaBQi1By2GlO-3ZsqT890Unu1cP-rVkgOPqRugz0-Yq0",
  "username": "iffashion",
  "fullName": "iffashion",
  "url": "https://www.douyin.com/user/MS4wLjABAAAAaBQi1By2GlO-3ZsqT890Unu1cP-rVkgOPqRugz0-Yq0",
  "avatarUrl": "https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/mosaic-legacy_729e00007a7c7ad2cb24.jpeg?…",
  "followerCount": 3083749,
  "isVerified": true,
  "verification": "店铺账号",
  "isBusiness": true,
  "isLive": false,
  "bio": "if姐和你分享所有爱与美好❤",
  "likesReceived": 267225975,
  "videoCount": 6216,
  "followingCount": 91,
  "playlistCount": 4,
  "hasShop": true,
  "isPrivate": false,
  "profileStatus": "ok",
  "searchedAs": "fashion",
  "scrapedAt": "2026-10-17T06:53:12.659Z"
}
```

Fields that need a word of explanation:

- `secUid` is the stable ID of the account in Douyin links (`url`); `username` is the Douyin ID the user chose, and
  can change; `userId` is Douyin's numeric ID.
- `isVerified` is true when Douyin shows a certification badge on the account, and `verification` is the label it shows
  under the name (a job, a brand, a shop, a media). `isBusiness` marks an organization or shop account (its badge, when
  it has one, is Douyin's blue one; a person's is yellow). Accounts without a badge have `isVerified` false and no
  `verification`.
- `likesReceived` is the total of likes on all the account's videos; `videoCount` its number of public videos;
  `playlistCount` its collections (合集).
- `hasShop`: the account sells through Douyin's shop. `isLive`: it was live when the search ran. `isPrivate`: its
  videos are visible to its followers only.
- `profileStatus`: `ok` (profile read), `unavailable` (Douyin has no public profile for this account any more),
  `failed` (Douyin did not serve the profile at that moment), `notRequested` (option off). An `unavailable` or `failed`
  account is delivered with its search data and is not charged; the status message says how many.
- `position` is the account's rank for that keyword in this run (1 = first shown by Douyin).
- `avatarUrl` is the profile picture at 1080 × 1080.
- A search that fails gets an `error` record, free: `error` says why, `retryable` says if a later run may work.

No gender, age, birthday or location is delivered, even when an account shows them.

The run summary (accounts per keyword, related searches Douyin suggested, filtered and duplicate counts, profiles read,
why the run stopped) is the `OUTPUT` record of the run's key-value store.

### Go further with the other Douyin scrapers

- [Douyin Video Search Scraper](https://apify.com/quarra/douyin-video-search-scraper): videos instead of accounts, by
  keyword.
- [Douyin Transcript Scraper](https://apify.com/quarra/douyin-transcript-scraper): what is said in a video, as text.
- [Douyin Comments Scraper](https://apify.com/quarra/douyin-comments-scraper): the comments of a video.

### Pricing

Pay per event:

| Event | Price |
|---|---|
| Account, with its full public profile | $3 per 1,000 |
| Run start | $0.005 per GB of memory (1 GB minimum; $0.005 at the default 512 MB) |

Never charged: accounts delivered without their profile (`profileStatus` `failed` or `unavailable`), accounts removed
by your filters, an account found by two keywords (delivered once), error records. Set
**Maximum cost per run** in the run options and the run stops before going over it.

### Limits

- Douyin's account search has no sort options for visitors: the order is Douyin's relevance order, and the followers
  and verified filters are applied by the run on what the search returns.
- The videos of an account are not listed: this Actor finds accounts. Their video count is in `videoCount`.

### FAQ

**Do I need a Douyin account or to log in?** No.

**Does it work with TikTok?** No, Douyin only (the Chinese app, douyin.com).

**Can I search in English?** Yes. Douyin is a Chinese platform, so a Chinese keyword usually finds more accounts.

**Why fewer accounts than my limit?** Douyin's search ran out for that keyword; the run says so in its status and in
the run summary. Turn on **Search related keywords**, or add more precise keywords.

**What if the run is restarted by the platform (migration or reboot)?** It resumes where it was: accounts already in
the dataset are not delivered or charged again.

**What if Douyin changes its pages?** The run fails with an error that says so, instead of reporting "no accounts",
and nothing is charged but the start.

**Is it legal?** It collects public account information shown to any visitor of Douyin's search and profile pages,
and leaves out gender, age and location. Check the rules that apply to your use of the data, especially for personal
data.

**Does the Actor send anything to Quarra?** Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.

# Actor input Schema

## `keywords` (type: `array`):

One keyword per line, in Chinese or English (咖啡, 健身, 旅行博主, travel). A Douyin search link works too. Each keyword is searched like the app's Users tab, most relevant accounts first.

## `maxResultsPerKeyword` (type: `integer`):

Accounts per keyword. Douyin's web search shows about 40 to 70 accounts per keyword (measured); turn on 'Search related keywords' to go further.

## `searchRelatedKeywords` (type: `boolean`):

When a keyword runs out before its limit, also search the related keywords Douyin suggests for it (up to 5), and count their results for that keyword. Each result keeps the keyword actually searched in searchedAs.

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

Add each account's public profile: bio, total likes received, number of videos, following, playlists, shop. Included in the price; turn it off for faster runs.

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

Only accounts with at least this many followers.

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

Only accounts with a Douyin verification (blue or yellow badge: person, brand, media).

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

Total number of accounts delivered by the run, all keywords together, counted exactly.

## `searchType` (type: `string`):

Set by the Actor.

## Actor input object example

```json
{
  "keywords": [
    "咖啡",
    "travel"
  ],
  "maxResultsPerKeyword": 20,
  "searchRelatedKeywords": false,
  "includeProfileDetails": true,
  "verifiedOnly": false,
  "maxItems": 40,
  "searchType": "accounts"
}
```

# Actor output Schema

## `results` (type: `string`):

Every result with all its fields, and free error records.

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

A table with one row per result.

## `summary` (type: `string`):

Counts per keyword, related searches, why the run stopped, and errors.

# 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 = {
    "keywords": [
        "咖啡",
        "travel"
    ],
    "maxResultsPerKeyword": 20,
    "maxItems": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarra/douyin-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 = {
    "keywords": [
        "咖啡",
        "travel",
    ],
    "maxResultsPerKeyword": 20,
    "maxItems": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("quarra/douyin-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 '{
  "keywords": [
    "咖啡",
    "travel"
  ],
  "maxResultsPerKeyword": 20,
  "maxItems": 40
}' |
apify call quarra/douyin-user-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,quarra/douyin-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/5Ohk58NU0JzmJEn34/builds/37yQQqynwnD1JfZpc/openapi.json
