# TikTok Creator Analytics Scraper (`automation-lab/tiktok-creator-analytics-scraper`) Actor

Refresh public TikTok creator profiles and calculate follower, view, like, comment, share, and recent engagement statistics for campaign tracking.

- **URL**: https://apify.com/automation-lab/tiktok-creator-analytics-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Social media, Marketing, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Creator Analytics Scraper

Refresh public creator profiles and recent engagement statistics without building your own TikTok collection pipeline.

**TikTok Creator Analytics Scraper** accepts creator handles or profile URLs and returns one analysis-ready record per public creator. Each record combines public profile identity, bio, verification, follower, following, video, and cumulative like totals with a bounded sample of recent posts.

The Actor calculates average and median views, average interactions, and engagement rates using the public counters observed in that sample. Optional post-level evidence makes each summary auditable.

### What TikTok creator analytics does this Actor collect?

For every completed public creator, the Actor returns:

- current username, display name, bio, profile URL, and public avatar URL;
- verification and privacy flags;
- follower and following totals;
- cumulative profile likes and video count;
- the actual number and date range of recent posts analyzed;
- total and average views, likes, comments, and shares in that sample;
- median sample views;
- average engagements per post;
- engagement rate by views;
- engagement rate by current followers;
- optional sampled post URLs, timestamps, text, and counters;
- an optional campaign or reporting-period label;
- a UTC snapshot timestamp.

One dataset row represents one creator snapshot. Recent posts are included inside that row when `includePostDetails` is enabled; nested posts carry no additional per-post event.

### Who is it for?

#### Influencer marketing teams

Refresh creator shortlists before outreach and compare recent reach with current audience size.

#### Agencies

Add a client or campaign label to recurring snapshots, then load the datasets into a campaign dashboard.

#### Brand partnerships teams

Review recent public views and interactions before deciding which creator profiles need deeper manual evaluation.

#### Researchers and analysts

Build reproducible public creator datasets with a documented sample size, post window, and collection time.

#### Data engineers

Send normalized records to Google Sheets, a warehouse, webhook automation, or another Apify integration.

### Why use this Actor?

A profile total alone does not show how recent posts performed. This Actor combines the profile snapshot with a bounded recent-post sample and calculates transparent metrics from the returned counters.

Key design choices include:

1. **One row per creator** for simple exports and joins.
2. **Actual sample size** so a partial public window is never presented as a full one.
3. **Author matching** so unrelated upstream posts cannot affect a requested creator's metrics.
4. **No successful empty rows** for private, unavailable, or incomplete creators.
5. **No charge for failed creators** because the per-creator event is emitted only after a complete analytics record exists.
6. **Bounded input** of up to 10 creators and 30 recent posts per creator.

### How are engagement rates calculated?

The Actor uses public post counters and does not estimate hidden impressions.

For a sample of recent posts:

```text
engagements = likes + comments + shares
engagement rate by views = total engagements / total views × 100
engagement rate by followers = average engagements per post / current followers × 100
```

Favorites are returned in post details but are not included in the engagement-rate numerator. This keeps the formula easy to reproduce across tools.

The output also includes the sample date window, total counters, averages, median views, and post-level evidence when requested.

### Input parameters

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `creators` | string array | required | 1–10 usernames, `@handles`, or full `tiktok.com/@creator` URLs. |
| `recentPostCount` | integer | `10` | Maximum newest public posts analyzed per creator, from 3 to 30. |
| `includePostDetails` | boolean | `true` | Include sampled post evidence inside each creator row. |
| `snapshotLabel` | string | none | Optional campaign, client, or reporting-period label, up to 80 characters. |

Duplicate handles are removed case-insensitively. Only TikTok profile URLs are accepted; unsupported domains and malformed handles fail input validation.

#### Small creator analysis

```json
{
  "creators": ["@khaby.lame"],
  "recentPostCount": 3,
  "includePostDetails": true
}
```

#### Campaign snapshot

```json
{
  "creators": ["@khaby.lame", "@charlidamelio"],
  "recentPostCount": 10,
  "includePostDetails": false,
  "snapshotLabel": "Creator campaign — weekly refresh"
}
```

### Getting started

1. Open the Actor input page in Apify Console.
2. Add one or more public TikTok creator handles or profile URLs.
3. Choose a recent-post sample size between 3 and 30.
4. Keep post details enabled when you need audit evidence.
5. Add a snapshot label when the dataset belongs to a campaign or reporting period.
6. Click **Start**.
7. Open the **Dataset** tab to inspect, export, or integrate the creator rows.

Start with three posts while evaluating the output. Increase the sample only when a wider recent window is useful for the decision.

### Output example

This shortened example reflects the Actor's current typed output. Public counters change over time.

