OrbTop

Creator Profile & Video Data — TikTok

SOCIAL MEDIALEAD GENERATION

Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.

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:

Field Description
username TikTok handle (without @)
user_id TikTok numeric user id
sec_uid TikTok secUid — the opaque id the platform keys users by
nickname Display name shown on the profile
profile_url Full URL to the TikTok profile
bio Profile biography / signature text
bio_link Website link shown in the bio, when the creator has set one
avatar_url Profile avatar image URL (largest available)
verified Whether the account has a verified badge (true/false)
follower_count Number of followers
following_count Number of accounts the user follows
friends_count Mutual-follow ("friend") count, alongside follower_count/following_count
heart_count Total likes received across all videos
video_count Number of public videos posted
private_account Whether the account is set to private (true/false)
region Region/country associated with the account
language Profile language code the creator has set, when present
is_organization Whether TikTok classifies the account as an organization/brand (true/false)
comment_setting TikTok's public comment permission setting (0=everyone, 1=friends, 2=off)
duet_setting TikTok's public duet permission setting (0=everyone, 1=friends, 3=off)
stitch_setting TikTok's public stitch permission setting (0=everyone, 1=friends, 3=off)
download_setting TikTok's public video-download permission setting (0=everyone, 1=friends, 3=off)
is_commerce Whether the account is a TikTok Shop / business-commerce account (true/false)
commerce_category TikTok Shop business category, when is_commerce is true
is_seller Whether the account is an enrolled TikTok Shop seller (true/false)
videos The creator's videos, newest first (JSON array — see below)
videos_scraped How many videos were collected into videos
scraped_at ISO 8601 timestamp when the record was delivered

Each entry in videos:

Field Description
video_id TikTok post id
video_url Canonical https://www.tiktok.com/@user/video/<id> (or /photo/<id>) URL
post_type video or photo — which kind of post this is
description Caption text
create_time ISO 8601 publish time
duration_secs Length in seconds
play_count Views
digg_count Likes
comment_count Comments
share_count Shares
collect_count Saves / bookmarks
is_pinned Pinned to the top of the profile
is_ad Marked as an ad
hashtags Hashtags in the caption
music {id, title, author, original} for the sound used
cover_url Cover image URL
play_url Video posts only. Streamable video URL (watermark-free, short-lived CDN signature)
download_url Video posts only. Downloadable video URL (short-lived CDN signature)
image_urls Photo posts only. Every image of a photo-mode post, in order
width, height Dimensions
comments Top 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

Field Required Default Description
profiles See note — Array of TikTok usernames (with or without @) or full profile URLs. A pasted video URL resolves to its creator.
items See note — Array 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.
maxItems No 0 Maximum number of rows to return. 0 = no limit.
includeVideos No true Collect the creator's videos with stats and URLs.
maxVideosPerProfile No 30 How many of the newest videos to collect per creator. Above 30 — and 0 (full history) — needs deepVideoHistory; see below.
deepVideoHistory No false Allow more than 30 videos per creator, billed as an add-on. See Deep video history.
includeComments No false Best-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.
maxVideosWithComments No 5 With includeComments, only the first N videos (newest first) get comments.
maxCommentsPerVideo No 20 Cap 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:

Part Records charged
The creator row itself 1
Videos 31–500 (ceil(470 / 20)) 24
Total 25

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.