# TikTok Followers and Following Scraper (`fetch_cat/tiktok-followers-scraper`) Actor

Export public TikTok follower and following relationship rows for audience analysis, outreach, and monitoring.

- **URL**: https://apify.com/fetch\_cat/tiktok-followers-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.14 / 1,000 relationship rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## TikTok Followers and Following Scraper

This TikTok followers scraper exports public TikTok follower and following relationship rows for audience research, influencer outreach, creator monitoring, and audience overlap analysis.

Use this Actor as a TikTok followers tracker when you need the identity graph behind public TikTok profiles: who a creator follows, which public followers are visible, and which related accounts overlap across multiple creators. It can also produce a TikTok follower list for research workflows when TikTok exposes the public follower surface.

### What can you do with it?

- Build creator outreach lists from public TikTok relationship data
- Compare audiences across multiple creator profiles
- Monitor public relationship lists on a schedule
- Enrich influencer research with biographies, public emails, explicitly labelled Instagram, YouTube, and X/Twitter handles, bio links, account regions when available, all avatar sizes, account timestamps, friend counts, public stats, and account metadata
- Keep private, limited, empty, or blocked profiles visible through diagnostic rows instead of silent failures
- Resume the same run after a migration or restart without duplicating completed profiles, relationship rows, or the start charge

### Who is it for?

- Influencer marketers building creator or outreach lists
- Agencies comparing public creator audiences
- Researchers mapping public TikTok account relationships
- Analysts monitoring public follower and following lists over time
- Automation teams connecting TikTok relationship data to APIs, schedules, or AI agents

### Input example

```json
{
  "profiles": ["natgeo", "tiktok"],
  "direction": "following",
  "maxRelationshipsPerProfile": 20,
  "includeOverlapSummary": true
}
```

### Output example

```json
{
  "recordType": "relationship",
  "sourceProfileHandle": "natgeo",
  "sourceProfileId": "6780344874811442181",
  "sourceProfileSignature": "Step into wonder and find your inner explorer with National Geographic 🌎",
  "sourceProfileBioLinkUrl": "spr.ly/natgeotiktok",
  "sourceProfileLanguage": "en",
  "sourceProfileVerified": true,
  "sourceFriendCount": 58,
  "sourceProfileUrl": "https://www.tiktok.com/@natgeo",
  "direction": "following",
  "relatedProfileId": "6731478322289017861",
  "relatedProfileHandle": "izzy_observes",
  "relatedProfileUrl": "https://www.tiktok.com/@izzy_observes",
  "relatedProfileName": "Izzy | Brooklyn Mom",
  "relatedProfileSignature": "Wildly specific parenting analogies nobody asked for.",
  "relatedProfileLanguage": "en",
  "relatedProfileCreatedAt": "2019-08-31T23:40:17.000Z",
  "relatedProfileVerified": false,
  "relatedFollowerCount": 401,
  "relatedFollowingCount": 534,
  "relatedFriendCount": 49,
  "relatedHeartCount": 11721,
  "relatedVideoCount": 37,
  "relatedProfileEnrichmentStatus": "complete",
  "relatedProfileMetadata": {
    "avatarThumbUrl": "https://...",
    "avatarMediumUrl": "https://...",
    "avatarLargeUrl": "https://...",
    "followingVisibility": 2,
    "commentSetting": 0,
    "duetSetting": 0,
    "stitchSetting": 0,
    "downloadSetting": 0,
    "organization": false,
    "commerceUser": false,
    "playlistTabVisible": false
  },
  "firstSeenAt": "2026-07-30T01:08:21.552Z",
  "changeType": "unknown",
  "truncated": false,
  "scrapedAt": "2026-07-30T01:08:21.552Z"
}
```

### Input settings

| Field | Type | Description | Default |
|---|---|---|---|
| `profiles` | array of strings | TikTok handles or profile URLs to inspect. | `[]` |
| `direction` | string | `following` or `followers`. Public follower visibility depends on TikTok's logged-out surface. | `following` |
| `maxRelationshipsPerProfile` | integer | Maximum relationship rows per source profile. | `20` |
| `changedSince` | string | Optional ISO timestamp for scheduled monitoring workflows. | none |
| `includeOverlapSummary` | boolean | Add summary rows for related profiles seen under more than one source profile. | `false` |
| `proxy` | object | Apify Proxy configuration. | Apify Proxy enabled |

