TikTok Followers and Following Scraper
Get a public TikTok account's following list with no login. Followers need your own cookie. Handles, bios, avatars, regions. $0.35 per 1,000 profiles.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
profiles,listType,maxItemsPerProfile(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00035 per TikTok profile = $0.35 per 1,000
| You are charged for | When | Price |
|---|---|---|
| TikTok profile | One successfully extracted follower or following profile. | $0.00035 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
profiles | Public TikTok usernames, @handles, profile URLs, or numeric user IDs whose follower or following list should be extracted. | array |
listType | Choose followers, following, or both. Following is the keyless mode and is the default. Followers now needs a signed-in session: as of 2026-08-17 the public source retired its follower endpoint and TikTok's own one is login-gated, so a keyless followers run returns an uncharged diagnostic row explaining that. | string |
maxItemsPerProfile | Maximum relationship profiles returned per source profile and list type. Lower this for a quick, low-cost sample. | integer |
maxRunSeconds | Hard wall-clock deadline for the run. The actor stops pagination and returns collected rows before this limit. | integer |
sessionCookies | Optional. Runs work without your account. Paste your own TikTok account cookie here and the run uses your account. In Chrome: F12 → Application → Cookies → tiktok.com, and copy at least `sessionid` (e.g. `sessionid=abc123; sid_tt=abc123`). Only sent to TikTok's own endpoints, never anywhere else, and never written to the log. | array |
fallbackToProxy | When enabled, retry a direct BLOCKED or transient target failure through the supplied Apify proxy configuration. Direct HTTP is used first. | boolean |
What you get
A structured dataset — each result includes fields like:
uniqueIdnicknamelistTypefollowerCountfollowingCountprofileUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
1 ready-to-run use cases
TikTok Follower List Export
Export the follower list of any TikTok account: handle, display name and profile link. Followers or following.
Related tools in Social Media Scrapers
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Instagram Comments Scraper
Scrape comments from any public Instagram post or reel: text, author, likes, replies and timestamp. Nothing to log into. $0.40 per 1,000 rows.
Twitter (X) Search Scraper
Scrape X (Twitter) search by keyword or advanced query. Get the full text, engagement, media and author. No login needed from you. $0.40 per 1,000 tweets.
Twitter (X) List Scraper
Scrape every tweet from an X (Twitter) list. Get full text, likes, retweets, views, hashtags, media and author. No login. $0.40 per 1,000 tweets.
Threads Scraper
Scrape public Threads profiles and recent posts with no login. Rows carry bios, followers, post text, likes, timestamps and media URLs. $0.40 per 1,000 rows.
Facebook Pages Scraper
Scrape public Facebook Page names, handles, likes, talking-about counts and verified badges. Up to 10 Pages per run. No login needed from you.
LinkedIn Profile Posts Scraper
Scrape LinkedIn profile posts with no login: post text, author, image, publish time and URL. $0.90 per 1,000 posts, flat on every plan.
Where this tool sits
- Categories
- Social Media Scrapers
- Platforms
- TikTok
TikTok Followers & Following Scraper: who an account follows, and who follows it
Give it a TikTok handle and get one row per account in its list: handle, display name, bio, avatar, region, verified flag, and that account's own follower, following, video and like counts. Enough to sort a list by size without a second run.
The part that decides whether this fits your project: following lists need nothing from you, and follower lists need your own TikTok cookie. TikTok's public follower route closed in August 2026 and its own one is behind a login, so a followers run without a cookie returns an uncharged row telling you exactly that.
| Input | TikTok handles, profile links, or numeric user ids |
| Output | One row per account in the list |
| Ceiling | 1,000 accounts per profile, per list |
| Account needed | None for following. Followers needs your own cookie |
| Price | $0.35 per 1,000 profiles, flat on every plan |
👥 What TikTok Followers & Following Scraper does
Point it at one or more accounts and it walks the list you asked for, page by page, until it hits your row limit, the run's time limit, or the end of the list.
Following is the keyless mode and the one it starts on. Followers needs a cookie from your own TikTok account in sessionCookies. Both does the two lists for every profile you gave it.
Every row is a full profile, not just a handle, so you can filter a following list down to accounts over a certain size without opening any of them.
📥 What you give it
{
"profiles": ["tiktok", "nba"],
"listType": "following",
"maxItemsPerProfile": 100,
"maxRunSeconds": 90
}
| Field | Default | What it is |
|---|---|---|
profiles | box holds tiktok | Handles, @handles, profile links or numeric user ids. Delete the example before your own run. |
listType | following | following, followers or both. Followers needs a cookie in sessionCookies. |
maxItemsPerProfile | 100 | Rows per profile per list, up to 1,000. Lower it for a cheap look first. |
maxRunSeconds | 90 | Wall-clock limit, 10 to 180. When it arrives the run returns what it has. |
sessionCookies | empty | Your own TikTok cookie, at least sessionid. Required for follower lists. Anyone holding that value can act as your account, so treat it like a password. |
fallbackToProxy | false | Retry a blocked or failed request through the servers configured below. |
proxyConfiguration | off | Which of your own servers that retry should use. Leave it alone unless a run came back blocked. |
Run it with profiles empty and you get one labelled sample row and nothing else.
📤 What you get back
A real row from a recent run. The bio is cut short here, because the real one carries emoji:
{
"ok": true,
"type": "relationship_profile",
"uniqueId": "tiktokcreators",
"userId": "6551237489917432832",
"nickname": "tiktok creators",
"signature": "The official account for TikTok Creators who inspire creativity and bring joy ...",
"avatar": "https://p19-common-sign.tiktokcdn.com/tos-maliva-avt-0068/8a3909f3933...",
"verified": true,
"region": "PH",
"followerCount": 8808628,
"followingCount": 567,
"videoCount": 1112,
"likesCount": 33540530,
"secUid": "MS4wLjABAAAAXqqA-cLDC0hfQPIrS5APYNsg04zkl-socWCkqkI3UIOaEe6_Qnokg0GcWpLnMNQP",
"profileUrl": "https://www.tiktok.com/@tiktokcreators",
"sourceProfile": "@tiktok",
"listType": "following",
"scrapedAt": "2026-09-14T05:47:10.009Z"
}
| Field | What it is |
|---|---|
uniqueId, userId, secUid | The handle, the numeric id and TikTok's long id. secUid is what other TikTok tools usually want. |
nickname, signature | Display name and bio, as written, line breaks and emoji included. |
followerCount, followingCount, videoCount, likesCount | That account's own totals at read time. |
region | The two-letter region TikTok reports for the account, which is not always where the person is. |
sourceProfile, listType | Whose list this row came from, and which list. Both are what you group on. |
avatar | A TikTok image link carrying an expiry. Download what you want to keep. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it |
|---|---|
| A profile | ok: true and type: "relationship_profile" |
| The sample row | _sample: true, written only when profiles was empty |
| A diagnostic | ok: false, an errorCode, and a _notice saying it was not charged |
| Code | What it means |
|---|---|
BAD_INPUT | That entry is not a handle, link or id this can use. The other profiles carry on. |
UNAVAILABLE | A followers run with no cookie in sessionCookies. Nothing was fetched and no rows were charged. |
BLOCKED | TikTok would not serve the list that time. Worth a re-run. |
NETWORK | The request failed. It is also the catch-all when the reason is not one this recognises. |
A private account, or one whose list will not open, comes back as a diagnostic row rather than a silent zero.
▶️ How to run it
1. Open TikTok Followers & Following Scraper and click Try for free. 2. Put the accounts into TikTok profiles, deleting the example. 3. Leave List type on Following for a keyless run, or pick Followers and paste your own cookie into Your own account cookies. 4. Set Maximum profiles per input low, say 50, for the first run, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$0.35 per 1,000 profiles. Flat on every Apify plan, no volume tiers.
One row is one profile. The sample row and every diagnostic row are not charged, including a followers run that stops because no cookie was supplied.
Two things move the count more than people expect. both fetches two separate lists, and an account in both of them is a row in each. And the limit is applied in pages of 50, so asking for 60 can deliver up to 100. Set maxItemsPerProfile in multiples of 50 if you want the number you asked for.
💡 What people use it for
- Reading who a brand account follows, which is usually a short, deliberate list.
- Finding creators in a niche by walking the following lists of a few accounts in it.
- Sizing an audience: every row carries its own follower count, so you can sort by reach.
- Watching a following list on a schedule and diffing on
userIdto see who was added. - Building a contact shortlist where
regionandverifiedmatter.
🚧 What it does not do
- A followers run needs your own cookie. Without one you get an uncharged
UNAVAILABLErow.
That is TikTok's gate, not a setting here.
- A numeric user id cannot be used for a followers run. Give it the handle or the profile link
for that mode.
- 1,000 rows per profile, per list. A big account's full follower list is not reachable here.
bothcounts an account twice when it is in both lists, once under eachlistType.- The row limit is a page limit underneath, in pages of 50, so a run can return up to 49 rows
more than you asked for.
- A run that hits its time limit returns a partial list, and nothing on the rows marks it as
cut short. Compare the row count against what you asked for.
- Private accounts are out of reach, the same as in a browser.
- No email addresses or phone numbers. Only what the profile shows publicly.
- Counts are a snapshot. Follower numbers move by the hour on big accounts.
🧭 Which TikTok scraper do you need?
| If you want | Use |
|---|---|
| Who an account follows, or who follows it | This one |
| Stats for a list of accounts you already have | TikTok Profile Scraper |
| Videos under a hashtag | TikTok Hashtag Scraper |
| Comments under a video | TikTok Comments Scraper |
| An account's videos and their stats | TikTok Scraper |
❓ Questions people ask
Why do followers need a cookie when following does not? TikTok closed the public follower route in August 2026 and its own one is behind a login. Following lists are still served to anyone.
Where do I find my cookie? In Chrome, F12, then Application, Cookies, tiktok.com, and copy at least the sessionid value. It is as good as your password for that account, so use one you are comfortable exposing, and expect it to stop working when you log out.
Can I get the full follower list of a huge account? No. The ceiling is 1,000 per list per run, and TikTok paginates from the top of the list.
What happens to a private account? You get an uncharged diagnostic row for it and the run carries on with the rest.
Can I run it on a schedule? Yes. userId is stable, so working out who joined or left since last time is a join.
Is this legal? These are public profile pages. The rows are personal data, which GDPR and similar laws cover, so have a reason for collecting them. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the handle and the listType you used, plus the run ID. The errorCode on the diagnostic row usually names the problem on its own.