Creator Profile & Video Data — TikTok avatar

Creator Profile & Video Data — TikTok

Pricing

Pay per event

Go to Apify Store
Creator Profile & Video Data — TikTok

Creator Profile & Video Data — TikTok

Bulk TikTok creator data by username or URL: followers, bio, verification, total likes and region, plus each creator's videos with views, likes, comments, shares, saves, hashtags, sound and play/download URLs. Comments optional.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

TikTok Creator Profile, Video Stats & Comments Scraper

Build a TikTok creator list with their content in bulk. Give it usernames or profile URLs from TikTok and it returns the account's follower and following counts, bio, verification status, video count, total likes and region — plus the creator's videos (views, likes, comments, shares, saves, hashtags, sound, play and download URLs) and, optionally, the top comments on each video. One row per creator, videos nested underneath, so a creator roster and its content analytics come out of a single run.

Already know the post you want? Put video or photo URLs in items and each one comes back as its own row — no creator crawl needed.

What you get

Two row shapes, depending on what you asked for: a creator row per entry in profiles, and a single-post row per entry in items. The dataset carries a view for each (Creators, Single posts).

Creator rows

Each result is one creator:

FieldDescription
usernameTikTok handle (without @)
user_idTikTok numeric user id
sec_uidTikTok secUid — the opaque id the platform keys users by
nicknameDisplay name shown on the profile
profile_urlFull URL to the TikTok profile
bioProfile biography / signature text
avatar_urlProfile avatar image URL (largest available)
verifiedWhether the account has a verified badge (true/false)
follower_countNumber of followers
following_countNumber of accounts the user follows
heart_countTotal likes received across all videos
video_countNumber of public videos posted
private_accountWhether the account is set to private (true/false)
regionRegion/country associated with the account
videosThe creator's videos, newest first (JSON array — see below)
videos_scrapedHow many videos were collected into videos
scraped_atISO 8601 timestamp when the record was delivered

Each entry in videos:

FieldDescription
video_idTikTok post id
video_urlCanonical https://www.tiktok.com/@user/video/<id> (or /photo/<id>) URL
post_typevideo or photo — which kind of post this is
descriptionCaption text
create_timeISO 8601 publish time
duration_secsLength in seconds
play_countViews
digg_countLikes
comment_countComments
share_countShares
collect_countSaves / bookmarks
is_pinnedPinned to the top of the profile
is_adMarked as an ad
hashtagsHashtags in the caption
music{id, title, author, original} for the sound used
cover_urlCover image URL
play_urlVideo posts only. Streamable video URL (watermark-free, short-lived CDN signature)
download_urlVideo posts only. Downloadable video URL (short-lived CDN signature)
image_urlsPhoto posts only. Every image of a photo-mode post, in order
width, heightDimensions
commentsTop comments when includeComments is on: {comment_id, text, create_time, digg_count, reply_count, user_id, username, nickname}

play_url / download_url carry a signed CDN token that expires after a few hours — fetch them promptly after the run.

A post is either a video or a photo carousel, never both, so each entry carries only the URLs its own type can have: play_url / download_url on video posts, image_urls on photo posts. Check post_type rather than testing for an empty column.

Single-post rows

Every entry in items returns one flat row: the fields above at the top level, plus the creator identity a nested entry would inherit from its profile row — username, user_id, sec_uid, nickname and profile_url. With includeComments on, the row also carries comments (a JSON array) and comments_scraped. There is no videos column on a post row and no videos_scraped.

Input

{
"profiles": ["charlidamelio", "@khaby.lame", "https://www.tiktok.com/@mrbeast"],
"items": ["https://www.tiktok.com/@khaby.lame/video/7238916274142055706"],
"maxItems": 100,
"includeVideos": true,
"maxVideosPerProfile": 30,
"includeComments": false
}

Input fields

