Douyin Scraper & Video Downloader (TikTok China)
Pricing
from $6.80 / 1,000 results
Douyin Scraper & Video Downloader (TikTok China)
Scrape Douyin (抖音, TikTok China) videos by URL: video description, author profile (nickname, Douyin ID, bio), like/comment/share/collect counts, music, hashtags, cover and a downloadable no-watermark video URL. Paste video links, get clean data. Export to JSON, CSV or Excel.
Pricing
from $6.80 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Douyin Scraper & Video Downloader (TikTok China)
Here is one real result, with every field the actor returns:
{"coverUrl": "https://p5-ex-gddgtc-sign.douyinpic.com/tos-cn-i-dy/4fdd97b652dc49ecb33ba0f8da7a6da4~tplv-dy-resize-walign-adapt-aq:540:q75.webp","awemeId": "7663425423312817471","postType": "video","desc": "小学必备单词drive 国际音标拼读 @词老大英语 #侯马英语启蒙 #国际音标 #小学英语教学","videoUrl": "https://www.douyin.com/video/7663425423312817471","createTime": "2026-07-17T09:24:42.000Z","authorNickname": "词老大英语","authorDouyinId": "cilaoda","authorSecUid": "MS4wLjABAAAAp0ouJ60K9CgtmESy97b9ywEL0FxYa7MOcoJFbQFwzjQ","authorSignature": "侯马词老大英语老师,专业八级!","authorAvatar": "https://p11.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_546cf1f2e18649d4bfe42fa142bce356.jpeg","authorVideoCount": 669,"authorFollowersCount": null,"authorUrl": "https://www.douyin.com/user/MS4wLjABAAAAp0ouJ60K9CgtmESy97b9ywEL0FxYa7MOcoJFbQFwzjQ","likeCount": 20,"commentCount": 2,"shareCount": 3,"collectCount": 11,"playCount": 0,"durationMs": 26867,"width": 1282,"height": 818,"downloadUrl": "https://aweme.snssdk.com/aweme/v1/play/?video_id=v0d00fg10000d9cv9dnog65iokknpicg&ratio=720p&line=0","downloadUrlWatermarked": "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fg10000d9cv9dnog65iokknpicg&ratio=720p&line=0","imageUrls": [],"musicTitle": "@词老大英语创作的原声一词老大英语","musicAuthor": "词老大英语","musicId": "7663425497971346227","musicDurationSec": 26,"hashtags": ["侯马英语启蒙", "国际音标", "侯马英语补习班", "侯马英语培训排名", "小学英语教学"],"collectionName": "国际音标|侯马小学英语单词速记法","pageUrl": "https://www.douyin.com/video/7663425423312817471","source": "douyin.com","observedAt": "2026-08-10T14:33:03.979Z","error": null}
The most complete Douyin scraper available. It returns every field Douyin exposes for each post (description, author profile, engagement counts, music, hashtags, cover), plus a downloadable no-watermark video URL, and lets you paste any mix of desktop links, H5 share links, short links or raw video IDs to get exactly the videos you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor takes one or more Douyin (抖音, TikTok China) video links and returns one clean record per video: description, author profile (nickname, Douyin ID, sec_uid, bio, avatar, video count), like/comment/share/collect/play counts, video dimensions and duration, music (title, author, ID, duration), hashtags, cover image, and both a no-watermark and a watermarked downloadable video URL. Image posts return their image URLs in imageUrls. It accepts full desktop links, H5 share links, short links, or raw numeric video IDs. Missing source values are returned as null, never invented.
Optional paid add-ons translate the caption into English, classify its sentiment, and extract topic tags and a content category.
Quickstart
Open the actor, paste this into the input, and press Run. It returns clean data for two Douyin videos.
{"videoUrls": ["https://www.douyin.com/video/7663425423312817471","https://www.douyin.com/video/7641816063399456127"],"maxVideos": 10}
You can mix link formats in one run, for example a short https://v.douyin.com/xxxxx/ link and a raw numeric ID.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
videoUrls | string[] | no | two sample videos | Douyin video links: desktop URLs, H5 share links, short links, or raw numeric video IDs. One run processes the whole list. |
maxVideos | integer | no | 10 | Maximum videos to collect across all URLs. Free plans are capped at 10. |
withTranslate | boolean | no | false | Paid add-on. AI translates each caption into natural English. Billed per video only when the AI returns usable output. Paid plans only. |
withSentiment | boolean | no | false | Paid add-on. AI classifies each caption's sentiment with a confidence score. Paid plans only. |
withTopics | boolean | no | false | Paid add-on. AI extracts topic tags and a broad content category per caption. Paid plans only. |
Output reference
One dataset item per video. Types: string, integer, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
awemeId | string | Douyin video ID (unique per video). |
postType | string | video or image (photo post). |
desc | string | Video caption/description text. |
videoUrl | string | Canonical Douyin video URL. |
pageUrl | string | The page URL the record was resolved from. |
coverUrl | string | Cover/thumbnail image URL. |
createTime | string | ISO 8601 publish time. |
authorNickname | string | Author display name. |
authorDouyinId | string | Author Douyin ID (handle). |
authorSecUid | string | Author sec_uid (stable profile ID). |
authorSignature | string | Author bio/signature. |
authorAvatar | string | Author avatar image URL. |
authorVideoCount | integer | Number of videos on the author profile, or null. |
authorFollowersCount | integer | Author follower count, or null when not exposed. |
authorUrl | string | Author profile URL. |
likeCount | integer | Number of likes. |
commentCount | integer | Number of comments. |
shareCount | integer | Number of shares. |
collectCount | integer | Number of saves/collects. |
playCount | integer | Play count when exposed (often 0 on Douyin). |
durationMs | integer | Video duration in milliseconds. |
width | integer | Video width in pixels. |
height | integer | Video height in pixels. |
downloadUrl | string | No-watermark downloadable video URL. |
downloadUrlWatermarked | string | Watermarked downloadable video URL. |
imageUrls | string[] | Image URLs for photo posts. Empty for video posts. |
musicTitle | string | Background music title. |
musicAuthor | string | Music author. |
musicId | string | Music ID. |
musicDurationSec | integer | Music duration in seconds. |
hashtags | string[] | Hashtags parsed from the caption. |
collectionName | string | Name of the collection/playlist the video belongs to, or null. |
source | string | Data source. Always douyin.com. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
aiTranslation | string | English translation of the caption (translate add-on). |
aiSentiment | string | Sentiment label positive/negative/neutral (sentiment add-on). |
aiSentimentScore | number | Sentiment confidence score (sentiment add-on). |
aiTopics | string[] | Topic/keyword tags (topics add-on). |
aiCategory | string | Broad content category (topics add-on). |
error | string | Present only on a failed item: a record with a populated error field is written instead. |
Example output record
Real record from a live run (input {"videoUrls":["https://www.douyin.com/video/7663425423312817471"]}):
{"awemeId": "7663425423312817471","postType": "video","desc": "小学必备单词drive 国际音标拼读 #国际音标 #小学英语教学","authorNickname": "词老大英语","authorDouyinId": "cilaoda","likeCount": 20,"commentCount": 2,"shareCount": 3,"collectCount": 11,"durationMs": 26867,"downloadUrl": "https://aweme.snssdk.com/aweme/v1/play/?video_id=v0d00fg10000d9cv9dnog65iokknpicg&ratio=720p&line=0","hashtags": ["侯马英语启蒙", "国际音标", "小学英语教学"],"source": "douyin.com","observedAt": "2026-08-10T14:33:03.979Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~douyin-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"videoUrls":["https://www.douyin.com/video/7663425423312817471"]}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~douyin-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"videoUrls":["https://v.douyin.com/xxxxx/","7641816063399456127"],"maxVideos":50}'
Apify CLI:
apify call scrapers_lat/douyin-scraper \--input '{"videoUrls":["https://www.douyin.com/video/7641816063399456127"],"withTranslate":true}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per video returned (
resultevent). See the pricing tab for the current per-result price. - AI add-ons. Translation, sentiment and topics each bill per video only when the AI returns usable output. They are disabled by default and require a paid plan.
- No charge on failure. A video that cannot be resolved writes a record with a populated
errorfield and is not charged. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 videos per run. Upgrade for higher
maxVideos.
FAQ and troubleshooting
A video returned an error. Why? The link could not be resolved (deleted, private, region-locked, or a malformed ID). Confirm the video opens in a browser. Errored items are not charged.
Which link formats are accepted?
Full desktop links, H5 share links (iesdouyin.com/share/video/...), short links (v.douyin.com/xxxxx/), and raw numeric video IDs. You can mix them in one run.
Is the download URL really watermark-free?
downloadUrl is the no-watermark stream and downloadUrlWatermarked is the watermarked one. These are time-limited CDN URLs, so download promptly.
Why is authorFollowersCount or playCount null or 0?
Douyin does not always expose these on the video payload. Missing values are returned as null and playCount is often 0; the actor never invents counts.
Can I scrape photo posts?
Yes. Photo posts return postType: image with the image URLs in imageUrls.
Is this an official Douyin/TikTok tool? No. This actor is independent and has no affiliation with Douyin, ByteDance or TikTok. It reads only data that is publicly available for the videos you provide. Use it in accordance with Douyin's terms and applicable copyright.
Related scrapers
- YouTube Scraper: YouTube video metadata and stats.
- Instagram Reels Scraper: Instagram Reels video data.
- TikTok Shop Product Scraper: TikTok Shop product listings.
- TikTok Hashtag Analytics Scraper: TikTok hashtag metrics.
- Vimeo Scraper: Vimeo video metadata.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Douyin, ByteDance or TikTok. Accesses only publicly available data for the videos you provide. Use in accordance with Douyin's terms and applicable copyright.
