Douyin Profile Scraper
Pricing
from $7.00 / 1,000 profile scrapeds
Douyin Profile Scraper
Scrape public Douyin (抖音) creator profiles by URL, share link, sec_user_id or uid, with nickname, bio, follower, following and like counts, verification, region, gender and custom badges. No cookies needed.
Pricing
from $7.00 / 1,000 profile scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
What is Douyin Profile Scraper — 抖音 Creator Profiles & Followers?
Scrape public Douyin (抖音) creator profiles by profile URL, share-link, or sec_user_id. Each input resolves to one flat dataset record for a creator, so you can read identity fields, audience metrics, verification badges, region, gender, and commerce signals in a single row. When recent-post enrichment is enabled, the Actor adds separate post rows for the same input profile.
This is an Apify Actor that can be used through Apify MCP. It accepts Douyin profile identifiers, returns one record per scraped profile or post, and writes the results to an Apify dataset for API access, automation, and agent workflows.
Best fit and connected workflows
This Actor fits workflows that start with a public Douyin profile identifier and end with structured creator data. Common routes include:
- Creator research and lead generation from profile URLs or Douyin share-links.
- Brand and account review using follower counts, verification status, region, and business signals.
- Agent workflows that need a compact Douyin profile summary from Apify MCP.
- Optional profile-plus-post collection when a profile-level view should be paired with recent video metadata.
If your workflow begins with a Douyin profile page, this Actor provides a focused path from the public profile to a dataset row that can be filtered, joined, or exported downstream.
Practical scenario
Maya is reviewing a Douyin creator shared by a partner team. She starts with the creator's profile URL and runs the Actor with recent posts disabled. The dataset returns nickname, signature, followerCount, verified, customVerify, ipLocation, and profileUrl. Maya uses the follower count, verification badge, and region to decide whether to send the creator to a manual review queue, then opens the profile URL to confirm the account identity.
Input
| Field | Type | Description |
|---|---|---|
profileInputs | string[] | Douyin profile identifiers. Accepted values are full profile URLs, short share-links, or raw sec_user_id strings. One item per row. |
includeRecentPosts | boolean | When true, the Actor adds recent video posts as separate dataset rows tagged itemType: "post". |
maxPostsPerProfile | integer | Caps recent posts per profile when recent posts are enabled. Range: 1-200. Default: 20. |
maxProfiles | integer | Caps how many profiles are processed in one run after deduplication. Range: 1-100. Default: 25. |
proxyConfiguration | object | Apify Residential proxy configuration with country rotation. Default country: HK. |
Focused JSON input example
{"profileInputs": ["https://www.douyin.com/user/MS4wLjABAAAAVtZkS6ZpJVm-T1FZW5XWGcVTQ-Z2u7CcEt1MdJxoZbA","MS4wLjABAAAAVtZkS6ZpJVm-T1FZW5XWGcVTQ-Z2u7CcEt1MdJxoZbA"],"includeRecentPosts": true,"maxPostsPerProfile": 5,"maxProfiles": 10,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "HK"}}
Output
The Actor stores results in an Apify dataset and also exposes a run summary in OUTPUT. Each dataset item is either a creator profile row or a recent post row.
| Field | Type | Description |
|---|---|---|
itemType | string | profile or post. |
input | string | Original identifier supplied by the user. |
secUserId | string | Douyin opaque encrypted user ID. |
uid | string | Douyin numeric user ID, string-encoded. |
shortId | string | Public Douyin handle when available. |
nickname | string | Display name. |
signature | string | Bio or signature. |
avatarUrl | string | Avatar image URL. |
profileUrl | string | Public profile URL. |
followerCount | integer | Followers. |
followingCount | integer | Following. |
totalFavorited | integer | Total likes received. |
favoritingCount | integer | Likes given count. |
awemeCount | integer | Total video posts count. |
verified | boolean | Verified account flag. |
customVerify | string | Verification badge text. |
enterpriseVerifyReason | string | Enterprise verification reason. |
gender | string | male, female, unknown, or other. |
ipLocation | string | IP location. |
country | string | Country. |
province | string | Province. |
city | string | City. |
isLiveCommerce | boolean | Live-commerce enabled flag. |
withCommerceEntry | boolean | Commerce store flag. |
language | string | Account language. |
awemeId | string | Video aweme ID for post rows. |
postDesc | string | Post caption for post rows. |
postUrl | string | Post permalink for post rows. |
postCreateTime | string | Post creation time in ISO 8601 for post rows. |
diggCount | integer | Post like count. |
commentCount | integer | Post comment count. |
shareCount | integer | Post share count. |
playCount | integer | Post play count. |
collectCount | integer | Post bookmark count. |
videoDurationSec | number | Video duration in seconds. |
videoCoverUrl | string | Video cover URL. |
scrapedAt | string | Scrape timestamp in ISO 8601. |
_provider | string | Backing provider used for the record. |
Illustrative JSON output record
{"itemType": "profile","input": "https://www.douyin.com/user/MS4wLjABAAAAVtZkS6ZpJVm-T1FZW5XWGcVTQ-Z2u7CcEt1MdJxoZbA","secUserId": "MS4wLjABAAAAVtZkS6ZpJVm-T1FZW5XWGcVTQ-Z2u7CcEt1MdJxoZbA","uid": "93847265012","shortId": "douyin_handle","nickname": "示例创作者","signature": "短视频每天更新","avatarUrl": "https://example.com/avatar.jpg","profileUrl": "https://www.douyin.com/user/MS4wLjABAAAAVtZkS6ZpJVm-T1FZW5XWGcVTQ-Z2u7CcEt1MdJxoZbA","followerCount": 1284321,"followingCount": 248,"totalFavorited": 18950221,"favoritingCount": 120,"awemeCount": 532,"verified": true,"customVerify": "美食博主","enterpriseVerifyReason": "example enterprise verification reason","gender": "female","ipLocation": "上海","country": "China","province": "Shanghai","city": "Shanghai","isLiveCommerce": true,"withCommerceEntry": true,"language": "zh","scrapedAt": "2026-06-27T06:55:12.000Z"}
How it works
The Actor uses an anti-detect browser with Apify Residential proxies. The live contract shows these implementation facts:
- It visits
www.douyin.com/user/<sec_user_id>. - It intercepts the profile XHR at
/aweme/v1/web/user/profile/other/. - When
includeRecentPostsis enabled, it also intercepts/aweme/v1/web/aweme/post/. - It performs cookie warmup on the Douyin homepage before the profile page.
- It rotates through HK, SG, TW, JP, and MO proxy countries.
The output dataset contains creator rows by default and post rows only when recent-post collection is enabled.
Pricing
Douyin Profile Scraper — 抖音 Creator Profiles & Followers uses Pay per event pricing, and Apify platform usage is charged separately according to your Apify plan. Open the live Pricing tab in the Apify Console for the current pricing details and usage-based charges.
Charged events:
- Actor start
- Profile scraped
- Recent post scraped
Example in words: if you scrape ten profiles and collect five recent posts per profile, the execution includes ten profile-scraped events and fifty post-scraped events, plus one actor-start event.
Use with AI agents (MCP)
This Actor is available as an Apify Actor that can be called through Apify MCP for agentic workflows. The precise Actor identity is khadinakbar/douyin-profile-scraper.
Tool description: submit Douyin profile identifiers, receive structured creator rows in an Apify dataset, and optionally add recent-post rows for each profile.
Scrape this Douyin profile URL and return the creator profile row. If recent posts are enabled, include recent post rows and keep the output in dataset order for downstream filtering.
Output interpretation:
- Use
itemType: "profile"for creator identity and audience fields. - Use
itemType: "post"for video-level rows when recent posts are requested. - Use
inputto trace each row back to the original identifier. - Use
profileUrl,secUserId, andnicknameas the primary identity anchors. - Use
scrapedAtand_providerfor provenance and recency. - Use
awemeIdandpostUrlto connect post rows back to the source profile.
Scope and pagination:
- Input accepts up to 100 profile identifiers per run.
maxProfilesacts as a run-level cap.maxPostsPerProfilecaps post rows per profile when recent posts are enabled.
Cost guidance:
- One profile row is charged per successfully scraped creator record.
- One post row is charged per recent post record pushed when recent posts are enabled.
- Review the live Pricing tab before scaling agent runs.
Apify API example
import { ApifyClient } from "apify-client";const APIFY_TOKEN = process.env.APIFY_TOKEN;const client = new ApifyClient({ token: APIFY_TOKEN });const actorCall = await client.actor("khadinakbar/douyin-profile-scraper").call({profileInputs: ["https://www.douyin.com/user/MS4wLjABAAAAVtZkS6ZpJVm-T1FZW5XWGcVTQ-Z2u7CcEt1MdJxoZbA"],includeRecentPosts: false,maxProfiles: 1});const datasetId = actorCall.defaultDatasetId;const { items } = await client.dataset(datasetId).listItems({ clean: true });console.log("Dataset items:", items);
Best results and outcome guidance
Use one Douyin identifier per row so each profile resolves cleanly and stays traceable in the dataset. If your workflow starts with a share-link, pass the share-link directly; if you already have sec_user_id, pass that value directly for the most direct profile lookup. Set includeRecentPosts only when post-level context is useful for your workflow, and use maxProfiles as a run-level cap when you want predictable cost control.
Continue the workflow
- Then use Douyin Search Scraper to extend Douyin Profile Scraper — 抖音 Creator Profiles & Followers research with a complementary discovery contract.
- Then use Facebook Ads Library Scraper to extend Douyin Profile Scraper — 抖音 Creator Profiles & Followers with a neighboring social-media research source when the brief calls for Facebook data.
Design note
I found that the live dataset contract separates creator rows and post rows through itemType, and the profile view is the default output path. That makes the Actor easy to route downstream because each row stays flat while still carrying a clear source type.
FAQ
Which input format is the most direct for Douyin profiles?
A raw sec_user_id is the most direct profile identifier in the live contract, and full profile URLs or Douyin share-links are also accepted.
What happens when recent posts are enabled?
The Actor adds separate dataset rows with itemType: "post" for recent videos belonging to the input profiles. These rows include fields such as awemeId, postDesc, playCount, and postUrl.
How can I connect the result to a profile in my own system?
Use secUserId, uid, shortId, and profileUrl as the main identifiers. The input field preserves the original identifier you sent.
Can this Actor be used in an Apify MCP workflow?
Yes. It is an Apify Actor that is MCP-ready, and its structured dataset output is suitable for agent tools that read back profile and post rows.
Responsible use
This Actor accesses public Douyin profile data. Use the returned data in ways that respect applicable law, platform terms, privacy expectations, and your own data governance policies. For outreach, review, and enrichment workflows, keep usage proportional to the purpose and store only the fields you need.