tiktokinfluencervetting

TikTok Creator Vetting via API Before Paying $5K+

Vet TikTok influencers for $0.15/creator via API: engagement, bot detection, sentiment, audience overlap.

9 min

A full TikTok creator vet -- profile, recent posts, follower sample, comment sentiment -- costs about $0.025 via API and takes under 2 seconds. Brands spending $5K-50K on influencer campaigns without this check are gambling on vibes.

The Vetting Checklist

Five signals separate a worthwhile creator from a waste of budget: (1) follower-to-engagement ratio reveals bought followers, (2) recent post consistency shows active vs dormant accounts, (3) follower sample quality flags bot networks, (4) comment sentiment distinguishes real engagement from spam, (5) audience overlap with other campaign creators avoids paying twice for the same eyeballs.

Setup

Python
import requests, os
from collections import Counter

API_KEY = os.environ["SCAVIO_API_KEY"]
BASE = "https://api.scavio.dev/api/v1/tiktok"
HEADERS = {"Authorization": f"Bearer {API_KEY}",
           "Content-Type": "application/json"}

def tiktok_api(endpoint, payload):
    resp = requests.post(f"{BASE}/{endpoint}",
                         headers=HEADERS, json=payload)
    return resp.json()["data"]

Step 1: Profile Data

Python
def get_profile(username):
    data = tiktok_api("profile", {"username": username})
    user = data["user"]
    return {
        "username": username,
        "followers": user["follower_count"],
        "following": user["following_count"],
        "videos": user["aweme_count"],
        "total_likes": user["total_favorited"],
        "sec_uid": user["sec_uid"],
        "verified": user.get("verification_type", 0) > 0,
        "bio_link": bool(user.get("bio_url", "")),
    }
# 1 credit

Step 2: Engagement Rate From Recent Posts

Python
def analyze_posts(sec_uid, count=15):
    data = tiktok_api("user/posts",
        {"sec_user_id": sec_uid, "count": count, "sort_type": "0"})
    posts = data["aweme_list"]
    stats = []
    for p in posts:
        s = p["statistics"]
        stats.append({
            "views": s["play_count"],
            "likes": s["digg_count"],
            "comments": s["comment_count"],
            "shares": s["share_count"],
        })
    total_eng = sum(s["likes"] + s["comments"] + s["shares"] for s in stats)
    avg_views = sum(s["views"] for s in stats) / len(stats) if stats else 0
    return {
        "post_count": len(stats),
        "avg_views": int(avg_views),
        "avg_engagement": int(total_eng / len(stats)) if stats else 0,
        "view_variance": max(s["views"] for s in stats) / (avg_views or 1),
    }
# 1 credit

Step 3: Follower Quality Sample

Python
def check_followers(sec_uid, sample=50):
    data = tiktok_api("user/followers",
        {"sec_user_id": sec_uid, "count": sample})
    followers = data.get("followers", [])
    red_flags = 0
    for f in followers:
        # Bot signals: no avatar, no videos, suspicious username patterns
        has_no_videos = f.get("aweme_count", 0) == 0
        has_no_avatar = "default" in f.get("avatar_thumb", {}).get("url_list", [""])[0]
        if has_no_videos and has_no_avatar:
            red_flags += 1
    return {
        "sampled": len(followers),
        "suspicious": red_flags,
        "bot_rate": round(red_flags / len(followers) * 100, 1) if followers else 0,
    }
# 1 credit

Step 4: Comment Sentiment

Python
def check_comments(video_id, count=30):
    data = tiktok_api("video/comments",
        {"video_id": video_id, "count": count})
    comments = data.get("comments", [])
    # Simple heuristic: short generic comments are often bot-generated
    generic_phrases = {"nice", "cool", "wow", "amazing", "love it",
                       "fire", "follow me", "check my page"}
    generic_count = sum(1 for c in comments
        if c.get("text", "").lower().strip() in generic_phrases)
    return {
        "total_comments": len(comments),
        "generic_spam": generic_count,
        "spam_rate": round(generic_count / len(comments) * 100, 1) if comments else 0,
    }
# 1 credit

Full Vetting Pipeline

Python
def vet_creator(username):
    profile = get_profile(username)          # 1 credit
    posts = analyze_posts(profile["sec_uid"]) # 1 credit
    followers = check_followers(profile["sec_uid"])  # 1 credit
    # Get first video ID for comment check
    post_data = tiktok_api("user/posts",
        {"sec_user_id": profile["sec_uid"], "count": 1, "sort_type": "0"})
    video_id = post_data["aweme_list"][0]["aweme_id"]
    comments = check_comments(video_id)       # 1 credit

    engagement_rate = (posts["avg_engagement"] /
                       profile["followers"] * 100) if profile["followers"] else 0

    flags = []
    if engagement_rate < 1.0: flags.append("low engagement")
    if followers["bot_rate"] > 30: flags.append("high bot rate")
    if comments["spam_rate"] > 50: flags.append("spammy comments")
    verdict = "REVIEW" if flags else "PASS"

    return {"username": username, "followers": profile["followers"],
            "engagement_rate": round(engagement_rate, 2),
            "bot_rate": followers["bot_rate"],
            "spam_rate": comments["spam_rate"],
            "verdict": verdict, "flags": flags}

# Total: 5 credits = $0.025 per creator
# Vetting 200 creators for a campaign: $5.00
result = vet_creator("target_creator")
print(f"@{result['username']}: {result['verdict']}")
for flag in result["flags"]:
    print(f"  - {flag}")

Cost vs Alternatives

Vetting 200 creators with Scavio: $5. Manual VA research at $20/hour (10 creators/hour): $400. HypeAuditor or Modash subscription: $199-399/month. The API approach is 80-100x cheaper than manual and gives you raw data you can score however you want, not a black-box "authenticity score."