Douyin User Post Videos
Pricing
$0.05 / actor start
Douyin User Post Videos
🎵 Douyin User Post Videos | An account's posts, with the counters Douyin actually gives Give it a sec_uid, profile URL or short_id and get every post as a row: description, likes, comments, shares, collects, duration, music, publish time and link — plus a per-account summary with median likes, the…
Pricing
$0.05 / actor start
Rating
0.0
(0)
Developer
wang wei
Maintained by CommunityActor stats
0
Bookmarked
38
Total users
35
Monthly active users
13 days ago
Last modified
Categories
Share
🎵 Douyin User Post Videos
An account's posts, with the counters Douyin actually gives — and a plain statement of the one it does not.
✨ What you get
One dataset row per post:
| Field | What it is |
|---|---|
description / hasDescription | the post text; hasDescription: false marks a caption-less post, kept not dropped |
diggCount / commentCount / shareCount / collectCount | the four counters Douyin exposes, kept separate |
recommendCount | the For-You recommend count — the closest thing to reach this source offers |
viewCount / viewsAvailable | always null / false — Douyin does not expose view counts here |
durationSeconds / durationMs | length converted from Douyin's milliseconds |
isVideo / imageCount | video vs image post, so the two formats can be compared |
isAd | promoted posts, flagged rather than mixed into organic reach |
musicTitle | the audio used, including original sounds |
createdAt / shareUrl | publish time and a working link |
secUid / authorName / authorUid | the account |
The run summary gives, per account: posts collected, the account's own post total when the lookup provides one plus your coveragePct, follower count when available, median and total likes, median comments and recommends, video-vs-image split, ad-post count, the top 5 posts by likes, and a viewsNote explaining why there are no view counts.
💼 Use cases
- Deciding whether an account's organic reach is worth buying — sort by
diggCountand filterisAd = false. A promoted post's engagement legitimately includes paid boosting, so mixing ads into an organic comparison inflates the account you are about to pay. - Reading reach at all on Douyin —
viewCountis alwaysnullwithviewsAvailable: false, because this source does not expose view counts.recommendCountis the closest available proxy: it is the For-You recommendation count, not views, but it moves with distribution. - Deciding video vs image for the next post —
isVideo,imageCountanddurationSecondslet you compare the two formats on the same account instead of assuming the format you see most is the one that works. - Running a competitor content audit — median and total likes, median comments and recommends, the video-vs-image split and the top 5 posts by likes give you a per-account baseline you can re-run monthly and diff.
✅ Who this is for
- Douyin (抖音) media buyers and creator-vetting teams who need a per-account engagement baseline — like count, comment count, share and save — before opening a negotiation.
- Content and growth teams auditing an account's recent output to decide what format and length to brief next.
- MCNs managing several accounts who need the same fields per account in one run, with posts deduplicated by aweme id so a repeated cursor cannot inflate the count.
- Overseas brands and sellers who can read Chinese captions but cannot judge Chinese account performance from the profile page alone.
❌ Who this is NOT for
- Anything that needs Douyin view counts (播放量) —
viewCountis permanentlynullandviewsAvailableisfalse, because the field arrives as 0 regardless of a post's real popularity. A 0 here would be a false statement, so nothing in this actor can tell you how many people watched. UserecommendCountas the proxy and say so when you report it. - A profile-level verdict on account size — the
short_idprofile lookup returns only a minimal profile, soreportedTotalPostsand follower count can benull. That is a light response, not missing data;profileFieldsAvailablerecords what came back, and passing asec_uiddirectly unlocks the richer counters. - Reading
hasDescription: falseas a scraping miss — those posts genuinely have no caption. They are kept because their counters are still data; dropping them would shift your averages. - An empty result as proof the account is inactive — a wrong or expired
sec_uidreturns an empty list withhas_more = 0rather than an error. Readwarningsbefore concluding anything about the account. - Weibo, Kuaishou or Xiaohongshu accounts — the
sec_uidinput is Douyin-specific. Cross-platform creator research needs the matching actor for that platform.
🚀 Quick start
- Open the Actor and press Start (defaults to one public account).
- Paste accounts — a
sec_uid(MS4wLjABAAAA…), adouyin.com/user/<sec_uid>profile URL, or a numericshort_idthat this Actor resolves for you. - Sort by
diggCountto see what worked; filterisAd = falsefor organic only.
📥 Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
accounts | list | one public account | sec_uids, profile URLs or short_ids, one per line, up to 20 per run. |
sort | select | newest | newest or popular (most liked). |
maxPostsPerAccount | number | 60 | 1–200 posts per account. Cost scales linearly with pages × accounts. |
📤 Output
- Dataset — one row per post (or a notice when nothing was collected)
- SUMMARY — per-account stats, coverage, top posts, the view-count note and warnings
⚙️ How it works
- Each input is reduced to a
sec_uid. A short_id is resolved through the provider's profile lookup first, and the resolved nickname is carried onto every row. - Posts are paged with Douyin's
max_cursor, de-duplicated by aweme id, and stopped as soon as a page adds nothing new — a repeated cursor cannot spin the run. - All engagement lives inside
statistics; nothing is read from the top level. - View counts stay
nullandviewsAvailablestaysfalse, because this source does not expose them. Reporting0would claim "nobody watched this", which is a different statement.
💰 Billing
Pay per result — you are charged for the post rows this Actor actually returns, not for the run. Accounts that yield nothing are not charged. Cost scales linearly with pages × accounts. Free tier: 5 runs/day.
❓ FAQ
Why is viewCount always null?
Douyin does not expose view counts through this data source — the field arrives as 0 regardless of the post's real popularity. A 0 here would be a false statement, so this Actor reports null plus viewsAvailable: false and uses recommendCount as the closest available reach signal.
What is recommendCount?
The For-You recommendation count. It is not views, but it moves with distribution, so it is the most useful reach proxy available here.
Why are some posts hasDescription: false?
Those posts have no caption at all. They are kept, because the engagement counters are still data and dropping them would shift your averages.
What does isAd catch?
Promoted posts. They are flagged so you can exclude them; they are not removed, because a post's total engagement legitimately includes paid boosting.
Why is reportedTotalPosts sometimes null?
The short_id profile lookup returns only a minimal profile (id, sec_uid, nickname, avatar and a few flags) — no follower count and no post total. Rather than filling those from a heavier leg that gets blocked, they stay null and profileFieldsAvailable records what the lookup actually returned. Supply a sec_uid directly if you need the counters the richer profile carries.
An account returned no posts.
Usually the sec_uid is wrong or expired: this source answers with an empty list and has_more = 0 rather than an error, so an empty result is not proof an account is inactive. The reason is in warnings.
How deep does the paging go?
As far as maxPostsPerAccount allows, following Douyin's own cursor.
📚 Resources
- Douyin public post data (no login required)
- Apify free tier: 5 runs/day, then upgrade