tiktokinfluencervetting

TikTok Influencer Vetting: Multi-Signal Approach

Single-signal vetting (follower count) wastes brand deals. Multi-signal checks engagement, consistency, niche relevance, follower quality. Score creators 0-100.

8 min

Single-signal influencer vetting (follower count only) leads to wasted brand deals. Multi-signal vetting checks follower authenticity, engagement patterns, content consistency, audience overlap with existing partners, and comment sentiment. API-based analysis covers all signals in seconds per creator, replacing hours of manual review.

The five vetting signals

  1. Engagement rate: likes + comments + shares / views (healthy: 2-8%)
  2. Engagement consistency: standard deviation across recent posts
  3. Content relevance: do recent posts match your brand niche?
  4. Follower quality: following-to-follower ratio and growth patterns
  5. Comment sentiment: real comments vs generic bot responses

Multi-signal vetting pipeline

Python
import requests

def vet_influencer(username: str, brand_niche: str) -> dict:
    """Multi-signal influencer vetting."""
    # Signal 1 & 4: Profile metrics
    profile_resp = requests.post(
        "https://api.scavio.dev/api/v1/tiktok/user/info",
        headers={"Authorization": "Bearer YOUR_KEY"},
        json={"username": username}
    )
    profile = profile_resp.json().get("data", {}).get("user", {})
    stats = profile.get("stats", {})
    followers = stats.get("followerCount", 0)
    following = stats.get("followingCount", 0)

    # Signal 2 & 3: Post engagement and content
    posts_resp = requests.post(
        "https://api.scavio.dev/api/v1/tiktok/user/posts",
        headers={"Authorization": "Bearer YOUR_KEY"},
        json={"username": username, "count": 20}
    )
    posts = posts_resp.json().get("data", {}).get("videos", [])

    engagement_rates = []
    niche_match_count = 0

    for post in posts:
        s = post.get("stats", {})
        views = s.get("playCount", 0)
        if views > 0:
            eng = (s.get("diggCount", 0) + s.get("commentCount", 0) +
                   s.get("shareCount", 0)) / views * 100
            engagement_rates.append(eng)

        desc = post.get("desc", "").lower()
        if brand_niche.lower() in desc:
            niche_match_count += 1

    avg_eng = sum(engagement_rates) / len(engagement_rates) if engagement_rates else 0
    eng_std = (
        sum((x - avg_eng) ** 2 for x in engagement_rates) / len(engagement_rates)
    ) ** 0.5 if len(engagement_rates) > 1 else 0

    # Score (0-100)
    score = 0
    score += min(30, avg_eng * 5)  # Engagement rate (max 30)
    score += min(20, 20 - eng_std * 2)  # Consistency (max 20)
    score += min(20, niche_match_count * 4)  # Niche relevance (max 20)
    score += min(15, 15 if following < followers * 0.3 else 5)  # Follower quality
    score += min(15, 15 if followers > 5000 else followers / 5000 * 15)  # Reach

    return {
        "username": username,
        "followers": followers,
        "avg_engagement": round(avg_eng, 2),
        "engagement_consistency": round(eng_std, 2),
        "niche_relevance": f"{niche_match_count}/{len(posts)} posts",
        "score": round(score),
        "recommendation": "PROCEED" if score >= 60 else "CAUTION" if score >= 40 else "SKIP"
    }

result = vet_influencer("creator_handle", "skincare")
print(f"Score: {result['score']}/100 - {result['recommendation']}")

Compare multiple creators

JavaScript
// Rank creators by multi-signal score
async function rankCreators(usernames, niche) {
  const scored = [];

  for (const username of usernames) {
    const profileResp = await fetch(
      "https://api.scavio.dev/api/v1/tiktok/user/info",
      {
        method: "POST",
        headers: {
          "Authorization": "Bearer " + process.env.SCAVIO_KEY,
          "Content-Type": "application/json"
        },
        body: JSON.stringify({ username })
      }
    );
    const profile = await profileResp.json();
    const stats = profile.data?.user?.stats || {};

    const postsResp = await fetch(
      "https://api.scavio.dev/api/v1/tiktok/user/posts",
      {
        method: "POST",
        headers: {
          "Authorization": "Bearer " + process.env.SCAVIO_KEY,
          "Content-Type": "application/json"
        },
        body: JSON.stringify({ username, count: 10 })
      }
    );
    const postsData = await postsResp.json();
    const posts = postsData.data?.videos || [];

    const avgViews = posts.reduce(
      (sum, p) => sum + (p.stats?.playCount || 0), 0
    ) / (posts.length || 1);

    scored.push({
      username,
      followers: stats.followerCount || 0,
      avgViews: Math.round(avgViews),
      estimatedCPV: avgViews > 0
        ? (500 / avgViews * 1000).toFixed(2)  // Assuming $500 deal
        : "N/A"
    });
  }

  return scored.sort((a, b) => b.avgViews - a.avgViews);
}

Cost per vetting

Profile + posts = 2 API calls = $0.01 per creator. Vetting 50 creators for a campaign: $0.50. Compare to influencer platforms (Upfluence, Grin) at $500-2,000/month with less granular data.