### Output fields

- `recordType` - `relationship`, `profile-diagnostic`, or `overlap-summary`
- `sourceProfileHandle`, `sourceProfileId`, `sourceProfileSecUid`, `sourceProfileUrl`, `sourceProfileName`
- `sourceProfileSignature`, `sourceProfileBioLinkUrl`, `sourceProfileRegion`, `sourceProfileLanguage`, `sourceProfileCreatedAt`
- `sourceProfileEmail`, `sourceProfileEmails`, plus singular and complete-array Instagram, YouTube, and X/Twitter handle fields extracted from explicit public biography labels or links
- `sourceProfileVerified`, `sourceProfilePrivate`
- `sourceFollowerCount`, `sourceFollowingCount`, `sourceFriendCount`, `sourceHeartCount`, `sourceVideoCount`, `sourceDiggCount`
- `sourceProfileMetadata` - complete normalized source-profile metadata
- `direction`
- `relatedProfileId`, `relatedProfileSecUid`, `relatedProfileHandle`, `relatedProfileUrl`
- `relatedProfileName`, `relatedProfileSignature`, `relatedProfileBioLinkUrl`, `relatedProfileRegion`
- `relatedProfileEmail`, `relatedProfileEmails`, plus singular and complete-array Instagram, YouTube, and X/Twitter handle fields extracted from explicit public biography labels or links
- `relatedProfileAvatarUrl`, `relatedProfileVerified`, `relatedProfilePrivate`, `relatedProfileLanguage`, `relatedProfileCreatedAt`
- `relatedFollowerCount`, `relatedFollowingCount`, `relatedFriendCount`, `relatedHeartCount`, `relatedVideoCount`, `relatedDiggCount`
- `relatedProfileIsOrganization`, `relatedProfileCommerceUser`, `relatedProfileCommerceCategory`
- `relatedProfileMetadata` - complete normalized metadata, including all avatar sizes, account modification times, story and embed status, visibility and interaction settings, seller and organization flags, and visible profile tabs
- `relatedProfileEnrichmentStatus` - `complete` when the full public profile was available or `base-only` when the relationship row was preserved with its baseline metadata
- `firstSeenAt`, `changeType`, `scrapedAt`
- `requestedLimit`, `savedRelationships`, `truncated`, `page`
- `diagnosticStatus`, `diagnosticMessage` for limited, empty, or blocked profiles
- `overlapKey`, `overlapProfileHandles`, `overlapCount` for overlap summary rows

### Ready-to-run examples

