TikTok Profile Scraper: Account Stats and Every Post
Pricing
from $1.99 / 1,000 results
TikTok Profile Scraper: Account Stats and Every Post
Scrape any public TikTok profile: followers, likes, video count, bio, verified and private flags. Switch on post collection to also pull each account's videos with plays, likes, comments, shares and a correct pinned flag. Exact result limits, no rounding up. No login, no cookies.
Pricing
from $1.99 / 1,000 results
Rating
5.0
(1)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
20
Total users
19
Monthly active users
10 days ago
Last modified
Categories
Share
TikTok Profile Scraper
Scrape any public TikTok profile by username or URL, with no login, no cookies and zero risk to your own account. Paste one or many usernames and get one clean row per profile: follower, following, like and video counts, bio and bio link, verified, private, seller and organization flags, interface language, and account creation date.
Switch on post collection and each profile is followed by its videos, with plays, likes, comments, shares, saves and a correct pinned flag. From $1.99 per 1,000 rows. Export as JSON, CSV or Excel.
Why Use This Scraper?
- Zero account risk — you never hand over TikTok cookies or log in, so your account can't be flagged, throttled, or banned. Cookie-based scrapers make you supply a session and take that risk; this one never does.
- No TikTok account needed — nothing to configure, no 2FA, no checkpoints.
- Deepest profile row on the Store — beyond the usual counters you get the bio link URL, seller / commerce flags with category, organization flag, language, and the account's creation date.
- Account age included —
accountCreatedAtexposes when the account was registered, a key bot/credibility signal most profile scrapers don't return. - Bulk in one run — pass hundreds of usernames at once; every row is tagged with its
sourceUsername. - Graceful edge cases — deleted/banned accounts yield a
user_not_founderror item, never a failed run. Private accounts still return their full public profile card withisPrivate: true. - Posts on the same run — turn on
includeVideosand you get the account's videos alongside the profile card, linked bysourceUsername, so audience size and content performance land in one dataset. - Exact result limits — ask for 37 posts and you get 37, not a page-boundary 40. Limits that quietly round up are a common complaint about other profile scrapers.
- Pinned posts flagged correctly — TikTok marks pinned videos with
is_top, notis_pinned, which is a frequent source of wrong data elsewhere. This Actor reads the right field. - Follower count on every post row — no joining back to the profile row to find out how big the account was.
- Clean, flat output — one row per profile, ready for CRM import, influencer vetting, or lead scoring.
Overview
This Actor returns one dataset row per input username with the complete public profile card and all engagement counters. Data is retrieved through a third-party TikTok data provider, so no TikTok credentials are ever required.
Supported Inputs
| Input | What you get |
|---|---|
A single username (e.g. tiktok) | That profile's full public card + stats |
| Multiple usernames / URLs | One row each, in one run |
- Handles are accepted with or without the leading
@, and full profile URLs work too —https://www.tiktok.com/@tiktok,tiktok.com/@tiktok/, or the mobilem.tiktok.comvariant, with or without query parameters. - Private accounts are supported — their profile card (stats, bio, flags) is public; only their content is hidden. The row carries
isPrivate: true. - Not supported: video URLs, tag URLs (use the dedicated Hashtag / Search scrapers for those).
Pure HTTP. No browser, no CAPTCHA solver, no cookies.
Use Cases
| Audience | How they use it |
|---|---|
| Influencer marketers | Vet creators at scale — follower counts, engagement totals, verification, and account age in one pass |
| Sales / lead gen | Qualify seller and commerce accounts (isSeller, isCommerceUser, commerceCategory) and harvest bio links |
| Growth / social teams | Track competitor accounts' follower and like counters over time with scheduled runs |
| Researchers / OSINT | Resolve handles to stable IDs (userId, secUid), account age, and language at scale |
How It Works
- Normalize — every input is reduced to a canonical username (handles,
@handles, and profile URLs all work). - Resolve — each username is looked up live; one request per profile, resolved in parallel.
- Emit — every profile is pushed to the dataset as its own flat row, tagged with
sourceUsername. - Collect posts (optional) — the account's videos follow its profile row, newest first, deduplicated by post ID.
About post depth
Up to 33 posts per profile is served in a single fast request. Asking for more switches to a deeper source that pages 10 at a time, which is slower and costs more per post but has no practical ceiling.
Pick the shallow path when you are screening many accounts, and the deep path when you need a full content history for a few.
Private accounts return their profile card but no posts, since their content is not public.
Input Configuration
| Field | Type | Required | Notes |
|---|---|---|---|
usernames | array of strings | Yes | Public usernames to scrape, with or without @, or profile URLs. |
includeVideos | boolean | No | Default false. On, each profile is followed by rows for its posts. |
maxVideosPerProfile | integer | No | Default 100. Applies only when collecting posts. Up to 33 uses the fast path. |
Profiles only
{"usernames": ["tiktok", "@khaby.lame", "https://www.tiktok.com/@charlidamelio"]}
Profiles plus their recent posts
{"usernames": ["@gymshark"],"includeVideos": true,"maxVideosPerProfile": 30}
Output Overview
Each item is a flat object describing one profile. Runs stream to the default dataset, exportable as JSON, CSV, Excel, or via the API.
Output Samples
Profile row
{"sourceUsername": "tiktok","username": "tiktok","userId": "107955","secUid": "MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM","nickname": "TikTok","bio": "One TikTok can make a big impact","bioLinkUrl": "linktr.ee/tiktok","profileUrl": "https://www.tiktok.com/@tiktok","avatarUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/...","language": "en","isVerified": true,"isPrivate": false,"isOrganization": true,"isSeller": false,"isCommerceUser": true,"commerceCategory": "Media & Entertainment","accountCreatedAt": "2015-02-28T17:22:29.000Z","followerCount": 95100000,"followingCount": 0,"likeCount": 462300000,"videoCount": 1487,"friendCount": 1}
Post row (includeVideos: true)
{"rowType": "video","sourceUsername": "gymshark","postId": "7661334167342320918","postUrl": "https://www.tiktok.com/@gymshark/video/7661334167342320918","caption": "Onyx V1 Returns. July 16th. 7pm BST #onyxv1 #Gymshark","createdAt": "2026-07-11T09:29:30.000Z","durationSeconds": 41,"isPinned": true,"playCount": 1300861,"likeCount": 200045,"commentCount": 873,"shareCount": 7771,"saveCount": 14239,"authorId": "6536068161471517696","authorUsername": "gymshark","authorNickname": "Gymshark","authorFollowerCount": 6613011,"musicId": "7132920769062897666","musicTitle": "original sound","coverUrl": "https://p16-common-sign.tiktokcdn.com/...","scrapedAt": "2026-08-19T07:34:12.402Z"}
Key Output Fields
| Field | Description |
|---|---|
sourceUsername | The input value this row came from |
username / nickname | Canonical handle and display name |
userId / secUid | TikTok's numeric and secure IDs — stable even if the handle changes |
bio / bioLinkUrl | Profile signature text and the clickable bio link, if set |
isVerified / isPrivate | Verification badge and privacy flag |
isOrganization / isSeller / isCommerceUser / commerceCategory | Business-account signals: org account, TikTok Shop seller, commerce user, and declared category |
language | The profile's interface language code |
accountCreatedAt | ISO timestamp of account registration — instant account-age / bot signal |
followerCount / followingCount | Audience counters |
likeCount / videoCount / friendCount | Total likes received, videos posted, and mutual-follow count |
Post rows (rowType: "video")
Present only when includeVideos is on. Filter on rowType to separate them from profile rows.
| Field | Description |
|---|---|
rowType | Always video on these rows. Profile rows have no rowType. |
sourceUsername | Links the post back to the profile it came from |
postId / postUrl | The video's ID and canonical link |
caption / createdAt | Description text and ISO posting time |
durationSeconds | Video length |
isPinned | Whether the creator pinned it to the top of their profile |
playCount / likeCount / commentCount / shareCount / saveCount | Engagement on the post |
authorUsername / authorNickname / authorId | Who posted it |
authorFollowerCount | The account's follower count, carried on every row |
musicId / musicTitle | The sound used |
coverUrl | Thumbnail image |
Coming from another TikTok profile scraper?
These are the complaints that show up most often on other TikTok profile scrapers' issue boards. Each line below is something we measured on this Actor rather than asserted.
| What people report elsewhere | What this Actor does |
|---|---|
| "Actor returns fewer posts than requested" | Limits are honoured exactly. Tested at 25, 37 and 60 posts, all deliberately off a page boundary, all returned exactly. |
| "Returns profile metadata but zero videos for public profiles" | Tested against the specific accounts named in those reports, @tangoxofc and @ruthsingh34. Both resolve, and both return posts. |
| "verified property always returns true for all users" | Reads TikTok's real flag. Across a mixed run it returned true for @tiktok, @gymshark, @duolingo and false for two small accounts. |
| "is_pinned is not correct for most cases" | TikTok marks pinned posts is_top, not is_pinned. This Actor reads the right field, so pinned posts are flagged correctly. |
| Repeated timeouts, "request failed and reached maximum retries" | Direct API calls rather than a browser crawler over tiktok.com, so there is no page render to time out. |
| "Author data does not show the followers" | authorFollowerCount is on every post row, no joining back to the profile row. |
FAQ
Do I need to provide my TikTok cookies or log in? No. This Actor never asks for cookies, passwords, or a session — that's the point. Cookie-based scrapers advertise a lower headline price but require you to paste your own TikTok session, which puts your account at risk. Here your account stays completely out of it.
Does it work on private accounts?
Yes — a private account's profile card (stats, bio, flags) is public even though its content is hidden. You get the full row with isPrivate: true.
What happens with deleted or banned accounts?
They yield a user_not_found error item and the run continues with your other usernames — the run never fails because of a missing account.
How many usernames can I pass at once? Hundreds per run is fine — profiles are resolved in parallel, roughly one second per profile at steady state.
How fresh is the data? Fetched live at run time — the counters are what TikTok reports at that moment.
How do I get an account's videos too?
Set includeVideos to true. Each profile row is then followed by rows for its posts, newest first, each carrying rowType: "video" and the sourceUsername it belongs to.
How many posts can I get per profile? Up to 33 comes back in one fast request. Beyond that the Actor switches to a deeper source that pages 10 at a time, which is slower and costs more per post but has no practical ceiling.
Do I get exactly the number of posts I ask for? Yes. Asking for 37 returns 37, not 40. Limits are honoured exactly rather than rounded up to a page boundary.
Why do some posts show isPinned: true out of date order?
Pinned videos are served at the head of a profile's feed regardless of when they were posted. Sort by createdAt if you want strict chronology.
Can I get posts from a private account?
No. The profile card is public but the content is not, so those profiles return their row with isPrivate: true and no posts.
What does it cost? Pay per result: $1.99 per 1,000 rows, plus a small per-run start fee. Profile rows and post rows are billed the same. No subscription.
Support
Found a bug or need a field added? Open an issue on the Actor's Issues tab in Apify Console, or email muhamed.didovic@gmail.com.
Additional Services
Need a custom TikTok or social-media scraper, enrichment pipeline, or a private version of this Actor? Custom builds available — reach out at muhamed.didovic@gmail.com.
Explore More Scrapers
- TikTok Followers & Following Scraper — the full follower / following lists behind these profiles
- TikTok Hashtag Scraper — every video posted under a hashtag, with engagement stats
- TikTok Search Scraper — TikTok's ranked search results for any keyword
- Social Video Transcript Scraper — captions and AI transcripts for TikTok and Instagram videos
- TikTok Keyword Suggestions Scraper — autocomplete and keyword expansion
Browse the full portfolio: muhamed-didovic.github.io
🤖 For AI Agents & LLM Apps
Purpose: Resolve TikTok usernames or profile URLs to complete public profile records with engagement stats, and optionally each account's posts.
Minimal tested input:
{ "usernames": ["tiktok"] }
With posts:
{ "usernames": ["@gymshark"], "includeVideos": true, "maxVideosPerProfile": 30 }
Output: array of flat objects, one per profile. Fields: sourceUsername, username, userId, secUid, nickname, bio, bioLinkUrl, profileUrl, avatarUrl, language, isVerified, isPrivate, isOrganization, isSeller, isCommerceUser, commerceCategory, accountCreatedAt, followerCount, followingCount, likeCount, videoCount, friendCount.
Post rows (only when includeVideos is true) carry rowType: "video" plus: sourceUsername, postId, postUrl, caption, createdAt, durationSeconds, isPinned, playCount, likeCount, commentCount, shareCount, saveCount, authorId, authorUsername, authorNickname, authorFollowerCount, musicId, musicTitle, coverUrl, scrapedAt.
Critical for agents: branch on rowType before reading fields, since profile rows and post rows have different shapes and profile rows carry no rowType at all. Join posts to their profile with sourceUsername. Requesting more than 33 posts per profile switches to a slower, costlier source, so keep the limit low when screening many accounts.
Behavior & billing: Pay-per-event — one charge per row, profile or post alike. Unknown accounts yield one user_not_found error item instead of a row; private accounts return full rows with isPrivate: true and no posts. Bulk usernames allowed per call; each row carries its sourceUsername. No login/cookies required.
⚠️ Disclaimer
This Actor accesses publicly available data on TikTok for legitimate research, market-intelligence, and business-analysis purposes. It does not log in, bypass authentication, or access private content. Use of this Actor must comply with TikTok's Terms of Service and all applicable laws, including data-protection regulations (GDPR, CCPA, etc.). The authors are not responsible for any misuse. Users must:
- Respect rate limits and avoid overloading TikTok's infrastructure
- Not use scraped data to violate user privacy or platform terms
- Process any personal data only with a lawful basis and in compliance with their jurisdiction
- Not republish scraped content in violation of copyright
We do not store scraped data; the Actor returns it directly to your Apify dataset for your authorized use. TikTok is a trademark of ByteDance Ltd.; this Actor is not affiliated with or endorsed by TikTok or ByteDance.
SEO Keywords
tiktok profile scraper, tiktok user posts scraper, tiktok profile videos, scrape tiktok user videos, tiktok account posts export, scrape tiktok profile, tiktok profile data export, tiktok follower count api, tiktok account info scraper, bulk tiktok profile lookup, tiktok bio link scraper, tiktok account age checker, tiktok profile to csv, tiktok user info api, tiktok profile stats, tiktok verified account checker, tiktok seller account finder, tiktok commerce accounts, influencer vetting tool, tiktok influencer analytics, tiktok osint tool, no login tiktok scraper, no cookies tiktok scraper, tiktok data extraction, tiktok public data, competitive intelligence tiktok, apify tiktok scraper