# TikTok Influencer Finder by Engagement Rate (`sillage-data/tiktok-creator-ranker`) Actor

Rank TikTok creators by real engagement: median views vs followers, likes, comments and shares per video, plus a sponsored-post signal (#ad, #PR, paid partnership). Paste usernames, get a sorted creator list as JSON or CSV. No emails, no login.

- **URL**: https://apify.com/sillage-data/tiktok-creator-ranker.md
- **Developed by:** [Sillage Data](https://apify.com/sillage-data) (community)
- **Categories:** Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 0.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.

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 Influencer Finder by Engagement Rate

**Find TikTok creators worth paying: ranked by median engagement, not by follower count.**

Follower counts lie. A creator with 2 million followers can get 20,000 views per video, while a creator with 40,000 followers gets 60,000. This Actor reads each creator's recent public videos and gives you **one row per creator, already ranked** by what actually matters to a brand: median engagement rate, median views compared to followers, posting rhythm, and how often they already run sponsored posts.

Built for **influencer marketing agencies, DTC and e-commerce brands, TikTok Shop sellers and UGC buyers** who vet 50 to 500 creators a week and are tired of copying numbers into a spreadsheet, or of paying hundreds of dollars a month for an influencer platform they use twice.

- ✅ **Real engagement, not vanity metrics**: median likes, comments, shares and views over the last 30 videos (pinned videos excluded, one viral hit cannot fake the score).
- ✅ **Sponsored-post signal**: share of videos marked #ad, #sponsored, #pr, #gifted, "paid partnership", or flagged as ads by TikTok itself.
- ✅ **No login, no cookies, no emails**: public data only, safe to plug into n8n, Make, Zapier or Google Sheets.

**Try it in one minute**: the form is prefilled with two creators. Click **Start**, and you get a ranked table in about 30 seconds.

**Price**: $0.04 per creator analyzed, $0.01 when only the profile could be read, $0 for failed rows. 100 creators cost $4.

### What does the TikTok Influencer Finder do?

You paste a list of TikTok usernames (or profile links). For each creator, the Actor opens the public profile page, reads the profile numbers and the recent videos, computes the metrics below, and returns a ranked list you can download as **JSON, CSV, Excel or HTML**, or send to Google Sheets through an integration.

| You get per creator | Example |
|---|---|
| Rank, username, profile link, verified | `#1 @khaby.lame` |
| Followers, following, total likes, video count | `163,005,822 followers` |
| Median views, likes, comments, shares | `8,900,000 median views` |
| **Engagement rate** (median) | `8.88 %` |
| **Median views / followers** | `5.46 %` |
| Posts per week, date of last post | `1.18 posts per week` |
| Sponsored posts: count, share, signals, last date | `1 of 12 (8.3 %), "tiktok ad flag"` |
| Top 5 hashtags | `learnfromkhaby, comedy` |
| Data quality flag and clear error code | `full`, `PROFILE_NOT_FOUND`… |

### How to use it

1. Open the **Input** tab and paste your TikTok usernames, one per line (`khaby.lame`, `@khaby.lame` or `https://www.tiktok.com/@khaby.lame`).
2. Choose how many recent videos to read per creator (30 is a good default) and how to rank them.
3. Optional: set filters, for example **max followers 100,000** for micro-influencers, or **min median views / followers 5 %**.
4. Click **Start**. When the run finishes, open the **Creators** view or export the dataset.

### How much does it cost?

This Actor uses **pay-per-event pricing**: you pay only for creators that end up in your results.

| Event | Price | When |
|---|---|---|
| Creator analyzed | **$0.04** | Profile and at least 5 recent videos were read |
| Creator profile only | **$0.01** | Profile read, but videos could not be loaded |
| Failed row (not found, private, invalid, blocked) | **$0** | Never charged |

| Creators analyzed | Cost |
|---|---|
| 10 | $0.40 |
| 100 | $4 |
| 1,000 | $40 (less on higher Apify plans) |

Creators removed by your filters are not charged. The Actor stops by itself when your **maximum cost per run** is reached.

### Input

| Field | Default | Description |
|---|---|---|
| `usernames` | required | TikTok usernames or profile URLs |
| `videosPerCreator` | 30 | Recent videos read per creator (5 to 100) |
| `maxCreators` | 100 | Safety cap per run |
| `sortBy` | `engagementRate` | `engagementRate`, `viewToFollowerRatio`, `sponsoredShare` or `followers` |
| `detectSponsored` | true | Look for sponsored-post signals |
| `minFollowers`, `maxFollowers` | 0 (off) | Follower range filter |
| `minEngagementRate` | 0 (off) | Minimum median engagement rate, in % |
| `minViewToFollowerRatio` | 0 (off) | Minimum median views / followers, in % |
| `proxyConfiguration` | Apify residential | Residential proxy is required for TikTok |

### Output example

A real row from a test run (October 2026):

```json
{
  "rank": 1,
  "username": "khaby.lame",
  "profileUrl": "https://www.tiktok.com/@khaby.lame",
  "nickname": "Khabane lame",
  "verified": true,
  "followers": 163005822,
  "following": 81,
  "totalLikes": 2688478705,
  "videoCount": 1358,
  "accountCreatedAt": "2016-08-10T22:02:34.000Z",
  "analyzedVideos": 12,
  "medianViews": 8900000,
  "medianLikes": 864250,
  "medianComments": 13900,
  "medianShares": 21100,
  "engagementRate": 8.88,
  "viewToFollowerRatio": 5.46,
  "postsPerWeek": 1.18,
  "lastPostAt": "2026-10-08T16:31:16.000Z",
  "sponsoredPostCount": 1,
  "sponsoredShare": 8.3,
  "sponsoredSignals": ["tiktok ad flag"],
  "lastSponsoredAt": "2026-09-23T17:40:45.000Z",
  "topHashtags": ["learnfromkhaby", "comedy", "holafly"],
  "dataQuality": "full",
  "scrapedAt": "2026-10-15T07:32:28.649Z"
}
```

Rows that could not be analyzed are kept, with `dataQuality: "failed"`, an `errorCode` (`PROFILE_NOT_FOUND`, `PRIVATE_ACCOUNT`, `BLOCKED`, `INVALID_INPUT`) and a plain-English `errorMessage`. Nothing is skipped silently. A run summary is saved in the key-value store under `SUMMARY`.

### How are the numbers computed?

- **Videos used**: the most recent public videos, up to `videosPerCreator`, **pinned videos excluded**.
- **Engagement rate** = median, over those videos, of `(likes + comments + shares) / views × 100`.
- **Median views / followers** = `median views / followers × 100`. It answers "what share of my audience actually sees a typical post?".
- **Posts per week** = `(videos − 1) / weeks between the oldest and newest analyzed video`.
- **Medians, not averages**: one viral video does not inflate a creator's score.
- Rows with full data are ranked first, then by the metric you chose, highest first.

### Sponsored-post signal: what it is and what it is not

A video is counted as sponsored when at least one of these is true:

- it uses a hashtag such as `#ad`, `#ads`, `#sponsored`, `#paidpartnership`, `#pr`, `#prpackage`, `#gifted`, `#collab`, `#partner`, `#anzeige`, `#werbung`;
- its text contains "paid partnership", "sponsored by" or "in partnership with";
- TikTok marks it as an ad, or as branded content, in the public page data.

This is a **signal, not proof**. `#pr` or `#collab` can mean something else, and a creator can run an undisclosed deal. Use it to spot creators who already work with brands, then check the videos yourself.

### FAQ

#### What is a good engagement rate on TikTok?

It depends on audience size: small creators often show higher rates than big ones. Compare creators of similar size, which is what the follower filters are for. This Actor gives you the median rate so the comparison is fair.

#### Why rank by median views and not by followers?

Followers include inactive and old accounts. Median views over recent videos tell you how many people a typical sponsored post would reach today.

#### Does it find emails or phone numbers?

No, on purpose. The Actor never collects emails, phone numbers, bio links, locations, ages or comments. Contact creators through TikTok or their official business channels.

#### Can I search creators by hashtag or keyword?

Not in this version: you provide the usernames. Hashtag discovery is planned for a later version.

#### Does it work for private accounts?

No. Private accounts are listed with `PRIVATE_ACCOUNT` and are not charged.

#### Instagram or YouTube?

Not yet. This Actor is TikTok only.

#### What happens if TikTok blocks a request?

Each creator is tried up to 3 times with a new residential IP. If it still fails, the row is returned with `BLOCKED` and is not charged. The Actor never logs in and never solves CAPTCHAs.

#### How fast is it?

About 10 to 30 seconds per creator, two creators at a time. 100 creators take roughly 20 to 30 minutes.

### Use it with n8n, Make, Zapier, Google Sheets or the API

Call the Actor from any tool with the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/sillage-data~tiktok-creator-ranker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"usernames": ["khaby.lame", "zachking"], "videosPerCreator": 30, "maxFollowers": 100000}'
```

To fill a Google Sheet automatically, add the **Google Sheets** integration on the Actor's **Integrations** tab, or use the Apify node in n8n or the Apify app in Make and Zapier.

### Is it legal to scrape TikTok creator data?

This Actor only reads **public** profile pages and public video statistics, **without logging in**, the same numbers anyone sees in a browser. It does not collect private data such as emails, phone numbers, locations, ages or comments, and it never targets minors. Results can still contain personal data protected by GDPR and similar laws (for example a creator's public username). **You are responsible for using the data lawfully, for respecting TikTok's terms, and for not contacting minors.** If you are unsure, ask a lawyer. This Actor is an independent tool and is not affiliated with or endorsed by TikTok.

### Limits

- You need a list of usernames (no hashtag discovery yet).
- TikTok can change its pages at any time; if a field disappears, the row is flagged instead of guessed.
- Residential proxy is required: datacenter IPs are often blocked by TikTok.
- Up to 100 recent videos per creator. If TikTok stops loading older videos, fewer are analyzed (the exact number is in `analyzedVideos`; a row is `full` from 5 videos).

### Feedback

Found a bug or need a field? Open an issue on the **Issues** tab. We answer every question within 6 hours.

# Actor input Schema

## `usernames` (type: `array`):

One per line. "khaby.lame", "@khaby.lame" and "https://www.tiktok.com/@khaby.lame" all work. Private accounts are reported, not analyzed.

## `videosPerCreator` (type: `integer`):

How many recent videos to read per creator (pinned videos are excluded). More videos = steadier medians, slightly slower.

## `maxCreators` (type: `integer`):

Safety cap on how many creators are analyzed in this run.

## `sortBy` (type: `string`):

Metric used to order the results (highest first).

## `detectSponsored` (type: `boolean`):

Flag videos with #ad, #sponsored, #pr, #gifted and similar hashtags, "paid partnership" text, or TikTok's own ad and branded content flags.

## `minFollowers` (type: `integer`):

Only keep creators with at least this many followers. 0 = no limit.

## `maxFollowers` (type: `integer`):

Only keep creators with at most this many followers (e.g. 100000 for micro-influencers). 0 = no limit.

## `minEngagementRate` (type: `number`):

Only keep creators whose median engagement rate is at least this percentage.

## `minViewToFollowerRatio` (type: `number`):

Only keep creators whose median views reach at least this percentage of their followers (5 = 5%).

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

Residential proxy is required: TikTok blocks most datacenter IPs.

## Actor input object example

```json
{
  "usernames": [
    "apifytech",
    "khaby.lame"
  ],
  "videosPerCreator": 12,
  "maxCreators": 5,
  "sortBy": "engagementRate",
  "detectSponsored": true,
  "minFollowers": 0,
  "maxFollowers": 0,
  "minEngagementRate": 0,
  "minViewToFollowerRatio": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `creators` (type: `string`):

No description

## `summary` (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 = {
    "usernames": [
        "apifytech",
        "khaby.lame"
    ],
    "videosPerCreator": 12,
    "maxCreators": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("sillage-data/tiktok-creator-ranker").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 = {
    "usernames": [
        "apifytech",
        "khaby.lame",
    ],
    "videosPerCreator": 12,
    "maxCreators": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("sillage-data/tiktok-creator-ranker").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 '{
  "usernames": [
    "apifytech",
    "khaby.lame"
  ],
  "videosPerCreator": 12,
  "maxCreators": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call sillage-data/tiktok-creator-ranker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sillage-data/tiktok-creator-ranker"
        }
    }
}
```

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/ObqKYWN8nPmTvaJgG/builds/6X1EvyGHInjNSorCW/openapi.json
