TikTok Profile Scraper - Followers and Likes
Pricing
from $0.34 / 1,000 profiles
TikTok Profile Scraper - Followers and Likes
Scrape TikTok profiles from a list of handles or links. Each row has followers, following, lifetime likes, video count, bio, verified flag, avatar and the secUid that survives a rename. A handle listed twice is billed once. $0.35 per 1,000 profiles.
Pricing
from $0.34 / 1,000 profiles
Rating
5.0
(2)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
50
Total users
25
Monthly active users
6 days ago
Last modified
Categories
Share
Scrape TikTok profiles from a list of handles: one flat row per account with followers, following, lifetime likes, video count, bio, verified flag, avatar and the profile link. Nothing to log into.
The part worth knowing first: TikTok hides two of those numbers on many accounts. followingCount
and diggCount come back as 0 on plenty of large, active profiles because the account keeps them
private, not because the figure is really zero. And this returns the profile only. The videos on it
are a different actor, linked further down.
| Input | Usernames, or tiktok.com/@handle links |
| Output | One row per profile: followers, following, lifetime likes, video count, bio, verified flag, avatar, profile link and both TikTok ids |
| Ceiling | No cap on handles. A long list stops at the run's time limit, an hour by default, and keeps every profile it delivered |
| Speed | Roughly 40 to 50 profiles a minute on measured runs, and slower when TikTok is slow to answer |
| Account needed | None |
| Price | $0.35 per 1,000 profiles on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 14,000 |
🔍 What TikTok Profile Scraper does
You hand it handles, it hands back the profile record behind each one. Handles are taken with or
without the @, and a profile link works just as well since the handle is read straight out of it.
Everything is deduplicated before the rows land, so the same account listed twice in one run comes back once and is billed once. Handles are fetched one at a time, which is why a long list takes a while.
The field names are TikTok's own rather than the labels you see in the app, because those are the
names you will need if you feed the rows into anything else. heartCount is the lifetime likes
figure people usually mean by "total likes".
📋 What data you get from each TikTok profile
| What you get | Field |
|---|---|
| Handle, display name and the numeric user id | uniqueId, nickname, id |
| TikTok's long id, which survives a handle change | secUid |
| Bio | signature |
| Followers and following | followerCount, followingCount |
| Lifetime likes across everything the account has posted | heartCount |
| Videos on the account right now | videoCount |
| Likes the account has given out, usually hidden | diggCount |
| The blue tick | verified |
| Profile picture and the profile link | avatar, url |
▶️ How to scrape TikTok profiles
- Open TikTok Profile Scraper and click Try for free.
- Type handles into Usernames, one per line, or paste links into Profile URLs.
- Click Start.
- Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
Start it with both boxes empty and you get one labelled sample row that is not charged.
💰 How much does it cost to scrape TikTok profiles?
$0.35 per 1,000 profiles on the Free plan. Paid plans pay a little less: $0.345 on Starter, $0.34 on Scale and $0.335 on Business. On the free plan, the $5 Apify gives you each month covers about 14,000 profiles.
You pay for rows that carry a profile. The sample row, diagnostic rows and the second copy of a handle you listed twice are not charged.
📥 What you give it
{"profiles": ["tiktok", "nba", "khaby.lame"]}
| Field | Default | What it is |
|---|---|---|
profiles | none | Usernames, with or without @. The form opens with tiktok and nba filled in as an example, which is a starting point rather than a default. |
startUrls | none | Or paste profile links like https://www.tiktok.com/@tiktok. Mix them with profiles freely. A link that is not a profile link is skipped. |
sessionCookies | none | Optional. Your own TikTok sessionid. The field is stored encrypted. |
proxyConfiguration | off | Leave it off. Your own servers are used exactly as given. |
notionConnector, notionParentId | none | Optional. Write each profile into a Notion database as well as the dataset. |
📤 What you get back
A real row from a real run, with the avatar link cut short:
{"ok": true,"type": "profile","id": "107955","uniqueId": "tiktok","secUid": "MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM","nickname": "TikTok","signature": "Your next discovery is waiting on TikTok.","verified": true,"avatar": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/...","followerCount": 95824985,"followingCount": 1,"heartCount": 464140394,"videoCount": 1591,"diggCount": 0,"url": "https://www.tiktok.com/@tiktok"}
| Field | How to read it |
|---|---|
followingCount, diggCount | 0 often means the account hides the figure, not that it is zero. |
heartCount | Lifetime likes received. This is the "total likes" number. |
videoCount | How many videos are on the account at the time of the run, not how many it ever posted. |
secUid | Stays the same when the creator renames the account, so track it rather than uniqueId. |
avatar | Signed, and it stops working after a while. Download the image if you need to keep it. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Billed |
|---|---|---|
| A profile | ok: true and type: "profile" | yes |
| The sample row | _sample: true | no |
| A diagnostic | ok: false and an errorCode | no |
Filter on type == "profile" and you have your data. The sample row only turns up when the input
was empty.
| Code | What it means |
|---|---|
NOT_FOUND | No profile came back for that handle. Treat them the same way: check the spelling, then try it again later. |
NOT_SERVED | This profile was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
TIME_LIMIT | The run neared its time limit and stopped, keeping every profile it had delivered. If no profile had come back by then, the run ends as failed. |
NO_RESULTS | Nothing at all came back for the whole run. |
A handle that fails gets its own row and the run carries on to the next one.
One quirk of the Overview table: it shows six columns, so a diagnostic row reads as a nearly blank
line there, and followingCount, verified and secUid are not in it at all. Open the row itself
or download the JSON and everything is present.
💡 What people use it for
- Refreshing follower and likes counts across a creator list every week, then comparing week to week.
- Checking a shortlist of creators before you commit to one, so no budget goes to a dead handle.
- Turning a column of handles from a spreadsheet into a table with real numbers next to it.
- Grabbing
secUidfor each account, the id that survives a handle change.
From a hashtag to a creator shortlist, in three runs:
- Run TikTok Hashtag Scraper on a tag in
your niche and copy the
author.uniqueIdcolumn. - Paste those handles into Usernames here and sort on
followerCount. - Put the handles worth a closer look into the Profiles box of TikTok Scraper to see their newest videos and how they perform.
🚧 What it does not do
- No videos, comments or follower lists. This is the profile record. The siblings in the table below cover the rest.
followingCountanddiggCountare often0because TikTok hides them. Read a0there as "not shown", not as "none".- A private account returns only what TikTok shows the public, which is the name, the bio and the counts it chooses to display.
- Counts are a snapshot at the moment the row was read, not a history.
- No search. You need the handle already. It will not find accounts by topic or keyword.
- It is not an official TikTok tool. Dami's Studio is independent and is not affiliated with or endorsed by TikTok, or by any other company named on this page.
🧭 Which TikTok scraper do you need?
| If you want | Use |
|---|---|
| Follower and like counts for a list of handles | This one |
| A profile plus its newest videos, or a keyword search | TikTok Scraper |
| Videos posted under a hashtag | TikTok Hashtag Scraper |
| Comments under a video | TikTok Comments Scraper |
| The hashtags ranking in a country right now | TikTok Trending Hashtags |
| The same kind of row for Instagram accounts | Instagram Profile Scraper |
❓ Questions people ask
Do I need a TikTok account to scrape TikTok profiles?
No. The cookie field is optional.
Why does a big account show 0 following?
Because TikTok is not publishing that number for the account. The same goes for diggCount, the
likes an account has given.
Can I get the account's videos too?
Not from here. TikTok Scraper returns the profile row plus the newest videos on the grid.
Why do the numbers differ from what I see in the app?
Counts move all the time, so two reads an hour apart disagree slightly on a big account and neither is wrong. If a field looks off, open the profile in a private browser window: what a signed-out visitor sees there is what this actor reads.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code
for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/tiktok-user-scraper. Either way the
run happens on your Apify account at the same price.
Is scraping TikTok legal?
This reads public profiles only, never private accounts or messages. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Include the handles you used and the run ID, and the log is usually enough for us to see what happened.