# 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.

[Run this scraper free](https://apify.com/apidojo/tiktok-user-scraper)

[See the three jobs](#jobs)

apidojo/tiktok-user-scraper

**Followers only**

**Followers + following**

**Profiles**

**Users returned**

Estimated run cost

$0.00

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/@a3k113`

-   `getFollowers`

    +$0.005per profile

    ~10 users free

    On by default. Adds a follower query per profile and walks that list with pagination.

    `getFollowers: true`

-   Leave 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: false`

-   `maxItems`

    ÷ $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.

**01 An audience $0.01 + $0.0005 past ~10**

**02 A network Three queries per profile**

**03 From a video $0.005 for the URL query**

### 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.

**Python**

**JavaScript**

**cURL**

```
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.](/scrapers/tiktok-scraper/)

Sibling scrapers

-   [TikTok Profile Scraper](/scrapers/tiktok-profile-scraper/)
-   [TikTok Comments Scraper](/scrapers/tiktok-comments-scraper/)
-   [TikTok Location Scraper](/scrapers/tiktok-location-scraper/)

Guides

-   Auditing an influencer’s audience for dormant accounts*Coming soon*
-   Building a mutual-connection graph from two runs*Coming soon*
-   Why your TikTok user run cost three queries*Coming soon*

## Sample one audience

Ten users free with the query. Turn the second list off first.

`getFollowers: true · getFollowing: false · maxItems: 10`

[Run this scraper free](https://apify.com/apidojo/tiktok-user-scraper)

Apidojo is not affiliated with TikTok or ByteDance.

## Guides for this scraper

-   [TikTok scraping guides Pulling posts, comments, sounds and places from TikTok: which door each scraper goes in by, what a run costs, and what the output does not contain.](/blog/tiktok/)
-   [Why your TikTok user run cost three queries getFollowers and getFollowing are both on by default, and each is its own charge on top of the profile lookup. An unconfigured run bills three times.](/blog/tiktok/tiktok-user-defaults/)