- [Export a public TikTok follower list](https://apify.com/fetch_cat/tiktok-followers-scraper/examples/tiktok-followers-public-followers)
- [Export a public TikTok following list](https://apify.com/fetch_cat/tiktok-followers-scraper/examples/tiktok-followers-public-following)
- [Compare TikTok follower audiences and find overlap](https://apify.com/fetch_cat/tiktok-followers-scraper/examples/tiktok-followers-audience-overlap)
- [Compare TikTok following lists and find overlap](https://apify.com/fetch_cat/tiktok-followers-scraper/examples/tiktok-followers-creator-overlap)
- [Export a TikTok following list for audience research](https://apify.com/fetch_cat/tiktok-followers-scraper/examples/tiktok-followers-audience-research)

### Pricing

This Actor uses pay-per-event pricing: you pay for starting a productive run and for relationship rows saved to the dataset. Diagnostic rows are not charged. See the Actor's [live Pricing tab](https://apify.com/fetch_cat/tiktok-followers-scraper/pricing) for the current rates before running it.

### Tips and limits

- Start with `following`; TikTok may limit public follower lists more aggressively than following lists.
- Use smaller limits for new profiles, then increase after you confirm output quality.
- Private, limited, unavailable, or blocked profiles produce diagnostic rows when possible.
- The Actor only exports public TikTok data visible through TikTok's logged-out public experience. It does not use login cookies or access private account data.
- Email and social-handle fields are emitted only for explicit biography text or direct public bio links. Ordinary unlabelled `@mentions` are not guessed as Instagram handles.
- Region is emitted only when TikTok explicitly returns an account-region value. The Actor does not substitute the proxy country, viewer locale, language, or latest-video location.

### API usage

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/tiktok-followers-scraper').call({
  profiles: ['natgeo'],
  direction: 'following',
  maxRelationshipsPerProfile: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python:

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/tiktok-followers-scraper').call(run_input={
    'profiles': ['natgeo'],
    'direction': 'following',
    'maxRelationshipsPerProfile': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

cURL:

```bash
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~tiktok-followers-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"profiles":["natgeo"],"direction":"following","maxRelationshipsPerProfile":20}'
```

### MCP and AI agents

Claude CLI setup:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/tiktok-followers-scraper"
```

Claude Desktop configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/tiktok-followers-scraper"
    }
  }
}
```

Example prompts:

- "Export the first 20 public accounts followed by `natgeo` and return their profile URLs."
- "Compare the public following lists for these two creators and show any overlap."
- "Run this Actor for this TikTok handle and summarize verified related accounts."

### Related actors

- [TikTok Profile Scraper](https://apify.com/fetch_cat/tiktok-profile-scraper) - profile metadata and aggregate stats
- [TikTok Comments Scraper](https://apify.com/fetch_cat/tiktok-comments-scraper) - video comment exports

### FAQ

#### What data can this Actor export?

You can export source profile identity, relationship direction, related profile IDs, handles, URLs, public profile metadata, first-seen timestamps, truncation fields, diagnostics, and optional overlap summaries.

For each public related profile, the Actor also returns its signature, bio link, account region when explicitly exposed, validated biography emails, explicitly labelled or linked Instagram, YouTube, and X/Twitter handles, all avatar sizes, language, creation and modification timestamps, friend/follower/following/like/video counts, visibility settings, interaction settings, organization and commerce flags, and visible profile tabs. Missing source fields are omitted rather than filled with invented values.

The `contacts` dataset view puts public biography contact fields beside the TikTok handle, profile URL, follower count, and verification status for outreach qualification.

#### What does `relatedProfileEnrichmentStatus` mean?

`complete` means the Actor loaded the related account's full public profile metadata. `base-only` means TikTok did not make that optional profile detail available during the run, so the Actor preserved the relationship and the identity, signature, status, and count fields already supplied with the relationship list.

#### Can I run TikTok Followers and Following Scraper through an API, schedule, or MCP client?

Yes. You can call it with the Apify API, schedule it from Apify, or connect agent workflows through the Apify MCP URL shown above.

#### How much does it cost to use TikTok Followers and Following Scraper?

The Actor uses pay-per-event pricing. Check the live Pricing tab linked above for current rates.

#### Can it scrape private followers?

No. It only exports public data available through TikTok's public logged-out experience.

#### Why did I get a diagnostic row?

A diagnostic row means the source profile was private, limited, empty for the selected direction, temporarily blocked, or unavailable. This makes partial runs auditable instead of silently returning zero rows.

#### Does `changedSince` return only new or lost followers?

In v1, `changedSince` supports monitoring workflows but rows are marked from the current scrape. True historical new/lost comparison requires a prior saved snapshot.

### Support

Open an issue from the Actor page if a run fails, returns unexpected diagnostics, or has missing fields. Include the Apify run ID or run URL, the input JSON, expected output, actual output, and one reproducible public TikTok profile URL.

# Actor input Schema

## `profiles` (type: `array`):

Public TikTok profile handles or URLs to inspect.

## `direction` (type: `string`):

Export accounts the source profile follows, or followers when TikTok exposes that public list.

## `maxRelationshipsPerProfile` (type: `integer`):

Maximum relationship rows to save for each source profile.

## `changedSince` (type: `string`):

Optional ISO timestamp for scheduled monitoring workflows. Rows are marked current until prior snapshots are available.

## `includeOverlapSummary` (type: `boolean`):

When scraping multiple profiles, add summary rows for related accounts that appear under more than one source profile.

## `proxy` (type: `object`):

Apify Proxy settings. Leave enabled for the best chance of TikTok access.

## Actor input object example

```json
{
  "profiles": [
    "natgeo"
  ],
  "direction": "following",
  "maxRelationshipsPerProfile": 20,
  "includeOverlapSummary": false,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `datasetUrl` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "profiles": [
        "natgeo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/tiktok-followers-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "profiles": ["natgeo"] }

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/tiktok-followers-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "profiles": [
    "natgeo"
  ]
}' |
apify call fetch_cat/tiktok-followers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fetch_cat/tiktok-followers-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/k4tz1UZ6Z3lpOmaZy/builds/yqsTDGxjCWhBLbRxH/openapi.json
