Douyin Scraper avatar

Douyin Scraper

Pricing

from $0.92 / 1,000 douyin video listeds

Go to Apify Store
Douyin Scraper

Douyin Scraper

Download Douyin videos without watermark, get any comments, profiles, trending, series and keywords. No login or cookies needed.

Pricing

from $0.92 / 1,000 douyin video listeds

Rating

0.0

(0)

Developer

Monster Leads

Monster Leads

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Douyin Scraper — Download Douyin Videos Without Watermark

Download Douyin videos, scrape Douyin comments, Douyin profiles, Douyin trending hot-search boards, Douyin category feeds, Douyin keyword suggestions and Douyin mini-dramas — all from one Douyin scraper. No Douyin login, no Douyin cookies, no browser.

Paste any Douyin link and get back a watermark-free MP4 URL in about a second, plus the full Douyin metadata around it: creator, follower count, likes, comments, shares, saves, the Douyin sound, the hashtags and the cover image.

Douyin (抖音) is the Chinese version of TikTok, run by ByteDance for mainland China. Douyin has its own catalogue, its own creators and its own trending boards — Douyin content does not appear on TikTok. This Douyin scraper talks to Douyin directly.


⬇️ Download Douyin videos (the main feature)

This is what most people come here for, so it is the default mode. Give the Douyin Scraper a list of Douyin links and it returns a direct MP4 URL for each Douyin video.

Input

{
"mode": "download",
"videoUrls": [
"https://www.douyin.com/video/7681251317267942708",
"https://v.douyin.com/iAbCdEf/",
"7673317030539414811"
]
}

Every Douyin link format works. You do not have to clean anything up first:

What you pasteWorks?
https://www.douyin.com/video/7681251317267942708✅ Full Douyin link
https://v.douyin.com/iAbCdEf/✅ Douyin short link (redirect followed for you)
7.65 复制打开抖音,看看【…】https://v.douyin.com/iAbCdEf/ 很有意思✅ The whole Douyin share caption, emojis and all
7681251317267942708✅ Bare Douyin video ID
https://www.iesdouyin.com/share/video/7681251317267942708/✅ Douyin share-domain link

Output — one row per Douyin video

Real output from this Douyin scraper, trimmed for width:

{
"type": "video",
"aweme_id": "7681251317267942708",
"kind": "video",
"desc": "别让《爱情公寓》只活在回忆里!…#爱情公寓 #我的青春还有售后",
"hashtags": ["爱情公寓", "我的青春还有售后", "发癫吧后浪"],
"create_time": 1788430695,
"create_time_iso": "2026-09-03T10:18:15+00:00",
"download_url": "https://v5-dy-ov-experiment.zjcdn.com/2732ddeb…/video/tos/cn/…",
"download_url_watermarked": "https://v5-dy-ov-experiment.zjcdn.com/fcfe0721…",
"download_is_watermark_free": true,
"image_urls": [],
"cover": "https://p3-pc-sign.douyinpic.com/image-cut-tos/…",
"origin_cover": "https://p3-pc-sign.douyinpic.com/tos-cn-p-0015/…",
"duration_seconds": 62.72,
"width": 1920,
"height": 1080,
"file_size_bytes": 24467850,
"author_nickname": "发癫吧,后浪!",
"author_unique_id": "shimaobianjibu",
"author_sec_uid": "MS4wLjABAAAAO8o8Scrw0S3LwRZl8Ud7hSU032OYbSVBKjlDpqjEOYr1qNTvyOd2b-zZPskHQ4kd",
"author_follower_count": 4273648,
"author_url": "https://www.douyin.com/user/MS4wLjABAAAAO8o8…",
"digg_count": 743135,
"comment_count": 9821,
"share_count": 79690,
"collect_count": 17896,
"music_title": "@发癫吧,后浪!创作的原声",
"music_url": "https://sf5-hl-cdn-tos.douyinstatic.com/obj/…",
"share_url": "https://www.iesdouyin.com/share/video/7681251317267942708/…",
"douyin_url": "https://www.douyin.com/video/7681251317267942708"
}

🚫 Watermark: read this before you use the URL

