Douyin User Post Videos avatar

Douyin User Post Videos

Pricing

$0.05 / actor start

Go to Apify Store
Douyin User Post Videos

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

wang wei

Maintained by Community

Actor 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:

FieldWhat it is
description / hasDescriptionthe post text; hasDescription: false marks a caption-less post, kept not dropped
diggCount / commentCount / shareCount / collectCountthe four counters Douyin exposes, kept separate
recommendCountthe For-You recommend count — the closest thing to reach this source offers
viewCount / viewsAvailablealways null / false — Douyin does not expose view counts here
durationSeconds / durationMslength converted from Douyin's milliseconds
isVideo / imageCountvideo vs image post, so the two formats can be compared
isAdpromoted posts, flagged rather than mixed into organic reach
musicTitlethe audio used, including original sounds
createdAt / shareUrlpublish time and a working link
secUid / authorName / authorUidthe 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 diggCount and filter isAd = 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 — viewCount is always null with viewsAvailable: false, because this source does not expose view counts. recommendCount is 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, imageCount and durationSeconds let 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 (播放量) — viewCount is permanently null and viewsAvailable is false, 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. Use recommendCount as the proxy and say so when you report it.
  • A profile-level verdict on account size — the short_id profile lookup returns only a minimal profile, so reportedTotalPosts and follower count can be null. That is a light response, not missing data; profileFieldsAvailable records what came back, and passing a sec_uid directly unlocks the richer counters.
  • Reading hasDescription: false as 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_uid returns an empty list with has_more = 0 rather than an error. Read warnings before concluding anything about the account.
  • Weibo, Kuaishou or Xiaohongshu accounts — the sec_uid input is Douyin-specific. Cross-platform creator research needs the matching actor for that platform.

🚀 Quick start

  1. Open the Actor and press Start (defaults to one public account).
  2. Paste accounts — a sec_uid (MS4wLjABAAAA…), a douyin.com/user/<sec_uid> profile URL, or a numeric short_id that this Actor resolves for you.
  3. Sort by diggCount to see what worked; filter isAd = false for organic only.

📥 Input parameters

ParameterTypeDefaultWhat it does
accountslistone public accountsec_uids, profile URLs or short_ids, one per line, up to 20 per run.
sortselectnewestnewest or popular (most liked).
maxPostsPerAccountnumber601–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

  1. 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.
  2. 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.
  3. All engagement lives inside statistics; nothing is read from the top level.
  4. View counts stay null and viewsAvailable stays false, because this source does not expose them. Reporting 0 would 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