# TikTok Creator Comparison (`scrape-lads/tiktok-creator-comparison`) Actor

Compare TikTok creators with rankings, engagement rates, median views, viral outliers, content patterns, and change tracking.

- **URL**: https://apify.com/scrape-lads/tiktok-creator-comparison.md
- **Developed by:** [Scrape Lads](https://apify.com/scrape-lads) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 video analyzeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

### What does TikTok Creator Comparison do?

**TikTok Creator Comparison ranks a list of TikTok creators against each other and explains why one outperforms another.** Compare TikTok creators with rankings, engagement rates, median views, viral outliers, content patterns, and change tracking. Give it your inputs, press **Start**, and the Output tab fills with one clean row per record, ready to download as JSON, CSV, or Excel.

It works entirely with public [TikTok](https://www.tiktok.com/) data and never asks for TikTok login credentials. Because it runs on Apify you also get a REST API, scheduled runs, webhooks, integrations with tools such as Google Sheets, Slack, Make, and Zapier, proxy rotation, and a full log of every execution.

This Actor is deliberately narrow. Its input form asks only for the values this one job needs and its Output view shows only the columns this job produces, so nobody has to pick a technical mode to get a useful result.

### Why use TikTok Creator Comparison?

#### Vet influencers on evidence, not follower counts

Follower totals hide dead audiences. The ranking uses engagement rate, median views, and a views to followers ratio so an account with 40,000 engaged followers can correctly outrank one with 400,000 passive ones.

#### Benchmark your brand against competitors

Run your own handle next to three or four rivals and read the score table top to bottom. Median views and posting consistency show whether a gap comes from reach or from cadence.

#### Copy what already works

Each creator summary lists top hashtags, top sounds, best formats, and the days and UTC hours their posts land, so a content calendar can be built from observed behaviour.

#### Track movement over time

Point the change-tracking dataset at a named dataset and schedule the run. Every later run reports the follower, median view, and engagement deltas since the previous snapshot.

### How to use TikTok Creator Comparison

1. Click **Try for free** or open the Actor in Apify Console.
2. On the **Input** tab, fill in **TikTok handles or profile URLs**.
3. Set a result limit. A small number is the right choice for a first run.
4. Press **Start** and watch the log.
5. Open the **Output** tab to browse the results, or use **Export** for JSON, CSV, or Excel.
6. Happy with the setup? Press **Save as task** so you can repeat or schedule it in one click.

#### Ready-made tasks

These input presets ship with the Actor and are ready to run or schedule as they are.

| Task | Saved as |
| --- | --- |
| **Benchmark brand competitors** | `benchmark-competitors` |
| **Vet an influencer shortlist** | `vet-influencer-shortlist` |
| **Weekly creator tracking with change deltas** | `weekly-creator-tracking` |

### Input

| Field | Label | Type | Required | Default | Notes |
| --- | --- | --- | --- | --- | --- |
| `handles` | TikTok handles or profile URLs | array | Yes |  | Accepts @username, username, or a full TikTok profile URL. |
| `videosPerProfile` | Videos per creator | integer | No | `50` | Number of recent public videos to analyze for each creator. |
| `includeRawResults` | Include scored videos | boolean | No | `true` | Return each sampled video as well as creator summaries and rankings. |
| `includeReport` | Generate Markdown report | boolean | No | `true` | Save a readable executive report in the run key-value store. |
| `historyDatasetName` | Change-tracking dataset | string | No | `""` | Optional named dataset used across scheduled runs. Leave blank unless the run token can create and access named datasets. |
| `maxProviderSpendUsd` | Maximum provider spend | number | No | `5` | Hard USD ceiling for third-party data collection. This job starts one provider run per input and Apify reserves at least $2 of headroom for each, so allow roughly $2 per handle. Real charges are normally a fraction of a cent. |

Example input:

```json
{
    "handles": [
        "@nike",
        "@gymshark",
        "@redbull"
    ],
    "videosPerProfile": 50,
    "includeRawResults": true,
    "includeReport": true,
    "historyDatasetName": "",
    "maxProviderSpendUsd": 6
}
```

Limits apply to the complete run, not separately to each input, so a limit of 100 spread over four inputs returns roughly 25 records each.

### Output

The Actor returns creator rankings, creator summaries, and optionally scored videos. Every record below came from a real verification run.

A ranking row:

```json
{
    "resultType": "creatorRanking",
    "sourceInput": "@nba",
    "rank": 1,
    "username": "nba",
    "score": 90,
    "engagementRatePct": 9.1223,
    "medianViews": 4327553,
    "viewsToFollowersRatio": 0.1594,
    "postsPerWeek": 0.54,
    "postingConsistencyScore": 0
}
```

A creator summary row (trimmed):

```json
{
    "resultType": "creatorSummary",
    "sourceInput": "@tiktok",
    "username": "tiktok",
    "displayName": "TikTok",
    "profileUrl": "https://www.tiktok.com/@tiktok",
    "followers": 95090671,
    "postCount": null,
    "sampleSize": 5,
    "totalViews": 13182067,
    "totalLikes": 112860,
    "totalComments": 7062,
    "totalShares": 5417,
    "totalSaves": 10450,
    "medianViews": 197016,
    "averageViews": 2636413.4,
    "engagementRatePct": 1.0301,
    "viewsToFollowersRatio": 0.0021,
    "postsPerWeek": 4.14,
    "postingConsistencyScore": 0,
    "topHashtags": [
        {
            "value": "iheartalexwarren",
            "count": 1
        }
    ],
    "topSounds": [
        {
            "value": "original sound - tiktok",
            "count": 3
        },
        {
            "value": "RESCUER OUT AUGUST 7",
            "count": 1
        }
    ],
    "topFormats": [
        {
            "value": "medium (16-60s)",
            "count": 2
        },
        {
            "value": "short (0-15s)",
            "count": 2
        },
        {
            "value": "long (61s+)",
            "count": 1
        }
    ],
    "topPostingDays": [
        {
            "value": "Friday",
            "count": 3
        },
        {
            "value": "Thursday",
            "count": 1
        },
        {
            "value": "Wednesday",
            "count": 1
        }
    ],
    "topPostingHoursUtc": [
        {
            "value": "14:00",
            "count": 2
        },
        {
            "value": "16:00",
            "count": 2
        },
        {
            "value": "21:00",
            "count": 1
        }
    ],
    "viralThresholdViews": 492540,
    "viralPostCount": 1,
    "topVideoUrl": "https://www.tiktok.com/@alexwarren/video/7668693219986738462",
    "topVideoViews": 12215635,
    "historyDelta": null,
    "calculatedAt": "2026-08-02T12:54:26.143Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel, pull it from the Apify API, or push it onward through an integration. Each run also stores a `COST_ESTIMATE` record and an `INTELLIGENCE_RUN_SUMMARY` record in its key-value store.

### Output fields

| Field | Type | Meaning |
| --- | --- | --- |
| `resultType` | string | `creatorRanking`, `creatorSummary`, or `video` |
| `rank` | number | Position in the comparison, 1 is best |
| `score` | number | Composite score out of 100 |
| `username` | string | Creator handle |
| `followers` | number | Follower count at collection time |
| `sampleSize` | number | Videos actually analyzed for this creator |
| `medianViews` | number | Median views across the sample, resistant to one viral spike |
| `averageViews` | number | Mean views across the sample |
| `engagementRatePct` | number | Likes, comments, and shares as a percentage of views |
| `viewsToFollowersRatio` | number | Median views divided by followers |
| `postsPerWeek` | number | Publishing cadence inferred from the sample |
| `postingConsistencyScore` | number | How evenly posts are spaced, 0 to 100 |
| `viralPostCount` | number | Posts far above the creator baseline |
| `viralThresholdViews` | number | View count a post must beat to count as an outlier |
| `topHashtags` | array | Most used hashtags with counts |
| `topSounds` | array | Most used sounds with counts |
| `topFormats` | array | Short, medium, and long form mix |
| `topPostingDays` | array | Days the creator posts most |
| `topPostingHoursUtc` | array | UTC hours the creator posts most |
| `historyDelta` | object | Change since the previous snapshot when change tracking is on |
| `topVideoUrl` | string | Best performing sampled video |
| `calculatedAt` | date | Analysis time in UTC |

Missing values are returned as `null` or as an empty string rather than being dropped, so exported columns stay aligned across every row.

### How much does it cost to scrape TikTok?

This Actor is priced pay per event, so you are charged for results rather than for runtime.

| Event | Price | When it is charged |
| --- | ---: | --- |
| Actor start | $0.005 | Charged once when a run begins. |
| Video analyzed | $0.0005 | One public video analyzed for the comparison. A third-party data provider is billed separately for this mode. |

Apify Store plan discounts apply automatically to the result event, so larger plans pay less per record:

| Your Apify plan | Free | Starter | Scale | Business |
| --- | ---: | ---: | ---: | ---: |
| Price per 1,000 results | $0.50 | $0.45 | $0.42 | $0.40 |

You also pay your own Apify platform usage for the run, the same as any Actor you run yourself. The Apify free plan includes monthly credit that covers small runs.

This job uses a maintained provider Actor for signed TikTok data access. The **Maximum provider spend** input is a hard ceiling that is passed to every provider call, and the run stops collecting rather than exceeding it.

Before collection starts the Actor writes a `COST_ESTIMATE` record with the maximum price of that specific run, so the ceiling is visible in the run storage before any significant work happens. The Apify free plan includes monthly platform credit that covers small runs, and the cheapest way to control spend is a modest result limit rather than a large run you abort.

### Tips and advanced options

- Fifty videos per creator is a good balance. Below about twenty the median and consistency numbers get noisy.
- Compare creators from the same niche. Engagement rates are not comparable across very different content categories.
- Leave **Generate Markdown report** on and open `CREATOR-INTELLIGENCE-REPORT` in the run storage for a summary you can paste into a deck.
- For weekly tracking, set **Change-tracking dataset** to a fixed name such as `tiktok-creator-history` and attach a schedule to the run.
- Start with one input and a small limit to confirm the shape of the output before scaling up.
- Filter on `sourceInput` when a single run covers several handles, keywords, or URLs.
- Treat private, removed, or region-blocked content as unavailable rather than as a zero metric.

### Related TikTok Actors

| Actor | What it does |
| --- | --- |
| [TikTok Keyword Video Search](https://apify.com/scrape-lads/tiktok-keyword-video-search) | Find public TikTok videos matching keywords and export their creators, captions, and engagement metrics. |
| [TikTok Profile Videos Scraper](https://apify.com/scrape-lads/tiktok-profile-videos) | Collect public videos from one or more TikTok profiles with normalized post and engagement data. |
| [TikTok Comments Scraper](https://apify.com/scrape-lads/tiktok-comments-scraper) | Extract public TikTok comments, authors, likes, replies, pinned status, and creator-like signals. |
| [TikTok Profile Scraper](https://apify.com/scrape-lads/tiktok-profile-scraper) | Look up public TikTok profiles and export follower counts, bios, verification, and account statistics. |
| [TikTok Video Metrics Scraper](https://apify.com/scrape-lads/tiktok-video-metrics) | Fetch metrics and metadata for specific public TikTok video URLs. |
| [TikTok Followers Scraper](https://apify.com/scrape-lads/tiktok-followers-scraper) | Collect normalized public follower profiles for one or more TikTok accounts. |

All of them share the same collection engine and the same field names, so their datasets join together cleanly.

### FAQ

#### Which creator wins the comparison?

The one with the best composite score, which blends engagement rate, median views, views per follower, and posting consistency. The `score` field is on every ranking row so you can audit the order.

#### Why use median views instead of average views?

A single viral post can lift an average by an order of magnitude and make a creator look stronger than their typical performance. The median describes the normal post, and both numbers are returned.

#### Can I compare a creator against my own account?

Yes. Add your own handle to the list. The Actor treats every handle the same way.

#### Is scraping TikTok legal?

Collecting public data is generally legal in most jurisdictions, and this Actor only reads pages any logged-out visitor can see. You remain responsible for how you use what you collect: follow TikTok's terms, honour applicable privacy law such as GDPR and CCPA when records describe identifiable people, and do not republish personal data you have no basis to process.

#### Something looks wrong. What now?

Public pages and upstream schemas change. If a field stops populating or a run fails, open the **Issues** tab on this Actor with the run ID and the input you used. Feature requests and custom export formats are welcome through the same channel.

# Actor input Schema

## `handles` (type: `array`):

Accepts @username, username, or a full TikTok profile URL.

## `videosPerProfile` (type: `integer`):

Number of recent public videos to analyze for each creator.

## `includeRawResults` (type: `boolean`):

Return each sampled video as well as creator summaries and rankings.

## `includeReport` (type: `boolean`):

Save a readable executive report in the run key-value store.

## `historyDatasetName` (type: `string`):

Optional named dataset used across scheduled runs. Leave blank unless the run token can create and access named datasets.

## `maxProviderSpendUsd` (type: `number`):

Hard USD ceiling for third-party data collection. This job starts one provider run per input and Apify reserves at least $2 of headroom for each, so allow roughly $2 per handle. Real charges are normally a fraction of a cent.

## Actor input object example

```json
{
  "handles": [
    "@tiktok",
    "@nba"
  ],
  "videosPerProfile": 50,
  "includeRawResults": true,
  "includeReport": true,
  "historyDatasetName": "",
  "maxProviderSpendUsd": 5
}
```

# Actor output Schema

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

No description

## `costEstimate` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `report` (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 = {
    "handles": [
        "@tiktok",
        "@nba"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrape-lads/tiktok-creator-comparison").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 = { "handles": [
        "@tiktok",
        "@nba",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("scrape-lads/tiktok-creator-comparison").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 '{
  "handles": [
    "@tiktok",
    "@nba"
  ]
}' |
apify call scrape-lads/tiktok-creator-comparison --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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