Overview
Finding the right TikTok creators for brand partnerships takes hours of manual scrolling. This workflow runs every Wednesday, searches target niches and hashtags on TikTok via Scavio, extracts creator profiles from top-performing content, scores them by engagement rate and follower count, and builds a ranked prospect list. It filters out creators you have already contacted and highlights micro-influencers (10K-100K followers) with high engagement. Scouting 10 niches costs about 10 credits ($0.05) per run.
Trigger
Cron Wednesday 10 AM UTC
Schedule
Weekly Wednesday 10 AM
Workflow Steps
Define Target Niches
Load the list of niche hashtags and keywords to search for new creators.
Search TikTok by Niche
For each niche keyword, call Scavio TikTok search to find top-performing recent content.
Extract Creator Profiles
From the search results, extract unique creator usernames and fetch their profile data.
Score and Filter Creators
Score each creator by engagement rate, follower count, and content relevance. Filter to micro-influencers.
Deduplicate Against Contact List
Remove creators you have already contacted or partnered with from the prospect list.
Export Ranked Prospects
Write the scored and ranked creator list to a JSON file for the partnerships team.
Python Implementation
import requests, os, json
from pathlib import Path
from datetime import date
API_KEY = os.environ["SCAVIO_API_KEY"]
TH = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
NICHES_FILE = Path("influencer_niches.json")
CONTACTED_FILE = Path("contacted_creators.json")
PROSPECTS_DIR = Path("influencer_prospects")
PROSPECTS_DIR.mkdir(exist_ok=True)
def search_niche(keyword: str) -> list:
resp = requests.post(
"https://api.scavio.dev/api/v1/tiktok/search",
headers=TH,
json={"query": keyword},
timeout=15,
)
resp.raise_for_status()
return resp.json().get("results", [])
def get_user_info(username: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/tiktok/user/info",
headers=TH,
json={"username": username},
timeout=15,
)
if resp.status_code == 200:
return resp.json()
return {}
def score_creator(info: dict) -> int:
followers = info.get("followers", 0)
engagement = info.get("engagement_rate", 0)
score = 0
if 10000 <= followers <= 100000:
score += 40 # micro-influencer sweet spot
elif followers > 100000:
score += 20
if engagement > 5:
score += 30
elif engagement > 2:
score += 15
if info.get("verified"):
score += 10
return score
def run():
niches = json.loads(NICHES_FILE.read_text())
contacted = set()
if CONTACTED_FILE.exists():
contacted = set(json.loads(CONTACTED_FILE.read_text()))
all_creators = {}
for niche in niches:
posts = search_niche(niche["keyword"])
for post in posts:
username = post.get("author", {}).get("username", "")
if username and username not in contacted and username not in all_creators:
info = get_user_info(username)
if info:
info["niche"] = niche["keyword"]
info["score"] = score_creator(info)
all_creators[username] = info
prospects = sorted(all_creators.values(), key=lambda c: c["score"], reverse=True)
out = PROSPECTS_DIR / f"prospects_{date.today()}.json"
out.write_text(json.dumps(prospects[:50], indent=2))
print(f"Discovered {len(prospects)} new creators on {date.today()}")
for p in prospects[:10]:
print(f" @{p.get('username', 'unknown')}: score={p['score']}, followers={p.get('followers', 0)}, niche={p['niche']}")
run()JavaScript Implementation
const TH = {'Authorization': 'Bearer '+process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const fs = await import('fs');
const PROSPECTS_DIR = 'influencer_prospects';
try { fs.mkdirSync(PROSPECTS_DIR); } catch {}
const niches = JSON.parse(fs.readFileSync('influencer_niches.json', 'utf8'));
let contacted = new Set();
try { contacted = new Set(JSON.parse(fs.readFileSync('contacted_creators.json', 'utf8'))); } catch {}
async function searchNiche(keyword) {
const r = await fetch('https://api.scavio.dev/api/v1/tiktok/search', {method:'POST', headers:TH, body:JSON.stringify({query:keyword})});
return (await r.json()).results || [];
}
async function getUserInfo(username) {
try {
const r = await fetch('https://api.scavio.dev/api/v1/tiktok/user/info', {method:'POST', headers:TH, body:JSON.stringify({username})});
if (r.ok) return r.json();
} catch {}
return null;
}
function scoreCreator(info) {
let score = 0;
const followers = info.followers || 0;
if (followers >= 10000 && followers <= 100000) score += 40;
else if (followers > 100000) score += 20;
if ((info.engagement_rate||0) > 5) score += 30;
else if ((info.engagement_rate||0) > 2) score += 15;
if (info.verified) score += 10;
return score;
}
const allCreators = {};
for (const niche of niches) {
const posts = await searchNiche(niche.keyword);
for (const post of posts) {
const username = (post.author||{}).username||'';
if (username && !contacted.has(username) && !allCreators[username]) {
const info = await getUserInfo(username);
if (info) { info.niche = niche.keyword; info.score = scoreCreator(info); allCreators[username] = info; }
}
}
}
const prospects = Object.values(allCreators).sort((a,b)=>b.score-a.score).slice(0,50);
const today = new Date().toISOString().split('T')[0];
fs.writeFileSync(PROSPECTS_DIR+'/prospects_'+today+'.json', JSON.stringify(prospects, null, 2));
console.log('Discovered '+prospects.length+' new creators');
prospects.slice(0,10).forEach(p => console.log(' @'+(p.username||'unknown')+': score='+p.score+', followers='+(p.followers||0)+', niche='+p.niche));Platforms Used
TikTok
Trending video, creator, and product discovery