# TikTok Follower Growth Tracker (`getdataforu/tiktok-follower-tracker`) Actor

Daily followers, likes and video counts for any list of TikTok accounts, with growth since the last check, over 7 days and over 30 days.

- **URL**: https://apify.com/getdataforu/tiktok-follower-tracker.md
- **Developed by:** [EMT Crawler](https://apify.com/getdataforu) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 results

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## TikTok Follower Growth Tracker

Track **followers, likes and videos** for any list of TikTok accounts. Schedule it once a day and every run tells you how much each account grew — since yesterday, over the last 7 days and over the last 30 days.

No login, no TikTok account, exact counts (not TikTok's rounded "96.2M").

### What it's for

- **KOL and creator management** — see which of your creators are growing and which have stalled, before you renew a contract.
- **Competitor monitoring** — watch rival brands' accounts and get the number the moment one of them takes off.
- **Campaign impact** — compare follower growth in the week of a campaign with the week before.
- **Due diligence** — a creator whose followers jump overnight without new videos deserves a second look.

### How it works

1. **First run** records a baseline for every account. There is nothing to compare against yet, so growth fields are empty.
2. **Every later run** compares today's numbers with the history and fills in the growth fields.
3. History is stored in your own Apify account under the **tracker name** you choose, and keeps more than a year of daily checks per account.

Use a different `trackerName` per client or per list, and their histories never mix.

### What you get each run

| Field | Meaning |
|---|---|
| `followers`, `following`, `totalLikes`, `videos` | Today's exact counts |
| `followersChange`, `followersChangePct` | Change since the previous check |
| `followersChange7d`, `followersChange7dPct` | Change over at least the last 7 days |
| `followersChange30d`, `followersChange30dPct` | Change over at least the last 30 days |
| `newVideos`, `likesChange` | Videos posted and likes gained since the previous check |
| `daysSincePrevious`, `trackingSince`, `snapshotCount` | How much history the numbers rest on |
| `name`, `bio`, `bioLink`, `verified`, `avatarUrl`, `region` | Profile details |

Plus two records in the run's key-value store:

- **`RUN_SUMMARY`** — the 5 biggest gainers and losers this run, and any accounts that could not be loaded, with the reason.
- **`GROWTH_HISTORY`** — every snapshot for every account in this tracker, ready to chart in Excel or Google Sheets.

Example rows from a real second run, a minute after the baseline:

| Account | Followers | Change |
|---|---|---|
| tiktok | 96,191,286 | +1,866 |
| tuanhamez | 338,549 | 0 |
| haf_barbie | 66,722 | +1 |
| vn.mecola | 6,390 | −3 |

### Input

```json
{
  "profiles": ["tiktok", "@haf_barbie", "https://www.tiktok.com/@vn.mecola"],
  "trackerName": "client-a-kols"
}
```

| Field | Default | Notes |
|---|---|---|
| `profiles` | — | **Required.** Usernames, `@handles` or profile links. Duplicates are removed. |
| `trackerName` | `default` | Which history to read and extend. |
| `resetHistory` | `false` | Forget this tracker's history and take a new baseline. Cannot be undone. |
| `maxConcurrency` | `10` | Accounts fetched in parallel. |

### Scheduling

In Apify Console open **Schedules → Create new**, pick this actor with your saved input, and set it to run daily. A 7-day figure appears after a week, a 30-day figure after a month.

### You only pay for accounts that load

Accounts that don't exist or were removed are not written to the dataset, so they are never charged. They appear in `RUN_SUMMARY.failed` instead.

### Good to know

- Renamed accounts keep their history: it is keyed on TikTok's permanent user ID, not the username.
- Don't run the same tracker twice at the same time — the later run would overwrite the earlier one's snapshot.

### Legal

Reads only data TikTok shows any visitor without logging in. You are responsible for how you use it.

# Actor input Schema

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

TikTok usernames or profile links, one per line. "tiktok", "@tiktok" and full profile URLs all work.

## `trackerName` (type: `string`):

History is kept per tracker name. Use one name per client or per list (e.g. "client-a-kols") so their histories never mix. Reusing a name continues its history.

## `resetHistory` (type: `boolean`):

Forget everything this tracker recorded before and take a new baseline. Cannot be undone.

## `maxConcurrency` (type: `integer`):

Each account is fetched through its own proxy IP, so higher is faster.

## `proxyConfiguration` (type: `object`):

Residential proxies are used by default.

## Actor input object example

```json
{
  "profiles": [
    "tiktok",
    "@haf_barbie",
    "https://www.tiktok.com/@vn.mecola"
  ],
  "trackerName": "default",
  "resetHistory": false,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `accounts` (type: `string`):

One row per account: followers, following, total likes, videos, and the change since the last check, over 7 days and over 30 days.

## `summary` (type: `string`):

Biggest gainers and losers in this run, and any accounts that could not be loaded.

## `history` (type: `string`):

Every snapshot this tracker has recorded for every account, ready to chart.

# 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": [
        "tiktok",
        "haf_barbie"
    ],
    "trackerName": "default"
};

// Run the Actor and wait for it to finish
const run = await client.actor("getdataforu/tiktok-follower-tracker").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": [
        "tiktok",
        "haf_barbie",
    ],
    "trackerName": "default",
}

# Run the Actor and wait for it to finish
run = client.actor("getdataforu/tiktok-follower-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": [
    "tiktok",
    "haf_barbie"
  ],
  "trackerName": "default"
}' |
apify call getdataforu/tiktok-follower-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getdataforu/tiktok-follower-tracker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/C773zL4RNO53i8Qk4/builds/d7v7Lh6yQu3ABHdK5/openapi.json
