Creator Profile & Video Data — TikTok
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
2 days ago
Last modified
Categories
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:
| 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 |
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 |
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 |
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: trueto unlock it, then setmaxVideosPerProfileto 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: 30on a schedule — the list is newest-first, so each run picks up what's new. Pull the full history once withdeepVideoHistory: trueandmaxVideosPerProfile: 0, then switch back to the default. - Already have the post URLs? Skip the creator crawl entirely: put them in
itemsand pay one record each, whatever the creator's back catalogue looks like. - You can mix formats: bare
username,@username, orhttps://www.tiktok.com/@username. Initems, a full/video/or/photo/URL or a bare post id. - A video URL in
profilesstill resolves to its creator — that behaviour has not changed. Put it initemsto 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.
includeCommentsis 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.