Overview
Influencer marketing teams review creator profiles manually, spending hours per candidate. This workflow automates daily vetting of creator candidates: pull profiles, analyze engagement rates, check posting consistency, and flag red flags. Vet 20 creators daily for $3 (profile + recent posts per creator).
Trigger
Daily cron at 9 AM UTC or triggered when new creators are added to the candidate list.
Schedule
Daily at 9 AM UTC
Workflow Steps
Load Creator Candidate List
Read the list of TikTok usernames to vet from the database or spreadsheet. Each entry includes the creator username and the campaign they are being considered for.
Pull Creator Profiles
Fetch each creator's profile via TikTok API. Extract follower count, total likes, video count, and bio information.
Analyze Recent Content
Pull the last 20 posts for each creator. Calculate average views, engagement rate, and posting frequency.
Score and Flag Issues
Score each creator on engagement rate, consistency, and follower-to-engagement ratio. Flag potential fake followers or inconsistent posting.
Generate Vetting Report
Compile a ranked report of all vetted creators with scores, flags, and recommendations for the marketing team.
Python Implementation
import requests, os
API_KEY = os.environ["SCAVIO_API_KEY"]
TT_H = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
def vet_creator(username: str) -> dict:
# Profile
profile = requests.post(
"https://api.scavio.dev/api/v1/tiktok/profile",
headers=TT_H, json={"username": username}, timeout=15,
).json()
stats = profile.get("user_info", {}).get("stats", {})
followers = stats.get("follower_count", 0)
# Recent posts
posts = requests.post(
"https://api.scavio.dev/api/v1/tiktok/user-posts",
headers=TT_H, json={"username": username}, timeout=15,
).json().get("videos", [])
avg_views = sum(v.get("stats", {}).get("play_count", 0) for v in posts) / max(len(posts), 1)
engagement = avg_views / max(followers, 1)
flags = []
if engagement < 0.01:
flags.append("low_engagement")
if followers > 100000 and engagement < 0.005:
flags.append("possible_fake_followers")
return {"username": username, "followers": followers, "avg_views": int(avg_views),
"engagement_pct": round(engagement * 100, 2), "posts_analyzed": len(posts), "flags": flags,
"score": "pass" if not flags else "review"}
candidates = ["creator1", "creator2", "creator3"]
for c in candidates:
result = vet_creator(c)
print(f"@{result['username']}: {result['score']} | {result['engagement_pct']}% engagement | flags: {result['flags']}")JavaScript Implementation
const H = {'Authorization': 'Bearer ' + process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function vetCreator(username) {
const pr = await fetch('https://api.scavio.dev/api/v1/tiktok/profile', {method:'POST', headers:H, body:JSON.stringify({username})});
const p = await pr.json();
const followers = p.user_info?.stats?.follower_count||0;
const vr = await fetch('https://api.scavio.dev/api/v1/tiktok/user-posts', {method:'POST', headers:H, body:JSON.stringify({username})});
const posts = (await vr.json()).videos||[];
const avgViews = posts.reduce((s,v)=>s+(v.stats?.play_count||0),0)/Math.max(posts.length,1);
const engagement = avgViews/Math.max(followers,1);
const flags = [];
if (engagement<0.01) flags.push('low_engagement');
if (followers>100000 && engagement<0.005) flags.push('possible_fake_followers');
return {username, followers, avgViews:Math.round(avgViews), engagement:(engagement*100).toFixed(2), flags, score:flags.length?'review':'pass'};
}
const r = await vetCreator('example_creator');
console.log('@'+r.username+': '+r.score+' | '+r.engagement+'% | flags: '+r.flags.join(','));Platforms Used
TikTok
Trending video, creator, and product discovery