Before paying a creator, most teams look at the follower count on the profile and maybe scroll a few posts. Both TikTok and Threads make that misleading in different ways. This post covers the numbers worth computing, how to compute them, and where they lie. Disclosure: SpellzCode, the brand behind this account, sells the two scrapers used in the code (links at the end); the formulas work with any data source.

Trap 1: rounded counts

TikTok shows "27.4M followers" on the profile. Fine for a glance, useless for tracking: a creator can gain 49,999 followers and the number does not move. If you track growth week over week, you need the exact count. TikTok's own page data carries it (27,483,982 in that example), so any tool you use should return that, not the rounded label.

Trap 2: lifetime likes

TikTok's "Likes" is a lifetime total across all videos. A creator with one viral video three years ago looks strong forever. Divide by the number of videos to get average likes per video, and compare it with followers:

const avgLikesPerVideo = likes / videos; const likesPerFollower = likes / followers; 

Some real numbers from public profiles (November 2026):

Account Followers Videos Avg likes / video
@nasa 2,183,007 66 177,239
@nba 27,483,982 25,105 47,141

NASA has less than a tenth of the NBA's followers but gets nearly four times the likes per video, because it posts rarely and each post lands. For a sponsored video, the per-video number is what you are buying.

Trap 3: engagement on Threads

Threads shows followers and the latest posts, each with likes, replies, reposts and quotes. The usual engagement rate is:

// posts: the account's recent posts const avg = (k) => posts.reduce((s, p) => s + (p[k] ?? 0), 0) / posts.length; const engagementRatePercent = ((avg('likes') + avg('replies') + avg('reposts')) / followers) * 100; 

Real examples, computed from each account's latest public posts:

Account Followers Avg likes Engagement rate
@mosseri 1,058,672 942 0.136%
@zuck 5,777,936 2,157 0.047%
@nasa 12,797,207 1,822 0.016%
@nytimes 4,782,467 22 0.001%

The account with the fewest followers has by far the highest rate. Big brand accounts that post links all day sit near zero. Two cautions: a handful of recent posts is a small sample, and one viral post skews the average. Look at the median too if you have enough posts.

Trap 4: inactive accounts

A big follower count on an account that last posted months ago is worth little. Always check the date of the newest post.

Doing it for a list of handles

The two Apify actors below return these fields directly, one row per account. TikTok gives exact counts, avgLikesPerVideo, likesPerFollower, plus business-account and TikTok Shop seller flags. Threads gives recent posts with likes, replies, reposts and quotes, plus engagementRatePercent and lastPostedAt.

// npm i apify-client import { ApifyClient } from 'apify-client'; const client = new ApifyClient({ token: process.env.APIFY_TOKEN }); const handles = ['nasa', 'nba', 'duolingo']; const tt = await client.actor('spellzcode/tiktok-profile-data').call({ usernames: handles }); const th = await client.actor('spellzcode/threads-profile-data').call({ usernames: handles }); const tiktok = (await client.dataset(tt.defaultDatasetId).listItems()).items; const threads = (await client.dataset(th.defaultDatasetId).listItems()).items; for (const h of handles) { const a = tiktok.find((x) => x.username === h); const b = threads.find((x) => x.username === h); console.log(h, { tiktokFollowers: a?.followers, tiktokAvgLikes: a?.avgLikesPerVideo, threadsFollowers: b?.followers, threadsEngagement: b?.engagementRatePercent, threadsLastPost: b?.lastPostedAt, }); } 

Both cost $2 per 1,000 profiles; missing accounts are free, and Apify's free $5 monthly credit covers about 2,500 profiles. They read public pages as a logged-out visitor, without logins or proxies, so they return account-level data and the recent posts the public profile shows, not full video or post histories.

Links