Overview
This workflow scans TikTok for creators in target niches, fetches their profile data, and scores them by engagement quality and follower range. The output is a ranked shortlist of creators suitable for brand partnerships, with data that influencer marketing platforms charge $500-2,000/mo to provide.
Trigger
Cron schedule (every Wednesday at 10:00 AM UTC)
Schedule
Runs every Wednesday at 10:00 AM UTC
Workflow Steps
Load niche keywords and criteria
Read target niche keywords, preferred follower range, and minimum video count from configuration.
Search TikTok for niche creators
Call Scavio TikTok search/users endpoint for each niche keyword to discover relevant creators.
Fetch creator profiles
Get detailed profile data (followers, video count, bio) for each discovered creator.
Score and filter creators
Score creators by follower-to-video ratio, filter by follower range, and remove accounts with suspicious metrics.
Output ranked shortlist
Save the top creators as a ranked shortlist with all profile data for the marketing team to review.
Python Implementation
import requests
import json
from pathlib import Path
from datetime import datetime
API_KEY = "your_scavio_api_key"
BASE_URL = "https://api.scavio.dev/api/v1/tiktok"
NICHES = ["home fitness", "vegan cooking", "budget travel"]
MIN_FOLLOWERS = 10000
MAX_FOLLOWERS = 500000
MIN_VIDEOS = 20
def search_users(query: str) -> list[dict]:
res = requests.post(
f"{BASE_URL}/search/users",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"query": query},
timeout=15,
)
res.raise_for_status()
return res.json().get("users", [])
def get_profile(username: str) -> dict:
res = requests.post(
f"{BASE_URL}/profile",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"username": username},
timeout=15,
)
res.raise_for_status()
return res.json()
def run():
all_creators = []
seen = set()
for niche in NICHES:
users = search_users(niche)
for user in users[:15]:
username = user.get("username", "")
if not username or username in seen:
continue
seen.add(username)
profile = get_profile(username)
followers = profile.get("followers", 0)
videos = profile.get("video_count", 0)
if MIN_FOLLOWERS <= followers <= MAX_FOLLOWERS and videos >= MIN_VIDEOS:
all_creators.append({
"username": username,
"niche": niche,
"followers": followers,
"videos": videos,
"bio": profile.get("bio", "")[:120],
"score": round(followers / max(videos, 1)), # followers per video as quality proxy
})
all_creators.sort(key=lambda x: x["score"], reverse=True)
date = datetime.utcnow().strftime("%Y-%m-%d")
Path(f"creator_scan_{date}.json").write_text(json.dumps(all_creators, indent=2))
print(f"Found {len(all_creators)} qualified creators across {len(NICHES)} niches")
for c in all_creators[:10]:
print(f" @{c['username']} ({c['niche']}): {c['followers']:,} followers, {c['videos']} videos")
if __name__ == "__main__":
run()JavaScript Implementation
const API_KEY = "your_scavio_api_key";
const BASE_URL = "https://api.scavio.dev/api/v1/tiktok";
async function searchUsers(query) {
const res = await fetch(`${BASE_URL}/search/users`, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, "content-type": "application/json" },
body: JSON.stringify({ query }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
return (await res.json()).users ?? [];
}
async function getProfile(username) {
const res = await fetch(`${BASE_URL}/profile`, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, "content-type": "application/json" },
body: JSON.stringify({ username }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
return res.json();
}
const NICHES = ["home fitness", "vegan cooking"];
const creators = [];
for (const niche of NICHES) {
const users = await searchUsers(niche);
for (const u of users.slice(0, 15)) {
const profile = await getProfile(u.username ?? "");
const followers = profile.followers ?? 0;
if (followers >= 10000 && followers <= 500000 && (profile.video_count ?? 0) >= 20) {
creators.push({ username: u.username, niche, followers, videos: profile.video_count ?? 0 });
}
}
}
creators.sort((a, b) => b.followers - a.followers);
console.log(`Found ${creators.length} creators`);
for (const c of creators.slice(0, 10)) console.log(` @${c.username}: ${c.followers.toLocaleString()} followers`);Platforms Used
TikTok
Trending video, creator, and product discovery