Workflow

Weekly TikTok Influencer Discovery

Discover new TikTok creators in your target niches weekly. Automate influencer scouting with engagement-based filtering and scoring.

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

1

Define Target Niches

Load the list of niche hashtags and keywords to search for new creators.

2

Search TikTok by Niche

For each niche keyword, call Scavio TikTok search to find top-performing recent content.

3

Extract Creator Profiles

From the search results, extract unique creator usernames and fetch their profile data.

4

Score and Filter Creators

Score each creator by engagement rate, follower count, and content relevance. Filter to micro-influencers.

5

Deduplicate Against Contact List

Remove creators you have already contacted or partnered with from the prospect list.

6

Export Ranked Prospects

Write the scored and ranked creator list to a JSON file for the partnerships team.

Python Implementation

Python
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

JavaScript
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

Frequently Asked Questions

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.

This workflow uses a cron wednesday 10 am utc. Weekly Wednesday 10 AM.

This workflow uses the following Scavio platforms: tiktok. Each platform is called via the same unified API endpoint.

Yes. Scavio's free tier includes 250 credits per month with no credit card required. That is enough to test and validate this workflow before scaling it.

Weekly TikTok Influencer Discovery

Discover new TikTok creators in your target niches weekly. Automate influencer scouting with engagement-based filtering and scoring.