Overview
Finding the right TikTok creators for influencer campaigns requires manual platform browsing that does not scale. This workflow uses Scavio's TikTok API to search by keyword, analyze creator engagement patterns, score consistency and audience alignment, and output a ranked list ready for outreach.
Trigger
Weekly on Monday, or on-demand per campaign brief.
Schedule
Weekly
Workflow Steps
Define Campaign Keywords
Load the campaign brief with target keywords, minimum follower thresholds, and engagement requirements.
Search TikTok by Keyword
For each keyword, search TikTok via Scavio API to find videos and creators in the niche.
Aggregate Creator Stats
Group results by creator. Calculate average engagement rate, posting frequency, and total reach.
Score Creators
Score each creator on engagement rate, consistency, niche alignment, and follower-to-engagement ratio.
Export Ranked List
Output the top creators as a CSV or JSON with scores, contact info, and sample content.
Python Implementation
import requests, os, json
API_KEY = os.environ["SCAVIO_API_KEY"]
HT = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
def search_tiktok_creators(keyword: str) -> list:
resp = requests.post(
"https://api.scavio.dev/api/v1/tiktok/search",
headers=HT,
json={"keyword": keyword},
timeout=15,
)
return resp.json().get("videos", [])
def score_creators(keywords: list) -> list:
creators = {}
for kw in keywords:
videos = search_tiktok_creators(kw)
for v in videos:
author = v.get("author", {})
uid = author.get("unique_id", "unknown")
if uid not in creators:
creators[uid] = {
"username": uid,
"nickname": author.get("nickname", ""),
"videos": 0,
"total_plays": 0,
"total_likes": 0,
"total_comments": 0,
}
stats = v.get("stats", {})
creators[uid]["videos"] += 1
creators[uid]["total_plays"] += stats.get("play_count", 0)
creators[uid]["total_likes"] += stats.get("digg_count", 0)
creators[uid]["total_comments"] += stats.get("comment_count", 0)
# Score: engagement rate + consistency
for c in creators.values():
if c["total_plays"] > 0:
c["engagement_rate"] = round((c["total_likes"] + c["total_comments"]) / c["total_plays"] * 100, 2)
else:
c["engagement_rate"] = 0
c["score"] = c["engagement_rate"] * 0.5 + c["videos"] * 10 * 0.3 + (c["total_plays"] / 1000) * 0.2
return sorted(creators.values(), key=lambda x: x["score"], reverse=True)
results = score_creators(["skincare routine", "skincare tips", "skincare products 2026"])
for r in results[:10]:
print(f"@{r['username']}: {r['total_plays']:,} plays, {r['engagement_rate']}% engagement, score: {r['score']:.0f}")JavaScript Implementation
const HT = {'Authorization': 'Bearer '+process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function searchTiktokCreators(keyword) {
const r = await fetch('https://api.scavio.dev/api/v1/tiktok/search', {method:'POST', headers:HT, body:JSON.stringify({keyword})});
return (await r.json()).videos || [];
}
async function scoreCreators(keywords) {
const creators = {};
for (const kw of keywords) {
for (const v of await searchTiktokCreators(kw)) {
const uid = v.author?.unique_id || 'unknown';
if (!creators[uid]) creators[uid] = {username:uid, nickname:v.author?.nickname||'', videos:0, totalPlays:0, totalLikes:0, totalComments:0};
creators[uid].videos++;
creators[uid].totalPlays += v.stats?.play_count||0;
creators[uid].totalLikes += v.stats?.digg_count||0;
creators[uid].totalComments += v.stats?.comment_count||0;
}
}
for (const c of Object.values(creators)) {
c.engagementRate = c.totalPlays > 0 ? Math.round((c.totalLikes+c.totalComments)/c.totalPlays*10000)/100 : 0;
c.score = c.engagementRate*0.5 + c.videos*10*0.3 + (c.totalPlays/1000)*0.2;
}
return Object.values(creators).sort((a,b)=>b.score-a.score);
}
const results = await scoreCreators(['skincare routine', 'skincare tips', 'skincare products 2026']);
for (const r of results.slice(0,10)) console.log('@'+r.username+': '+r.totalPlays+' plays, '+r.engagementRate+'% engagement, score: '+Math.round(r.score));Platforms Used
TikTok
Trending video, creator, and product discovery