# Douyin 抖音 Search Scraper (`data_wiki/douyin-search-scraper`) Actor

Scrape Douyin (抖音) search results by keyword, hashtag or link, no login or cookies. Get video text, author, music, likes, comments, shares, hashtags and download links. Filter by sort, date and length. Bulk keywords, no duplicates. JSON for trend and market research.

- **URL**: https://apify.com/data_wiki/douyin-search-scraper.md
- **Developed by:** [Data WiKi](https://apify.com/data_wiki) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

### 🚀 What is Douyin 抖音 Search Scraper?

**Douyin 抖音 Search Scraper** is a **Douyin search scraper** that extracts videos and image posts from [Douyin](https://www.douyin.com) (抖音) search results. Just **enter keywords, hashtags or Douyin search links** and get one clean row per post with text, author, music, likes, comments, shares, hashtags and media links in JSON, CSV or Excel, without scrolling and copying by hand. No Douyin account is needed, because the Actor reads only public search results that any visitor can see.

- 🎯 **Keyword and hashtag search:** look up Chinese or English words, brand names, emoji and hashtags such as `#美食`, all in one Douyin keyword scraper.
- 📈 **Ready-made engagement data:** every row carries likes, comments, shares, saves and author details for trend and market work.
- 🧹 **Clean results:** a video found by two keywords is saved only once, and videos outside your date or length filter are left out.

> 💡 Need creator pages instead of search results? Try the [profile scraper for Douyin creators](https://apify.com/data_wiki/douyin-profile-scraper-followers-posts-hashtags) for followers, bios and posts of public creators.

This Douyin search scraper is also known as an Apify Douyin scraper, Douyin scraper, Douyin video scraper, Douyin web scraper or Douyin crawler, and it works as an 抖音 scraper and 抖音搜索 scraper for Chinese keywords.

### ✨ What can this Douyin 抖音 Search Scraper do?

- 🔎 **Search by keyword, hashtag or link:** paste a Douyin search link and the keyword inside it is searched. Plain words in the links field are treated as keywords.
- 📦 **Bulk input:** search many keywords in one run and choose how many are searched at the same time (1 to 10).
- 🏆 **Sort:** relevance (default), most liked first or newest first.
- 📆 **Date filter:** any time, last 24 hours, last week or last 6 months.
- ⏳ **Length filter:** any length, under 1 minute, 1 to 5 minutes or over 5 minutes.
- 📊 **Depth:** ask for up to 2,000 videos per keyword, or 0 to collect everything Douyin returns.
- 🎬 **Videos and image posts:** image posts return their slides in `images` and are marked `type: "slideshow"`.
- ⚡ **Live results:** every video is saved to the dataset as soon as it is found, and a spend limit stops the run cleanly while keeping what was saved.
- 📥 **Export** the data in **JSON, CSV, Excel, HTML, XML** and other Apify dataset formats.
- 🔌 **Use the API**, schedules, webhooks and **integrations with other apps**.
- 🧠 **Memory:** the Actor is configured with 4096 MB.

### 📊 What data can this Douyin 抖音 Search Scraper extract?

As a Douyin video data scraper, it splits every video into nine tables in the Output tab, so you open only what you need.

| | | |
|---|---|---|
| 🎬 Cover, link and post type | 📝 Text, caption and titles | 📅 Posting date and time |
| 👤 Author name, handles and bio | ✅ Verified status and verification text | 📊 Followers and total likes received |
| 💙 Likes, comments, shares and saves | ▶️ Plays, downloads and forwards | 🎞️ Video size, length and format |
| 🎵 Sound title, artist and owner | #️⃣ Hashtags, topic tags and mentions | 📍 Region, city and place |
| 🔐 Duet, stitch, download and comment switches | 🛍️ Ad and shopping flags | 🔗 Search keyword, position and share links |

> ⚠️ **Note:** search results hide some numbers. Fields such as `playCount` and an author's `followingCount` are often `null` or `0` instead of a made-up value. Links to video, audio and cover files can expire, and `videoMeta.cdnUrlExpiresAt` tells you when. The `url` of each post is the stable link.

#### Data Douyin 抖音 Search Scraper can't extract

Douyin is the Chinese counterpart of TikTok, but this Actor works on Douyin only.

This Actor does not scrape comments, transcripts, hot-search lists, product listings or creator pages, and it does not download media files (the fields `videoFile`, `coverFile` and `slideshowFiles` are part of the dataset layout but always empty; you get links). For creator profiles use the [creator profile scraper](https://apify.com/data_wiki/douyin-profile-scraper-followers-posts-hashtags). A Douyin comments scraper, Douyin transcripts scraper, Douyin video downloader or Douyin product search scraper is a different tool.

### 💰 How much does it cost to scrape Douyin search results?

Douyin 抖音 Search Scraper uses **pay-per-event pricing**: you pay for each saved result plus a tiny start fee per run, with no subscription to the Actor. The result price depends on your Apify plan tier.

#### Base pricing

- **Results** (`main_result`): charged for each video or image post saved to the dataset.
- **Actor Start** (`apify-actor-start`): $0.00005 per event, one event per GB of memory. This Actor is configured with 4096 MB (4 GB), so 4 x $0.00005 = $0.0002 per run.

#### Pricing by plan tier

Price per 1,000 results = price per result x 1,000.

| Plan tier | Price per result | Results (per 1,000) |
|---|---|---|
| 🆓 Free | $0.0045 | 0.0045 x 1,000 = $4.50 |
| 🥉 Bronze | $0.004 | 0.004 x 1,000 = $4.00 |
| 🥈 Silver | $0.0036 | 0.0036 x 1,000 = $3.60 |
| 🥇 Gold and above | $0.0032 | 0.0032 x 1,000 = $3.20 |

The start fee of $0.0002 per run comes on top. For example, 1,000 results on the Gold tier cost 0.0032 x 1,000 = $3.20, plus $0.0002 for the start, which is $3.2002 in total. Set a spend limit on the run and the Actor stops cleanly when it is reached, keeping the videos already saved.

#### Why pay-per-event?

- **Transparent:** you pay for what you use
- **Predictable:** you can estimate the cost before you start
- **No idle charges:** waiting time is not billed

### 🛠️ How do I use Douyin 抖音 Search Scraper to scrape Douyin search results?

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open **Douyin 抖音 Search Scraper** in the Apify Store.
3. Add keywords, hashtags or Douyin search links, and choose sort, posting period and video length if you need them.
4. Set **Max videos per keyword** and click **Start**.
5. Open the **Output** tab and download the data in **JSON, CSV, Excel, HTML or XML**, or fetch it by API.

To export Douyin data to CSV, choose CSV in the dataset export menu after the run. To monitor a Douyin hashtag, set `sort` to `latest`, `publishTime` to `one_day` and put the run on a daily [Apify schedule](https://docs.apify.com/platform/schedules).

### ⬇️ Input

You only need `keywords` or `urls` to start. Everything else has a default: 10 videos per keyword, relevance sort, any time, any length, 2 keywords at once, 3 retries and a check cap of 20,000 videos per keyword. Bulk input is supported.

Here is a simple example input (the newest videos of the last week for two keywords):

```json
{
    "keywords": ["美食", "iphone"],
    "maxResultsPerQuery": 50,
    "sort": "latest",
    "publishTime": "one_week"
}
```

Open the **Input** tab for a full explanation of every field.

#### Search keywords and links

Enter one keyword per line: Chinese or English words, brand names, emoji or hashtags like `#美食`. Good: `#美食`, `iphone 15`. Bad: a link to a single video or to another site, because only Douyin search links are accepted and other links are skipped with a note in the log. If no keyword and no usable link is given, the run stops with a message asking you to add one.

#### Max videos per keyword

Allowed values are 0 to 2000 (default 10). Use 0 to collect everything Douyin returns for the keyword. Values above 2000 are lowered to 2000. Douyin may return fewer videos than requested, so large numbers depend on how many matching videos exist.

#### Filters: sort, posting period and length

`sort` accepts `general`, `most_liked` or `latest`. `publishTime` accepts `unlimited`, `one_day`, `one_week` or `half_year`. `duration` accepts `unlimited`, `under_1m`, `one_to_five` or `over_5m`. Every returned video is checked against your date and length filters, and videos that do not match are left out and counted in the summary. Very strict filters can leave you with few or no results.

#### Max videos checked per keyword

A safety cap (default 20,000, 0 means no cap). The search for a keyword stops when this many videos have been looked at while matching your filters.

#### Speed and reliability

`maxConcurrency` (1 to 10, default 2) sets how many keywords are searched in parallel; lower it if you see many slow-downs. `maxRetries` (0 to 10, default 3) sets how often a failed or blocked request is retried.

#### Proxy

The Proxy field is optional. If a request is blocked, the Actor switches to another connection automatically. You can also set your own proxy.

### ⬆️ Output

Results appear in the **Output** tab as nine tables (overview, content and flags, author, engagement, video quality, music, tags, permissions and commerce, search details) and in the dataset, where you can pick or leave out fields before exporting as **JSON, CSV, Excel, HTML or XML**. A `SUMMARY` record in the key-value store holds the run counts: keywords, videos saved, videos billed, duplicates removed and videos skipped because of your filters. Dates use Beijing time.

#### Example output (illustrative)

```json
{
    "id": "1234567890123456789",
    "url": "https://www.douyin.com/video/1234567890123456789",
    "type": "video",
    "text": "Example caption #美食",
    "createDate": "2026-01-01",
    "authorMeta": { "name": "Example author", "verified": false, "followersCount": 1000 },
    "videoMeta": { "duration": 30000, "width": 1080, "height": 1920, "format": "mp4" },
    "musicMeta": { "title": "Example sound", "isOriginal": true },
    "statistics": { "diggCount": 100, "commentCount": 10, "shareCount": 5, "collectCount": 20 },
    "hashtags": [{ "id": "1111111111111111", "name": "美食" }],
    "searchKeyword": "美食",
    "searchPosition": 1
}
```

This is a shortened example with made-up values, not a real run.

#### Output fields explained

| Field | Meaning |
|---|---|
| 🔗 `id`, `url`, `shareUrl` | Video ID and links to the post |
| 🎬 `type` | `video` or `slideshow` (image post) |
| 📝 `text`, `caption`, `itemTitle` | Post text, caption and title |
| 📅 `createDate`, `createTime` | Posting date (Beijing time) and Unix time |
| 👤 `authorMeta` | Author name, IDs, verification, bio, followers, totals and avatar |
| 🎞️ `videoMeta` | Length in milliseconds, size, format, video links, cover images and quality levels |
| 🎵 `musicMeta` | Sound title, artist, owner and covers |
| 📊 `statistics` | Likes (`diggCount`), comments, shares, saves, plays and other counters |
| #️⃣ `hashtags`, `videoTags` | `hashtags` are written by the creator; `videoTags` are topic categories assigned by Douyin |
| 🔐 `permissions`, `interaction`, `commerce` | What viewers may do, plus ad and shopping flags |
| 🔎 `searchKeyword`, `searchPosition`, `inputKeyword` | The keyword that found the video and its position in the results |

### 🎯 Use cases

- 📈 **Trend research:** search a topic and sort by most liked to start Douyin trend research.
- 🗓️ **Douyin trends 2026:** a scheduled run keeps you current on what is rising from week to week.
- 💃 **Dance and music:** Douyin dance trends only need a dance keyword.
- 💄 **Beauty and makeup:** follow Douyin beauty trends or Douyin makeup trends with product or look keywords.
- 👗 **Style:** Douyin fashion trends work the same way with clothing keywords.
- 🏷️ **Hashtag work:** check Douyin hashtags, including popular Douyin hashtags, for your brand, then use `hashtags` and `videoTags` to see how videos are labelled.
- 🛍️ **Market research:** Douyin market research without manual scrolling, using `statistics` and `text` for products and brands.
- 👥 **Influencer scouting:** Douyin influencer research starts from the videos that already rank for a topic. The `authorMeta` fields give followers and verification, then go deeper with the [followers and posts scraper](https://apify.com/data_wiki/douyin-profile-scraper-followers-posts-hashtags).
- 🔔 **Monitor Douyin hashtag activity:** run daily with `latest` and a one-day period to see new videos for a tag. For Douyin hot search lists or Douyin creator analytics beyond the author fields in each row, other tools are needed.
- 🔥 **Top and fresh videos:** find Douyin most liked videos with `sort` set to `most_liked`, or the Douyin newest videos by keyword with `latest`.
- 🤖 **Data for AI:** collect Chinese short video data and TikTok China data as structured JSON, for example as Douyin data for LLM pipelines or search indexes.
- 🎵 **Sound analysis:** compare which sounds appear for the same keyword using `musicMeta`.

### 🔗 What are other tools for Douyin and short video data?

- [Douyin profile scraper](https://apify.com/data_wiki/douyin-profile-scraper-followers-posts-hashtags): public creator profiles with followers, bio, posts, hashtags and engagement
- [Instagram hashtag scraper](https://apify.com/data_wiki/instagram-hashtag-scraper): public Instagram reels by hashtag or keyword with plays, likes, comments and creator data
- [Facebook comment scraper](https://apify.com/data_wiki/facebook-comment-scraper): comments and replies from public Facebook posts, reels, videos and photos
- [public Facebook group scraper](https://apify.com/data_wiki/facebook-group-scraper): posts, comments and member counts from public Facebook groups
- Scraped site: [Douyin](https://www.douyin.com). Platform help: [Apify documentation](https://docs.apify.com/).

### ❓ Frequently asked questions

#### What is a Douyin search scraper?

A Douyin search scraper automates the Douyin search box. You give it keywords, hashtags or links, and it returns the videos found as structured data instead of you scrolling and copying by hand. This Douyin search scraper Apify Actor runs on Apify, so it also acts as a Douyin data extractor and Douyin scraper API through the Apify API.

#### How does Douyin 抖音 Search Scraper work?

You give it keywords, hashtags or Douyin search links plus optional filters. It reads the public search results for each keyword, checks every video against your filters, skips duplicates and saves one row per video or image post to the dataset.

#### Do I need a Douyin account or a Douyin scraper no login option?

No. It is a Douyin scraper no login tool: it reads public data that any visitor can see, and you only need an Apify account.

#### Can I search Douyin by hashtag?

Yes. Enter the hashtag as a keyword, for example `#美食`, or paste a search link. This works as a Douyin hashtag scraper for the videos that Douyin returns for that tag.

#### How many videos can I get per keyword?

Up to 2,000 per keyword, or 0 to collect everything Douyin returns. Douyin may return fewer than requested for a keyword, and videos outside your filters are left out.

#### Why am I getting fewer results than expected?

Douyin ran out of matching videos for that keyword and filters, the filters were very strict, your "Max videos checked per keyword" cap was reached, or other keywords already returned the same videos. The log and the `SUMMARY` record show how many were saved, skipped and removed as duplicates. In rare cases a keyword may return about 50 videos.

#### Why is `playCount` empty or 0?

Search results often hide the view count, so the value stays as Douyin sends it instead of being guessed.

#### Do I need proxies?

No. The Actor starts without a proxy and switches to another connection automatically if Douyin blocks a request. You can also set your own proxy in the Proxy field.

#### Is there a Douyin search API?

Yes, in the sense that you send input to this Douyin search scraper and get JSON back. Use the Apify API and the `apify-client` packages for Node.js and Python (`https://apify.com/data_wiki/douyin-search-scraper/api`). Unlike a Douyin scraper GitHub project, you do not host or maintain any code; scheduling, storage and the API are included. A Douyin scraper Python example:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("data_wiki/douyin-search-scraper").call(
    run_input={"keywords": ["美食"], "maxResultsPerQuery": 50, "sort": "latest"}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["id"], item["statistics"]["diggCount"])
```

#### Can I integrate Douyin 抖音 Search Scraper with other apps?

Yes. Through the Apify platform you can connect it with Make, Zapier, n8n, Slack, Airbyte, GitHub, Google Sheets and more, or use webhooks to react when a run finishes. See the [Apify integrations documentation](https://docs.apify.com/platform/integrations).

#### Can I use Douyin 抖音 Search Scraper through MCP?

Yes. The hosted Apify MCP server (`https://mcp.apify.com`) lets AI agents find an Actor with `search-actors`, check it with `fetch-actor-details` and run it with `call-actor`.

#### Is it legal to scrape Douyin data?

The Actor collects only publicly visible data and does not read private or login-only content. You are responsible for following Douyin's terms, privacy laws such as GDPR and CCPA, and local laws when you use the data. This is not legal advice.

#### How do I choose the best Douyin scraper?

Check which data you need. For keyword and hashtag search with sort, date and length filters, use this Actor as your Douyin search results scraper, and if you came looking for a Douyin TikTok scraper, this is the Douyin side of it. For creator profiles use the [Douyin creator data scraper](https://apify.com/data_wiki/douyin-profile-scraper-followers-posts-hashtags).

#### What if Douyin changes?

Douyin can change at any time, which may affect results. If something breaks, tell us through an issue or the contact below.

#### 💬 Your feedback and custom solutions

Found a bug or need another field? Open an issue on the Actor's **Issues** tab. Need a custom solution? Contact hello.datawiki@gmail.com.

# Actor input Schema

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

One keyword per line. Chinese or English words, hashtags (for example #美食), brand names and emoji all work. Each keyword is searched separately and the same video is only saved once across keywords. Bulk input is supported.

## `urls` (type: `array`):

Optional. Paste Douyin search links (so.douyin.com/s?keyword=… or www.douyin.com/search/…); the keyword inside each link is searched. Plain words on a line are treated as keywords. Combined with the keywords above, duplicates are skipped.

## `maxResultsPerQuery` (type: `integer`):

How many videos to collect for each keyword (0 to 2000). 0 collects everything Douyin returns.

## `sort` (type: `string`):

Order of the results: Douyin's default relevance, most liked first, or newest first.

## `publishTime` (type: `string`):

Only videos posted inside this period. Videos outside it are left out.

## `duration` (type: `string`):

Only videos of this length. Videos outside it are left out.

## `maxConcurrency` (type: `integer`):

How many keywords are searched in parallel (1 to 10). Lower it if you see many slow-downs.

## `maxRetries` (type: `integer`):

How often a failed or blocked request is retried (0 to 10).

## `maxScanned` (type: `integer`):

Safety cap on how many videos are looked at per keyword while matching your filters (0 = no cap). The search stops for that keyword when it is reached.

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

Choose how requests are routed. If a request is blocked, the Actor switches to another connection automatically.

## Actor input object example

```json
{
  "keywords": [
    "美食",
    "iphone"
  ],
  "maxResultsPerQuery": 10,
  "sort": "general",
  "publishTime": "unlimited",
  "duration": "unlimited",
  "maxConcurrency": 2,
  "maxRetries": 3,
  "maxScanned": 20000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One line per video: cover, text, author and headline numbers.

## `content` (type: `string`):

Text, titles, timing, place and yes/no flags.

## `author` (type: `string`):

Name, handles, verification, totals and avatar of the poster.

## `engagement` (type: `string`):

Likes, comments, shares, saves and plays.

## `video` (type: `string`):

Media links, size, format and encoding details.

## `music` (type: `string`):

The sound used in each video.

## `tags` (type: `string`):

Hashtags, topic tags, mentions, chapters, series and place.

## `access` (type: `string`):

What viewers may do, plus ad, shopping and review flags.

## `search` (type: `string`):

Keyword, position, share links and images.

## `summaryFile` (type: `string`):

SUMMARY file with the counts of this run.

# 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": [
        "美食",
        "iphone"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_wiki/douyin-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": [
        "美食",
        "iphone",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_wiki/douyin-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": [
    "美食",
    "iphone"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_wiki/douyin-search-scraper --silent --output-dataset

```

## MCP server setup

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