FieldRequiredDefaultDescription
profilesSee noteArray of TikTok usernames (with or without @) or full profile URLs. A pasted video URL resolves to its creator.
itemsSee noteArray of individual posts to scrape on their own — video or photo URLs (.../@user/video/<id>, .../@user/photo/<id>) or bare post ids. One row each.
maxItemsNo0Maximum number of rows to return. 0 = no limit.
includeVideosNotrueCollect the creator's videos with stats and URLs.
maxVideosPerProfileNo30How many of the newest videos to collect per creator. Above 30 — and 0 (full history) — needs deepVideoHistory; see below.
deepVideoHistoryNofalseAllow more than 30 videos per creator, billed as an add-on. See Deep video history.
includeCommentsNofalseBest-effort (beta). Open each collected post and capture its top comments. One page load per post. TikTok serves the comment list only to sessions it trusts.
maxVideosWithCommentsNo5With includeComments, only the first N videos (newest first) get comments.
maxCommentsPerVideoNo20Cap on comments captured per post.

Give at least one of profiles or items — either alone, or both in the same run. A run with neither fails immediately.

Deep video history (extra charge)

The price you pay per record includes the 30 newest videos of a creator. That is the default, and for a roster monitor or a content-analytics pull it is usually all you want.

Going deeper is supported — a 5,000-video account comes out in full — but a whole back catalogue is a much bigger job than the newest 30. It is billed for what it costs rather than throttled away:

  • Set deepVideoHistory: true to unlock it, then set maxVideosPerProfile to the depth you want (0 = the whole history).
  • Each block of 20 videos beyond the first 30 adds one record charge, on top of the one record the creator row already charges. Formula: 1 + ceil((videos − 30) / 20) records.
  • No extra rows appear in your dataset — the add-on is a charge on the row you already got, and it never counts toward maxItems. Your run breakdown simply shows more "Record scraped" events.

Worked example, a creator with 500 videos and deepVideoHistory: true, maxVideosPerProfile: 0:

PartRecords charged
The creator row itself1
Videos 31–500 (ceil(470 / 20))24
Total25

At the $0.002 list price for a record that is about $0.05 for the creator and their entire back catalogue, in one row.

With deepVideoHistory off (the default), you can never be charged an add-on. A maxVideosPerProfile above 30, or 0, clamps to 30 and the run log says so.

Tips

  • Monitoring a roster? Run with maxVideosPerProfile: 30 on a schedule — the list is newest-first, so each run picks up what's new. Pull the full history once with deepVideoHistory: true and maxVideosPerProfile: 0, then switch back to the default.
  • Already have the post URLs? Skip the creator crawl entirely: put them in items and pay one record each, whatever the creator's back catalogue looks like.
  • You can mix formats: bare username, @username, or https://www.tiktok.com/@username. In items, a full /video/ or /photo/ URL or a bare post id.
  • A video URL in profiles still resolves to its creator — that behaviour has not changed. Put it in items to get the post itself.
  • Private accounts return a record with private_account: true, null stats and no videos.
  • Deleted or suspended accounts produce no output record (the scraper logs a warning).

Notes

  • Only publicly available data is collected — no private posts, DMs, or account settings.
  • Works for all public TikTok accounts regardless of follower count.
  • TikTok serves the video list through a fingerprint-gated request that sometimes comes back empty for an account that plainly has videos. The scraper detects that, rotates to a fresh exit and retries (up to three passes) before saving the profile without videos, so a flaky pass costs time, not data.
  • Comments get the same treatment. TikTok only hands the comment list to browser sessions it trusts, and an untrusted session returns nothing on every post it is asked about. A pass that collects no comments at all, on posts that TikTok itself says have them, is treated as that session verdict rather than as empty threads: the scraper rotates to a fresh exit and retries. It still saves the record if every attempt comes back dry — the run log prints the per-pass rate it actually achieved. includeComments is genuinely best-effort and stays off by default: the hunt for a trusted session costs a run up to three times as long, and the rate has been as low as zero. Turn it on knowing that.
  • Targets are processed one at a time in a single hardened browser. For large rosters, split the list across parallel runs.