# TikTok Engagement Rate Calculator - Influencer Audit (`seemuapps/tiktok-engagement-rate-calculator`) Actor

Calculate TikTok engagement rate, median views, posting frequency, an A+ to F grade and red flags for creators in bulk. Vet influencers before you pay them.

- **URL**: https://apify.com/seemuapps/tiktok-engagement-rate-calculator.md
- **Developed by:** [Seemu Scraping](https://apify.com/seemuapps) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$35.00 / 1,000 creator reports

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 Engagement Rate Calculator - Influencer Audit

Calculate the real TikTok engagement rate of any creator in bulk: engagement by views and by followers, median views, posting frequency, an A+ to F grade against creators of the same size, and red flags that point to inactive or inflated accounts. Paste up to 500 usernames and get one audit row per creator, ready for a spreadsheet.

Built for brands, agencies and influencer marketers who need to vet creators before paying for a sponsored post.

### What you get

One row per creator with:

- **Profile stats**: username, display name, profile URL, verified badge, followers, following, total likes, video count, bio and bio link
- **Engagement rate (by views)**: average of (likes + comments + shares) / views across recent videos, the standard TikTok engagement metric
- **Engagement rate (by followers)**: average interactions per video / followers, for comparing against Instagram-style benchmarks
- **Reach**: average views, median views and the median-views-to-followers ratio
- **Per-video averages**: likes, comments, shares and saves
- **Posting cadence**: posts per week, last posted date and days since the last post
- **Top video**: URL, views, likes and date of the best recent video
- **Viral video count**: recent videos that got more than 3x the creator's median views
- **Consistency score (0-100)**: how evenly views are spread across videos
- **Engagement grade (A+ to F)**: engagement rate compared with the typical rate for the creator's follower tier
- **Red flags**: low reach, inactivity, suspiciously high or low engagement, like spikes, comment-heavy videos, one-hit dependence and small samples
- **Sponsored content**: how many recent videos were ad-boosted and how many carry the "Paid partnership" label
- Optional **per-video breakdown** with each video's URL, date, views, likes, comments, shares, saves and engagement rate

### Use cases

- **Influencer vetting**: check a creator's real engagement before you sign a deal
- **Influencer discovery and shortlisting**: rank a list of candidates by grade, engagement rate and median views
- **Fake engagement and fake follower screening**: spot accounts whose views or likes don't match their follower count
- **Campaign planning and CPM estimates**: use median views to forecast what a sponsored post will actually reach
- **Competitor and creator benchmarking**: compare creators in your niche on the same metrics

### How to use

1. Enter TikTok usernames (with or without @) or profile URLs, one per line, up to 500 per run
2. Optionally change **Recent videos to analyze** (default 30)
3. Optionally turn on **Include per-video breakdown**
4. Run the actor. Reports appear in the **Dataset** tab; the **Overview** view shows the grade, engagement rate, reach and red flags at a glance
5. Export to CSV, Excel, JSON or Google Sheets

### How the metrics are calculated

The audit looks at each creator's most recent videos (up to 35):

- **Pinned videos are skipped.** They are hand-picked, usually old hits, and would make recent performance look better than it is.
- **Ad-boosted videos are left out of the averages.** Views bought through ads give huge reach with a tiny engagement rate and would distort both. They are still counted in `promotedVideoCount`.
- **Videos under 24 hours old are left out of the averages**, because they are still collecting views.
- These exclusions only apply when at least 3 videos remain. `videosAnalyzed` tells you how many videos the averages are based on.

| Field | Formula |
|---|---|
| `engagementRate` | average of (likes + comments + shares) / views per video, in % |
| `engagementRateByFollowers` | average (likes + comments + shares) per video / followers, in % |
| `viewsToFollowersRatio` | median views / followers (0.25 = a typical video reaches 25% of the follower count) |
| `postsPerWeek` | recent videos / weeks between the oldest of them and today |
| `viralVideoCount` | videos with views above 3x the median |
| `consistencyScore` | 100 x (1 - standard deviation of log10 views), floored at 0. 100 = every video gets the same views, 50 = views typically swing about 3x, 0 = 10x or more |

#### Engagement grade benchmarks

The grade compares the creator's engagement rate by views with the typical rate for their follower tier. Smaller creators have closer audiences and engage more, so the bar is higher for them.

| Follower tier | Followers | Typical engagement rate (by views) |
|---|---|---|
| Nano | under 10K | 7% |
| Micro | 10K - 100K | 6% |
| Mid | 100K - 500K | 5.5% |
| Macro | 500K - 1M | 5% |
| Mega | 1M+ | 4.5% |

| Grade | Engagement rate vs. tier typical |
|---|---|
| A+ | 2x or more |
| A | 1.5x - 2x |
| B | 1.1x - 1.5x |
| C | 0.8x - 1.1x (about average) |
| D | 0.5x - 0.8x |
| F | under 0.5x |

The tier and benchmark used are included in every row (`followerTier`, `tierBenchmarkEngagementRate`).

#### Red flags

| Flag | Triggered when |
|---|---|
| `low_reach` | 10K+ followers and the median video reaches under 2% of them: an inactive or inflated follower base |
| `inactive` | no new video in more than 30 days |
| `engagement_too_high` | engagement rate above 4x the tier typical (median views 1,000+): possible engagement pods or bought likes |
| `engagement_too_low` | under 1% of viewers interact: possible bought views or a disengaged audience |
| `like_spikes` | a video with 1,000+ views has likes above 50% of its views |
| `comment_heavy` | more than 10 comments per 100 likes: giveaways, comment pods or bought comments |
| `one_hit` | one video holds more than half of all recent views |
| `small_sample` | fewer than 5 videos to analyze |

Red flags are signals to look closer, not proof of fraud.

### Output format

```json
{
  "username": "khaby.lame",
  "status": "ok",
  "message": null,
  "nickname": "Khabane lame",
  "profileUrl": "https://www.tiktok.com/@khaby.lame",
  "verified": true,
  "followers": 163000000,
  "following": 81,
  "totalLikes": 2700000000,
  "videoCount": 1356,
  "bio": "Se vuoi ridere sei nel posto giusto If u wanna laugh u r in the right place",
  "bioLink": null,
  "videosAnalyzed": 25,
  "promotedVideoCount": 5,
  "paidPartnershipCount": 5,
  "engagementRate": 8.64,
  "engagementRateByFollowers": 1.53,
  "avgViews": 34022791,
  "medianViews": 16940348,
  "avgLikes": 2387746,
  "avgComments": 24645,
  "avgShares": 79121,
  "avgSaves": 95219,
  "viewsToFollowersRatio": 0.104,
  "postsPerWeek": 1.54,
  "lastPostedAt": "2026-09-25T16:30:18.000Z",
  "daysSinceLastPost": 5,
  "topVideo": {
    "url": "https://www.tiktok.com/@khaby.lame/video/7678009073421405471",
    "views": 106162663,
    "likes": 6722002,
    "postedAt": "2026-08-25T16:36:58.000Z"
  },
  "viralVideoCount": 6,
  "consistencyScore": 53,
  "followerTier": "mega",
  "tierBenchmarkEngagementRate": 4.5,
  "engagementGrade": "A",
  "redFlags": [],
  "analyzedAt": "2026-10-01T05:32:54.986Z"
}
```

#### Accounts that can't be audited are free

Private accounts, accounts that don't exist, accounts with no public videos and invalid inputs still get a row, with `status` set to `private`, `not_found`, `no_videos` or `invalid_input` and a short `message`. **You are only charged for rows with `status: "ok"`.**

### Free plan limits

To keep the actor available to everyone, free runs are limited to:

- **10 creators per run**
- **1 run every 30 minutes**
- **3 runs per day**

If you hit a limit, the run finishes with a message explaining what happened and nothing is charged. Upgrade to a paid Apify plan to remove these limits.

### Pricing

You pay per creator report: one charge per creator with `status: "ok"`. Private, missing and video-less accounts are never charged.

### FAQ

**What is a good engagement rate on TikTok?**
Measured by views, most creators land between 4% and 7%. Anything above 8-10% is strong. Smaller accounts naturally score higher, which is why the grade is relative to follower tier.

**Why two engagement rates?**
On TikTok most views come from the For You feed, not followers, so engagement by views is the fairer measure of how good the content is. Engagement by followers mixes content quality with reach, and is useful when comparing with Instagram numbers.

**Why median views instead of average?**
One viral video can push the average far above what a typical post gets. The median is what a sponsored post can realistically expect.

**How many videos are analyzed?**
Up to 35 of the most recent videos (default 30), minus pinned, ad-boosted and very fresh videos. Older history is not included, so the audit reflects current performance.

**Does it need a TikTok login?**
No. Only public profile and video data is used.

# Actor input Schema

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

Creators to audit, one per line (up to 500 per run). Accepts usernames with or without @, or profile URLs such as https://www.tiktok.com/@name.

## `videosToAnalyze` (type: `integer`):

How many of the creator's most recent videos to base the metrics on (3-35). Pinned videos are skipped; ad-boosted videos and videos posted in the last 24 hours are left out of the engagement averages.

## `includeVideos` (type: `boolean`):

Add a recentVideos array to each report with every video's URL, date, views, likes, comments, shares, saves and engagement rate. Same price.

## Actor input object example

```json
{
  "usernames": [
    "khaby.lame",
    "dylan.page",
    "moneymoveswithlydia"
  ],
  "videosToAnalyze": 30,
  "includeVideos": false
}
```

# Actor output Schema

## `reports` (type: `string`):

One row per creator (status "ok"): profile stats, engagementRate (by views), engagementRateByFollowers, avg/median views, avg likes/comments/shares/saves, postsPerWeek, daysSinceLastPost, topVideo, viralVideoCount, consistencyScore, engagementGrade and redFlags. Private, missing or video-less accounts appear as uncharged rows with a status and message.

# 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": [
        "khaby.lame",
        "dylan.page",
        "moneymoveswithlydia"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/tiktok-engagement-rate-calculator").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": [
        "khaby.lame",
        "dylan.page",
        "moneymoveswithlydia",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/tiktok-engagement-rate-calculator").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": [
    "khaby.lame",
    "dylan.page",
    "moneymoveswithlydia"
  ]
}' |
apify call seemuapps/tiktok-engagement-rate-calculator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seemuapps/tiktok-engagement-rate-calculator"
        }
    }
}
```

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/btzyx1TVT8z4CHHgx/builds/ggoO5ywadjyoIiu5o/openapi.json
