Resumen
Este flujo de trabajo genera un semanal inteligencia competitiva informe for up to 5 TikTok competidor cuentas. For cada competidor, it pulls their perfil stats (followers, following, likes) y their reciente publicaciones con engagement datos. El salida es un structured informe ese marketing teams usar to referencia their TikTok rendimiento, spot contenido tendencias competidores son riding, y identificar gaps in their own estrategia.
Desencadenador
Cron programar (cada Monday at 9:00 AM UTC)
Programación
Ejecuta cada Monday at 9:00 AM UTC
Pasos del flujo de trabajo
Cargar competidor cuenta lista
Leer el lista of competidor TikTok usernames de configuracion.
Pull perfil stats for cada competidor
Call Scavio TikTok /perfil endpoint for cada username to obtener follower conteo, total likes, y bio.
Pull reciente publicaciones for cada competidor
Use el sec_user_id de perfil datos to call /usuario/publicaciones y retrieve reciente video rendimiento.
Compute engagement referencias
Calcular promedio views, likes, y comentarios per video for cada competidor to establish referencias.
Generar competitive informe
Compile todos datos en un structured informe semanal con week-over-week follower cambios y top-performing contenido.
Implementacion en Python
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"
COMPETITORS = ["competitor1", "competitor2", "competitor3", "competitor4", "competitor5"]
def get_profile(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()
return res.json()
def get_recent_posts(sec_user_id: str) -> list[dict]:
res = requests.post(
f"{TIKTOK_URL}/user/posts",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"sec_user_id": sec_user_id},
timeout=15,
)
res.raise_for_status()
return res.json().get("videos", [])
def run():
date = datetime.utcnow().strftime("%Y-%m-%d")
reports = []
for username in COMPETITORS:
profile = get_profile(username)
sec_uid = profile.get("sec_uid", "")
stats = {
"username": username,
"followers": profile.get("followers", 0),
"following": profile.get("following", 0),
"total_likes": profile.get("likes", 0),
"bio": profile.get("bio", ""),
}
posts = get_recent_posts(sec_uid) if sec_uid else []
post_data = []
for video in posts[:20]:
post_data.append({
"title": video.get("title", "")[:100],
"views": video.get("views", 0),
"likes": video.get("likes", 0),
"comments": video.get("comments", 0),
"shares": video.get("shares", 0),
})
avg_views = sum(p["views"] for p in post_data) / len(post_data) if post_data else 0
avg_likes = sum(p["likes"] for p in post_data) / len(post_data) if post_data else 0
reports.append({
**stats,
"posts_analyzed": len(post_data),
"avg_views": round(avg_views),
"avg_likes": round(avg_likes),
"top_post": max(post_data, key=lambda x: x["views"]) if post_data else None,
"recent_posts": post_data[:5],
})
output = {"date": date, "competitors": len(COMPETITORS), "reports": reports}
Path(f"tiktok_competitor_{date}.json").write_text(json.dumps(output, indent=2))
print(f"TikTok Competitor Report {date}")
for r in reports:
print(f" @{r['username']}: {r['followers']:,} followers, avg {r['avg_views']:,} views/video")
if __name__ == "__main__":
run()Implementacion en JavaScript
const API_KEY = "your_scavio_api_key";
const TIKTOK_URL = "https://api.scavio.dev/api/v1/tiktok";
const COMPETITORS = ["competitor1", "competitor2", "competitor3"];
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}`);
return res.json();
}
async function getRecentPosts(secUserId) {
const res = await fetch(`${TIKTOK_URL}/user/posts`, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, "content-type": "application/json" },
body: JSON.stringify({ sec_user_id: secUserId }),
});
if (!res.ok) return [];
return (await res.json()).videos ?? [];
}
for (const username of COMPETITORS) {
const profile = await getProfile(username);
const posts = await getRecentPosts(profile.sec_uid ?? "");
const avgViews = posts.length ? Math.round(posts.reduce((s, v) => s + (v.views ?? 0), 0) / posts.length) : 0;
console.log(`@${username}: ${(profile.followers ?? 0).toLocaleString()} followers, avg ${avgViews.toLocaleString()} views`);
}Plataformas utilizadas
TikTok
Descubrimiento de videos, creadores y productos en tendencia