TikTok User Scraper: follower and following lists
TikTok User Scraper returns the accounts that follow a public TikTok profile, or the accounts it follows, each as a complete user record with reach, region and contact flags.
Free Apify plan: 5 runs a month, 10 items a run. No credit card.
- $0.005
- per query, and a run has two or three
- ~10
- users free per list query
- $0.0005
- per user after
- 99.78%
- run success, last 30 days
Read on 27 September 2026.
Two toggles that are really two line items
The profile URL is charged whether or not you get anything useful back, and each list you switch on adds its own query on top. Reading the input schema as a price list is the fastest way to understand a bill here.
startUrls$0.005per URL
No users included
A profile URL, or a video or photo URL, a post link resolves to whoever posted it.
https://www.tiktok.com/@a3k113getFollowers+$0.005per profile
~10 users free
On by default. Adds a follower query per profile and walks that list with pagination.
getFollowers: trueLeave it on and a default run costs three queries
getFollowing+$0.005per profile
~10 users free
Also on by default. Its own query, its own allowance, and the one people forget is running.
getFollowing: falsemaxItems÷ $0.0005after the free tens
Run-wide
Caps users across the whole run. The listing treats it as the testing control.
1000
The two toggles cannot both be off. The listing forbids it outright, because a run that fetches one account and no list is the single-item query it does not allow.
| Apify actor | apidojo/tiktok-user-scraper |
|---|---|
| Inputs | startUrls · getFollowers · getFollowing · maxItems · customMapFunction |
| Accepts | Profile URLs, and video or photo URLs, which resolve to their author |
| Returns | A flat 16-field user record per account in the list |
| Defaults | getFollowers and getFollowing are both on unless you turn them off |
| Minimum | Ten users a run. Single-account lookups are not permitted |
| Login or proxy | Neither. Public accounts only |
| Reliability | 99.78% of 20,850 runs succeeded in the last 30 days |
An audience, a network, or a creator you only have a video for
Three runs, distinguished by which toggles are on and what you put in startUrls. The third is the one most people do not know is possible.
How do you scrape a TikTok account’s followers?
Give the profile URL, leave getFollowers on and turn getFollowing off. That is two queries at $0.005 each with about ten users included, then $0.0005 per user. A thousand followers comes to $0.51.
Input
{
"startUrls": ["https://www.tiktok.com/@a3k113"],
"getFollowers": true,
"getFollowing": false,
"maxItems": 1000
}$0.005 + $0.005 + 990 × $0.0005=$0.51
What comes back
The user record, Flat, sixteen fields, no nesting. One row is one account.
{
"id": "7043896727212409862",
"url": "https://www.tiktok.com/@a3k113",
"username": "a3k113",
"nickname": "لازم تعرف🤔",
"followers": 94,
"following": 1477,
"likes": 38,
"videos": 2,
"verified": true
}Turning getFollowing off is worth two cents a profile
It is on by default, so a run you did not configure is paying for a list you may not want. Across a hundred profiles that is fifty cents in query fees plus every user those lists return, which on large accounts is the larger half of the bill.
Can you map who a TikTok account follows?
Leave both toggles on. Three queries at $0.005 fire per profile, the URL, the followers and the following, and each list brings its own ten free users. This is the default configuration, and the one to use deliberately rather than by accident.
Input
{
"startUrls": ["https://www.tiktok.com/@a3k113"],
"getFollowers": true,
"getFollowing": true,
"maxItems": 2000
}$0.015 + 1,980 × $0.0005=$1.00
What comes back
The user record, Identical either direction. The row does not say which list it came from.
{
"bio": "🌺",
"region": "SA",
"language": "ar",
"hasEmail": false,
"hasPhone": false,
"avatar": "https://p16-sign-sg.tiktokcdn.com/aweme/1080x1080/…"
}Followers and following arrive in one dataset
Nothing on a row marks it as a follower rather than a followed account. If the distinction matters, run the two directions as separate jobs with one toggle each and label the datasets yourself, the query fees are the same either way.
Can you get a creator’s profile from a TikTok video URL?
Yes, startUrls accepts video and photo URLs as well as profiles, and resolves them to the author. It means a viral post can be turned into a creator record without anyone reading the handle off the screen first.
Input
{
"startUrls": [
"https://www.tiktok.com/@a3k113/video/7043896727212409862"
],
"getFollowers": true,
"getFollowing": false,
"maxItems": 200
}20 × $0.01 + 0 × $0.0005=$0.20
What comes back
The user record, The author’s account, then their followers under the same run.
{
"username": "a3k113",
"nickname": "لازم تعرف🤔",
"verified": true,
"followers": 94,
"likes": 38,
"coverImage": "https://p77-sg.tiktokcdn.com/obj/tiktok-obj/1613727517271041"
}Twenty profiles at ten users each costs only the queries
Because each list query carries roughly ten free users, a shallow pass over twenty accounts, two hundred users in total, is twenty cents and no item charges. It is the cheapest way to sample a lot of audiences before committing to one.
One flat record per account
No nesting at all: sixteen fields on a single level, which is unusual in this family and makes the output drop straight into a spreadsheet or a CRM without flattening.
4
Identity
Always present
- id
- username, the handle
- nickname, the shown name
- url
4
Reach
The numbers that matter
- followers
- following
- likes, lifetime, on the account
- videos, lifetime post count
5
Qualification
Targeting and segmentation
- bio
- region, two letters
- language
- hasEmail, hasPhone
3
Presentation
Imagery and status
- verified
- avatar
- coverImage
id · username · nickname | Stable ID, the @handle, and the display name |
|---|---|
url | Direct link to the account |
followers · following | Both sides of the account’s graph. The ratio is the usual authenticity check |
likes | Lifetime likes received across the account, not likes on one post |
videos | How much they have actually posted, the fastest filter against dormant accounts |
verified | Verification status as a boolean |
bio | Profile bio text, demonstrated in the listing’s output sample |
region | Two-letter account region, e.g. SA |
language | The account’s language setting |
hasEmail · hasPhone | Whether contact details are present on the profile, flags, not the values |
avatar · coverImage | Profile and cover imagery, signed and time-limited |
The followers-to-following ratio together with videos is what most audience audits run on: an account following thousands, followed by dozens and having posted twice is the shape of a follower you do not want to count.
The rules that make this a list tool
The listing’s usage note is unusually firm here, and two of its rules change what the actor is for rather than just how it runs.
- 01
Single-account lookups are not allowed
The listing states that you must not disable both getFollowers and getFollowing to fetch one user. If a single account’s stats is what you need, that is the Profile Scraper’s job, not this one.
- 02
Ten users is the floor for a run
Every run must fetch at least ten users. The listing says running with fewer creates unnecessary cost and may be blocked, which conveniently matches the free allowance on one list query.
- 03
Both toggles start switched on
getFollowers and getFollowing default to true. A run submitted without touching them is paying three query fees per profile, not one.
- 04
A post URL is a valid input
startUrls takes video and photo links as well as profile links, resolving them to the author. Useful when a viral post is all you have.
- 05
The map function is for shaping, not filtering
As across the family, using customMapFunction to drop items risks automatic blocking. Control volume with maxItems instead.
Free accounts run in demo mode: 5 runs a month, 10 items each.
Counting the queries first
Work out the fixed part before the variable one: $0.005 for every profile URL, plus $0.005 for each list you asked for. Only then does $0.0005 a user start to apply, and only past the roughly ten each list includes.
| Run | Method | Calculation | Cost |
|---|---|---|---|
| 200 users | 20 profiles, followers, 10 each | 20 × $0.01 | $0.20 |
| 50 users | 1 profile, followers | $0.01 + 40 × $0.0005 | $0.03 |
| 550 users | 5 profiles, followers | 5 × $0.01 + 500 × $0.0005 | $0.30 |
| 1,000 users | 1 profile, followers | $0.01 + 990 × $0.0005 | $0.51 |
| 2,000 users | 1 profile, both lists | $0.015 + 1,980 × $0.0005 | $1.00 |
| 10,000 users | 10 profiles, both lists | 10 × $0.015 + 9,800 × $0.0005 | $5.05 |
The first row is the shape worth remembering: twenty audiences sampled ten deep cost only query fees, because the free allowance covers every user returned. One note on the fourth row, the listing writes it as $0.505; the half cent rounds up here and in the estimator, and the arithmetic underneath is the same.
Who needs the graph rather than the account?
The listing points at influencer marketing, talent scouting, lead generation and network analysis. Each of them is asking a question about an audience, who is in it, where they are, whether they are real, that no single profile record can answer.
Audience auditing
Followers only, one account deep
Check whether an influencer’s followers post at all, using videos and the follower-to-following ratio
$0.51 per 1,000 followers
Lead generation
Followers only, then filter
Pull a niche account’s audience and keep the ones whose bio and contact flags read like a business
$0.30 per 550 users
Network analysis
Both lists, a seed set
Map the graph in both directions from a handful of seed accounts to find the hubs between them
$5.05 per 10,000 users
Market sampling
Followers only, ten deep, many accounts
Sample twenty audiences for the price of the queries alone before choosing which to go deep on
$0.20 per 20 accounts
Creator discovery
From a video URL
Turn a viral post into a creator record and their audience in one run, without looking up the handle
$0.03 per 50 users
Calling it without paying for the second list
The actor is apidojo/tiktok-user-scraper. The one habit worth building: set both toggles explicitly on every call, because the default is the expensive configuration.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
ACTOR = "apidojo/tiktok-user-scraper"
def audience(urls, followers=True, following=False, cap=1000):
# Always state both: they default to True, and each is its own $0.005.
run = client.actor(ACTOR).call(run_input={
"startUrls": urls,
"getFollowers": followers,
"getFollowing": following,
"maxItems": cap,
})
return list(client.dataset(run.default_dataset_id).iterate_items())
users = audience(["https://www.tiktok.com/@a3k113"], cap=1000)
# Dormant accounts are the cheapest thing to strip out of an audience.
active = [u for u in users if u["videos"] > 0 and u["followers"] > 10]
print(f"{len(active)} of {len(users)} accounts actually post")
for u in active:
ratio = u["followers"] / max(u["following"], 1)
print(u["username"], u["region"], u["videos"], round(ratio, 2))import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
// Two runs, one toggle each: the dataset then tells you which list it is.
const forList = (getFollowers) => client.actor('apidojo/tiktok-user-scraper').call({
startUrls: ['https://www.tiktok.com/@a3k113'],
getFollowers,
getFollowing: !getFollowers,
maxItems: 1000,
});
const [followersRun, followingRun] = await Promise.all([forList(true), forList(false)]);
const grab = async (run) => (await client.dataset(run.defaultDatasetId).listItems()).items;
const [followers, following] = await Promise.all([grab(followersRun), grab(followingRun)]);
const mutual = followers.filter((f) => following.some((g) => g.id === f.id));
console.log(mutual.length, 'mutual connections');curl -X POST \
"https://api.apify.com/v2/acts/apidojo~tiktok-user-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls":["https://www.tiktok.com/@a3k113"],"getFollowers":true,"getFollowing":false,"maxItems":1000}'The listing quotes 400–600 users per second. Export as JSON, CSV or Excel from the Storage tab, the flat record needs no reshaping before it reaches a spreadsheet.
TikTok User Scraper FAQ
Can I look up a single TikTok account with this?
No. The listing forbids disabling both getFollowers and getFollowing to fetch one user, and requires at least ten users a run. For one account’s details, use the TikTok Profile Scraper instead.
How much does it cost to scrape TikTok followers?
$0.005 for the profile URL plus $0.005 for the follower query, with about ten users included, then $0.0005 each. A thousand followers is $0.51.
Why is my run costing more than I expected?
getFollowers and getFollowing are both on by default, so an unconfigured run fires three $0.005 queries per profile and returns two lists. Set them explicitly.
Can I tell followers from following in the output?
Not from the row itself, both lists land in one dataset with the same shape. Run the two directions as separate jobs if you need them labelled.
Can I use a video URL instead of a profile URL?
Yes. startUrls accepts video and photo links and resolves them to the account that posted them.
What does each user record contain?
Sixteen flat fields: id, username, nickname, url, followers, following, likes, videos, verified, bio, region, language, hasEmail, hasPhone, avatar and coverImage.
Does it return email addresses?
No. hasEmail and hasPhone are booleans indicating that contact details exist on a profile, not the details themselves.
What is the cheapest way to sample many audiences?
Take only the free page from each. Twenty profiles with followers on, capped at ten users each, costs $0.20 in query fees and nothing in items.
Where TikTok User Scraper fits
Parent scraper
TikTok Scraper
The family of six, and the two that get confused with each other most. This one maps who follows whom; the Profile Scraper returns a creator’s posts. Picking wrong costs you a run that will not do what you wanted.
Sibling scrapers
Guides
- Auditing an influencer’s audience for dormant accountsComing soon
- Building a mutual-connection graph from two runsComing soon
- Why your TikTok user run cost three queriesComing soon
Sample one audience
Ten users free with the query. Turn the second list off first.
getFollowers: true · getFollowing: false · maxItems: 10
Apidojo is not affiliated with TikTok or ByteDance.