How to scrape Douyin videos, comments, and creator profiles
Last updated
To scrape Douyin, paste a douyin.com video, creator, or live-room URL into Datapika's Douyin scraper on Apify, pick one of 7 modes, and read the results back as JSON through the REST API or MCP. Each delivered record costs $0.001 as of August 2026 (Apify Store), with no API key, no Douyin account, and up to 5,000 items per input URL. Every row uses the same field names as Datapika's TikTok and Bilibili output, so one pipeline covers all three platforms. Failed URLs return an error row and are never billed.
Which Douyin URLs can you scrape, and what does each one return?
Datapika reads three Douyin URL shapes and detects the platform from the domain, so you can leave the platform setting on auto for douyin.com and iesdouyin.com links. A video URL in the form douyin.com/video/<id> feeds video_detail and video_comments. A creator URL in the form douyin.com/user/<sec_uid> feeds user_posts, user_profile, and user_likes, and a live.douyin.com/<room_id> URL feeds live_info.
The trending mode needs no URL, but it does need platform set to douyin explicitly. Left on auto, trending falls back to Bilibili's popular feed instead. Douyin's trending surface is a board of ranked search phrases with a hot_value score, not a video feed, so those rows carry item_type hot_search_keyword rather than video.
Some newer short-form Douyin share links are not parsed yet. If a share link fails, open it once in a browser and paste the canonical douyin.com/video/<id> form instead. Every unsupported input still produces a structured error row instead of a failed run.
- douyin.com/video/<id>: single video detail, or its comment thread with replies
- douyin.com/user/<sec_uid>: latest posts, profile card, or liked videos for one creator
- live.douyin.com/<room_id>: live status, stream title, viewer count, host name, cover image
- No URL plus platform=douyin: the hot-search keyword board with hot_value scores
- iesdouyin.com links are recognized as Douyin automatically
- Unparsed short links return an error row; paste the canonical video URL to retry
Which fields does a Douyin video, comment, or profile row include?
A Douyin video row carries the first line of the caption as title (capped at 200 characters) and the full caption as description, the aweme ID as item_id, a canonical douyin.com/video URL, the creator's sec_uid as author_id, nickname as author_name, and Douyin ID as author_username. It adds duration_sec, cover_url, music_title, music_author, created_at as an ISO 8601 timestamp, and a hashtags array whose extractor handles Chinese characters. Engagement comes back as play_count, like_count, comment_count, share_count, and collect_count, the last one being Douyin's save-to-favorites metric.
A creator profile row adds follower_count, following_count, video_count, bio, avatar_url, and a verified flag that is true for both personal and enterprise verification badges. Comment rows include comment_id, reply_to_id for threading, comment_text, the commenter's identifiers, like_count, and created_at.
Every row also includes the raw source response under raw and a scraped_at timestamp, so Douyin fields that are not mapped into the unified schema are still available for analysis.
- Video: title, description, hashtags, music_title, music_author, duration_sec, cover_url, created_at
- Engagement: play_count, like_count, comment_count, share_count, collect_count
- Profile: follower_count, following_count, video_count, bio, avatar_url, verified
- Comment: comment_id, reply_to_id, comment_text, like_count, created_at
- Live: live_status, live_title, viewer_count, author_name, cover_url
- raw and scraped_at on every row for unmapped platform fields and audit trails
How much does scraping Douyin cost, and how do bulk runs work?
Datapika charges $0.001 per delivered record as of August 2026 (Apify Store), which is $1.00 per 1,000 rows. Douyin URLs that fail because a video was deleted, a creator went private, or the platform blocked a request return an error row with a readable error_message and are not charged. There is no subscription and no API key fee on top of the per-record price.
For bulk work, pass a list under urls instead of a single url. URLs are processed concurrently, and the maxItems setting (1 to 5,000, default 100) caps how many rows each paginated URL returns, so 20 creator URLs at maxItems 50 yields up to 1,000 video rows for about $1.00. A batch of 100 URLs typically finishes in 2 to 3 minutes, and runs of 500 URLs or fewer are the most reliable.
You can also cap spend for a run with Apify's maximum total charge setting. When the cap is hit mid-batch, remaining URLs are written as error rows and the run ends cleanly instead of overspending.
- $0.001 per delivered record (Apify Store, August 2026); the actor has 1,340 runs
- Error rows are free: deleted, private, region-blocked, or anti-bot failures cost nothing
- maxItems from 1 to 5,000 per input URL, default 100
- About 100 URLs per run in 2 to 3 minutes; keep runs under 500 URLs for best reliability
- Spending cap: remaining URLs become error rows once the maximum total charge is reached
What can you build with Douyin data for the Chinese market?
Douyin is the domestic Chinese counterpart to TikTok, and its data answers questions that Western platforms cannot. Brands selling into China use user_posts across competitor accounts to watch launch cadence, caption language, and collect_count as a save-intent signal. Agencies running KOL discovery pull user_profile rows for a candidate list and rank by follower_count against average play_count from the same creators' recent posts.
The hot-search board is a fast read on what mainland audiences are searching right now. Scheduling the trending mode every hour and diffing hot_value across snapshots surfaces rising phrases before they show up in English-language coverage. Comment threads in Chinese feed sentiment models directly, since comment_text and like_count come back per reply with threading intact.
Because the schema is shared with Datapika's TikTok and Bilibili modes, the same brand can be compared across all three platforms in one dataset without remapping fields. That matters for teams that report on China and global audiences side by side.
- Competitor launch tracking: user_posts on rival accounts, sorted by created_at and collect_count
- KOL discovery: user_profile rows ranked by follower_count and recent play_count
- Hot-search monitoring: hourly trending snapshots with hot_value deltas
- Chinese-language sentiment: threaded comment_text with like_count per reply
- Live commerce checks: live_info for viewer_count and stream titles during campaign windows
- Cross-platform reports: identical field names across Douyin, TikTok, and Bilibili
How do AI agents call the Douyin scraper through the API or MCP?
The actor is exposed on Apify as a standard REST endpoint, so any HTTP client can start a run with a JSON body containing mode, url or urls, and maxItems, then read the dataset as JSON or CSV when the run finishes. Authentication is your Apify token only; no Douyin credentials or cookies are required for public content.
For agents, the same actor is available as an MCP tool through Apify's MCP server at mcp.apify.com. An agent connects with the actor enabled as a tool, calls it with the Douyin URL and mode as arguments, and receives the unified rows back in the tool result. Billing stays per record, so an agent that asks for 30 comments pays $0.03.
The cookie field is optional and only needed for gated Douyin content such as private collections or certain feeds. Residential proxy is the default and the recommended choice for Douyin. When Douyin flags an exit IP, the actor retries on a fresh residential IP up to 4 times before writing an error row.
- REST: POST a JSON input to the actor endpoint, then fetch the dataset items
- MCP: enable openclawai/tiktok-douyin-bilibili-scraper as a tool on mcp.apify.com
- Inputs: mode, url or urls, maxItems, optional includeComments, cookie, proxyConfiguration
- Public content needs no cookie; gated collections accept a pasted browser cookie
- Flagged exit IPs are retried on a fresh residential IP up to 4 times per URL
| Douyin input | Mode | Fields returned | Notes |
|---|---|---|---|
| douyin.com/video/<id> | video_detail | title, description, hashtags, music_title, music_author, duration_sec, cover_url, play/like/comment/share/collect counts, created_at | video_url_nowm is off by default for Douyin because the CDN returns 403 on many links; forceDownload overrides. includeComments adds the first page of comments |
| douyin.com/video/<id> | video_comments | comment_id, reply_to_id, comment_text, author_id, author_name, author_username, like_count, created_at | Top-level comments and replies; maxItems caps the batch, up to 5,000 |
| douyin.com/user/<sec_uid> | user_posts | One video row per post with the full video field set | Public feed can lag about 6 days for some accounts; maxItems 1 to 5,000 |
| douyin.com/user/<sec_uid> | user_profile | author_name, author_username, bio, avatar_url, verified, follower_count, following_count, video_count | verified covers personal and enterprise badges; single row, maxItems ignored |
| douyin.com/user/<sec_uid> | user_likes | Video rows for the creator's liked videos | Douyin and TikTok only; accounts that hide their likes come back as a free error row with no data |
| live.douyin.com/<room_id> | live_info | live_status, live_title, viewer_count, author_name, cover_url | Snapshot of the room at scrape time; rerun to track viewer changes |
| No URL, platform=douyin | trending | title (search phrase), hot_value, item_id | Returns hot-search keywords, not videos; item_type is hot_search_keyword. Platform must be douyin, not auto |
How to do it
- 1.Open https://apify.com/openclawai/tiktok-douyin-bilibili-scraper and choose a mode: video_detail, video_comments, user_posts, user_profile, user_likes, live_info, or trending.
- 2.Paste a Douyin URL in canonical form (douyin.com/video/<id>, douyin.com/user/<sec_uid>, or live.douyin.com/<room_id>), or a bulk list under urls, and set maxItems between 1 and 5,000. For trending, set platform to douyin and skip the URL.
- 3.Leave the platform on auto for URL modes, keep the default residential proxy, and add a cookie only if you need gated content. Start the run and watch rows land in the dataset at $0.001 each.
- 4.Export the dataset as JSON or CSV, or connect an agent to Apify's MCP server at https://mcp.apify.com with the actor enabled and call it as a tool.
Questions, answered
Does Douyin have an official API, and can I use it instead?
Douyin runs an Open Platform for registered developers, but it is built around apps that account owners authorize, not around reading arbitrary public content. You cannot pull competitor profiles, other creators' videos, or their comment threads from it, and onboarding runs through a Chinese-language developer registration. Datapika reads public Douyin pages directly, returns unified rows within a run, and needs no developer application or Douyin account.
Why do some Douyin no-watermark MP4 links return a 403?
Douyin's CDN currently rate-limits direct no-watermark video URLs, so many of them answer 403 until the platform rotates them. For that reason the downloadVideos option is auto-disabled for Douyin, and video rows still return full metadata, cover images, and stats. If your own IP or cookie can fetch those files, set forceDownload to true to request the URLs anyway. TikTok and Bilibili links are not affected.
How fresh is Douyin user_posts data?
For most creators, user_posts returns the latest public videos, but Douyin's public feed lags by roughly 6 days for some accounts, as documented in the actor's platform notes. If you need same-day detection of a specific new video, scrape it with video_detail as soon as you have its URL, or monitor the hot-search board, which updates continuously. Time-sensitive TikTok and Bilibili monitoring is not affected by this lag.
Do I need a Douyin account, cookie, or Chinese phone number?
No. Videos, comments, creator profiles, live rooms, and the hot-search board are all public and are scraped through the built-in residential proxy without any login. The optional cookie field exists for gated content such as private collections or certain personalized feeds. If you do paste a cookie, it is stored as a secret input field and only applied to that run.
What does the Douyin trending mode actually return?
Douyin's trending surface is a hot-search keyword board, not a video feed, so trending rows have item_type hot_search_keyword with the phrase in title and a numeric hot_value score for ranking. You must set platform to douyin; on auto, trending defaults to Bilibili. Set maxItems to control how many phrases you receive. To get videos for a trending phrase, scrape specific videos or creators that match it with video_detail or user_posts.
Can I scrape Douyin, TikTok, and Bilibili in the same run?
Yes. Put URLs from all three platforms in the urls list and leave platform on auto; each URL is routed to the right platform and every row comes back with a platform field and the same column names. The mode must be valid for each platform, so avoid live_info or trending for TikTok URLs and user_likes for Bilibili URLs, which return error rows instead of data.