TikTok Profile Scraper avatar

TikTok Profile Scraper

Pricing

from $1.25 / 1,000 results

Go to Apify Store
TikTok Profile Scraper

TikTok Profile Scraper

Scrape public TikTok profiles by handle and get exact counts: followerCount reads 95200000 rather than the rounded 95.2M the page displays, alongside followingCount, likeCount, videoCount, nickname, biography, isVerified and the full-size avatar. Up to 500 handles per run, all read logged out.

Pricing

from $1.25 / 1,000 results

Rating

0.0

(0)

Developer

String

String

Maintained by Community

Actor stats

0

Bookmarked

17

Total users

7

Monthly active users

19 days ago

Last modified

Share

Turn a list of TikTok handles into exact follower, like and video counts โ€” 95200000, not 95.2M.

What can TikTok Profile Scraper do?

Give it handles and it returns one row per public profile, with the counts as the integers TikTok computed before the page rounded them.

๐Ÿ”ข Exact integers, not rounded display. The page shows 95.2M; you get followerCount: 95200000, and the same for likes, following and videos. An account can gain 40,000 followers without the displayed figure moving โ€” this sees it.

๐Ÿ‘ค The whole public profile. Display name, bio, verification badge and the full-size avatar.

๐Ÿ“ฅ Up to 500 handles per run, fetched in parallel. tiktok, @khaby.lame and a full profile URL all resolve to one fetch.

๐Ÿ“ˆ Built for a time series. Schedule it and the exact counts stack into growth you can measure week to week.

โŒ Honest failures. A handle that does not resolve is reported as a failure, never as a row of zeros.

๐Ÿšซ No login. No TikTok account, session cookie or msToken at any point.

Why scrape TikTok profiles?

  • Influencer vetting. Check an actual follower count against the one quoted in a media kit before a paid collaboration, and check the like-to-follower ratio while you are there.
  • Growth tracking. Exact integers are what make a weekly series meaningful. Rounded display figures flatten a month of real growth into one step change.
  • Shortlist ranking. Sort a candidate list by exact follower and like volume rather than by eyeballing rounded numbers that tie.
  • Competitive monitoring. Watch a set of brand accounts and see who is actually posting, via videoCount movement rather than impression.
  • Database enrichment. Attach current counts, bio text and verification status to a partner, talent or affiliate record you already hold.

How to use it

  1. Open the Actor and click Try for free, or add it to your Apify account.
  2. Paste handles into the Profiles field, one per line. tiktok, @khaby.lame and https://www.tiktok.com/@nba are all accepted, and mixing the three forms is fine.
  3. Raise Concurrency if you are working through hundreds of handles; the default of 5 keeps a large list moving without hammering anything.
  4. Set Maximum results if you want a hard ceiling on the dataset.
  1. Click Start, then export the rows from the Dataset tab as JSON, CSV or Excel.
  2. Read the run's SUMMARY record for any handle that failed and why.

For a growth series, save the input as a task and schedule it daily or weekly. Each row carries collectedAt, so the dataset accumulates into a time series without any extra work.

Output

One row per profile. The shape below is illustrative โ€” it shows the fields and their types, not a captured run.

{
"handle": "khaby.lame",
"username": "khaby.lame",
"nickname": "Khabane lame",
"biography": "If you want to laugh you are in the right place",
"followerCount": 95200000,
"followingCount": 82,
"likeCount": 1300400000,
"videoCount": 1211,
"isVerified": true,
"profileImageUrl": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/7318c1a2b3d4e5f60718293a4b5c6d7e~c5_1080x1080.jpeg",
"sourceUrl": "https://www.tiktok.com/@khaby.lame",
"collectedAt": "2026-08-21T09:14:03.512Z"
}

Reliability

Measured across 30 well-known accounts in one run, all 30 were collected and every field in the schema came back populated with real values.

Everything is read from TikTok's own rehydration state rather than from rendered markup. That is partly for accuracy and partly out of necessity: the rendered profile page is far past the size a model-backed extractor will accept, and its counts are display strings. The blob is served as part of the logged-out page, which is why no account, cookie or token is involved.

A profile that returns no readable identity or counts is recorded under failures rather than emitted as an all-null row that would count as a success. The check is deliberate โ€” the blob can parse while carrying nothing useful, for instance when an interstitial is served under the profile route, and a row of nulls in a dataset is worse than an honest failure. A run in which every handle failed exits with an error.

There are no retries. The String Unblocker behind this Actor owns proxy rotation, session reuse and anti-bot solver selection, so a retry loop out here would re-roll the same block.

Limitations

Profile-level data only. No videos, comments, hashtags, sounds, follower lists or keyword search, and no discovery of any kind: you supply the handles. A private account exposes only what TikTok publishes on the public profile. Only tiktok.com URLs are accepted, and there is no country or language input.

How much does it cost?

A run that returns 1,000 rows costs $2.50 on a paid plan, or $3.00 with no subscription. You are charged per result row written to the dataset, so a run that returns nothing costs nothing, and maxItems is the budget dial.

PlanPer 1,000 rows
Free$3.00
Bronze$2.50
Silver$1.75
Gold$1.25
Platinum$0.75
Diamond$0.50

Apify bills its own platform usage for the run on top of this.

A handle that fails produces no row and costs nothing.

Runs started from an Apify free plan stop at 250 requests and 250 results, reported in the run's status message, so a free-plan run of a 500-handle list returns the first 250. Any paid plan runs the full input and whatever maxItems you set. The cap exists because this Actor fetches through String's own infrastructure, which Apify does not reimburse on free-plan runs, and it binds on requests as well as rows so a long handle list cannot spend those fetches on rows the run will not return.

Using it with the Apify API

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const run = await client.actor("usestring/tiktok-profiles").call({
profiles: ["tiktok", "khaby.lame", "nba"],
concurrency: 5
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const profile of items) {
const engagement = profile.likeCount / profile.followerCount;
console.log(profile.username, profile.followerCount, engagement.toFixed(2));
}
const summary = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord("SUMMARY");
console.log(summary?.value);

FAQ

How do I scrape TikTok profiles without logging in? Put the handles, @handles or profile URLs into the profiles input and run the Actor. It reads the public, logged-out profile page, so no TikTok account, cookie or session token is required.

Is the follower count exact or rounded? Exact. followerCount comes back as 95200000 where the page renders "95.2M", and likeCount, followingCount and videoCount are exact integers as well.

What identifier formats does the input take? Three, all treated as the same account: a bare handle (nba), an @handle (@khaby.lame), or a full profile URL (https://www.tiktok.com/@nba).

How many profiles can one run collect? Up to 500, which is the ceiling on the profiles input. Each profile is one request and one row.

Does it return videos, comments, hashtags or sounds? No. The row is the profile-level field set in the table above and nothing beyond it.

What happens with a handle that does not exist? It goes into the run's SUMMARY under failures and the rest of the batch still returns. Only a run where every handle failed exits with an error.

Can I search TikTok by keyword or hashtag? No. You supply the handles; this Actor does no discovery.

How current are the counts? They are whatever TikTok's own page data held at the moment of the fetch, stamped in collectedAt.

Feedback

If a handle fails or a count looks wrong, open an issue from the Issues tab on this Actor's Store page and include the handle that reproduces it.