How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
咖啡in Keywords (search mode). Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Get public Douyin (抖音) videos by keyword, creator profile, video link or the trending list. Each video comes back as one clean row with caption, likes, comments, shares, saves, date, hashtags, author and music.
- Search by keyword — videos that Douyin shows for a word, with their position in the results.
- Creator profile videos — the latest public videos of a creator.
- Video links — one row for each video link, share link or video ID.
- Trending (hot search) — videos for the topics on Douyin's hot-search list, with the topic attached.
Good for
- Watch which videos Douyin shows for your product, brand or topic words.
- Follow what competing creators or brand accounts post and how it performs.
- Get likes, comments, shares and saves for a list of video links you already have.
- See which topics and videos are hot on Douyin today.
Who uses it
China market researchers
See which videos Douyin shows for a product or brand.
Brand and PR teams
Watch the topics on the hot-search list every day.
Social analysts
Compare likes, shares and saves of creators.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.03 | Charged once per run, one fee per GB of memory. This tool uses 2 GB by default, so $0.06 per run. |
| Video | $0.003 (from $0.0021 on paid Apify plans) | Charged for each Douyin video row saved (likes, comments, shares, saves, hashtags, author). A video found by several keywords is charged once. Status rows (not found, no results, error) are not charged as videos. |
| Keyword, profile or link | $0.005 | Charged once for each keyword, creator profile or video link the run starts to work on, and once for the trending list, even when Douyin has no videos for it. Repeated inputs are removed first and are not charged. |
Examples
- One result: about $0.06.
- 1,000 results: about $3.06.
- Every day 100 results, for 30 days: about $10.80 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 1,600 results.
Prices checked on 8 November 2026. See the current price on Apify.
Questions
Do I need a Douyin account or cookies?
No. The tool reads only what a visitor who is not logged in sees.
Why is the plays field empty?
The Douyin website does not show view counts. The tool writes null, not 0.
Can I search in English?
Yes, but Chinese keywords give more results.
Why are my search results different from the Douyin app?
Search uses Douyin's mobile website ranking ("综合"). The app can personalize results and show another order. The Actor keeps the website order in searchPosition.
How fresh is the data?
Every run reads Douyin live. Likes and comments are the numbers at fetchedAt. Cover links expire after some time, so download covers soon if you need them.
Details
Step by step on Apify
- Open the Input tab.
- Keep What to collect (
mode) on Search by keyword. - Keep the prefilled keyword
咖啡(coffee) inkeywords, or add your own words. - Keep Max videos (
maxItems) at 10. - Click Start.
- Open the Output tab and check the Overview table:
desc,likes,commentsandauthor.nicknamefor each video.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Topic and brand research | mode: search, keywords | Video in search results | desc, likes, searchPosition, hashtags, author.nickname | Export to Google Sheets or CSV |
| Creator tracking | mode: user, urls with profile links | Creator's latest videos | createdAt, likes, comments, isPinned | Scheduled run, compare tables |
| Stats for known videos | mode: video, urls with video links | One video per link | likes, comments, shares, collects, status | API call from your system |
| Trend watch | mode: trending | Video of a hot topic | trend.word, trend.rank, desc, likes | Daily schedule, dashboard |
Tips for better results
- Search gives about 150 videos per keyword. Use more keywords for more videos.
- Without login, a profile shows only about 20 latest videos.
- Run trending mode on a daily schedule to see new topics.
Limits and good to know
- Search: Douyin returns about 150 videos per keyword, then stops.
maxItemsabove that gives the same ~150 videos. Search results follow Douyin's website ranking; they can differ from the app and from a "most liked" order - Creator profiles: without login Douyin shows only about the first 19–20 videos of a profile. The run summary marks this as
LOGIN_LIMIT - Trending: the hot-search list has about 50 topics; the measured maximum was 363 videos for the whole list
- Run length: one run works up to 30 minutes. The largest tested run had 14 keywords and saved 1,596 videos in 19 minutes. Split bigger jobs into several runs
- Speed: opening Douyin in a browser takes 30–60 seconds, so even a small run takes about one minute
- No views: Douyin's website does not show view counts, so
playsis alwaysnull - Not included: video files (MP4), comments, products, live streams, private or login-only content, and private contacts
- Verification pages: Douyin can show a CAPTCHA to any visitor. The Actor does not solve it; it tries a new session at most twice and then reports an
error
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"videoId": "7686495232195847857",
"url": "https://www.douyin.com/video/7686495232195847857",
"contentType": "video",
"desc": "一次讲清楚14种咖啡到底有什么区别? #咖啡 #真财实学计划 #全球创作者计划 #商业 #燃起来了大国重器",
"createdAt": "2026-09-17T13:42:19.000Z",
"likes": 1222,
"comments": 29,
"shares": 418,
"collects": 1045,
"plays": null,
"durationSec": 657.4,
"imageCount": null,
"hashtags": ["咖啡", "真财实学计划", "全球创作者计划", "商业", "燃起来了大国重器"],
"isPinned": null,
"author": {
"uid": "3439748989075293",
"secUid": "MS4wLjABAAAAD3KIHnwx3K8xFD8JORV0mNLXP57SekbBYmbXN9r283Cs6fUrtuMYyPtlXLr1N2iy",
"nickname": "长江",
"uniqueId": "90154947736",
"followers": null,
"verified": false,
"verifiedReason": null,
"url": "https://www.douyin.com/user/MS4wLjABAAAAD3KIHnwx3K8xFD8JORV0mNLXP57SekbBYmbXN9r283Cs6fUrtuMYyPtlXLr1N2iy"
},
"music": {
"id": "7686495286553840399",
"title": "@长江创作的原声",
"author": "长江",
"isOriginal": false
},
"coverUrl": "https://p3-sign.douyinpic.com/tos-cn-i-0813c000-ce/…",
"mode": "search",
"input": "咖啡",
"searchPosition": 1,
"trend": null,
"status": "ok",
"error": null,
"source": "so.douyin.com",
"fetchedAt": "2026-10-26T14:15:49.634Z"
}Use it from code
Actor ID: cliqtomedia/douyin-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/douyin-scraper").call(run_input={
"mode": "search",
"keywords": [
"咖啡"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~douyin-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "search", "keywords": ["咖啡"]}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/douyin-scraper")
result = tool.invoke({"run_input": {"mode": "search", "keywords": ["咖啡"]}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (25)
| Field | Type | Meaning |
|---|---|---|
videoId | string | Douyin video (aweme) ID. Null only on a status row. |
url | string | Link to the video on www.douyin.com. |
contentType | string | video, or images for a photo post (slides). |
desc | string | Caption as the author wrote it. |
createdAt | string | When the video was published (ISO 8601, UTC). |
likes | integer | Likes. |
comments | integer | Comments. |
shares | integer | Shares. |
collects | integer | Saves (favourites). |
plays | null | Always null: Douyin's web pages do not show view counts. Never a fake 0. |
durationSec | number | Video length in seconds; null for photo posts. |
imageCount | integer | Number of pictures in a photo post; null for videos. |
hashtags | array | Hashtags from the caption, without #. |
isPinned | boolean | Pinned at the top of the creator's profile; set only in creator mode, null elsewhere. |
author | object | Creator: uid, secUid, nickname, uniqueId (Douyin ID), followers (null when Douyin does not report it), verified, verifiedReason, url. No contact details. |
music | object | Sound: id, title, author, isOriginal. |
coverUrl | string | Cover image URL (signed by Douyin, expires after some time). |
mode | string | search, user, video or trending. |
input | string | The keyword, link or 'trending' this row came from. |
searchPosition | integer | Position in the search results or trending video list, from 1. |
trend | object | Trending mode: word, rank and hotValue of the hot-search topic. |
status | string | ok for a video; other values are status rows that explain why an input gave no videos (never charged as videos). |
error | string | Reason on a status row. |
source | string | www.douyin.com or so.douyin.com. |
fetchedAt | string | When the row was collected (ISO 8601, UTC). |
Input settings (4)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| What to collect | mode | string | "search" |
| Keywords (search mode) | keywords | array | ["咖啡"] |
| Links (creator and video modes) | urls | array | |
| Max videos | maxItems | integer | 10 |