# TikTok Profile Scraper 📊 (followers, likes, bio in bulk) (`tagadanar/tiktok-profile-scraper`) Actor

TikTok profile stats in bulk: followers, following, likes and video counts, bio, link in bio, verified badge, business category and account flags for any list of handles or profile links. No login, no cookies.

- **URL**: https://apify.com/tagadanar/tiktok-profile-scraper.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** Social media, Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 profiles

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 Profile Scraper: followers, likes, bio and verified badge in bulk

Paste a list of TikTok usernames or profile links and get one clean row per account: followers, following, total likes, video count, average likes per video, bio, link in bio, verified badge, business category and account flags (private, business, organization, TikTok Shop seller).

Built for influencer vetting and creator tracking: check up to 5,000 creators in one run, or schedule it daily to follow how an account grows.

$1 per 1,000 profiles, platform usage included. No login, no cookies, no API key.

### What you get

One row per profile:

| Field | Description |
| --- | --- |
| `handle`, `nickname` | The @username and display name |
| `userId`, `secUid` | TikTok's numeric user id and secUid (the stable key other TikTok tools ask for) |
| `profileUrl` | `https://www.tiktok.com/@handle` |
| `bio`, `bioLink` | Bio text and the link in bio (with `https://` added when TikTok stores a bare domain) |
| `verified` | Blue check |
| `privateAccount` | `true` for private accounts (counts are still public) |
| `businessAccount`, `businessCategory` | Business account flag and the category it picked, e.g. `Sports, Fitness & Outdoors` |
| `organization` | `true` for brand and organization accounts |
| `tiktokShopSeller` | `true` when the account sells on TikTok Shop |
| `followers`, `following`, `likes`, `videos`, `friends` | Exact counts (not "163.0M") |
| `averageLikesPerVideo` | `likes / videos`, rounded |
| `likesPerFollower` | `likes / followers`, two decimals |
| `isLive` | `true` when the account is live at capture time |
| `language` | The account's language setting |
| `accountCreatedAt` | ISO date, when TikTok shows it |
| `avatarUrl` | Profile picture (a signed TikTok CDN link, valid for a few days) |
| `input` | The handle you asked for |
| `capturedAt` | When the row was collected |

#### Example row (real, from a run on 2026-10-16)

```json
{
  "handle": "mrbeast",
  "nickname": "MrBeast",
  "userId": "6614519312189947909",
  "secUid": "MS4wLjABAAAABKjQkOz_IIzXXzEAl_9LGsWhvK-gBnlczwRPXK8EmxAp6K3X0qiaP5_OEqmm0XwG",
  "profileUrl": "https://www.tiktok.com/@mrbeast",
  "bio": "Checkout My New Book!👇",
  "bioLink": "http://themostdangerousgames.com",
  "verified": true,
  "privateAccount": false,
  "businessAccount": false,
  "businessCategory": null,
  "organization": false,
  "tiktokShopSeller": false,
  "followers": 144067737,
  "following": 346,
  "likes": 1533724034,
  "videos": 479,
  "friends": 284,
  "averageLikesPerVideo": 3201929,
  "likesPerFollower": 10.65,
  "isLive": false,
  "language": "en",
  "accountCreatedAt": "2018-10-20T19:26:16.000Z",
  "avatarUrl": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:1080:1080.jpeg?...",
  "input": "mrbeast",
  "capturedAt": "2026-10-16T15:53:39.016Z"
}
```

### Who uses this

- **Influencer marketing teams and agencies.** Vet a creator shortlist in one pass: audience size, likes per video, verified badge, business category and the link in bio.
- **Brands tracking competitors.** Schedule a daily run on rival brand accounts and chart follower growth from the dataset history.
- **Talent managers and creators.** Track your roster's numbers without opening the app.
- **Researchers and analysts.** Build a creator dataset with exact counts instead of rounded "1.2M" strings.
- **CRM and lead enrichment.** Add follower counts and bio links to a list of creator handles you already have.

