Douyin 抖音 Video Scraper - Metadata + MP4 Downloads
Pricing
from $3.99 / 1,000 videos
Douyin 抖音 Video Scraper - Metadata + MP4 Downloads
Extract Douyin (抖音) video metadata: statistics, music tracks, hashtags, mentions, chapters, and creator profiles in 56 structured fields. 1,000 videos in ~70 seconds. Optional MP4, cover, and slideshow downloads. Accepts video URLs, share links, and bare aweme IDs.
Pricing
from $3.99 / 1,000 videos
Rating
0.0
(0)
Developer
Zen Studio
Maintained by CommunityActor stats
0
Bookmarked
62
Total users
26
Monthly active users
19 hours ago
Last modified
Categories
Share
Douyin Video Scraper (抖音) | Metadata, Music, Hashtags & MP4 Downloads (2026)
1,000 Douyin (抖音) videos in ~70 seconds: full video metadata, statistics, music tracks, hashtags, chapters, and creator profiles in clean structured JSON. Optional MP4, cover, and slideshow downloads.

Copy to your AI assistant
zen-studio/douyin-video-scraper on Apify. Scrapes Douyin videos with full metadata: statistics, music, hashtags, chapters, video tags, mentions, location, series, plus 42-field authorMeta. Flat top-level videoUrl/audioUrl(MP3)/coverUrl/durationSeconds in every row for quick download access (data also nested under videoMeta/musicMeta). Optional MP4/cover/slideshow downloads to KV store (kvUrl returned per file). Call ApifyClient("TOKEN").actor("zen-studio/douyin-video-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. videoUrls accepts douyin.com/video/<id>, iesdouyin share, v.douyin.com short links, or bare numeric aweme IDs. PPE: $6.99/1k videos, $4.99/1k MP4 downloads, covers+slideshow free. Steeper discounts on Starter/Scale/Business tiers. Token: https://console.apify.com/account/integrations
| Zen Studio · Chinese-platform suite • RedNote (小红书), Douyin (抖音), Xigua (西瓜视频) | |||
|
➤ You are here |
Keyword + filters, 60+ fields |
Followers, posts & hashtags |
Comments & nested replies |
How to Scrape Douyin Videos
Basic: metadata only
{"videoUrls": ["https://www.douyin.com/video/7577614489533680959","7630302640823912635"]}
With cover images saved to your storage
{"videoUrls": ["https://www.douyin.com/video/7577614489533680959","https://v.douyin.com/iAbc123/"],"shouldDownloadCovers": true}
Kitchen-sink: metadata + MP4 + cover + slideshow
{"videoUrls": ["7577614489533680959"],"shouldDownloadVideos": true,"shouldDownloadCovers": true,"shouldDownloadSlideshowImages": true}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
videoUrls | string[] | required | Douyin video URLs, share links, short links, or bare numeric aweme IDs. |
shouldDownloadVideos | boolean | false | Save MP4 video files to your key-value store. Adds $4.99 per 1,000 successful downloads. Image-text posts have no MP4. |
shouldDownloadCovers | boolean | false | Save each video's cover image (JPEG) to your key-value store. Free. |
shouldDownloadSlideshowImages | boolean | false | For image-text posts, save every slide image to your key-value store. Free. |
videoKvStoreName | string | none | Optional named key-value store for downloads. Leave empty to use the run's default store. |
proxyConfiguration | object | Apify Residential | Defaults to China residential with Hong Kong fallback. Override only if you have a specific proxy requirement. |
Accepted video input formats
| Format | Example |
|---|---|
| Browser address bar URL | https://www.douyin.com/video/7577614489533680959 |
| App share link (auto-resolved) | https://v.douyin.com/iAbc123/ |
| Legacy share URL | https://www.iesdouyin.com/share/video/7577614489533680959/ |
| Bare numeric aweme ID | 7577614489533680959 |
What Data Can You Extract from Each Douyin Video?
One row per video with deeply nested rich blocks. The headline numbers:
- 56 top-level fields per video: identity, captions, timestamps, locality, content flags, type labels, plus eleven nested object/array blocks.
- 42 author fields under
authorMeta: covering everything from total likes received to school, badge label, custom username, cross-platform IDs, and five avatar sizes. - 25 video media fields under
videoMeta: multi-quality variants (H.264, H.265, low-bitrate), bit-rate ladder, dimensions, sprite preview, andcdnUrlExpiresAtso you know when CDN links die. - 45 music fields under
musicMeta: full track + artist info, owner attribution, durations, audition snippets, commerce flags. - 13 engagement counters under
statistics: likes, comments, shares, plays, downloads, forwards, collects, plus admire and live-watch counts.
Per-video fields (top level)
- Quick media links:
videoUrl(direct MP4 playback/download URL),audioUrl(original-sound / track MP3),coverUrl(cover image),durationSeconds(video length in seconds). Flat top-level fields for download bots and no-code pipelines (n8n, Make, Zapier). The same data, with more quality variants, also lives undervideoMeta/musicMeta. - Identity:
id,url,shareUrl,type(video/imageText/story),awemeType+awemeTypeLabel(video,imageText,ad,forward,duet,story, …),mediaType+mediaTypeLabel(video,imageText,image,audio),inputUrl - Content:
text,caption,itemTitle,previewTitle,descLanguage - Timing & locality:
createTime(unix),createDate(ISO),region(creator IP),city+cityCode(upload location, GB/T 2260) - Flags:
isPinned,isAd,isPgc,isShared,isStory,is24Story,is25Story,isFirstVideo,isLifeItem,isKaraoke,isDuetSing,isFantasy,isInScope,isImageBeat,isVr
Author / creator fields (authorMeta, ~40 fields)
id, secUid, name, username, customUsername, verified, verificationReason, signature (bio), five avatar sizes (avatarThumb, avatarMedium, avatar168, avatar300, avatarLarge), bgImage, followingCount, followersCount, followersCountStr, totalLikesReceived, likesGivenCount, awemeCount, gender, language, country, ipLocation, verifyType, customVerifyText, enterpriseVerifyReason, userAge, birthday, constellation, isLiving, roomId, isStar, usesSeries, withShopEntry, commerceUserLevel, school, customUsernameUpdatedAt, shareUrl, shareQrCodeUri, crossPlatform, mcnInfo.
Video media (videoMeta)
Multi-quality playback URLs (playUrl, downloadUrl, playUrlH264, playUrlH265, playUrlLowBitrate), full bit-rate ladder (bitRates[] with quality, fps, codec flag), dimensions (width, height, ratio, format), four cover variants (cover, coverOriginalScale, originCover, dynamicCover, animatedCover), sprite-sheet preview (bigThumbs), encoder hints (isBytevc1, isHdr, useStaticCover, horizontalType, isLongVideo, hasWatermark), and cdnUrlExpiresAt: the unix timestamp when the playback URLs stop working.
Music / audio (musicMeta)
Track record: id, title, author, album, artists[], artistUserInfos[], musicianUserInfos[], plus duration, playUrl, coverThumb, coverMedium, coverLarge, ownership flags (isOriginal, isPgc, isCommerce), owner attribution (ownerId, ownerHandle, ownerNickname, secUid).
Engagement (statistics)
diggCount, commentCount, shareCount, collectCount, downloadCount, playCount, forwardCount, admireCount, whatsappShareCount, liveWatchCount, exposureCount, loseCount, loseCommentCount. Note: playCount is server-hidden by Douyin and returns 0.
Optional downloads
When you toggle them on, downloaded media lands in your key-value store and the row's videoFile / coverFile / slideshowFiles fields each carry:
{"kvStoreKey": "7577614489533680959.mp4","kvStoreId": "GcaUbB3ejAQUjie4o","kvUrl": "https://api.apify.com/v2/key-value-stores/GcaUbB3ejAQUjie4o/records/7577614489533680959.mp4","sizeBytes": 5328417,"mimeType": "video/mp4","sourceUrl": "https://v5-hl-mly-ov.zjcdn.com/..."}
kvUrl is the public Apify API URL of the stored bytes; visit it from your Apify account (or fetch it with your token) to get the file. When downloads are off (or fail), those fields are null.
Output Example
Every top-level field below is always present in every row. Arrays and
nested objects are trimmed for readability; production rows contain
the full content (e.g. videoMeta has 25 sub-fields, authorMeta has
42, musicMeta has 45, permissions has 23).
{"id": "7577614489533680959","url": "https://www.douyin.com/video/7577614489533680959","shareUrl": "https://www.iesdouyin.com/share/video/7577614489533680959/?...","videoUrl": "https://v5-hl-mly-ov.zjcdn.com/.../?...","audioUrl": "https://lf9-music-east.douyinstatic.com/obj/ies-music-hj/7577614877490023225.mp3","coverUrl": "https://p3-sign.douyinpic.com/tos-cn-i-dy/...?...","durationSeconds": 1082.5,"type": "video","awemeType": 0,"awemeTypeLabel": "video","mediaType": 4,"mediaTypeLabel": "video","isStory": false,"text": "这个贵州五线小城,凭什么是中国"吃商"最高的城市?\n#抖音美食班当季新菜单 #贵州美食 #老吃家","caption": "糟了,捅了贵州老吃家的窝了!","itemTitle": "这个贵州五线小城,凭什么是中国"吃商"最高的城市?","previewTitle": "这个贵州五线小城,凭什么是中国"吃商"最高的城市?","descLanguage": "zh","createTime": 1764320400,"createDate": "2025-11-28","region": "CN","city": "Shanghai","cityCode": "310000","isPinned": false,"isAd": false,"isPgc": false,"isShared": false,"is24Story": false,"is25Story": false,"isFirstVideo": false,"isLifeItem": true,"isKaraoke": false,"isDuetSing": false,"isFantasy": false,"isInScope": false,"isImageBeat": false,"isVr": false,"authorMeta": {"id": "75736792009","secUid": "MS4wLjABAAAAjjwfy25gmtDlk8Wg6FNIBzHdHicG6BpZZNvWoTLL8S4","name": "盗月社食遇记","username": "124700482","customUsername": "daoyueshe","verified": true,"signature": "❤️心里有光,哪儿都美❤️","avatarLarge": "https://p26.douyinpic.com/aweme/1080x1080/aweme-avatar/...","totalLikesReceived": 17589628,"awemeCount": 685,"gender": "male","country": "CN","isLiving": false},"videoMeta": {"duration": 1082500,"width": 1280,"height": 720,"ratio": "720p","format": "mp4","isLongVideo": true,"isHdr": false,"isBytevc1": false,"hasWatermark": true,"cdnUrlExpiresAt": 1777980189,"playUrl": "https://v5-hl-mly-ov.zjcdn.com/.../?...","downloadUrl": "https://v5-hl-mly-ov.zjcdn.com/.../?...","playUrlH265": "https://v5-hl-mly-ov.zjcdn.com/.../?...","bitRates": [{ "quality": "720_1_1", "bitRate": 1175087, "isH265": true, "fps": 30, "qualityType": 11, "url": "..." }],"cover": "https://p3-sign.douyinpic.com/tos-cn-i-dy/...?...","originCover": "https://p5-ex-gddgtc-sign.douyinpic.com/tos-cn-p-0015/...~tplv-dy-360p.webp?...","dynamicCover": "https://p3-sign.douyinpic.com/obj/tos-cn-i-dy/...?..."},"musicMeta": {"id": "7577614774507424547","title": "@盗月社食遇记创作的原声","author": "盗月社食遇记","isOriginal": true,"duration": 1082,"playUrl": "https://lf9-music-east.douyinstatic.com/obj/ies-music-hj/7577614877490023225.mp3","ownerId": "75736792009","ownerHandle": "daoyueshe","ownerNickname": "盗月社食遇记","secUid": "MS4wLjABAAAAjjwfy25gmtDlk8Wg6FNIBzHdHicG6BpZZNvWoTLL8S4"},"statistics": {"diggCount": 4037193,"shareCount": 5135670,"commentCount": 162235,"collectCount": 855021,"playCount": 0,"downloadCount": 634,"forwardCount": 0,"admireCount": 0},"permissions": {"canDuet": true,"canStitch": false,"canDownload": false,"canShare": true,"canComment": true,"canRepost": true,"canSave": true,"canShowComment": true,"isPrivate": false,"isProhibited": false,"isInReviewing": false,"isDeleted": false,"isReviewed": true,"withGoods": false},"interaction": {"canComment": true,"canShowComment": true,"canShare": true,"canForward": true,"commentDisabled": false},"anchors": [{ "type": 5001, "title": "贵州美食店打卡", "url": "https://www.douyin.com/poi/...", "iconUrl": "https://..." }],"commerce": {"isAd": false,"isCommerceItem": false,"starAtlasOrderId": null,"branded": false,"withGoods": false},"risk": {"type": 0,"tag": null,"warn": false,"noticeText": null},"share": {"title": "盗月社食遇记发布了一个抖音作品...","desc": "短视频生成日记!","shareUrl": "https://www.iesdouyin.com/share/video/7577614489533680959/","shareUrlSigned": "https://www.iesdouyin.com/share/video/7577614489533680959/?signed=...","shareWeiboUrl": "https://www.iesdouyin.com/.../?platform=weibo","shareQqUrl": "https://www.iesdouyin.com/.../?platform=qq","shareQzoneUrl": "https://www.iesdouyin.com/.../?platform=qzone"},"xiguaCrossPost": {"isOnXigua": false,"xiguaItemId": null,"xiguaShareUrl": null},"aiMetadata": {"aiGeoHot": 1,"aiGeoNote": 1,"aiSmartdoc": 3,"aiNoteV2": 1,"aiNoteVertical": 1,"rawSeo": null,"rawExtra": null},"images": [],"mentions": [{ "secUid": "MS4wLjABAAAA...", "userId": "98123450123", "nickname": "@朋友A" }],"hashtags": [{ "id": "7572059655971538944", "name": "抖音美食班当季新菜单" },{ "id": "1594485689837575", "name": "贵州美食" },"... +3 more"],"videoTags": [{ "name": "美食", "level": 1 },{ "name": "美食探店", "level": 2 },{ "name": "餐厅探店", "level": 3 }],"chapters": [{ "startMs": 30000, "title": ""吃商"最高的城市", "coverUrl": "https://p26-sign.douyinpic.com/...", "detail": null },{ "startMs": 47000, "title": "36块8的自助烤小肠!", "coverUrl": "https://p26-sign.douyinpic.com/...", "detail": "还有20多种肉,这物价惊呆我" },"... +14 more"],"series": {"id": "7486681757459154981","name": "吃垮中国街头美食","episode": 8,"total": 10,"coverUrl": "https://p3-sign.douyinpic.com/obj/douyin-user-image-file/...?...","shareUrl": "https://www.iesdouyin.com/share/mix/detail/7486681757459154981/","updateTime": 1774195445},"location": {"poiId": "6601234567890123456","poiName": "老凯里酸汤鱼(南门店)","address": "贵州省贵阳市南明区...","latitude": 26.5783,"longitude": 106.7135,"city": "贵阳市","province": "贵州省"},"videoFile": {"kvStoreKey": "7577614489533680959.mp4","kvStoreId": "GcaUbB3ejAQUjie4o","kvUrl": "https://api.apify.com/v2/key-value-stores/GcaUbB3ejAQUjie4o/records/7577614489533680959.mp4","sizeBytes": 215476832,"mimeType": "video/mp4","sourceUrl": "https://v5-hl-mly-ov.zjcdn.com/.../?..."},"coverFile": {"kvStoreKey": "7577614489533680959.jpg","kvStoreId": "GcaUbB3ejAQUjie4o","kvUrl": "https://api.apify.com/v2/key-value-stores/GcaUbB3ejAQUjie4o/records/7577614489533680959.jpg","sizeBytes": 32366,"mimeType": "image/jpeg","sourceUrl": "https://p3-sign.douyinpic.com/tos-cn-i-dy/...?..."},"slideshowFiles": null,"inputUrl": "7577614489533680959"}
Notes on optional / context-dependent fields:
imagesis empty for plain video posts and populated (withwidth/height/url) for image-text posts (type = "imageText").slideshowFilesisnullfor video posts and populated only when Download slideshow images is on AND the post is image-text.videoFileandcoverFilearenullunless Download MP4 videos / Download cover images are toggled on.locationisnullwhen no POI is attached.mentions,chapters,series,anchorsare commonly empty arrays /nullfor casual posts.
Important: URL Durability
Different URL types in the output have very different lifespans. Plan your downstream pipeline accordingly.
| Field | Lifespan | Note |
|---|---|---|
id, url (canonical video URL) | Permanent | https://www.douyin.com/video/<id>, never expires. The reliable reference. |
shareUrl, share.shareUrl | Permanent | https://www.iesdouyin.com/share/video/<id>/, also permanent. |
share.shareUrlSigned | ~24 hours | Personalised share URL with tracking signature; the unsigned share.shareUrl is the long-term version. |
authorMeta.shareUrl | Permanent | Profile share URL. |
authorMeta.avatarThumb … avatarLarge (5 sizes) | Permanent | CDN-direct, no signature. |
musicMeta.playUrl, musicMeta.coverLarge | Permanent | CDN-direct, no signature. |
videoMeta.cover, videoMeta.originCover, videoMeta.dynamicCover, videoMeta.animatedCover, images[].url, chapters[].coverUrl, series.coverUrl | ~14–30 days | Signed CDN URLs (*-sign.douyinpic.com). The query string holds the signature; download or re-upload to your own storage if you need them long-term. |
videoMeta.playUrl, videoMeta.downloadUrl, videoMeta.playUrlH264, videoMeta.playUrlH265, videoMeta.playUrlLowBitrate, videoMeta.bitRates[].url | ~1 hour | Short-lived video CDN URLs. The exact expiry time is in videoMeta.cdnUrlExpiresAt (unix-seconds); check it before downloading. |
The id and url fields are the only truly permanent references. Build your downstream pipeline around them, then re-resolve fresh media URLs whenever you need them, or enable shouldDownloadVideos / shouldDownloadCovers to keep copies in your own storage.
Advanced Usage
Save downloads to a named key-value store
{"videoUrls": ["7577614489533680959", "7630302640823912635"],"shouldDownloadVideos": true,"shouldDownloadCovers": true,"videoKvStoreName": "douyin-archive-2026-q4"}
Pair the run with a daily schedule and the named store accumulates a stable archive across runs, instead of being wiped with each run's default storage.
Force a specific proxy country
{"videoUrls": ["7577614489533680959"],"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "HK"}}
The actor defaults to China residential with a Hong Kong fallback. Override only when you have a specific egress requirement.
Bulk-archive an image-text post (slideshow)
{"videoUrls": ["https://www.iesdouyin.com/share/video/7630302640823912635/"],"shouldDownloadSlideshowImages": true,"shouldDownloadCovers": true}
For image-text posts, every slide is saved as a separate file in the key-value store (<aweme_id>_slide_1.jpg, <aweme_id>_slide_2.jpg, …). Plain video posts ignore this toggle.
Pricing: Pay Per Event (PPE)
You pay per video scraped, with optional add-ons for downloaded media. Apify subscribers get steeper discounts on every tier.
| Free | Starter | Scale | Business | |
|---|---|---|---|---|
| Video scraped (one row in your dataset) | $6.99 / 1k | $4.99 / 1k | $4.49 / 1k | $3.99 / 1k |
| MP4 download (one saved video file) | $4.99 / 1k | $3.99 / 1k | $3.49 / 1k | $2.99 / 1k |
| Cover image | Free | Free | Free | Free |
| Slideshow images | Free | Free | Free | Free |
Two trivial platform events also fire (apify-actor-start once per run, apify-default-dataset-item once per row at $0.01 / 1,000), covered by the free Apify tier in practice.
FAQ
What is Douyin (抖音)? Douyin is ByteDance's Chinese short-video platform, the domestic counterpart of TikTok: same company and format, separate app and catalogue. This actor pulls the full metadata, music, and creator profile behind any Douyin video, plus the MP4 itself on request.
How many fields are returned per video?
56 top-level fields, plus 11 nested rich blocks. The biggest are authorMeta (42 author fields), musicMeta (45 track fields), videoMeta (25 media fields), permissions (23 flags), and statistics (13 counters).
What types of inputs are accepted?
Browser address-bar URLs (douyin.com/video/<id>), legacy share URLs (iesdouyin.com/share/video/<id>/), app share short links (v.douyin.com/..., auto-resolved), and bare numeric aweme IDs. You can mix all of them in one videoUrls array.
Where are the video and audio download URLs?
Every row carries flat top-level fields: videoUrl (direct MP4), audioUrl (original-sound / track MP3), coverUrl, and durationSeconds. They are included in every result at no extra cost, so a download bot or no-code flow can grab the URL and pull the file itself. The shouldDownloadVideos toggle is only for when you'd rather we copy the MP4 bytes into your key-value store for long-term archival. The videoUrl CDN link is short-lived (check videoMeta.cdnUrlExpiresAt); the audioUrl is long-lived.
How long do download URLs last?
The CDN URLs in videoMeta (playback / download / multi-bitrate) and the top-level videoUrl typically live about an hour. The exact expiry is in videoMeta.cdnUrlExpiresAt. Cover and avatar URLs live ~14-30 days, and audioUrl is long-lived. The post url is permanent. If you need long-term media, enable shouldDownloadVideos / shouldDownloadCovers to copy the bytes into your own storage.
Do video downloads work for image-text posts?
No. Image-text posts have no MP4. Use shouldDownloadSlideshowImages instead; that saves every slide image (one file per slide).
Where are downloaded files saved?
By default, into the run's own key-value store, which you can find on the run's Storage tab. Set videoKvStoreName to a stable name (e.g. douyin-archive) to accumulate downloads across runs in one named store instead.
How fresh is the data? Live: every field is fetched on demand at run time. No caching.
Are statistics live?
Yes. diggCount, commentCount, shareCount, collectCount, playCount, etc. are pulled live with each run. Note that playCount is often 0; Douyin hides the play count from third-party clients on most videos.
What's the difference between hashtags and videoTags?
hashtags are the #tags the creator typed in the caption. videoTags is Douyin's own 3-level content classification; e.g. 美食 (level 1, top-level category) → 美食探店 (level 2) → 餐厅探店 (level 3, leaf). The classification is server-assigned and is one of the more interesting signals on the platform.
What's the difference between permissions and interaction?
permissions are author-set + platform-set visibility flags (can the post be downloaded, duetted, stitched, shared, commented). interaction covers the engagement layer: comment-input placeholder text, AB-test flags, audio-comment permissions, image-challenge config.
What's the difference between text, caption, itemTitle, and previewTitle?
Douyin returns up to four caption variants per post. text is the full creator-typed description (with hashtags inline). caption is the trimmed version Douyin shows in some feeds. itemTitle is the headline-style title (often only set on PGC content). previewTitle is the share-card preview text. They overlap heavily; pick whichever fits your use case.
Can I scrape comments / replies / followers / liked videos? Not in this actor; per-video metadata, author profile, and downloads only. Use Douyin Comments Scraper for comment threads and Douyin Profile Scraper for a creator's full profile and post history (follower lists are not exposed by Douyin's public surface).
Does the actor work for any Douyin video? Public videos only. Private posts, deleted videos, region-locked posts (where the creator's region or the post's geofence excludes our egress), and accounts that have blocked external access are not addressable.
Do I need a Douyin account or cookies? No. Paste video URLs or aweme IDs and run; no account, cookie export, or QR login is involved.
How do I export the data? The dataset downloads as JSON, CSV, Excel, XML, or HTML from the run's Storage tab, or via the Apify API. Downloaded MP4s, covers, and slideshow images sit in your key-value store with direct URLs.
How do I find videos to scrape at scale?
Chain the suite: Douyin Search Scraper finds videos by keyword and Douyin Profile Scraper lists a creator's full catalogue; feed the resulting url or id values straight into videoUrls here.
Is it legal to scrape Douyin videos? The actor collects publicly available video data only, nothing behind a login. You are responsible for complying with Douyin's terms of service, the creator's copyright, and applicable data protection law (GDPR, CCPA, PIPL), especially before storing or republishing downloaded media.
What's the maximum number of videos per run? 10,000 per run. Inputs are deduplicated by aweme ID so duplicates cost nothing.
More Zen Studio scrapers for Chinese platforms
🎬 Short-video & social
Douyin 抖音
RedNote 小红书
Xigua 西瓜视频
🛒 E-commerce
Taobao 淘宝
JD.com 京东
1688 阿里巴巴
Goofish 闲鱼
🏠 Real estate & autos
Anjuke 安居客
58.com 58同城
Autohome 汽车之家
Support
- Bugs: Issues tab
- Features: Issues tab
Legal Compliance
Extracts publicly available data from Douyin (抖音). Users must comply with Douyin's terms of service and applicable data protection regulations (GDPR, CCPA, PIPL).
Structured Douyin video metadata: engagement, music, hashtags, chapters, full creator profile. For any public video, in clean JSON. Optional MP4, cover, and slideshow downloads.