TikTok User Scraper - Profiles, Followers & Stats (No Login)
Scrape TikTok profiles without a login. Get follower, following, likes and video counts, bio, verified flag and avatar. $0.35 per 1,000 profiles.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
profiles,startUrls,notionConnector(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00035 per profile = $0.35 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Profile returned | Charged once per profile returned. Failed/not-found lookups are not charged. | $0.00035 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
profiles | TikTok usernames (with or without @) to fetch full profile data for. | array |
startUrls | Or paste TikTok profile URLs (https://www.tiktok.com/@tiktok). | array |
notionConnector | Optional. Deliver the profiles to your connected Notion via Apify MCP connectors. | string |
notionParentId | Optional Notion database/data-source id to create the pages in. | string |
sessionCookies | Optional, leave empty and the run works as normal. Supply your own TikTok account cookie here, and the run uses it where an account is needed. In Chrome, on a logged-in tiktok.com tab: F12 → Application → Cookies → copy the `sessionid` value. Paste one per line; several are rotated. | array |
What you get
A structured dataset — each result includes fields like:
typeuniqueIdsecUidnicknamesignatureverifiedfollowerCountfollowingCountheartCountvideoCountavatarurlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
1 ready-to-run use cases
TikTok Follower Count Checker - Bulk Profiles
Check TikTok follower counts in bulk. Get followers, following, video count, likes, bio and verified flag. No login.
Related tools in Social Media Scrapers
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Reddit Scraper
Scrape Reddit posts with no login or API key. Rows carry titles, selftext, scores, authors, comment counts and permalinks. $0.50 per 1,000 rows, flat.
Reddit Posts Search Scraper
Search Reddit by keyword: title, post text, author, subreddit, permalink and dates. Add a free Reddit app for scores. $0.891 per 1,000 posts.
Reddit Video Scraper & Downloader
Download v.redd.it videos from any subreddit or Reddit user, with the audio joined back in. Get post details and dedupe. $0.03 per video record.
Telegram Channel Scraper
Scrape public Telegram channels with no bot token and no API key. Get post text, date, views, author, media links and subscriber count. $1.50 per 1,000.
Pinterest Search Scraper
Search Pinterest by keyword: pin title, description, image URL, destination link, pinner and board. No login. $1.60 per 1,000 pins.
Bluesky Scraper
Scrape Bluesky posts and profiles by handle, no login. Archive keyword search needs your own app password. $2.00 per 1,000 posts.
Where this tool sits
- Categories
- Social Media Scrapers
- Platforms
- TikTok
TikTok Profile Scraper: follower counts, likes and bio for any public handle
Give it a list of TikTok usernames and you get one flat row per account: 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 most 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 |
| Ceiling | No cap. One row per unique handle you send |
| Account needed | None from you |
| Price | $0.35 per 1,000 profiles, flat on every plan |
🔍 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 rather than in a burst, 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:
| Field | What it is |
|---|---|
signature | The bio text. |
heartCount | Lifetime likes across everything the account has posted. |
diggCount | Likes the account has given out. Usually 0, because it is usually hidden. |
secUid | TikTok's stable internal id for the account. |
id | The numeric user id. |
A handle that does not exist, or that comes back empty, gets a row saying so and the run carries on to the next one.
📥 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. |
sessionCookies | none | Optional. Your own TikTok sessionid, used only for handles that came back empty. Use a throwaway account: the value sits in the run input, which anyone who can open the run can read. |
proxyConfiguration | off | Leave it off. It exists for people routing through their own servers at high volume. |
notionConnector, notionParentId | none | Optional. Write each profile into a Notion database as well as the dataset. |
Run it with nothing at all and you get one labelled sample row, free, so you can see the shape before you spend anything.
📤 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 | What it is |
|---|---|
uniqueId, nickname | The handle, and the display name shown above it. |
followerCount, videoCount | Audience size and how many videos are on the account right now. |
heartCount | Lifetime likes. This is the number people usually mean by "total likes". |
verified | The blue tick, as a boolean. |
avatar, url | Direct link to the profile picture, and the canonical profile link. |
id, secUid | Both ids TikTok uses. uniqueId is the readable one, secUid survives a rename. |
🧾 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 ok == true and you have your data. NOT_FOUND and BLOCKED both mean no profile came back for that handle, and you can treat them the same way: check the spelling, then try it again later. NO_RESULTS is the single row you get when nothing at all came back for the whole run. TIME_LIMIT means 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.
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.
▶️ How to run it
1. Open TikTok Profile Scraper and click Try for free. 2. Type handles into Usernames, one per line, or paste links into Profile URLs. 3. Click Start. 4. Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
💰 How much does it cost?
$0.35 per 1,000 profiles. Flat on every Apify plan, no volume tiers.
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 people use it for
- Refreshing follower and likes counts across a creator list on a schedule, then diffing week to week.
- Vetting a shortlist of accounts before an outreach round, so nobody pitches a dead handle.
- Turning a column of handles from a spreadsheet into a table with real numbers next to it.
- Grabbing
secUidfor accounts, which is the id that survives a handle change.
🚧 What it does not do
- No videos, comments or follower lists. This is the profile record. Three siblings 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.
- The avatar link is signed and expires. Download the image if you need to keep it.
- No search. You need the handle already. It will not find accounts by topic or keyword.
🧭 Which TikTok scraper do you need?
| If you want | Use |
|---|---|
| Follower and likes counts for handles you already have | This one |
| A profile plus the videos on it, or a keyword search | TikTok Scraper |
| Videos under a hashtag | TikTok Hashtag Scraper |
| Comments under a video | TikTok Comments Scraper |
| Which hashtags are climbing right now | TikTok Trending Hashtags |
❓ Questions people ask
Do I need a TikTok account? No. The cookie field is optional and only comes into play for handles that came back empty without it.
Can I get the account's videos too? Not from here. TikTok Scraper returns the profile row plus the videos on the grid.
Why does a big account show followingCount: 0? Because TikTok is not publishing that number for the account. The same goes for diggCount.
What happens to a handle that does not exist? You get an uncharged row marked ok: false, and the run moves on to the next handle instead of stopping.
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.
Can I run it on a schedule? Yes. Use Apify's scheduler, or start it from the API and read the dataset when it finishes.
🆘 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.