TikTok Profile Scraper: Followers, Likes & Bio
Pricing
from $0.25 / 1,000 profiles
TikTok Profile Scraper: Followers, Likes & Bio
Public TikTok profile stats with exact counts: followers, following, likes, video count, bio, bio link, verified flag, avatar and account creation time. No login, no browser. $0.25 per 1,000 profiles.
Pricing
from $0.25 / 1,000 profiles
Rating
0.0
(0)
Developer
subimpact
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Get clean stats rows for public TikTok profiles: followers, following, likes, video count, bio, bio link, verified flag, avatar and account creation time. The counts are exact (2,145,257 followers, not the rounded 2.1m that TikTok prints on the page). One row per profile, no login, no API key, no browser, no cookies.
Pay only for what you get: $0.25 per 1,000 profiles. A default run of two profiles costs $0.0005, plus Apify platform usage.
What you get
- Exact numbers:
followers,following,likes,videos,diggCount,friendCountas integers, read from TikTok's own exact counters rather than the rounded display values. - Profile facts:
username,userId,secUid,nickname,bio,bioLink,verified,privateAccount,isOrganization,commerceUser,ttSeller,language,createdAt,avatarUrl,avatarThumbUrl,profileUrl. - Any input form:
nasa,@nasa,https://www.tiktok.com/@nasa, or a video URL such ashttps://www.tiktok.com/@nasa/video/7123456789012345678. The handle is extracted, trimmed and deduplicated. - Free error rows: handles that do not exist or cannot be read still get a row saying so, with
statusnot_foundorerror, and are never charged. Bad input entries are reported the same way, so one typo does not throw away the rest of your list. - A status message with the counts of delivered, not-found and failed profiles and how many events were charged.
Quick start
Input that works exactly as written:
{"usernames": ["nasa", "natgeo"]}
With links, handles and a video URL mixed in:
{"usernames": ["nasa","@natgeo","https://www.tiktok.com/@nasa","https://www.tiktok.com/@natgeo/video/7123456789012345678"],"maxItems": 50}
Leave usernames empty (or send {} from the API) and the actor reads nasa, so a first run always returns a row.
Output example
A real row for @nasa (avatar URLs shortened here for readability):
{"username": "nasa","userId": "7664638705177150477","secUid": "MS4wLjABAAAAU9BRVzC8oCaegVnia8IbqWhPb_-dbU7s00Y3wS1_Nx8g5RUaYvyXrpejgjdxTwd6","nickname": "NASA","bio": "Making the seemingly impossible, possible.✨","bioLink": "science.nasa.gov/feature/artemis-ii-preliminary-lunar-science-report","verified": true,"privateAccount": false,"isOrganization": true,"commerceUser": false,"ttSeller": false,"language": "en","createdAt": "2026-07-20T15:55:49.000Z","followers": 2145257,"following": 23,"likes": 11429206,"videos": 61,"diggCount": 0,"friendCount": 17,"avatarUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/e5143212...jpeg","avatarThumbUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/e5143212...jpeg","profileUrl": "https://www.tiktok.com/@nasa","inputValue": "nasa","status": "success","error": null,"scrapedAt": "2026-10-29T12:00:00.000Z"}
The same run for @natgeo returned followers: 9687841, following: 62, likes: 55755965, videos: 1566,
friendCount: 59, createdAt: "2020-01-10T16:08:37.000Z", bioLink: "spr.ly/natgeotiktok", and both a commerce
account and a TikTok Shop seller flag.
A handle that does not exist comes back as a free row:
{"username": "nosuchuser","followers": null,"status": "not_found","error": "TikTok has no public profile @nosuchuser (statusCode 10221).","inputValue": "@nosuchuser"}
Pricing
Pay per event, charged only after the row is in the dataset:
| Event | Price | Charged when |
|---|---|---|
profile | $0.00025 per profile ($0.25 per 1,000) | a profile row was pushed |
apify-actor-start | $0.00005 per run | the run starts (platform event) |
Buyer pays Apify platform usage separately.
Typical costs: 2 profiles = $0.0005. The maximum for one default run (maxItems 100) is $0.025. Not-found
profiles, unreadable pages, failed requests and unreadable input entries cost nothing.
How this compares
Free-plan list prices on the Apify Store, checked 29 October 2026. Competitor prices are list prices for their own events; their Apify platform usage is charged on top by their listings (see each listing, prices change).
| Actor | Price | What the price buys | Users on the listing |
|---|---|---|---|
| tiktok-profile-scraper (this actor) | $0.25 per 1,000 profiles | profile stats only, exact counts, no videos | new |
| clockworks/tiktok-profile-scraper | $3.00 per 1,000 results | video results, profile data comes with them | 9,527 in 30 days |
| apidojo/tiktok-profile-scraper | $0.30 per 1,000 posts | posts of a profile | 882 |
What is different here beyond the price:
- Exact counts, not rounded ones. TikTok shows "2.1m followers" on the page but keeps
2145257in its data block; this actor returns the exact number, so you can track small deltas between runs. - Profile only, so it is cheap. You pay for one row per profile, not for a page of videos you may not need.
- Free rows for what did not work. A missing handle or a blocked page still appears in the dataset with a
statusand anerror, and costs nothing.
Limits and honest notes
- No video lists and no comments. The public profile page does not carry them, so this actor does not attempt them. It is a stats actor.
- Public profiles only. Private accounts return their public flags but no hidden data; profiles that do not
exist return
status: "not_found". - Counts are a snapshot.
followers,likesand the other counters are what TikTok reported at scrape time, and they change constantly. Run it again for a newer snapshot. createdAtcan be null. TikTok publishes the account creation time for most accounts, but not for all, and older or migrated accounts can report0.diggCountandfriendCountare whatever TikTok publishes. Both come straight from the profile stats block and arenullwhen it does not carry them.- Datacenter proxy by default. Apify proxy answered with full data when this actor was built, and direct requests from the Apify platform worked too. Do not switch to residential proxies: TikTok serves them a small page without any profile data, and runs will only produce error rows. A proxy failure fails the request; it never falls back to a direct one.
- Three attempts per profile. Network errors, 5xx, 429 and a page without profile data are retried, each attempt with a fresh proxy session. A 404 or a "user does not exist" page is never retried.
maxItemscaps the run. Entries beyond the cap are skipped and the status message says so.- CDN links expire.
avatarUrlandavatarThumbUrlare the TikTok CDN URLs from the page. Nothing is downloaded.
Responsible use
This actor reads the same public profile page any browser sees. Only collect profiles you have a reason to collect. Profile data can include personal data: how you store, process and share it is your responsibility under the GDPR, PDPA and any other law that applies to you. Do not use it to build profiles of private individuals or to evade TikTok's rate limits.
Development
npm cinpm test # node:test, parses the saved profile fixturesnpm run build
Fixtures in test/fixtures/ were saved from live www.tiktok.com profile pages on 29 October 2026 (signature and
refresh-token query strings scrubbed).