Douyin Scraper - Videos, Search & Trends, No Login avatar

Douyin Scraper - Videos, Search & Trends, No Login

Pricing

from $2.10 / 1,000 videos

Go to Apify Store
Douyin Scraper - Videos, Search & Trends, No Login

Douyin Scraper - Videos, Search & Trends, No Login

Get public Douyin (抖音) videos by keyword, creator profile, video link or the trending list: caption, likes, comments, shares, saves, date, hashtags, author and music. One Actor, four modes. No login.

Pricing

from $2.10 / 1,000 videos

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Security

Limited permissions

Share

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.

Use it to track Chinese short-video trends, brands and creators without a Douyin account. The smallest run is one keyword and 10 videos: it takes about one minute and costs about $0.10.

Douyin Scraper: keywords, creator profiles and video links in, clean video rows out

Table of contents

What it does

Douyin Scraper reads the public Douyin website, like a visitor who is not logged in. It has four modes in one Actor:

  • 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.

Every video is one row with the same fields, so you can mix modes in one table. When an input gives no videos, you get one status row that says why, with no video charge: not_found (deleted or private video, missing profile), no_results (nothing found) or error (Douyin failed). Nothing found is never shown as an error, and an error is never shown as "nothing found".

Good fit

  • 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.

How it works

  1. The Actor opens the public Douyin page for your input in a real browser, through Apify Proxy. It does not log in and does not use cookies.
  2. It reads the same video lists the page loads: search results, the creator's video list, the video page or the hot-search list. It turns pages until it reaches maxItems or the end of the list.
  3. It saves one row per video in the Dataset. A video found by two keywords is saved and charged once. The run summary with one line per keyword, profile or link goes to the RUN_SUMMARY record.

If Douyin shows a verification page (CAPTCHA), the Actor does not solve it. It starts a new browser session on another IP, at most twice per run. If Douyin still refuses, the run ends with an error and keeps every video it already saved.

Quick start

  1. Open the Input tab.
  2. Keep What to collect (mode) on Search by keyword.
  3. Keep the prefilled keyword 咖啡 (coffee) in keywords, or add your own words.
  4. Keep Max videos (maxItems) at 10.
  5. Click Start.
  6. Open the Output tab and check the Overview table: desc, likes, comments and author.nickname for each video.

Expected result: about one minute later, 10 video rows for 咖啡, numbered by searchPosition 1 to 10.

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Topic and brand researchmode: search, keywordsVideo in search resultsdesc, likes, searchPosition, hashtags, author.nicknameExport to Google Sheets or CSV
Creator trackingmode: user, urls with profile linksCreator's latest videoscreatedAt, likes, comments, isPinnedScheduled run, compare tables
Stats for known videosmode: video, urls with video linksOne video per linklikes, comments, shares, collects, statusAPI call from your system
Trend watchmode: trendingVideo of a hot topictrend.word, trend.rank, desc, likesDaily schedule, dashboard

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
modeWhat to collectstringnodefault and prefill searchsearch, user, video, trendingChooses the mode"user"Pick the mode first; it decides which other field is used
keywordsKeywordsarray of stringsin search modeprefill ["咖啡"], no default1–20 words, any languageWords to search["咖啡", "露营"]Chinese words give the best results
urlsLinksarray of stringsin user and video modesnone1–100 linksProfiles or videos to read["https://www.douyin.com/video/7699062276518677770"]See the formats below
maxItemsMax videosintegernodefault and prefill 101–1000Videos per keyword, per profile, or for the whole trending list50Not used in video mode

Accepted link formats:

  • user mode: https://www.douyin.com/user/MS4wLjABAAAA… or the sec_uid itself.
  • video mode: https://www.douyin.com/video/<id>, https://v.douyin.com/<code>/ share links, the share text copied from the app (the Actor finds the link in it), or the numeric video ID.

Empty input means search mode with no keywords. Such a run stops at once with an "Invalid input" message and does not open Douyin. The same happens in user or video mode without links, or with a link that is not a Douyin profile or video. Repeated keywords and links are read once. Two different links to the same video give one row and a warning in the run summary.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Search with several keywordskeywordsmaxItemsmaxItems counts per keyword3 keywords, maxItems 50Up to 150 videos
Same video for two keywordskeywords—Saved and charged once, under the first keyword咖啡 and 咖啡☕Fewer rows than keywords × maxItems
Creator modeurlsmaxItemsDouyin shows about 19 videos per profile without loginmaxItems 50About 19 videos, note LOGIN_LIMIT
Video modeurlsmaxItemsmaxItems is ignored, one row per link5 links5 rows
Trending mode—maxItemsmaxItems counts for the whole list; keywords and urls are ignoredmaxItems 3030 videos across hot topics
Any modeyour run cost limit—The Actor stops before it would go over your limitlimit $0.20Run ends SUCCEEDED, reason CHARGE_LIMIT

Input examples

Search by keyword

{
"mode": "search",
"keywords": ["咖啡"],
"maxItems": 10
}

