# TikTok Influencer Audit - Fake Followers & Engagement (`centorprat/tiktok-influencer-audit`) Actor

Deep TikTok creator due diligence: engagement vs follower-tier benchmarks (by followers and views), fake-follower and bought-engagement signals, reach health and momentum, brand safety, a CPM rate card, and authenticity + influence scores. Runs a TikTok scraper under the hood.

- **URL**: https://apify.com/centorprat/tiktok-influencer-audit.md
- **Developed by:** [Centor Prat](https://apify.com/centorprat) (community)
- **Categories:** Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $42.50 / 1,000 creator auditeds

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 Influencer Audit — Fake Followers, Engagement & Reach

Vet a TikTok creator before you pay them. Give handles and get the full agency due-diligence brief for each: **engagement benchmarked to the creator's follower tier, measured both by followers and by views**; **fake-follower and bought-engagement signals** (followers who don't watch, lifetime likes vs. followers, like/view/comment ratios that don't add up); **reach health and momentum** (is the audience watching *now*?); **brand-safety flags**; a **CPM-based rate card**; and **authenticity, reach-health and influence scores** with a verdict and a one-line summary. A TikTok scraper runs under the hood, so you only pass handles. Agent-callable.

Built for influencer-marketing agencies, brand partnership teams, TikTok Shop affiliate managers and creator marketplaces that lose budget to inflated follower counts.

### Tiers (deep layers run only when you ask)

- **Profile audit (default, ~20 s):** tier-benchmarked engagement (by followers and by views), bought-follower tells, reach health + momentum, cadence, sponsored share, brand safety, rate card, three scores, verdict.
- **Comment forensics (`deepComments: true`):** reads comments on recent videos and grades how authentic the engagement is: % generic/emoji-only, spam/solicitation, duplicate text, commenters still on TikTok's auto-generated `user123…` handle, and comment-language mismatch. The result is a `commentAuthenticityScore` blended into the verdict. A second scraper runs, so it takes longer; best for scheduled, webhook or batch runs.

> These are authenticity **signals** computed from public creator data for due diligence. They are **not an accusation** that a creator is fraudulent. Benchmarks and the rate card are indicative. Verify before contracting.

### What makes it deep (vs single-number tools)

| Dimension | What it computes |
|---|---|
| **Engagement vs tier** | ER = median (likes+comments+shares) / followers, scored against the norm for the creator's tier (nano → global). Also ER **by views**, the TikTok-native quality measure. |
| **Do the followers watch?** | Median views ÷ followers vs the tier norm. TikTok pushes videos to non-followers, so an account whose followers never watch is the classic bought-follower pattern. |
| **Lifetime likes per follower** | Organic TikTok accounts earn many lifetime likes per follower. A follower count larger than every like the account ever received points to bought followers. |
| **Ratio forensics** | Like-to-view (bought likes / botted views), comments per 1k likes (lopsided = bought likes; extreme = giveaways/pods), view-count uniformity. |
| **Reach health + momentum** | Recent likes per video vs the creator's own lifetime average (rising / steady / cooling / declining), plus posting activity. *Don't pay for 2021's numbers.* |
| **Honest sampling** | Pinned showcase videos (often 50–250× a normal video) and videos under 48 h old are excluded from the rates. Medians, not averages, so one viral hit can't inflate the read. Hit-dependence is reported. |
| **Credibility gating** | Verified/established accounts aren't false-flagged as fake for naturally low engagement. Their dormant followers show up as *low reach health* instead, which is accurate and fair. |
| **Commercials** | CPM rate card on **median views** × engagement quality (TikTok deals price on reach, not follower count), sponsored-video share, TikTok Shop activity. |
| **Brand safety & fit** | Risky-content flags (adult / gambling / crypto-promo / engagement-bait / profanity) and an optional brand-keyword fit. |
| **Verdict** | `authenticityScore` + `reachHealthScore` + `influenceScore` + signal + `summary` line + findings. |

**Verdicts:** `authentic-healthy-engagement` · `authentic-modest-engagement` · `inactive-audience-low-reach` · `inflated-followers-suspected` · `bought-engagement-suspected` · `engagement-authenticity-concerns` · `authenticity-concerns--review` · `brand-safety-review` · `private-account` · `not-found`.

### Why not just ask an AI agent?

An agent can open a profile page. It **can't** pull a creator's recent videos with their real view/like/comment/share/save counts, strip the pinned showcase hits that make every profile look bigger, benchmark against the right tier norm, run the bought-follower and bought-engagement forensics, and roll it into consistent scores for a whole roster in one call. That encoded influencer-marketing expertise at scale is the product.

### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `usernames` | array of strings | ✅\* | Handles or profile URLs (`zachking`, `@khaby.lame`, `https://www.tiktok.com/@duolingo`). |
| `brandKeywords` | array of strings | | Topics for a brand-fit read. |
| `datasetId` | dataset | ✅\* | …or read handles from another dataset (e.g. a TikTok search run). |
| `videosSampled` | integer | | Recent videos analysed per creator (default 10). |
| `deepComments` | boolean | | Comment forensics add-on (default off). |
| `commentVideosSampled` | integer | | Videos sampled for comments (default 3). |
| `commentsPerVideo` | integer | | Comments read per video (default 30). |
| `maxCreators` | integer | | Cap per run (default 20). |
| `webhookUrl` | string | | POST the audits here as JSON. |

\* provide `usernames` or `datasetId`.

**Example input**

```json
{ "usernames": ["zachking", "khaby.lame", "duolingo"], "brandKeywords": ["comedy", "magic"] }
```

### Output

One audit per creator. **Example** (real run, trimmed):

```json
{
  "username": "zachking",
  "verified": true,
  "tier": "global",
  "followersCount": 86800000,
  "medianViews": 12450000,
  "viewToFollowerRatio": 0.143,
  "engagementRatePct": 1.472,
  "engagementVsBenchmark": 1.84,
  "engagementRateByViewsPct": 10.84,
  "likeToViewPct": 10.51,
  "commentsPer1kLikes": 5.6,
  "saveRatePct": 0.494,
  "lifetimeLikesPerFollower": 14.98,
  "momentum": {"label": "steady", "recentVsLifetimeLikesRatio": 0.65},
  "cadence": {"avgDaysBetweenVideos": 10.0, "daysSinceLastVideo": 17.8},
  "authenticityScore": 95, "reachHealthScore": 90, "influenceScore": 89,
  "estimatedRateCardUsd": {"low": 186750, "mid": 373500, "high": 653625, "currency": "USD"},
  "sample": {"videosAnalyzed": 8, "pinnedExcluded": 2, "freshExcluded": 0},
  "signal": "authentic-healthy-engagement",
  "summary": "@zachking - global tier (86,800,000 followers) - median 12,450,000 views (14% of followers) - ER 1.47% by followers / 10.8% by views - reach steady - authenticity 95, reach health 90, influence 89 -> authentic-healthy-engagement",
  "findings": [
    {"severity": "low", "code": "pinned-showcase", "detail": "2 pinned showcase video(s) at ~99x the median views were excluded - the profile page overstates typical reach."}
  ]
}
```

A verified account whose videos now reach under 1% of its followers returns `inactive-audience-low-reach` (real followers, but you'd be paying for an audience that no longer watches). An unverified account with followers far above its views and lifetime likes returns `inflated-followers-suspected`. Risky content returns `brand-safety-review`.

### Use cases

- **Pre-deal vetting:** confirm a creator's audience and engagement are real, and currently watching, before you sign.
- **Roster screening:** audit a whole shortlist or a discovery dataset in one run and rank by authenticity and reach health.
- **Rate negotiation:** an independent, reach-based fair-price estimate.
- **TikTok Shop affiliate selection:** spot creators whose reach is current, not legacy.
- **Brand safety:** flag risky content and ad-fatigue before association.
- **AI agents:** a structured creator verdict (plus a one-line `summary`) to gate outreach.

### For AI agents / MCP

```
https://mcp.apify.com/?tools=actors,docs,centorprat/tiktok-influencer-audit
```

Loads as `centorprat--tiktok-influencer-audit`. Claude Code:

```
claude mcp add apify -- npx -y @apify/actors-mcp-server --actors centorprat/tiktok-influencer-audit
```

### FAQ

**Where does the data come from?** Public TikTok profiles and recent videos, via TikTok scrapers on Apify that run under the hood. You don't manage any key or login.

**Why are pinned videos excluded?** Creators pin their biggest hits. In our tests pinned videos ran 50–250× a creator's normal views. Leaving them in inflates every average, which is how a profile page misleads.

**What's the difference between authenticity and reach health?** Authenticity asks whether the followers and engagement are *real*. Reach health asks whether the followers *watch now*. A creator who went viral years ago can be 100% authentic and still a poor buy today.

**Does it accuse creators of fraud?** No. It surfaces **signals** for your review, and verified/established accounts are gated so they aren't flagged as fake for naturally low engagement.

**How is engagement benchmarked?** Against typical TikTok ranges for the creator's follower tier, both per follower and per view, using medians across recent videos.

**Private accounts?** Reported as `private-account` with public metrics only.

**Does it look at audience nationality?** No. The comment add-on only checks whether comment *language* matches the creator's own content (bot farms typically post in unrelated languages). Commenters are never named or profiled.

**How fast is it?** About 20 seconds for a profile audit. With comment forensics, about a minute.

**Cost?** Pay-per-event: one event per creator audited, plus one per creator when comment forensics runs. The underlying scraper usage is billed to your run: a few cents per creator for the audit. With `deepComments`, a TikTok comment scraper also runs, which adds up to about $0.11 per creator on Apify's Free plan (3 videos x 30 comments; much less on paid plans or with fewer comments).

### Data & attribution

Public TikTok data via TikTok scrapers on Apify. These are signals for influencer due diligence, not accusations or guarantees. Rate-card and benchmark figures are indicative.

### Related actors

- [Instagram Influencer Audit](https://apify.com/centorprat/instagram-influencer-audit)
- [YouTube Influencer Audit](https://apify.com/centorprat/youtube-influencer-audit)
- [Google Maps Leads & Website Audit](https://apify.com/centorprat/google-maps-leads-website-audit)
- [Shopify Store Leads & App Audit](https://apify.com/centorprat/shopify-store-leads-app-audit)

# Actor input Schema

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

Creator handles or profile URLs (e.g. "zachking", "@khaby.lame", "https://www.tiktok.com/@duolingo"). One audit per handle.

## `brandKeywords` (type: `array`):

Topics your brand cares about (e.g. "skincare", "fitness", "gaming"). The audit reports which appear in each creator's bio, captions and hashtags - a brand-fit read.

## `datasetId` (type: `string`):

Read handles from another dataset (e.g. a TikTok search/discovery run) - uses the 'username' / 'uniqueId' / 'authorMeta.name' / 'channel.username' / 'url' field.

## `videosSampled` (type: `integer`):

How many recent videos to analyse per creator (pinned showcase videos and videos under 48h old are excluded from the rates automatically).

## `deepComments` (type: `boolean`):

Also scrape comments on recent videos and grade engagement authenticity (generic/emoji-only, spam, duplicates, auto-generated 'user123...' commenters, comment-language mismatch). Uses a comment scraper (billed to your run) and adds time. Off by default.

## `commentVideosSampled` (type: `integer`):

When deep comment forensics is on, how many recent videos per creator to sample comments from.

## `commentsPerVideo` (type: `integer`):

When deep comment forensics is on, how many comments to read per sampled video.

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

Cap how many creators to audit this run.

## `webhookUrl` (type: `string`):

If set, the finished audits are POSTed here as JSON when the run completes.

## Actor input object example

```json
{
  "usernames": [
    "zachking"
  ],
  "videosSampled": 10,
  "deepComments": false,
  "commentVideosSampled": 3,
  "commentsPerVideo": 30,
  "maxCreators": 20
}
```

# Actor output Schema

## `audits` (type: `string`):

One audit per creator: follower tier + engagement rate by followers and by views vs tier norms, view-to-follower ratio, lifetime likes per follower, like/view and comment/like sanity, reach momentum, posting cadence, sponsored share, brand-safety flags, CPM rate card, authenticity + reach-health + influence scores, a verdict, a one-line summary and findings.

# 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": [
        "zachking"
    ],
    "maxCreators": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("centorprat/tiktok-influencer-audit").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": ["zachking"],
    "maxCreators": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("centorprat/tiktok-influencer-audit").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": [
    "zachking"
  ],
  "maxCreators": 20
}' |
apify call centorprat/tiktok-influencer-audit --silent --output-dataset

```

## MCP server setup

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

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/am9ncjY0md1kdp09O/builds/8glj1P1TvWDxvcDKL/openapi.json