The Douyin Scraper returns two Douyin video URLs, and they are not the same file:

FieldWatermarkResolution (this example)Use it for
download_urlNone — clean1920×1080, 24.5 MBAlmost always this one
download_url_watermarkedDouyin logo + creator ID burned in720×720, 28.3 MBOnly if you specifically want the Douyin-branded file

download_is_watermark_free tells you which file download_url actually points at. It is true when Douyin served the clean stream. On rare Douyin videos the clean stream is withheld, the actor falls back to the watermarked file, and this flag goes false — so you always know what you got instead of finding a watermark later.

The Douyin CDN URLs expire in a few hours. Download the file during or shortly after the run; do not store the URL and fetch it next week.

📸 Douyin photo posts

Not every Douyin post is a video. Douyin photo slideshows (图文) come back with kind: "image_post", an empty download_url, and every picture in image_urls. That is a normal result, not a Douyin scraping failure.


Reading your Douyin results

Every Douyin row lands in the same dataset, and the tabs above the results table switch between views of it.

Overview is the default and works for every Douyin mode. Because a Douyin video, a Douyin profile and a Douyin trend have completely different fields, this view maps each one onto five shared columns:

ColumnDouyin videoDouyin profileDouyin commentDouyin trendDouyin mini-drama
Douyin resultcaptioncreator nicknamecomment texttrend worddrama title
Creatorvideo authorthe creatorcomment author
Likes / followers / hot valuelikesfollowerscomment likeshot valueplays
Douyin IDaweme_idsec_uidcomment_idseries_id
Open on Douyinvideo linkprofile linksearch linkvideo link

The per-type views — Douyin videos, Douyin comments, Douyin profiles, Douyin trends, Douyin keywords, Douyin mini-dramas — show the complete field set for one Douyin record type, with proper labels, clickable Douyin links and image previews. Switch to these when you want everything.

Every field is always kept in the dataset, whichever view you are looking at. A view narrows the columns you get back, so ask for the one you want:

https://api.apify.com/v2/datasets/<datasetId>/items ← all fields
https://api.apify.com/v2/datasets/<datasetId>/items?view=videos ← Douyin video columns
https://api.apify.com/v2/datasets/<datasetId>/items?view=profiles ← Douyin profile columns

Leave ?view= off — in the API, in the Apify Python/JS clients, and in JSON/CSV/Excel exports — to get every field of every Douyin row.


All Douyin Scraper modes

Pick one in the What do you want to do? dropdown. The mode decides everything — each Douyin mode reads only its own section of the form and ignores the rest.

⚠️ The most common mistake: pasting Douyin video links but leaving the mode on something else. The input form shows every mode's fields at once (Apify input forms cannot hide fields based on another field's value), so Douyin video links sit in plain view even during a Douyin profile run — where nothing reads them. Each section is captioned with the mode that owns it, and if you fill in a field the selected mode ignores, the Douyin Scraper says so in the run log before it scrapes anything:

Mode is 'profile', so these inputs are IGNORED by this run: videoUrls
"videoUrls" is used by the ⬇️ Download Douyin videos mode.
If that is not what you wanted, change "What do you want to do?" at the top
of the input form and run again.

If a Douyin run returns the wrong kind of row, check that warning first — it names the field and the mode that would have used it.

ModeWhat this Douyin scraper returnsPrice per result
⬇️ Download Douyin videosWatermark-free MP4 URL + full Douyin metadata$0.01
💬 Douyin commentsDouyin comments and replies with likes and IP region$0.001
👤 Douyin profileDouyin creator stats — followers, total likes, bio$0.01 profile, $0.001 per video
🔥 Douyin trendingDouyin hot-search board entries with rank$0.001
🧭 Douyin feedDouyin videos from a category feed$0.001
🔗 Related Douyin videosDouyin videos related to one Douyin video$0.001
🔎 Douyin keywordsDouyin search-box suggestions for SEO research$0.001
🎬 Douyin mini-dramasDouyin 短剧 catalogue with synopsis$0.001
🌐 Translate Douyin textDouyin captions/comments translated$0.01

💬 Scrape Douyin comments

Pulls Douyin comments on any Douyin video, newest page after page, and optionally the reply thread under each Douyin comment.

