Douyin 抖音 Profile Scraper - 博主 Followers, Posts & Hashtags avatar

Douyin 抖音 Profile Scraper - 博主 Followers, Posts & Hashtags

Pricing

from $4.49 / 1,000 results

Go to Apify Store
Douyin 抖音 Profile Scraper - 博主 Followers, Posts & Hashtags

Douyin 抖音 Profile Scraper - 博主 Followers, Posts & Hashtags

Extract Douyin (抖音) 博主 profiles, 粉丝 counts, engagement stats, hashtags, and Douyin's server-classified video categories. 28 fields per post + 22 per author. Accepts profile URLs, share links, UserSecIDs, and numeric user IDs. Profile-only 数据采集 mode for cheap follower tracking.

Pricing

from $4.49 / 1,000 results

Rating

0.0

(0)

Developer

Zen Studio

Zen Studio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

8 hours ago

Last modified

Share

Douyin Profile Scraper (抖音) — Followers, Posts, Bio, Likes (2026)

1,000 Douyin (抖音) posts per profile in under 60 seconds — followers, engagement, hashtags, music, and the full creator profile in clean structured JSON.

Douyin Profile Scraper

Copy to your AI assistant

zen-studio/douyin-profile-scraper on Apify. Scrapes Douyin profiles + posts with follower counts, engagement, hashtags, and server-classified videoTags. Call ApifyClient("TOKEN").actor("zen-studio/douyin-profile-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. profileUrls accepts URLs/share links/UserSecIDs/numeric uids; maxPostsPerProfile=0 for profile-only. Full spec: GET https://api.apify.com/v2/acts/zen-studio~douyin-profile-scraper/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations
Zen Studio Social & Video   •  Structured creator data from every major platform
 Douyin Profile
➤ You are here
 Xigua Search
Keyword + comments + MP4
 Xigua Detail
70+ fields + MP4 download
 Douyin Video
Metadata + MP4 download

How to Scrape Douyin Profiles & Posts

Basic — one creator, last 100 posts

{
"profileUrls": ["https://www.douyin.com/user/MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS"],
"maxPostsPerProfile": 100
}

Profile only — track follower count without scraping posts

{
"profileUrls": ["1929015166249580"],
"maxPostsPerProfile": 0
}

Recent activity only — last 30 days across multiple creators

{
"profileUrls": [
"https://www.douyin.com/user/MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS",
"MS4wLjABAAAAjjwfy25gmtDlk8Wg6FNIBzHdHicG6BpZZNvWoTLL8S4",
"1929015166249580"
],
"maxPostsPerProfile": 200,
"recentDays": 30,
"excludePinnedPosts": true
}

Input Parameters

ParameterTypeDefaultDescription
profileUrlsstring[]requiredDouyin profile URLs, share links, UserSecIDs, or bare numeric user IDs.
maxPostsPerProfileinteger100How many recent posts per profile (0–10,000). Set to 0 for profile-only mode.
recentDaysintegerOnly include posts from the last N days (e.g. 30 for last month). Easier alternative to oldestPostDate.
oldestPostDatestringOnly include posts on or after this absolute date (YYYY-MM-DD). When both recentDays and oldestPostDate are set, recentDays wins.
excludePinnedPostsbooleanfalseSkip posts pinned to the top of the profile.

Accepted profile input formats

FormatExample
Browser address bar URLhttps://www.douyin.com/user/MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS
App share link (auto-resolved)https://v.douyin.com/iAbc123/
Legacy share URLhttps://www.iesdouyin.com/share/user/1929015166249580
Bare UserSecIDMS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS
Bare numeric user ID1929015166249580

What Data Can You Extract from Douyin?

Two output shapes depending on maxPostsPerProfile:

  • maxPostsPerProfile > 0 (default) — one row per post (28 fields), with the creator's profile metadata nested under authorMeta (46 fields).
  • maxPostsPerProfile = 0 — one row per profile (48 fields), profile fields promoted to the top level. Fastest, cheapest mode.

Per-post fields

  • Identityid, type (video/imageText/story), url, shareUrl, inputUrl, region (creator IP), city + cityCode (post upload location, GB/T 2260), descLanguage
  • Contenttext (caption), thumb, images (for image-text posts)
  • TimingcreateTime (unix), createDate (ISO YYYY-MM-DD)
  • FlagsisPinned, isAd, isPgc, isShared, crossPostedToXigua
  • Engagementstatistics: diggCount, commentCount, shareCount, collectCount, downloadCount, playCount, forwardCount
  • Categorisationhashtags ([{id, name}] — creator-typed with stable IDs), videoTags (Douyin's server-classified 3-level taxonomy), mentions
  • MediamusicMeta (track id, name, author, owner, duration, play URL, cover, isOriginal), videoMeta (cover, duration, dimensions, format, play URL, download URL, bit-rate variants, HDR, watermark, cdnUrlExpiresAt — unix-seconds when video URLs die, typically ~1h after scrape)
  • Structurechapters ([{startMs, title, coverUrl}]), series ({id, name, episode, total, coverUrl, shareUrl, updateTime} for posts in a 合集), location
  • PermissionscanDuet, canStitch, canDownload, canShare, canComment

Per-author (authorMeta) fields

Identity: id, secUid, name, username, customUsername, customUsernameUpdatedAt (unix timestamp of last handle change), verified, verifyType (0/1/2 = none/normal/enterprise), customVerifyText (e.g. "时尚创作者"), enterpriseVerifyReason, verificationReason, signature (bio), country (e.g. "CN"), language, gender (unknown/male/female).

Demographics: userAge (when set), birthday (when set), constellation (1–12 zodiac index when set, else null).

Avatars: avatarThumb, avatarLarge (existing), plus avatar168 (168×168), avatarMedium (720×720), avatar300 (300×300), bgImage (profile background), shareQrCodeUri (Douyin's share-QR asset path).

Engagement metrics: followersCount, followersCountStr (e.g. "4.8万"), followingCount, heartCount (legacy total likes from userhome), videoCount, videoPlayCount, videoShareCount, totalLikesReceived (lifetime cumulative likes — the canonical creator-economy metric, often differs from heartCount), awemeCount (real total post count), likesGivenCount (likes the creator gave to others).

Live & commerce: isLiving, roomId (live-room ID when live), isStar (Douyin's "star creator" tier), withShopEntry (has a Douyin Shop), commerceUserLevel (0–5).

Locality & associations: ipLocation (creator IP region), school ({id, name, category, type} for student creators, else null), usesSeries (publishes 合集), mcnInfo ({name, uid} for managed creators, else null), crossPlatform ({instagram, twitter, youtube, weibo} handles when set, else null), shareUrl.

Output Example

{
"id": "7628905002311994670",
"type": "video",
"text": "英语磨耳朵:热爱待在家的人的心理 #英语听力训练 #英语学习打卡 #启蒙英语 #英语没那么难 #每天英语一分钟",
"descLanguage": "zh",
"createTime": 1776298080,
"createDate": "2026-04-16",
"url": "https://www.douyin.com/video/7628905002311994670",
"shareUrl": "https://www.iesdouyin.com/share/video/7628905002311994670/",
"thumb": "https://p11-sign.douyinpic.com/tos-cn-i-dy/40e0d6...~tplv-dy-resize.heic?...",
"isPinned": false,
"isAd": false,
"isPgc": false,
"isShared": false,
"region": "河北",
"city": "Hebei",
"cityCode": "130100",
"authorMeta": {
"id": "1929015166249580",
"secUid": "MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS",
"name": "木木英语",
"username": "63970939507",
"customUsername": null,
"customUsernameUpdatedAt": 1777798069,
"verified": true,
"verifyType": 1,
"customVerifyText": "英语创作者",
"enterpriseVerifyReason": null,
"verificationReason": "英语创作者",
"signature": "📚英语爱好者\n🧸努力学习英语中\n❤️好好吃饭💛好好睡觉💚好好生活",
"avatarThumb": "https://p26.douyinpic.com/img/aweme-avatar/...c5_300x300.jpeg?from=2956013662",
"avatarLarge": "https://p26.douyinpic.com/img/aweme-avatar/...c5_300x300.jpeg?from=2956013662",
"avatar168": "https://p26.douyinpic.com/img/aweme-avatar/...c5_168x168.jpeg",
"avatarMedium": "https://p26.douyinpic.com/img/aweme-avatar/...c5_720x720.jpeg",
"avatar300": "https://p26.douyinpic.com/img/aweme-avatar/...c5_300x300.jpeg",
"bgImage": "https://p11-sign.douyinpic.com/obj/douyin-user-image-file/...?...",
"shareQrCodeUri": "2f1f800070d01d38cc905",
"followingCount": 15,
"followersCount": 48875,
"followersCountStr": "4.8万",
"heartCount": 87153,
"totalLikesReceived": 87153,
"videoCount": 189,
"awemeCount": 189,
"likesGivenCount": 312,
"videoPlayCount": null,
"videoShareCount": null,
"isLiving": false,
"roomId": null,
"isStar": false,
"withShopEntry": false,
"commerceUserLevel": 0,
"ipLocation": "山东",
"country": "CN",
"gender": "unknown",
"language": "zh-Hans",
"userAge": 9,
"birthday": null,
"constellation": 1,
"school": null,
"usesSeries": true,
"mcnInfo": null,
"crossPlatform": null,
"shareUrl": "https://www.iesdouyin.com/xg/user/1929015166249580"
},
"musicMeta": {
"id": "7628905006464944923",
"name": "@木木英语创作的原声",
"author": "木木英语",
"album": null,
"isOriginal": true,
"isPgc": false,
"isCommerce": false,
"duration": 221,
"playUrl": "https://sf5-hl-ali-cdn-tos.douyinstatic.com/obj/ies-music/7628905080950901550.mp3",
"coverThumb": "https://p11.douyinpic.com/aweme-avatar/...",
"coverLarge": "https://p26.douyinpic.com/aweme/1080x1080/aweme-avatar/...",
"owner": {
"id": "1929015166249580",
"handle": "63970939507",
"nickname": "木木英语"
}
},
"videoMeta": {
"cover": "https://p11-sign.douyinpic.com/tos-cn-i-dy/40e0d6...~tplv-dy-resize.heic?...",
"originCover": "https://p11-sign.douyinpic.com/tos-cn-p-0015/oUeILU...~tplv-dy-360p.heic?...",
"dynamicCover": "https://p11-sign.douyinpic.com/obj/tos-cn-i-dy/40e0d6...?...",
"height": 1280,
"width": 720,
"ratio": "720p",
"duration": 221937,
"format": "mp4",
"isLongVideo": false,
"playUrl": "https://v95-hzyy-thr-daily-colda.douyinvod.com/.../?...",
"downloadUrl": "https://v5-se-ws-cold.douyinvod.com/.../?...",
"bitRates": [
{ "quality": "adapt_lowest_1080_1", "bitRate": 247531, "isH265": true, "fps": 30, "url": "https://..." },
{ "quality": "adapt_lower_540_1", "bitRate": 155050, "isH265": true, "fps": 30, "url": "https://..." }
],
"isHdr": false,
"hasWatermark": true,
"cdnUrlExpiresAt": 1777883276
},
"images": [],
"statistics": {
"diggCount": 106,
"shareCount": 14,
"commentCount": 4,
"collectCount": 47,
"downloadCount": 1,
"playCount": 0,
"forwardCount": 0
},
"mentions": [],
"hashtags": [
{ "id": "1664320797481997", "name": "英语听力训练" },
{ "id": "7541656378260408383", "name": "英语学习打卡" },
{ "id": "7402916912059680777", "name": "启蒙英语" }
],
"videoTags": [
{ "name": "校园教育", "level": 1 },
{ "name": "考试考证", "level": 2 },
{ "name": "语言学习", "level": 3 }
],
"chapters": [],
"series": null,
"location": null,
"permissions": {
"canDuet": true,
"canStitch": false,
"canDownload": false,
"canShare": true,
"canComment": true
},
"crossPostedToXigua": false,
"inputUrl": "1929015166249580"
}

Important: URL Durability

Different URL types in the output have very different lifespans. Plan your downstream pipeline accordingly.

FieldLifespanNote
url (canonical post URL)Permanenthttps://www.douyin.com/video/<id> — never expires. The reliable reference.
shareUrlPermanenthttps://www.iesdouyin.com/share/video/<id>/ — also permanent.
authorMeta.shareUrl, authorMeta.profileUrlPermanentProfile share/canonical URLs.
authorMeta.avatarThumb, authorMeta.avatarLargePermanentCDN-direct, no signature.
musicMeta.playUrl, musicMeta.coverLargePermanentCDN-direct, no signature.
thumb, videoMeta.cover, videoMeta.originCover, videoMeta.dynamicCover, images[].url, authorMeta.bgImage~14–30 daysSigned 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.bitRates[].url~1 hourShort-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.

Advanced Usage

Track follower growth across many creators (cheapest)

{
"profileUrls": ["1929015166249580", "75736792009", "..."],
"maxPostsPerProfile": 0
}

One row per creator, no posts. Pair with a daily schedule to build a follower-tracking dashboard.

Pull only this week's posts from a creator

{
"profileUrls": ["MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS"],
"maxPostsPerProfile": 500,
"recentDays": 7
}

The actor stops fetching as soon as it crosses the 7-day boundary, so you only pay for posts within the window.

Bulk creator audit

{
"profileUrls": [
"1929015166249580",
"75736792009",
"63485583690",
"..."
],
"maxPostsPerProfile": 30,
"excludePinnedPosts": true
}

Fast snapshot of recent (non-pinned) activity across a list of creators. Up to 30 profiles run in parallel.

Pricing — Pay Per Event (PPE)

$6.99 per 1,000 results (base price). Each row written to the dataset counts as one result, whether it's a post row or a profile-only row.

EventPer callPer 1,000
result (one dataset row)$0.00699$6.99

FAQ

How many fields are returned per post? 28 top-level fields per post (in posts mode), with authorMeta containing a further 22 fields nested. In profile-only mode (maxPostsPerProfile: 0) the same 22 author fields are promoted to the top level alongside profileUrl and inputUrl, for 24 fields total.

What types of profile inputs are accepted? Browser address-bar URLs (/user/MS4w...), app share links (v.douyin.com/...), legacy share URLs (iesdouyin.com/share/user/<numeric>), bare UserSecIDs (MS4w...), and bare numeric user IDs. You can mix all of them in one profileUrls array.

How fresh is the data? Live — every field is fetched on demand at run time. No caching.

Do video URLs work after the run finishes? Image URLs (covers, avatars, image-post photos, profile background) stay valid for roughly 14–30 days. Video play URLs and download URLs are short-lived — they typically expire within hours. The post url (https://www.douyin.com/video/<id>) is permanent and is the safe long-term reference. See the URL Durability section above.

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 — for example a video might be tagged 校园教育 (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 profile-only mode for? Setting maxPostsPerProfile to 0 returns just the creator's profile metadata — followers, following, total likes, video count, bio, avatar, region. One row per creator. Ideal for daily follower-tracking dashboards where post-level data isn't needed.

Why are some username fields empty? Not every Douyin creator has a short_id set on their profile — when they don't, that field comes back empty. The numeric id and the secUid are always present.

Can I scrape comments / followers / liked videos? Not in this actor. Profile + posts only. Other actors in this collection cover those use cases separately.

What's the maximum posts per profile? 10,000. The vast majority of creators have fewer than 1,000 posts, so the cap rarely binds. Cost scales linearly with this value, so set what you actually need.

Does the actor work for any Douyin creator? Public profiles only. Private accounts and accounts that have blocked external access are not addressable.

Support

  • Bugs: Issues tab
  • Features: Issues tab

Extracts publicly available data from Douyin (抖音). Users must comply with Douyin's terms of service and applicable data protection regulations (GDPR, CCPA).


Structured Douyin profile + post data — followers, engagement, video tags, music, bio — for any creator, in clean JSON.