Douyin 抖音用户主页 Profile Scraper - Followers & Likes avatar

Douyin 抖音用户主页 Profile Scraper - Followers & Likes

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Douyin 抖音用户主页 Profile Scraper - Followers & Likes

Douyin 抖音用户主页 Profile Scraper - Followers & Likes

抖音用户主页 of any public Douyin (抖音) account: Douyin ID, nickname, bio, followers, following, total likes, post count and IP region, as exact numbers rather than the rounded 万 the page shows. No login. An account that could not be read says so with the reason, never as an empty account.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Lantern Lab

Lantern Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Categories

Share

Douyin 抖音用户主页 Profile Scraper

Read the public profile (抖音用户主页) of any Douyin (抖音) account: Douyin ID, nickname, bio, followers, following, total likes received, the number of posts and the IP region Douyin shows - exact numbers, not Douyin's rounded 4.8万. Paste profile links or sec_uid values; no login, no cookies, no account of your own. $4.99 per 1,000 profiles, plus $0.005 per run. See Pricing.

Input:

{
"profileUrls": ["https://www.douyin.com/user/MS4wLjABAAAAv7iSuuXDJGDvn02WrOdGwRKUPahnT9VWCM-vBsDmj04"]
}

Output - exactly one row per input line (recordType: "profile"). Sample from a real run; nickname partially masked, bio and ID shortened:

{
"recordType": "profile",
"platform": "douyin",
"dataSource": "guest_web",
"secUid": "MS4wLjABAAAA…",
"uniqueId": "gdthyang",
"nickname": "挪威***",
"signature": "共创伙伴:@雅苒国际…",
"followers": 5480,
"following": 1289,
"totalLikes": 3783,
"videoCount": 23,
"ipLocation": "广东",
"verified": false,
"profileUrl": "https://www.douyin.com/user/MS4wLjABAAAA…",
"profileStatus": "available",
"accessMode": "direct",
"collectionStatus": "complete",
"partial": false,
"partialReason": null,
"elapsedMs": 27954,
"collectedAt": "2026-10-17T03:48:56+00:00"
}

Limits:

  • Public data only. The Actor reads what Douyin shows a signed-out visitor and never logs in. No posts (Douyin serves no account timeline to a visitor), no follower or following lists, no email or phone - only the public profile fields.
  • Every row says how complete it is. An account Douyin would not describe - gone, renamed away, withheld - is reported as such with the reason, never as an account with nothing on it.
  • Your limits stop collection and appear in the row: the maxUpstreamRequests request ceiling, the residential-fallback budget (maxFallbackProfiles) and the maximum charge per run (see Pricing).

What it does

  • Reads each account's profile the way Douyin's own profile page shows it, and writes exactly one row per input line - even for a line that could not be read.
  • Costs one Douyin request per account. A run of 100 accounts is one browser session and 100 requests.
  • Marks a row partial with a reason when the profile was not read: your request limit, your cost limit, or a refusal by Douyin.
  • Runs without a proxy by default. If Douyin refuses the request for an account, that one account is retried through an Apify residential proxy exiting in China (limited per run, can be turned off). An account Douyin does answer about - gone, renamed away, withheld - is never retried, because no exit changes that answer.
  • Stops minting fresh visitor sessions once a run has seen two accounts refused and none answered: Douyin withholds from every visitor, not from one session, so a third page load would only buy the same answer. Each account is still asked once, so each keeps its own evidence.
  • Writes a RUN_SUMMARY record with the totals, the requests sent against the ceiling in force, and why the run stopped.

What it does not do

  • No posts. Douyin serves no account timeline to a signed-out visitor, so this Actor does not pretend to collect one. See What Douyin serves a visitor. For posts, the Douyin keyword search Actor reads what signed-out search returns.
  • No account search. Bring profile links or sec_uid values. A numeric user ID is not enough: Douyin's web API only answers by sec_uid, which every profile link contains.
  • No follower or following lists, no liked posts, no live streams, no login-only content.
  • No private data. Only the public profile fields Douyin's own page shows. No email, no phone, no location beyond the IP region Douyin displays itself.
  • No video downloads, no comments (use the Douyin comments Actor), no scheduling built in.

Input