Input

{
"mode": "comments",
"videoUrl": "https://www.douyin.com/video/7681251317267942708",
"maxComments": 100,
"includeReplies": true,
"maxRepliesPerComment": 10
}
PropertyWhat it does
videoUrlThe Douyin video to read comments from. Any Douyin link format from the table above.
maxCommentsHow many top-level Douyin comments to collect. Douyin pages these 20 at a time and the Douyin Scraper keeps going until it hits your number or Douyin runs out. Default 50.
includeRepliesAlso fetch the reply thread under every Douyin comment that has replies. Each reply is its own billable Douyin result. See the note below — Douyin is currently blocking this. Default false.
maxRepliesPerCommentCap on replies fetched per Douyin comment. Default 10.

⚠️ Douyin is currently blocking comment replies for anonymous sessions. Douyin's reply endpoint answers with an empty response no matter which IP asks. When the Douyin Scraper detects this it says so in the log, stops asking, and finishes the run with top-level Douyin comments only — you are never charged for replies that could not be fetched. Top-level Douyin comments are unaffected and come back in full.

Output

{
"type": "comment",
"comment_id": "7681994953413247759",
"video_id": "7681251317267942708",
"is_reply": false,
"parent_comment_id": "",
"message": "答应我,不论你什么时候看到这条评论,你都叫我去喝水,谢谢",
"author_nickname": "青梅爆爆",
"author_uid": "1901496367066764",
"like_count": 2517,
"reply_count": 509,
"location": "广西",
"is_hot": true,
"create_time_iso": "2026-09-04T20:23:50+00:00"
}

location is the coarse IP region Douyin shows publicly next to each Douyin comment (a Chinese province, or a country for overseas users). Replies carry is_reply: true and point at their parent through parent_comment_id.


👤 Scrape Douyin profiles

Douyin creator stats, plus their recent Douyin videos if you want them.

Input

{
"mode": "profile",
"profileUrls": [
"https://www.douyin.com/user/MS4wLjABAAAAO8o8Scrw0S3LwRZl8Ud7hSU032OYbSVBKjlDpqjEOYr1qNTvyOd2b-zZPskHQ4kd"
],
"maxProfileVideos": 0
}

⚠️ Douyin profiles need a sec_uid, the long MS4wLjAB… string in the Douyin profile URL. Douyin's own profile API rejects short numeric UIDs, so this Douyin scraper cannot accept them either. Copy the Douyin profile link straight from the browser and it will be right.

PropertyWhat it does
profileUrlsOne or more Douyin profile links, or bare sec_uid values.
maxProfileVideosHow many of the creator's recent Douyin videos to include. See the note below — Douyin is currently restricting this. Default 0 (profile stats only).

⚠️ Douyin currently restricts creator video lists for anonymous sessions. Douyin's profile-video endpoint returns an empty response regardless of IP, so maxProfileVideos usually yields nothing — while the Douyin profile stats themselves come back in full and are unaffected. The run logs a warning and you are not charged for videos that were not returned. To collect a specific creator's Douyin videos, paste their Douyin video links into the ⬇️ Download mode, or use the 🧭 Feed and 🔗 Related modes.

Output

{
"type": "profile",
"sec_uid": "MS4wLjABAAAAO8o8Scrw0S3LwRZl8Ud7hSU032OYbSVBKjlDpqjEOYr1qNTvyOd2b-zZPskHQ4kd",
"uid": "3380350436780335",
"nickname": "发癫吧,后浪!",
"unique_id": "shimaobianjibu",
"signature": "后浪是一种精神,大家都可以是后浪!…",
"avatar": "https://p3-pc.douyinpic.com/aweme/1080x1080/…",
"follower_count": 4273648,
"following_count": 12,
"total_favorited": 89234567,
"aweme_count": 342,
"profile_url": "https://www.douyin.com/user/MS4wLjABAAAAO8o8…"
}

The creator's Douyin videos follow as separate rows in the same video shape as the download mode, tagged "source": "profile".


Douyin's real-time hot-search board — what all of Douyin is watching right now.

Input

{ "mode": "trending", "board": "hot", "maxTrending": 50 }