```json
{
  "username": "khaby.lame",
  "profileUrl": "https://www.tiktok.com/@khaby.lame",
  "userId": "127905465618821121",
  "displayName": "Khabane lame",
  "bio": "Se vuoi ridere sei nel posto giusto…",
  "avatarUrl": null,
  "isVerified": true,
  "isPrivate": false,
  "followerCount": 162500000,
  "followingCount": 81,
  "totalLikesCount": 2700000000,
  "totalVideoCount": 1347,
  "recentPostSampleSize": 3,
  "recentPostWindowStart": "2026-07-24T16:38:23.000Z",
  "recentPostWindowEnd": "2026-08-04T16:48:51.000Z",
  "totalRecentViews": 12255147,
  "averageViewsPerPost": 4085049,
  "medianViewsPerPost": 4154239,
  "averageEngagementsPerPost": 404674.33,
  "engagementRateByViews": 9.9062,
  "engagementRateByFollowers": 0.249,
  "scrapedAt": "2026-08-06T07:32:38.197Z",
  "recentPosts": [
    {
      "postId": "7670219334999969054",
      "url": "https://www.tiktok.com/@khaby.lame/video/7670219334999969054",
      "createdAt": "2026-08-04T16:48:51.000Z",
      "viewCount": 2120080,
      "likeCount": 265405,
      "commentCount": 4851,
      "shareCount": 3213,
      "engagementCount": 273469,
      "engagementRateByViews": 12.899
    }
  ]
}
```

### How much does it cost to analyze TikTok creators?

The Actor uses pay-per-event pricing with a one-time run start and one event per completed creator analytics row. Failed, private, unavailable, or incomplete creators do not emit the creator event.

Current Bronze-tier prices are:

- **Run start:** $0.0045 per run.
- **Creator analytics record:** $0.20054 per completed creator.

Example Bronze-tier totals:

| Completed creators | Calculation | Total |
| ---: | --- | ---: |
| 1 | $0.0045 + 1 × $0.20054 | $0.20504 |
| 5 | $0.0045 + 5 × $0.20054 | $1.0072 |
| 10 | $0.0045 + 10 × $0.20054 | $2.0099 |

Apify plan tiers apply distinct discounts. The price depends on completed creator rows, not the number of nested recent posts.

### Schedule creator campaign snapshots

Apify schedules can run the same input daily, weekly, or monthly.

A practical workflow is:

1. create one Task per campaign or client;
2. set `snapshotLabel` to a stable campaign name plus reporting period;
3. schedule the Task;
4. retain each run's dataset or copy rows into a warehouse;
5. compare snapshots by `username`, `snapshotLabel`, and `scrapedAt`.

The Actor creates snapshots. It does not keep historical data across runs or claim that a metric changed; your spreadsheet, database, or BI tool performs that comparison.

### Export and integration workflows

Dataset rows can be downloaded as JSON, CSV, Excel, XML, or RSS using Apify's dataset tools.

Common workflows include:

- send new rows to Google Sheets with an Apify integration;
- trigger a webhook after each run;
- load snapshots into BigQuery, Snowflake, or PostgreSQL;
- join creator statistics to campaign spend or conversion data;
- use Make, Zapier, or n8n for scheduled enrichment;
- consume dataset items from a Node.js or Python pipeline.

Nested `recentPosts` is best preserved in JSON. Disable post details for flatter spreadsheet exports.

### Run with the Apify API

Replace `<APIFY_TOKEN>` with an Apify API token.

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~tiktok-creator-analytics-scraper/runs?token=<APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "creators": ["@khaby.lame"],
    "recentPostCount": 3,
    "includePostDetails": true
  }'
```

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/tiktok-creator-analytics-scraper').call({
    creators: ['@khaby.lame'],
    recentPostCount: 3,
    includePostDetails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("automation-lab/tiktok-creator-analytics-scraper").call(
    run_input={
        "creators": ["@khaby.lame"],
        "recentPostCount": 3,
        "includePostDetails": True,
    }
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use with Apify MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/tiktok-creator-analytics-scraper"
```

#### Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code can use this HTTP MCP configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/tiktok-creator-analytics-scraper"
    }
  }
}
```

Example prompts:

- "Analyze the latest three public posts for `@khaby.lame` and summarize engagement by views."
- "Create a compact weekly snapshot for these TikTok campaign creators without nested post details."
- "Run the creator analytics Actor, then export the dataset rows to CSV."

### Limits and data freshness

- Only public TikTok profiles and public post counters are supported.
- A run accepts at most 10 unique creators.
- The recent sample is bounded to 3–30 posts per creator.
- Deleted, region-restricted, age-restricted, login-gated, or temporarily unavailable posts may reduce the sample.
- The Actor reports the actual sample size and time window; it does not silently claim that the requested count was returned.
- Public counters can change after collection.
- TikTok may change its public delivery routes or anti-automation controls.
- Historical trend calculations are not included; schedule snapshots and compare datasets externally.
- Audience demographics, private Creator Center metrics, revenue, conversions, and hidden impressions are not available.

### Failure behavior and partial results

Malformed input fails before extraction.

If some requested creators are unavailable but at least one complete public creator record is produced, the run succeeds with the usable rows and logs the missing handles. Missing creators are not charged as completed creator records.

If no complete analytics row can be produced, the run fails instead of returning a misleading successful empty dataset.

For reproducible campaign reporting, keep the input, sample size, and schedule consistent across snapshots.

### Troubleshooting

#### Why did a creator not appear?

Confirm that the handle is current and the profile is public. Private, removed, region-restricted, or incomplete profiles cannot produce a complete recent engagement sample.

#### Why is the sample smaller than `recentPostCount`?

The field is a maximum. TikTok may expose fewer usable recent posts because content is deleted, restricted, or temporarily unavailable. Check `recentPostSampleSize` and the sample window.

#### Why is engagement rate null?

A view-based rate is null when the sample has no positive public view total. A follower-based rate is null when the public follower total is zero or unavailable.

#### Why are spreadsheet cells missing post details?

Nested arrays do not flatten cleanly in every spreadsheet export. Set `includePostDetails` to `false` for compact summary rows, or use JSON when post evidence is required.

#### Should I increase memory or configure a proxy?

No proxy input is needed. The Actor uses its maintained data route and conservative platform configuration. If an upstream route is temporarily unavailable, retry later rather than changing user input to an unsupported proxy mode.

### Legality and responsible use

Collect only public information for a legitimate purpose. Follow TikTok's terms, applicable privacy and data-protection laws, contractual obligations, and local rules governing profiling, outreach, and automated decision-making.

Do not use the output to harass creators, infer sensitive traits, bypass access controls, or make high-impact decisions without appropriate review. Public availability does not remove your responsibility to minimize, secure, and delete personal data when required.

TikTok is a trademark of its respective owner. This Actor is an independent tool and is not endorsed by TikTok.

### Related Automation Lab Actors

- [TikTok Profile Scraper](https://apify.com/automation-lab/tiktok-profile-scraper) — use when you need profile records or typed recent post rows rather than one aggregated creator analytics row.
- [TikTok Scraper](https://apify.com/automation-lab/tiktok-scraper) — use for broader profile, post, and video URL extraction modes.
- [TikTok Video Scraper](https://apify.com/automation-lab/tiktok-video-scraper) — use when individual video records are the primary output.
- [TikTok Comments Scraper](https://apify.com/automation-lab/tiktok-comments-scraper) — use for comment and reply analysis on known public videos.

### FAQ

#### Does the Actor require a TikTok login?

No user-supplied TikTok login is required for supported public profiles.

#### Does it scrape private creator analytics?

No. It does not bypass privacy controls or expose private Creator Center metrics.

#### Can I use profile URLs and handles together?

Yes. The `creators` list accepts both and removes duplicate usernames case-insensitively.

#### Are post details charged separately?

No. One creator event includes the completed profile summary, calculated metrics, and optional nested post evidence.

#### Can the Actor compare two dates automatically?

No. Use `snapshotLabel` and `scrapedAt`, schedule repeated runs, and compare the resulting datasets in your spreadsheet, database, or BI tool.

#### Is the result a prediction of campaign performance?

No. It is a snapshot of public profile and recent-post counters. Campaign fit and future performance require additional context and human judgment.

# Actor input Schema

## `creators` (type: `array`):

Creator usernames, @handles, or full tiktok.com profile URLs. Up to 10 public profiles per run.

## `recentPostCount` (type: `integer`):

Maximum number of newest public posts used to calculate views and engagement statistics.

## `includePostDetails` (type: `boolean`):

Include the sampled post URLs, timestamps, text, and public counters inside each creator record.

## `snapshotLabel` (type: `string`):

Optional campaign, client, or reporting-period label copied to every output record for scheduled comparisons.

## Actor input object example

```json
{
  "creators": [
    "@khaby.lame",
    "https://www.tiktok.com/@tiktok"
  ],
  "recentPostCount": 10,
  "includePostDetails": true,
  "snapshotLabel": "Back-to-school campaign — week 1"
}
```

# Actor output Schema

## `overview` (type: `string`):

Open normalized creator profiles, recent-post sample statistics, engagement rates, and optional post evidence.

# 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 = {
    "creators": [
        "@khaby.lame",
        "https://www.tiktok.com/@tiktok"
    ],
    "recentPostCount": 10,
    "includePostDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/tiktok-creator-analytics-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 = {
    "creators": [
        "@khaby.lame",
        "https://www.tiktok.com/@tiktok",
    ],
    "recentPostCount": 10,
    "includePostDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/tiktok-creator-analytics-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 '{
  "creators": [
    "@khaby.lame",
    "https://www.tiktok.com/@tiktok"
  ],
  "recentPostCount": 10,
  "includePostDetails": true
}' |
apify call automation-lab/tiktok-creator-analytics-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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