If you need a TikTok follower count from an API for an account that is not yours, the official options in 2026 are narrow: TikTok's developer APIs return follower_count either for the user who logged in to your app, or, through the Research API, for approved non-commercial researchers. For anything else (a dashboard, a creator database, a tracker for competitors' accounts) you read the public profile page, or you pay someone who reads it for you. This post shows both, with a real request and a real response.
Everything about third parties below was read on 2026-10-02, with the source linked. Everything about our own API was read from our production database or from our committed captures on the same day.
What TikTok's official APIs give you
TikTok documents two endpoints that return a follower count.
The user info endpoint of the developer API. Its documentation says it returns data "for the authorized user only", using the access token that user gave your app, and that follower_count needs the user.info.stats scope (TikTok for Developers, User Info). That is the right tool if you are building something where creators connect their own accounts. It cannot look up @nasa unless NASA logs in to your app.
The Research API. Its user info endpoint returns follower_count, following_count, likes_count and video_count for arbitrary public accounts (Query User Info). The catch is who gets in. TikTok's eligibility page lists academic institutions in the U.S., EEA, UK, Canada or Switzerland, not-for-profit research bodies in the EU, and a Brazil-specific track, and requires applicants to be "independent of commercial interests" and to work on a "not-for-profit or non-commercial basis". It says to expect a decision within about four weeks (Research Tools). If you are a company, or a developer building a product, that page answers the question for you.
So the search that brings most people here, "TikTok API follower count", has a short official answer: for your own users, yes; for public accounts in a commercial product, no.
The public page, and why it is harder than it looks
A public TikTok profile renders for a logged-out visitor with the follower count on it, and the page carries the same numbers as embedded JSON. That is what every unofficial library and every scraping vendor reads. There is no hidden endpoint.
The problem is where you request it from. In our own measurement, a request from a datacenter address got back HTTP 200 and a challenge page of 1,462 bytes with no profile data inside. Nothing errors. If your parser treats a missing field as zero or null, you store a wrong number and move on. Getting the real page took a residential exit and a browser-like TLS handshake. We wrote up how that silent failure eats a dataset, and the Instagram version of the same problem is in reading an Instagram profile without logging in.
If you build this yourself, budget for three things: a proxy bill, a check that refuses to parse anything that is not the profile, and someone's time when the page changes.
The same lookup with one GET
Our TikTok API reads the public profile and returns it in the envelope we use for every network. One request:
curl "https://honesthook.com/api/v1/tiktok/profile?handle=nasa" \
-H "Authorization: Bearer hk_live_..."
This is a captured response from 15 September 2026, trimmed only by omission (billing fields, request id, avatar, bio and link removed; nothing moved):
{
"success": true,
"platform": "tiktok",
"endpoint": "tiktok/profile",
"data": {
"author": {
"id": "7664638705177150477",
"handle": "nasa",
"name": "NASA",
"followers": 1711912,
"following": 23,
"posts_count": 44,
"verified": true,
"is_private": false
}
},
"error": null,
"cached": true
}
The follower count is at data.author.followers. Not data.followers: we once published that wrong path in our own page copy, and it is the kind of mistake that returns None without complaint. Read the path exactly.
The full field list, parameters and failure cases are on the TikTok profile endpoint page. The docs cover authentication and the envelope shared by all endpoints.
A follower tracker in Python
Most people who want one follower count want it again tomorrow. Here is the whole tracker: it reads a list of handles and appends one CSV row per reading.
import csv, datetime, os, requests
KEY = os.environ["HONESTHOOK_KEY"]
HANDLES = ["nasa", "natgeo", "bbc"]
def tiktok_followers(handle):
r = requests.get(
"https://honesthook.com/api/v1/tiktok/profile",
params={"handle": handle},
headers={"Authorization": f"Bearer {KEY}"},
timeout=30,
)
body = r.json()
if r.status_code != 200 or not body.get("success"):
raise RuntimeError(f"{handle}: {r.status_code} {body.get('error')}")
author = body["data"]["author"]
return author["followers"], author["posts_count"]
with open("tiktok_followers.csv", "a", newline="") as f:
w = csv.writer(f)
now = datetime.datetime.now(datetime.timezone.utc).isoformat()
for h in HANDLES:
followers, posts = tiktok_followers(h)
w.writerow([now, h, followers, posts])
Run it from cron every few hours. Two choices in it are deliberate. It raises instead of writing a row when the call fails, because a gap in a time series is honest and a zero is not. And it reads followers by its full path, so a change in shape fails loudly.
We run this exact pattern on ourselves. Our production database keeps a snapshot of three TikTok accounts every three hours. For @nasa on 2026-10-02, the first reading of the day (00:03 UTC) was 1,907,461 followers and the 21:03 UTC reading was 1,927,313: 19,852 new followers in 21 hours, across eight readings, with the post count moving from 51 to 52 in the last one. That curve is the thing a single lookup cannot give you, and the past cannot be backfilled, so the useful moment to start collecting is before you need the history.
What it costs
A new key comes with 1,000 free credits a month, no card (get one here). A TikTok profile lookup is 1 credit. A call that returns no result is not charged, and responses are cached for an hour, so repeating a handle inside that hour does not cost a fresh lookup. When we took the capture above, the cached: true response was billed zero credits.
The tracker above, three handles every three hours, is 8 calls per handle per day, or 720 calls in a 30-day month. That fits inside the free allowance. Past that, the paid plan is US$ 9 a month for 5,000 credits (pricing), which works out to US$ 1.80 per thousand lookups.
Where an alternative is the better buy
If what you want is videos with likes, comments and views, our endpoint is the wrong tool: it returns the account, not its posts.
For that, a pay-per-result scraper on Apify is cheaper per item. The TikTok Profile Scraper by apidojo lists "$0.30 / 1,000 posts" and returns profile fields alongside each post, with free-tier users capped at 5 runs a month and 10 items per run (Apify listing). The unit there is a post, not a profile, so compare on what you actually need to read. We compared the two platforms in more detail in HonestHook vs Apify and costed the Instagram side in what 1,000 Instagram profiles cost on Apify.
What a single REST call gives you over a scraping job is the shape of the integration: a synchronous request, a stable JSON path, one key for the other networks we cover, and a 200 that means the profile was read.
Limits, and what we did not confirm
- Public accounts only.
is_privatetells you when an account is private, and nothing behind a login is read. - No videos, no view counts, no engagement rate. View counts are not on the profile surface, and an engagement rate needs reach, which TikTok does not publish.
- TikTok can change the page without notice. When it does, our route is the part that breaks, and the endpoint refuses to answer rather than return a guessed number.
- We did not test TikTok's official APIs ourselves. Everything about them above is from TikTok's documentation as published on 2026-10-02. We did not apply for Research API access.
- We did not run the Apify actor. Its price and limits are as listed on its page on 2026-10-02.
If you are deciding between building and buying, the honest summary is that the request is easy and keeping it working is the job. Start with the free key, point the tracker at three handles, and look at the CSV in a week.