Overview
This workflow pulls TikTok profile stats for a list of tracked accounts every week to build longitudinal analytics dashboards. For each account, it captures follower count, total likes, and recent post engagement to compute week-over-week growth rates. Social media managers use this to spot accounts gaining or losing momentum without paying for expensive social listening platforms.
Trigger
Cron schedule (every Monday at 10:00 AM UTC)
Schedule
Runs every Monday at 10:00 AM UTC
Workflow Steps
Load tracked accounts list
Read the list of TikTok usernames being tracked from configuration or database.
Pull profile stats for each account
Call Scavio TikTok /profile endpoint for each username to get current follower count and total likes.
Compare against previous week
Load last week's stats and compute follower growth rate and engagement changes.
Flag notable changes
Identify accounts with growth rates above or below thresholds that warrant attention.
Save weekly snapshot
Store this week's stats for future comparisons and append to the historical trend dataset.
Python Implementation
import requests
import json
from pathlib import Path
from datetime import datetime
API_KEY = "your_scavio_api_key"
TIKTOK_URL = "https://api.scavio.dev/api/v1/tiktok"
TRACKED_ACCOUNTS = ["account1", "account2", "account3", "account4", "account5"]
GROWTH_THRESHOLD = 0.05 # 5% weekly growth flags attention
def get_profile_stats(username: str) -> dict:
res = requests.post(
f"{TIKTOK_URL}/profile",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"username": username},
timeout=15,
)
res.raise_for_status()
data = res.json()
return {
"username": username,
"followers": data.get("followers", 0),
"following": data.get("following", 0),
"total_likes": data.get("likes", 0),
"bio": data.get("bio", ""),
}
def run():
date = datetime.utcnow().strftime("%Y-%m-%d")
snapshots_dir = Path("tiktok_analytics")
snapshots_dir.mkdir(exist_ok=True)
# Load previous week
prev_files = sorted(snapshots_dir.glob("snapshot_*.json"))
previous = {}
if prev_files:
prev_data = json.loads(prev_files[-1].read_text())
previous = {a["username"]: a for a in prev_data.get("accounts", [])}
accounts = []
notable = []
for username in TRACKED_ACCOUNTS:
stats = get_profile_stats(username)
prev = previous.get(username, {})
prev_followers = prev.get("followers", 0)
if prev_followers > 0:
growth = (stats["followers"] - prev_followers) / prev_followers
stats["follower_growth_pct"] = round(growth * 100, 2)
stats["follower_delta"] = stats["followers"] - prev_followers
if abs(growth) >= GROWTH_THRESHOLD:
notable.append(username)
else:
stats["follower_growth_pct"] = None
stats["follower_delta"] = None
accounts.append(stats)
snapshot = {"date": date, "accounts": accounts, "notable_changes": notable}
snapshots_dir.joinpath(f"snapshot_{date}.json").write_text(json.dumps(snapshot, indent=2))
print(f"TikTok Analytics {date}: {len(accounts)} accounts tracked")
for a in accounts:
growth_str = f"{a['follower_growth_pct']:+.1f}%" if a["follower_growth_pct"] is not None else "new"
flag = " ***" if a["username"] in notable else ""
print(f" @{a['username']}: {a['followers']:,} followers ({growth_str}){flag}")
if __name__ == "__main__":
run()JavaScript Implementation
const API_KEY = "your_scavio_api_key";
const TIKTOK_URL = "https://api.scavio.dev/api/v1/tiktok";
const ACCOUNTS = ["account1", "account2", "account3"];
async function getProfile(username) {
const res = await fetch(`${TIKTOK_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}`);
const data = await res.json();
return { username, followers: data.followers ?? 0, totalLikes: data.likes ?? 0 };
}
const stats = [];
for (const u of ACCOUNTS) stats.push(await getProfile(u));
stats.sort((a, b) => b.followers - a.followers);
for (const s of stats) console.log(`@${s.username}: ${s.followers.toLocaleString()} followers, ${s.totalLikes.toLocaleString()} likes`);Platforms Used
TikTok
Trending video, creator, and product discovery