Expected behavior: the Actor searches 咖啡 on Douyin and saves the first 10 videos. Expected output: 10 rows with searchPosition 1–10, desc, likes, comments, author. Limit or cost note: about one minute, about $0.10 on the Free plan price.

Creator profile videos

{
"mode": "user",
"urls": ["https://www.douyin.com/user/MS4wLjABAAAAsfwGtL5CZnIafzOeiBhsndi_W3TxKFORn2vbJh0zr3E"],
"maxItems": 20
}

Expected behavior: the Actor reads the creator's latest public videos, pinned videos first. Expected output: about 19 rows with createdAt, likes, isPinned, author.followers. Limit or cost note: Douyin shows only about the first 19–20 videos of a profile without login.

{
"mode": "video",
"urls": [
"https://www.douyin.com/video/7699062276518677770",
"https://v.douyin.com/AbCdEfG/"
]
}

Expected behavior: one row per link. A deleted or private video gets a not_found row with no video charge.

{
"mode": "trending",
"maxItems": 30
}

Expected behavior: the Actor reads the hot-search list and collects videos topic by topic, from the top. Expected output: 30 rows, each with trend.word and trend.rank.

Output

Results go to the default Dataset, one row per video. The Overview view shows the main columns. The full run summary is in the key-value store record RUN_SUMMARY.

Output fields

FieldMeaningTypeCan be empty?Example / enumSource / notes
videoIdDouyin video IDstringonly on some status rows7686495232195847857
urlVideo linkstringon some status rowshttps://www.douyin.com/video/7686495232195847857
contentTypeVideo or photo postvideo, imageson status rowsvideoPhoto posts (图文) are videos in Douyin lists
descCaption with hashtagsstringyes一次讲清楚14种咖啡…
createdAtPublish time, UTCISO 8601 stringyes2026-09-17T13:42:19.000Z
likesLikesintegeryes1222
commentsCommentsintegeryes29
sharesSharesintegeryes418
collectsSaves (收藏)integeryes1045
playsViewsalways nullalwaysnullDouyin's website does not show view counts. The Actor writes null, never a fake 0
durationSecVideo length in secondsnumberyes; null for photo posts657.4
imageCountNumber of photosintegeryes; null for videos6
hashtagsHashtags without #array of stringsempty array when none["咖啡", "商业"]
isPinnedPinned on the profilebooleannull outside user modetrueOnly a profile list says which videos are pinned
authorCreatorobjectyes{uid, secUid, nickname, uniqueId, followers, verified, verifiedReason, url}followers is null in search and trending: Douyin does not send it there. uniqueId is null in user mode
musicSoundobjectyes{id, title, author, isOriginal}
coverUrlCover imagestringyeshttps://p3-sign.douyinpic.com/…Signed link, works for a limited time
modeMode of the runstringnosearch
inputKeyword or link this row came fromstringno咖啡trending in trending mode
searchPositionPosition in the resultsintegernull in user and video modes1Search and trending
trendHot topicobjectnull outside trending{word, rank, hotValue}rank and hotValue can be null for the pinned top topic
statusRow statusok, not_found, no_results, errornook
errorWhy there is no videostringnull on ok rowsVideo not found…
sourceDouyin site the row came fromstringnoso.douyin.comSearch uses so.douyin.com, other modes www.douyin.com
fetchedAtWhen the row was collectedISO 8601 stringno2026-10-26T14:15:49.634Z

null means Douyin did not give the value. 0 is a real zero. Status rows (not_found, no_results, error) have null in every metric and are never charged as videos.

Output entities and surfaces

SituationDataset/API/KVS/live viewResult shapeUser action
Normal itemDataset, Overview viewOne ok row per videoOpen, export or call the API
Domain-empty resultDataset + RUN_SUMMARYOne no_results row for the keyword; run SUCCEEDED, status NO_RESULTSTry another word
Missing video or profileDatasetOne not_found row with videoId or url and errorCheck the link
Partial resultDataset + RUN_SUMMARYSaved videos stay; RUN_SUMMARY.reason is CHARGE_LIMIT, TIME_LIMIT or LOGIN_LIMITRead the reason, raise the limit if you need more
Douyin refused or failedDataset + RUN_SUMMARYSaved videos stay, one error row; run FAILED, reason SOURCE_ERRORRun again later

Output example

This is one full row from the Quick start run (search 咖啡, 10 videos):

{
"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"
}

plays and author.followers are null here because Douyin does not send them in search results. The cover link is shortened.

Pricing

Pricing unit

You pay per saved video, a small fee per keyword or link, and a start fee per run:

EventFree planBronzeSilverGold
Saved video (video)$0.003$0.0027$0.0024$0.0021
Keyword, profile or link (input)$0.005samesamesame
Actor start (apify-actor-start)$0.03 per GB of run memorysamesamesame
  • Video — one ok row in the Dataset. A video found by two keywords is charged once. not_found, no_results and error rows are free.
  • Keyword, profile or link — charged once for each keyword, profile or video link the run starts to work on, and once for the whole trending list. It is charged even when Douyin has no videos for it. Repeated keywords and links are removed first and are not charged.
  • Actor start — Apify charges this automatically when the run starts, per GB of memory. The Actor always runs with 2 GB of memory, so this is $0.06 per run (4 GB was tested and was not faster).
  • Platform usage (browser, proxy, compute) is included. You do not pay it separately.