### Input

| Field | What it does |
| --- | --- |
| TikTok profiles | Usernames or links, one per line: `nike`, `@mrbeast`, `https://www.tiktok.com/@duolingo`. A video link works too: its author is looked up. Up to 5,000 per run |

Example:

```json
{
  "profiles": ["nike", "@mrbeast", "https://www.tiktok.com/@duolingo"]
}
```

Duplicates (in any letter case) are looked up once. A list pasted as one comma-separated line is split for you.

### Pricing

Pay per profile delivered, platform usage included, plus a flat start fee per run.

| Plan | Per 1,000 profiles | Run start |
| --- | --- | --- |
| Free | $1.00 | $0.001 |
| Bronze | $0.90 | $0.001 |
| Silver | $0.80 | $0.001 |
| Gold | $0.70 | $0.001 |

Handles that are not a live TikTok account (banned, deleted, mistyped) cost nothing. Set a maximum charge per run and the actor stops when it is reached.

### Limits and honest caveats

- **Profile stats only, no video list.** TikTok's public profile page carries the account and its totals, not the videos; the video feed is only served to TikTok's own app code. This actor gives you the account-level numbers. For per-video views and likes, look at a video scraper.
- **Banned and non-existent accounts look the same.** TikTok answers both with "user banned"; the run status lists them as "no live account".
- **Short links** (`vm.tiktok.com/...`) are not followed. Open one in a browser and paste the `tiktok.com/@...` link instead.
- **Large lists take a while.** About 2 to 3 profiles per second at the default memory, so 1,000 profiles take 6 to 8 minutes and 5,000 about half an hour. If a run hits its timeout, the profiles not reached are named in the status, and you are not charged for them.

### FAQ

**Do I need a TikTok account, cookies or an API key?** No.

**How do I check TikTok follower counts for many accounts at once?** Paste all the usernames in the TikTok profiles field, one per line, and run. Export the dataset as CSV or Excel.

**Can I track follower growth over time?** Yes: save the input as a task and schedule it daily. Each run adds a dated snapshot (`capturedAt`).

**Does it work for private accounts?** Yes for the profile and its counts (TikTok shows those publicly); `privateAccount` is `true`.

**How do I find a TikTok user's secUid or user id?** Run the handle through this actor: both are in every row.

**Why did a handle return nothing?** The run status says why: no live account under that name, an unreadable input line, or TikTok refused every route tried (retry later).

### Related actors

- [Threads Scraper](https://apify.com/tagadanar/threads-scraper): posts, replies and profiles from Threads.
- [YouTube Channel Scraper](https://apify.com/tagadanar/youtube-channel-scraper): subscriber counts and videos for YouTube channels.
- [X Account Watchlist](https://apify.com/tagadanar/x-account-watchlist): new posts from a list of X (Twitter) accounts.

# Changelog

This Actor's version history is a separate document: https://apify.com/tagadanar/tiktok-profile-scraper/changelog.md

# Actor input Schema

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

TikTok usernames or profile links, one per line: nike, @mrbeast, https://www.tiktok.com/@duolingo. A video link works too (its author is looked up). Up to 5,000 per run; duplicates are looked up once.

## Actor input object example

```json
{
  "profiles": [
    "nike",
    "@mrbeast",
    "https://www.tiktok.com/@duolingo"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

One item per TikTok profile in the default dataset.

# 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": [
        "nike",
        "@mrbeast",
        "https://www.tiktok.com/@duolingo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/tiktok-profile-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": [
        "nike",
        "@mrbeast",
        "https://www.tiktok.com/@duolingo",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/tiktok-profile-scraper").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": [
    "nike",
    "@mrbeast",
    "https://www.tiktok.com/@duolingo"
  ]
}' |
apify call tagadanar/tiktok-profile-scraper --silent --output-dataset

```

## MCP server setup

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

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/crsZJCcu002fMbHli/builds/tT7cglw5gq9eXPfs5/openapi.json
