Fake Follower Checker — Audit TikTok Audience Authenticity
Pricing
from $15.00 / 1,000 audit completeds
Fake Follower Checker — Audit TikTok Audience Authenticity
Audit a TikTok creator’s audience for fake followers and bot engagement. Get a 0–100 trust score, red flags, and a partnership recommendation. Six-signal heuristic, runs in seconds.
Pricing
from $15.00 / 1,000 audit completeds
Rating
0.0
(0)
Developer
Creator Fusion
Maintained by CommunityActor stats
1
Bookmarked
69
Total users
3
Monthly active users
6 days ago
Last modified
Share
TikTok Audience Authenticity Audit — Fake Follower & Bot Detection API for AI Agents
Influencer vetting API for AI agents and brand-deal workflows. Detect fake followers, bot engagement, and suspicious growth patterns on TikTok creator profiles — returns typed JSON rows (schema below) with a 0-100 authenticity score, a trust rating, and a proceed / verify / avoid partnership recommendation.
Influencer marketing fails when creators have purchased followers instead of earning them organically. Fake followers don't convert and make campaign ROI unpredictable. This actor pulls the creator's public profile metrics and runs six independently weighted statistical checks (engagement rate vs. tier benchmarks, follower/following ratio, growth pattern, content consistency, profile completeness, trust signals) to produce an evidence-based authenticity verdict, with the full signal breakdown returned alongside the score — not just a number, the reasoning behind it — before you invest marketing dollars. This is a deep-dive due-diligence report for a shortlisted creator, not a bulk pass/fail filter: it never invents a verdict from missing data, where cheaper screeners score whatever they can scrape and call it done.
Currently supports TikTok. YouTube and Instagram profiles are skipped with a warning (support planned).
Why agents use this actor
- Deterministic typed output — every row follows the dataset schema below; scores, ratings, and recommendation actions come from fixed enumerations you can branch on (
proceed,proceed_with_caution,verify,avoid). - Cost-predictable — flat per-result pricing, so autonomous budgets can be computed before the run ($0.03 start + $0.015 per audited profile, plus the internal profile-scraper run, see Pricing).
- No auth or cookies needed — only public profile data is analyzed; nothing to log in to, nothing to maintain.
- Clear error semantics — invalid input or zero successful audits ends the run with a non-zero exit code and a status message, never a silent success with 0 items. Per-profile failures are counted in the run's
summarykey-value record. - Explainable verdicts — every score ships with the six underlying signals plus plain-language
redFlags/greenFlags, so an agent (or a human reviewer) can cite why a creator was flagged.
Input schema
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
tiktokUsernames | array of strings | one of the three | — | List of TikTok usernames to audit (without the @ symbol). |
username | string | one of the three | — | Convenience field for auditing one TikTok profile. Equivalent to one entry in tiktokUsernames. |
profiles | array of objects | one of the three | — | Multi-platform profile array, format { "platform": "tiktok", "username": "creator" } (or url instead of username). Only tiktok is processed today. |
includeRawData | boolean | No | false | Include the full raw profile data (rawProfileData) in each result row. |
At least one of tiktokUsernames, username, or profiles must be provided, otherwise the run fails fast with exit code 1.
Output schema
One dataset row per successfully audited profile. All value fields are nullable — a field is null when the source platform did not expose it.
| Field | Type | Nullable | Description |
|---|---|---|---|
platform | string | yes | Platform of the profile (currently always tiktok). |
username | string | yes | Audited handle without the @ prefix. |
profileUrl | string | yes | Canonical profile URL. |
profile.nickname | string | yes | Display name. |
profile.verified | boolean | yes | Platform verification badge. |
profile.followers | number | yes | Follower count at audit time. |
profile.following | number | yes | Accounts followed. |
profile.likes | number | yes | Total likes across content. |
profile.videos | number | yes | Published video count. |
profile.engagementRate | number | yes | Engagement rate in percent (0-100). |
profile.accountAgeDays | number | yes | Account age in days, when derivable. |
profile.bioLink | string | yes | External bio link, if any. |
audit.overallScore | number | yes | Authenticity score 0-100 (higher = more authentic). |
audit.rating.label | string | yes | Excellent, Good, Moderate, Questionable, Poor, Critical Risk, or Invalid Data. |
audit.rating.color | string | yes | Traffic-light color for dashboards. |
audit.rating.emoji | string | yes | Emoji matching the rating. |
audit.confidence.level | string | yes | very_high, high, medium, low, or very_low — driven by how many profile data points were available. |
audit.confidence.percentage | number | yes | Confidence as a percentage (30-95). |
audit.recommendation.action | string | yes | proceed, proceed_with_caution, verify, avoid, or data_error. |
audit.recommendation.message | string | yes | Plain-language explanation. |
audit.recommendation.confidence | string | yes | high, medium, or low. |
signals | array of objects | yes | The six weighted signals: each has name, score (0-100), status, message. Weights: Engagement Rate 30%, Growth Pattern 20%, Follower Ratio 15%, Content Consistency 15%, Profile Completeness 10%, Trust Signals 10%. |
redFlags | array of strings | yes | Concerns (signals scoring < 50). Empty array when none. |
greenFlags | array of strings | yes | Positive indicators (signals scoring ≥ 80). Empty array when none. |
auditedAt | string | yes | ISO 8601 audit timestamp. |
rawProfileData | object | yes | Full raw scraper row. Only present when includeRawData is true. |
error | string | yes | Reserved for failure rows; the current version reports failures via the summary record and exit status instead of dataset rows. |
Example row (real output, trimmed):
{"platform": "tiktok","username": "charlidamelio","profileUrl": "https://www.tiktok.com/@charlidamelio","profile": {"nickname": "charli d'amelio","verified": true,"followers": 155000000,"following": 1200,"likes": 11800000000,"videos": 2800,"engagementRate": 4.2,"accountAgeDays": 2900,"bioLink": "https://linktr.ee/charlidamelio"},"audit": {"overallScore": 84,"rating": { "label": "Good", "color": "light-green", "emoji": "🟢" },"confidence": { "level": "high", "percentage": 85 },"recommendation": {"action": "proceed_with_caution","message": "Generally authentic profile with one minor concern. Recommend basic verification before committing.","confidence": "medium"}},"signals": [{ "name": "Engagement Rate", "score": 85, "status": "healthy", "message": "Engagement rate (4.20%) is within healthy range for mega accounts (1-6%)." },{ "name": "Follower Ratio", "score": 90, "status": "celebrity", "message": "Celebrity-level ratio (129167:1). Highly selective following pattern indicates mega-influencer status." }],"redFlags": [],"greenFlags": ["Engagement rate (4.20%) is within healthy range for mega accounts (1-6%)."],"auditedAt": "2026-08-14T12:00:00.000Z"}
Error semantics
- No profiles provided → run fails immediately with exit code 1 and status message
No profiles provided. Use "tiktokUsernames": ["charlidamelio"] or the "profiles" array.Nothing is billed beyond the start event. - Per-profile failure (profile not found, scraper error, or profile data without follower stats): that profile is skipped — no dataset row is pushed and no verdict is invented from missing data. The failure is counted in the
summarykey-value record ({ totalProfiles, successful, failed, avgScore, completedAt }). - Zero successful audits → run exits with code 1 and status message
0/N audits succeeded - <first error>, so schedules and monitoring catch it. An agent can retry safely; runs are idempotent. - Partial success → run succeeds with status message
S/N audits completed; checksummaryfor the failed count.
Use from AI agents (MCP)
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=apricot_blackberry/audience-authenticity-audit","headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }}}}
Works in Claude, Cursor, ChatGPT deep research connectors, and any MCP client; the input schema above is the tool's parameter schema.
Use from code
curl:
curl -X POST "https://api.apify.com/v2/acts/apricot_blackberry~audience-authenticity-audit/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"tiktokUsernames": ["charlidamelio"]}'
JavaScript (apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('apricot_blackberry/audience-authenticity-audit').call({tiktokUsernames: ['charlidamelio'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const audit of items) {console.log(audit.username, audit.audit.overallScore, audit.audit.recommendation.action);}
Python (apify_client):
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("apricot_blackberry/audience-authenticity-audit").call(run_input={"tiktokUsernames": ["charlidamelio"]})for audit in client.dataset(run["defaultDatasetId"]).iterate_items():print(audit["username"], audit["audit"]["overallScore"], audit["audit"]["recommendation"]["action"])
Use from automation platforms
- n8n / Make / Zapier — use the native Apify integration and choose Audience Authenticity Audit by name; pass
tiktokUsernamesas input. - LangChain / LlamaIndex — use the Apify tool wrappers (
ApifyActorsTool/ Apify Actor loader) with actor idapricot_blackberry/audience-authenticity-audit. - Webhooks — Apify can fire a webhook on
ACTOR.RUN.SUCCEEDED/FAILEDfor this actor, so a brand-deal approval workflow picks up the verdict without polling.
Pricing
Premium analysis pricing, billed per event:
| Event | Price |
|---|---|
| Actor start | $0.03 |
| Per audited profile (dataset result) | $0.015 |
This is due-diligence pricing for a full 6-signal report on a specific creator, not a bulk screen — for cheap high-volume triage across a whole roster, run Fake Engagement Detector first at per-profile pricing, then send only the shortlist here for the deep audit.
Sub-actor cost note: this actor fetches profile data by calling apricot_blackberry/tiktok-profile-scraper internally, and that scraper run is billed to your account too (it runs under your Apify token). Budget for both when estimating cost per audit.
FAQ
Q: Which platforms are supported?
A: TikTok today. Profiles submitted with platform: "youtube" or platform: "instagram" are skipped with a warning; support is planned.
Q: How is the score computed? A: Six weighted statistical signals benchmarked against industry engagement norms per follower tier (micro to mega): engagement rate (30%), growth pattern (20%), follower/following ratio (15%), content consistency (15%), profile completeness (10%), and trust signals (10%). Signals below 50 become red flags; 80+ become green flags. No verdict is ever produced from missing follower data.
Q: What if the score is in the gray area (60-80)?
A: Follow the audit.recommendation.action field — the actor already folds red-flag count and confidence into it. verify means request proof of engagement before partnering.
Q: Does this work without a TikTok login? A: Yes. Only public profile data is scraped — no login, cookies, or session tokens required for the audit or the profile fetch behind it.
Q: How is this different from a free fake-follower checker?
A: Most free checkers return a single opaque number from one metric. This actor runs six independently weighted checks, benchmarks engagement against the creator's own follower tier (a mega-account and a micro-account have different healthy ranges), and ships the full signal breakdown with redFlags/greenFlags so you can see exactly why a creator scored the way they did.
Q: Can I audit an entire creator roster in one run?
A: Yes — pass an array to tiktokUsernames. Each profile is audited independently and billed per successful result; failures are skipped, not charged, and listed in summary.
Changelog
- 2026-08-14 — Added strict dataset output schema (
.actor/dataset_schema.json), agent-first documentation, MCP integration snippet, and clarified error semantics and sub-actor billing. No input or output field changes — fully backward compatible.