Workflow

TikTok Creator Scan Workflow

Automated TikTok creator discovery for brand partnerships. Scan niche keywords, fetch profiles, and score by engagement quality.

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

1

Load niche keywords and criteria

Read target niche keywords, preferred follower range, and minimum video count from configuration.

2

Search TikTok for niche creators

Call Scavio TikTok search/users endpoint for each niche keyword to discover relevant creators.

3

Fetch creator profiles

Get detailed profile data (followers, video count, bio) for each discovered creator.

4

Score and filter creators

Score creators by follower-to-video ratio, filter by follower range, and remove accounts with suspicious metrics.

5

Output ranked shortlist

Save the top creators as a ranked shortlist with all profile data for the marketing team to review.

Python Implementation

Python
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

JavaScript
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

Frequently Asked Questions

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.

This workflow uses a cron schedule (every wednesday at 10:00 am utc). Runs every Wednesday at 10:00 AM UTC.

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.

TikTok Creator Scan Workflow

Automated TikTok creator discovery for brand partnerships. Scan niche keywords, fetch profiles, and score by engagement quality.