board picks which Douyin board to read: hot (Douyin's main real-time board), total, shopping, music, sport, car, travel.

Output

{
"type": "trend",
"rank": 1,
"word": "总书记心系人民教师",
"hot_value": 0,
"view_count": 0,
"video_count": 0,
"board": "hot",
"active_time": "2026-09-09 23:57:12",
"search_url": "https://www.douyin.com/search/总书记心系人民教师"
}

Note on zeros: Douyin's public hot-search endpoint returns the ranking and the terms, but leaves hot_value, view_count and video_count at 0 for most entries — Douyin only fills those in for some boards. The rank order is the reliable signal, and it is exact.


🧭 Scrape the Douyin feed by category

Pull fresh Douyin videos from Douyin's curated feed or any of its 15 category channels.

Input

{ "mode": "feed", "category": "food", "maxFeedVideos": 50 }

category accepts: all (Douyin's curated 精选 feed), game, anime, music, food, knowledge, sports, drama, movie, vlog, kids, car, rural, animal, travel, beauty.

Output rows are Douyin videos in the same shape as the download mode, tagged "source": "feed" with the feed_category you asked for.

Douyin recommends a different set of videos on every run, which is what makes this mode useful for sampling Douyin trends over time. It also means two runs with identical input return different Douyin videos.


Given one Douyin video, get the Douyin videos Douyin itself recommends next to it — a fast way to expand a Douyin seed into a topic cluster.

{ "mode": "related", "videoUrl": "https://www.douyin.com/video/7681251317267942708", "maxRelated": 20 }

Rows come back in the video shape, tagged "source": "related" and related_to with your seed Douyin video ID.


🔎 Douyin keyword suggestions (Douyin SEO)

Read the suggestions out of Douyin's own search box. This is the cheapest Douyin keyword research there is — it is what Douyin users actually type.

Input

{ "mode": "keywords", "keyword": "美食", "suggestionType": "autocomplete" }
suggestionTypeWhat Douyin returns
autocompleteDouyin's type-ahead completions — prefix matches, e.g. 美食美食测评, 美食盘点, 美食p图
relatedBroader Douyin topic suggestions — e.g. 美食酸菜鱼, 牛肉, 附近美食, 出餐快又暴利的小吃

Output

{
"type": "keyword",
"word": "美食测评",
"seed_keyword": "美食",
"suggestion_type": "autocomplete",
"group_id": "6595533951412999437",
"search_url": "https://www.douyin.com/search/美食测评"
}

🎬 Douyin mini-dramas (短剧)

Douyin's mini-drama catalogue — the short vertical serials that dominate Douyin.

{ "mode": "series", "maxSeries": 24 }
{
"type": "series",
"series_id": "7676329928593246262",
"name": "嫌疑人的秘密",
"desc": "男主陈锋就职于大型军工通讯设备研发公司,因核心机密…",
"cover": "https://p3-sign.douyinpic.com/…",
"aweme_id": "7676329918745054500",
"douyin_url": "https://www.douyin.com/video/7676329918745054500"
}

🌐 Translate Douyin text

Translate Douyin captions, Douyin comments or Douyin hashtags using Douyin's own translation engine — the same one the Douyin app uses, so Douyin slang and internet shorthand come out better than with a generic translator.

{ "mode": "translate", "text": "今天天气很好", "targetLanguage": "en" }
{
"type": "translation",
"source_text": "今天天气很好",
"translation": "The weather is great today",
"target_language": "en",
"model": "CLA-X32"
}

💰 Pricing — $1 per 1,000 Douyin results

This Douyin Scraper is pay per result. You are charged for Douyin data you actually receive, and nothing else.

Douyin resultPriceWhy
Douyin video downloaded$0.01One dedicated Douyin request, its own proxy and visitor session, to produce one complete Douyin video
Douyin profile scraped$0.01Same — one Douyin profile lookup per result
Douyin text translated$0.01Same — one Douyin translation call per result
Douyin comment$0.001Arrives 20 per Douyin request
Douyin video in a feed / related / profile list$0.001Arrives in a batch from one Douyin request
Douyin trend$0.001Up to 50 per Douyin request
Douyin keyword suggestion$0.00110–15 per Douyin request
Douyin mini-drama$0.001Batched per Douyin request

List results are $1 per 1,000. Single results cost 10× because one of them is a whole Douyin request — the same work that produces ten list rows.

You are never charged for a Douyin video you did not get

Douyin videos get deleted, made private, age-gated and region-locked all the time. When Douyin refuses one, the Douyin Scraper still writes a row so you can see which input failed:

{ "type": "video", "input": "https://www.douyin.com/video/1111111111111111111",
"error": "douyin 限制了这条视频 (filter_detail): 1111111111111111111" }

That row is free. Charging happens only after a row carrying real Douyin data is stored. Rows with an error field are never billed, so a run against a list of dead Douyin links costs you nothing.


Example: download Douyin videos from the API

from apify_client import ApifyClient
client = ApifyClient('<YOUR_APIFY_TOKEN>')
run = client.actor('douyin-scraper').call(run_input={
'mode': 'download',
'videoUrls': [
'https://www.douyin.com/video/7681251317267942708',
'https://v.douyin.com/iAbCdEf/',
],
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
if item.get('error'):
print('Douyin refused:', item['input'], '-', item['error'])
continue
print(item['author_nickname'], '|', item['digg_count'], 'likes')
print(' MP4:', item['download_url'])

Saving the Douyin videos to disk:

import httpx
for item in client.dataset(run['defaultDatasetId']).iterate_items():
url = item.get('download_url')
if not url:
continue
r = httpx.get(url, follow_redirects=True, timeout=120)
with open(f"douyin_{item['aweme_id']}.mp4", 'wb') as f:
f.write(r.content)

Frequently asked questions

Do I need a Douyin account or Douyin cookies? No. This Douyin Scraper maintains its own pool of anonymous Douyin visitor sessions and rotates residential proxies automatically. You never log into Douyin.

Are the Douyin videos really watermark-free? Yes — download_url is Douyin's own clean player stream, and it is also the higher-resolution file (1080p versus the 720p watermarked one in the example above). Check download_is_watermark_free on any row to be certain.

How long do the Douyin download URLs stay valid? A few hours. Douyin signs its CDN URLs with an expiry. Fetch the file during or right after the run.

Can I download private or paid Douyin videos? No. This Douyin Scraper only reads Douyin content that is publicly visible to any Douyin visitor. Private, deleted, paid and region-locked Douyin videos come back as free error rows.

Why did I get no Douyin comment replies / no videos from a Douyin profile? Douyin has restricted both of those endpoints for anonymous sessions — they return an empty response no matter which IP asks, so no Douyin scraper without logged-in Douyin accounts can read them right now. The Douyin Scraper detects this, logs it plainly, and does not charge you for what it could not fetch. Top-level Douyin comments and Douyin profile stats are unaffected and come back in full. These are Douyin-side restrictions that Douyin changes from time to time.

Why is play_count always 0? Douyin does not expose play counts on its web API at all — for any Douyin video, to anyone. Likes, comments, shares and saves are all real. The field is kept so the row shape stays stable.

Why did Douyin trending return hot_value: 0? Douyin only populates hot values on some of its boards. The rank ordering is always correct.

How many Douyin videos can I scrape in one run? There is no hard cap. Douyin comments page in 20s, Douyin feeds in ~20s, and the Douyin Scraper keeps requesting until it reaches your limit.

Is scraping Douyin legal? This Douyin Scraper collects only public Douyin data — no login, no private Douyin content, no personal data behind a Douyin privacy setting. You are responsible for how you use Douyin data, including copyright in the Douyin videos themselves. Douyin videos belong to their creators; downloading a Douyin video does not grant you a licence to republish it.


Setup for self-hosted use

This Douyin Scraper talks to a crawler backend that handles Douyin proxy rotation and Douyin visitor cookies. Point the actor at yours with two environment variables:

VariableValue
CRAWLER_URLhttps://your-crawler-domain
CRAWLER_API_KEYYour API key — store it as a secret

Both can also be passed as input (crawlerUrl, crawlerApiKey) for local testing. Give each actor its own API key so one leak does not force you to rotate every actor at once.