Overview
Brands sign TikTok creators based on follower counts alone, then get burned by bot followers, controversial content, or engagement manipulation. This workflow vets creators daily: pull their recent posts, analyze engagement rates, check comment sentiment, and flag brand safety risks. Run it before committing any sponsorship budget. Cost: about $0.35 per full creator audit.
Trigger
Daily at 9 AM, or on-demand per creator evaluation batch.
Schedule
Daily 9 AM
Workflow Steps
Load Creator Shortlist
Read the list of TikTok creators under evaluation from a spreadsheet or JSON file.
Fetch Creator Profiles
Pull each creator's profile data: follower count, following count, total likes, and bio.
Analyze Recent Posts
Fetch last 20 posts per creator. Calculate average views, likes, and comment counts.
Check Engagement Quality
Compare engagement rate against niche averages. Flag creators with suspicious patterns (high followers, low engagement).
Output Vetting Report
Generate a per-creator scorecard with engagement rate, follower quality estimate, and brand safety flags.
Python Implementation
import requests, os, json
API_KEY = os.environ["SCAVIO_API_KEY"]
TH = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
CREATORS = ["creator_username_1", "creator_username_2", "creator_username_3"]
def fetch_creator_profile(username: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/tiktok/profile",
headers=TH,
json={"username": username},
timeout=15,
)
return resp.json()
def fetch_creator_posts(username: str) -> list:
resp = requests.post(
"https://api.scavio.dev/api/v1/tiktok/user-posts",
headers=TH,
json={"username": username, "count": 20},
timeout=15,
)
return resp.json().get("posts", [])
def vet_creator(username: str) -> dict:
profile = fetch_creator_profile(username)
posts = fetch_creator_posts(username)
followers = profile.get("followers", 0)
total_likes = profile.get("likes", 0)
if posts:
avg_views = sum(p.get("views", 0) for p in posts) / len(posts)
avg_likes = sum(p.get("likes", 0) for p in posts) / len(posts)
avg_comments = sum(p.get("comments", 0) for p in posts) / len(posts)
engagement_rate = (avg_likes + avg_comments) / max(followers, 1) * 100
else:
avg_views = avg_likes = avg_comments = engagement_rate = 0
flags = []
if followers > 100000 and engagement_rate < 1.0:
flags.append("LOW_ENGAGEMENT_FOR_SIZE")
if avg_views < followers * 0.01:
flags.append("LOW_VIEW_RATIO")
if len(posts) < 5:
flags.append("INACTIVE")
return {
"username": username,
"followers": followers,
"engagement_rate": round(engagement_rate, 2),
"avg_views": int(avg_views),
"avg_likes": int(avg_likes),
"post_count": len(posts),
"flags": flags,
"verdict": "PASS" if not flags else "REVIEW",
}
for creator in CREATORS:
report = vet_creator(creator)
status = "PASS" if report["verdict"] == "PASS" else "REVIEW"
print(f"[{status}] @{report['username']}: {report['followers']} followers, {report['engagement_rate']}% engagement, flags={report['flags']}")JavaScript Implementation
const TH = {'Authorization': 'Bearer '+process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const CREATORS = ['creator_username_1', 'creator_username_2', 'creator_username_3'];
async function fetchCreatorProfile(username) {
const r = await fetch('https://api.scavio.dev/api/v1/tiktok/profile', {method:'POST', headers:TH, body:JSON.stringify({username})});
return r.json();
}
async function fetchCreatorPosts(username) {
const r = await fetch('https://api.scavio.dev/api/v1/tiktok/user-posts', {method:'POST', headers:TH, body:JSON.stringify({username, count:20})});
return (await r.json()).posts || [];
}
async function vetCreator(username) {
const profile = await fetchCreatorProfile(username);
const posts = await fetchCreatorPosts(username);
const followers = profile.followers || 0;
let avgViews=0, avgLikes=0, avgComments=0, engagementRate=0;
if (posts.length) {
avgViews = posts.reduce((s,p)=>s+(p.views||0),0)/posts.length;
avgLikes = posts.reduce((s,p)=>s+(p.likes||0),0)/posts.length;
avgComments = posts.reduce((s,p)=>s+(p.comments||0),0)/posts.length;
engagementRate = (avgLikes+avgComments)/Math.max(followers,1)*100;
}
const flags = [];
if (followers>100000 && engagementRate<1.0) flags.push('LOW_ENGAGEMENT_FOR_SIZE');
if (avgViews<followers*0.01) flags.push('LOW_VIEW_RATIO');
if (posts.length<5) flags.push('INACTIVE');
return {username, followers, engagementRate:Math.round(engagementRate*100)/100, avgViews:Math.round(avgViews), postCount:posts.length, flags, verdict:flags.length?'REVIEW':'PASS'};
}
for (const creator of CREATORS) {
const report = await vetCreator(creator);
console.log('['+report.verdict+'] @'+report.username+': '+report.followers+' followers, '+report.engagementRate+'% engagement, flags='+JSON.stringify(report.flags));
}Platforms Used
TikTok
Trending video, creator, and product discovery