So a run stopped by invalid input costs only the start fee, $0.06. A keyword with no videos or a missing video costs $0.005 on top of the start fee. A run that fails on Douyin's side is charged the start fee, its keywords or links, and the videos it saved before the failure.

Cost examples

Prices on the Free plan with the default 2 GB memory:

ScenarioInput scopeExpected videosStart + inputsVideo chargeStop/cap behavior
Quick start1 keyword, maxItems 1010$0.065$0.03Total about $0.10
Keyword research3 keywords, maxItems 100up to 300$0.075up to $0.90Ends at maxItems or the end of results
Creator profile1 profileabout 19$0.065about $0.06Douyin's no-login limit
Trending listmaxItems 300300$0.065$0.90
Nothing found1 keyword with no videos0$0.065$0One no_results row, no video charge

Because of the start fee, very small runs cost more per video than large ones. Total price by plan (search, default 2 GB memory):

Videos in one runKeywordsFree planGold
11$0.068$0.067
101$0.095$0.086
1001$0.365$0.275
1,0007$3.095$2.195

If you need only a few videos many times a day, collect them in one run instead of many small runs.

Set a maximum cost per run in the run options if you want a hard cap. The Actor stops before the next video or keyword would go over it and says so in the status message.

Limits

  • Search: Douyin returns about 150 videos per keyword, then stops. maxItems above 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 plays is always null.
  • 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.
  • Douyin down: if Douyin gives no answer for 60 seconds, the run stops with an error instead of waiting. Videos saved before that stay in the Dataset.

API, export and integrations

  • API: start the Actor with POST https://api.apify.com/v2/acts/cliqtomedia~douyin-scraper/runs and the input JSON, then read GET /v2/datasets/{datasetId}/items?view=overview.
  • Export: download the Dataset as JSON, CSV, Excel, XML or HTML from the Output tab.
  • Scheduling: create a schedule in Apify Console to run trending or creator mode every day; each run gives a new Dataset.
  • Webhooks / no-code: use Apify integrations (Make, Zapier, n8n, Google Sheets) on "run succeeded" and read the Dataset items. Use videoId as the key when you join runs.

Use with AI agents (MCP)

  • MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/douyin-scraper.
  • Smallest useful input: {"mode": "search", "keywords": ["咖啡"], "maxItems": 10}.
  • Key output fields: videoId (video ID), desc (caption), likes, comments, createdAt (publish time, UTC), status (ok or why there is no video).
  • Typical run: about one minute and about $0.10 for 10 videos; about 2 minutes per 150-video keyword. Views are always null; profiles give about 19 videos; search gives about 150 videos per keyword.

Troubleshooting

A creator profile gives only about 19 videos

Symptom: you set maxItems 100 for a profile and got 19 rows. Likely reason: Douyin shows only the first page of a profile to visitors who are not logged in. Check: RUN_SUMMARY.inputs[].note is LOGIN_LIMIT. Action: this is a Douyin limit. To find more of the creator's videos, search for their name or topics in search mode.

The run failed and the message mentions a verification page

Symptom: run FAILED, an error row, reason SOURCE_ERROR. Likely reason: Douyin showed a CAPTCHA on every new session. Check: RUN_SUMMARY.source.captchas and renewals. Action: run again later. Videos saved before the error stay in the Dataset.

The run failed with "Douyin did not answer for 60 seconds"

Symptom: run FAILED or SUCCEEDED with fewer videos, an error row, reason SOURCE_ERROR. Likely reason: Douyin or the proxy did not answer; the Actor stops early so it does not keep using resources. Action: run again in a few minutes.

A keyword gives a no_results row

Symptom: one row with status: no_results and no videos. Likely reason: Douyin has no videos for this word, or the word is filtered by Douyin. Check: search the same word on douyin.com in a browser. Action: try a Chinese word or a shorter phrase.

Symptom: status: not_found with the video ID. Likely reason: the video was deleted, made private, or the link points to a profile. Action: check the link; use user mode for profile links.

The run ended earlier than expected

Symptom: run SUCCEEDED, fewer videos, reason TIME_LIMIT or CHARGE_LIMIT. Likely reason: the run reached 30 minutes, your run timeout, or your cost limit. Action: split keywords into several runs or raise the limit.

FAQ

Do I need a Douyin account, cookies or a Chinese phone number?

No. The Actor reads only what Douyin shows to a visitor who is not logged in. You do not give it any login data.

Why is plays always empty?

Douyin's website does not show view counts for videos. Other tools often write 0 there; this Actor writes null so you do not mistake it for zero views.

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.

Support

For a bug, question or feature request, open the Actor's Issues tab on Apify. Include the run ID, the mode and the error text from the status message or RUN_SUMMARY. Never send tokens, cookies or billing data.