FieldDefaultMeaning
profileUrls-Profile links (https://www.douyin.com/user/MS4w...), share links (https://v.douyin.com/...), links carrying sec_uid=..., or bare sec_uid values.
maxUpstreamRequestsworked out from your inputHard ceiling on Douyin requests for the whole run, retries included. Leave empty and the Actor derives one, so a run is never unbounded.
proxyConfigurationno proxyStandard Apify proxy setting for all requests.
residentialFallbacktrueRetry a refused account through a residential proxy in China.
maxFallbackProfiles3Accounts per run that may use that fallback, at most 10. 0 turns it off.
requestDelaySecs1Minimum pause between two requests from one visitor session.
maxIdentityRotations6Fresh visitor sessions a run may mint after a refusal.
msTokenWaitSecs20How long a new visitor page may take to receive its security token.

Output

One row per input line in the default dataset, plus a RUN_SUMMARY record in the key-value store with the run totals.

FieldMeaning
secUidDouyin's permanent account ID - the MS4w... value in every profile link.
uniqueIdThe account's Douyin ID (抖音号), or its short ID when it never set one.
nickname, signaturePublic display name and bio.
followers, followingFollowers, and accounts this account follows - exact, not rounded.
totalLikesTotal likes received across the account's posts (获赞).
videoCountPosts Douyin says the account has (作品). The posts themselves are not collected.
ipLocationIP region Douyin shows (for example 内蒙古), without its IP属地: label.
verifiedWhether Douyin shows a verification badge.
profileUrl, inputThe canonical profile link, and your input line.
profileStatusavailable, unavailable, unknown or invalid_input. See below.
accessModedirect, custom_proxy or residential_fallback.
collectedAt, elapsedMsWhen the row was collected (UTC, ISO 8601), and time spent on the account.
collectionStatus, partial, partialReasonHow complete the row is, and why not.

A row never carries an invented value: a field Douyin stated nothing about is null, not 0 and not an empty string.

Profile status

profileStatusMeaning
availableThe profile was read.
unavailableDouyin answered but would not describe the account - gone, renamed away, or withheld. Not "an empty account".
unknownThe request was refused, or the run stopped before sending it.
invalid_inputThe input line carried no sec_uid.

What partial means

partial is true whenever collectionStatus is not complete, and partialReason says why:

ReasonMeaning
cap:maxUpstreamRequests=NThe run's request ceiling stopped it - yours, or the one derived from your input. RUN_SUMMARY.upstreamCapSource says which.
cap:maxTotalChargeUsdYour Maximum cost per run was reached; rows past it are not stored.
blocked:<accessMode>:...Douyin refused the request on that exit, after fresh visitor sessions. The text keeps the classification and Douyin's own status code.
profile:no_user:...Douyin answered about the account but would not describe it.
fallback_cap:maxFallbackProfiles=NThe account was refused and the run had used up its residential retries.
input:no_sec_uidNo sec_uid in that input line.

collectionStatus is complete when the profile was read, blocked when Douyin refused the request, and not_collected when nothing could be read or nothing was attempted.

What Douyin serves a visitor

Measured 2026-10-15, four accounts (9 to 213 posts), two network exits (a data-centre IP and Apify residential IPs exiting in China), desktop and mobile clients:

Asked forAnswer
Profile (/aweme/v1/web/user/profile/other/)HTTP 200 with the full profile, every time.
Timeline (/aweme/v1/web/aweme/post/)HTTP 200 with an empty body, every time.
Timeline, old share API (/web/api/v2/aweme/post/)HTTP 200 with an empty body, on both douyin.com and iesdouyin.com.
Douyin's own profile pageRenders the profile header and the post count; the 作品 grid stays empty and no post appears anywhere in the page.

There is no captcha and no error message for the timeline - Douyin simply answers nothing. That is why this Actor collects the profile and nothing else: a signed-out visitor cannot see an account's posts, so an Actor that promised them would be promising a login we do not use.

Pricing

Pay per event: $4.99 per 1,000 profiles, plus $0.005 for each run. Apify platform usage, including the browser session and the residential fallback, is included; these two events are the whole price.

EventPriceCharged for
result$0.00499 ($4.99 per 1,000)Each row that carries a profile.
run-start$0.005, once per runThe signed-out browser session every run opens before it reads any account.

A row that only reports a failure - an input line with no sec_uid, an account Douyin would not describe, an account the run never reached - is written free. A run that reads no account at all still pays the $0.005 session.

The session is a flat fee per run, not per account, so a batch costs less per profile than many small runs: 10 accounts cost $0.055 ($0.0055 each), 100 accounts cost $0.504 ($0.0050 each), 1,000 accounts cost $4.995.

To cap a run, set Maximum cost per run in the run options. When the cap is reached the Actor stores no further rows, stops before the next account, marks what it cut short partial with cap:maxTotalChargeUsd, and records it in RUN_SUMMARY.

Resources

  • Runs with 1 GB memory by default; 1-8 GB can be chosen in the run options. A visitor session is minted in a real browser, which needs 1 GB.
  • A run opens a visitor session first (about 20-40 seconds), then takes a couple of seconds per account.

Notes

  • Respect Douyin's terms and local law, and only collect what you need. Nicknames, bios and IP regions are personal data in many jurisdictions.
  • Douyin changes its web client often. RUN_SUMMARY reports request outcomes per endpoint, so a change shows up there first.