TikTok Profile Scraper avatar

TikTok Profile Scraper

Pricing

from $2.80 / 1,000 profile - scrapeds

Go to Apify Store
TikTok Profile Scraper

TikTok Profile Scraper

Extract TikTok profile data fast - followers, following, likes, video count, bio, avatar, verification, region. Just add usernames or profile URLs, no login or cookies needed. Export to JSON, CSV, Excel. Fast & cheap, pay only per profile scraped.

Pricing

from $2.80 / 1,000 profile - scrapeds

Rating

0.0

(0)

Developer

Gopalakrishnan

Gopalakrishnan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Scrapes public TikTok profile data from a list of usernames or profile URLs. Built as an Apify actor on Crawlee + CheerioCrawler — no browser required.

Features

  • Accepts bare handles, @handles, or full profile URLs (mixed in one list).
  • Returns one flat record per profile: followers, following, likes, video count, bio, avatar, verification, region, and more.
  • Pay-Per-Event pricing: a flat start fee plus a charge per profile successfully scraped.
  • Graceful error rows for not-found / blocked profiles instead of failing the run.

How it works

For each profile, the actor fetches https://www.tiktok.com/@<username>, reads the __UNIVERSAL_DATA_FOR_REHYDRATION__ script the page embeds, and extracts the webapp.user-detail payload (profile fields + stats). Plain HTTP through Apify Proxy (datacenter is sufficient). If the rehydration payload is missing the request is treated as blocked: the session is rotated and the request retried.

Input

FieldTypeDescription
usernamesarray (required)TikTok profiles to scrape. Each item may be a bare handle (stoolpresidente), an @handle, or a full profile URL (https://www.tiktok.com/@stoolpresidente).
maxProfilesinteger (optional)Cap the number of profiles scraped from the list.
proxyConfigurationobjectProxy settings. Defaults to { "useApifyProxy": true }.

Example:

{
"usernames": ["stoolpresidente", "@tiktok", "https://www.tiktok.com/@nba"],
"maxProfiles": 10,
"proxyConfiguration": { "useApifyProxy": true }
}

Output

One flat record per profile:

FieldDescription
usernameHandle (uniqueId)
nicknameDisplay name
userIdNumeric user ID
secUidTikTok secUid
verifiedWhether the account is verified
privateAccountWhether the account is private
signatureBio text
bioLinkLink in bio
regionAccount region code
languageAccount language
avatarAvatar image URL
followerCountFollowers
followingCountFollowing
heartCountTotal likes
videoCountNumber of videos
friendCountFriends
profileUrlCanonical profile URL
scrapeStatussuccess or error
scrapeErrorError reason when scrapeStatus is error (USER_NOT_FOUND, RETRIES_EXHAUSTED, etc.)
scrapedAtISO timestamp

Pay-Per-Event billing

EventWhen charged
actor-startOnce per run (flat start fee).
profile-scrapedOnce per profile successfully scraped.

Set the prices for these events in the Apify Console. Event names must match the Actor.charge calls in src/main.js exactly.

Running locally

$apify run --purge

Put a test input in storage/key_value_stores/default/INPUT.json. Local runs store results only on disk (storage/datasets/default/) — they are not synced to Apify Console.