Resumen
TikTok analytics inside el app son limited y reset frequently. Este flujo de trabajo ejecuta cada Sunday tarde, pulls your reciente publicaciones via el Scavio TikTok API, calculates semanal rendimiento metricas (views, likes, comentarios, shares, engagement tasa), identifies your top y bottom performers, y exporta un structured informe. Use it to spot cual contenido formats funciona, cuando your audiencia es mas active, y que to double down on next semana. One semanal ejecutar costs about 2-3 credits ($0.01-$0.015).
Desencadenador
Cron Sunday 8 PM UTC
Programación
Semanal Sunday 8 PM
Pasos del flujo de trabajo
Obtener Reciente Posts
Call Scavio TikTok API to retrieve todos publicaciones published in el past 7 dias for your cuenta.
Calcular Rendimiento Metricas
Compute total y promedio views, likes, comentarios, shares, y engagement tasa for el semana.
Clasificar Contenido Rendimiento
Sort publicaciones by engagement tasa y views to identificar top 3 y bottom 3 performers.
Comparar Against Prior Week
Cargar last week's informe y compute week-over-week deltas for todos metricas clave.
Exportar Semanal Informe
Escribir un structured JSON informe con metricas, posicionamientos, y recommendations.
Implementacion en Python
import requests, os, json
from pathlib import Path
from datetime import date, timedelta
API_KEY = os.environ["SCAVIO_API_KEY"]
TH = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
USERNAME = "your_tiktok_username"
REPORTS_DIR = Path("tiktok_reports")
REPORTS_DIR.mkdir(exist_ok=True)
def fetch_user_posts(username: str) -> list:
resp = requests.post(
"https://api.scavio.dev/api/v1/tiktok/user/posts",
headers=TH,
json={"username": username},
timeout=15,
)
resp.raise_for_status()
return resp.json().get("posts", [])
def calculate_metrics(posts: list) -> dict:
if not posts:
return {"total_views": 0, "total_likes": 0, "avg_engagement": 0}
total_views = sum(p.get("views", 0) for p in posts)
total_likes = sum(p.get("likes", 0) for p in posts)
total_comments = sum(p.get("comments", 0) for p in posts)
total_shares = sum(p.get("shares", 0) for p in posts)
avg_engagement = (total_likes + total_comments) / max(total_views, 1) * 100
return {
"post_count": len(posts),
"total_views": total_views,
"total_likes": total_likes,
"total_comments": total_comments,
"total_shares": total_shares,
"avg_engagement_rate": round(avg_engagement, 2),
}
def run_review():
posts = fetch_user_posts(USERNAME)
metrics = calculate_metrics(posts)
ranked = sorted(posts, key=lambda p: p.get("likes", 0) + p.get("comments", 0), reverse=True)
top_3 = [{"url": p.get("url", ""), "likes": p.get("likes", 0), "views": p.get("views", 0)} for p in ranked[:3]]
bottom_3 = [{"url": p.get("url", ""), "likes": p.get("likes", 0), "views": p.get("views", 0)} for p in ranked[-3:]]
prev_file = REPORTS_DIR / f"report_{date.today() - timedelta(days=7)}.json"
wow_delta = {}
if prev_file.exists():
prev = json.loads(prev_file.read_text())
for key in ["total_views", "total_likes", "total_comments"]:
prev_val = prev.get("metrics", {}).get(key, 0)
wow_delta[key] = metrics[key] - prev_val
report = {"date": str(date.today()), "metrics": metrics, "top_3": top_3, "bottom_3": bottom_3, "wow_delta": wow_delta}
out = REPORTS_DIR / f"report_{date.today()}.json"
out.write_text(json.dumps(report, indent=2))
print(f"Weekly review: {metrics['post_count']} posts, {metrics['total_views']} views, {metrics['avg_engagement_rate']}% engagement")
return report
run_review()Implementacion en JavaScript
const TH = {'Authorization': 'Bearer '+process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const fs = await import('fs');
const USERNAME = 'your_tiktok_username';
const REPORTS_DIR = 'tiktok_reports';
try { fs.mkdirSync(REPORTS_DIR); } catch {}
async function fetchUserPosts(username) {
const r = await fetch('https://api.scavio.dev/api/v1/tiktok/user/posts', {method:'POST', headers:TH, body:JSON.stringify({username})});
return (await r.json()).posts || [];
}
const posts = await fetchUserPosts(USERNAME);
const totalViews = posts.reduce((s,p)=>s+(p.views||0),0);
const totalLikes = posts.reduce((s,p)=>s+(p.likes||0),0);
const totalComments = posts.reduce((s,p)=>s+(p.comments||0),0);
const totalShares = posts.reduce((s,p)=>s+(p.shares||0),0);
const avgEngagement = totalViews > 0 ? Math.round((totalLikes+totalComments)/totalViews*10000)/100 : 0;
const metrics = {postCount:posts.length, totalViews, totalLikes, totalComments, totalShares, avgEngagementRate:avgEngagement};
const ranked = [...posts].sort((a,b)=>(b.likes||0)+(b.comments||0)-(a.likes||0)-(a.comments||0));
const top3 = ranked.slice(0,3).map(p=>({url:p.url||'', likes:p.likes||0, views:p.views||0}));
const bottom3 = ranked.slice(-3).map(p=>({url:p.url||'', likes:p.likes||0, views:p.views||0}));
const today = new Date().toISOString().split('T')[0];
const prevDate = new Date(Date.now()-7*86400000).toISOString().split('T')[0];
let wowDelta = {};
try {
const prev = JSON.parse(fs.readFileSync(REPORTS_DIR+'/report_'+prevDate+'.json', 'utf8'));
wowDelta = {totalViews: totalViews-(prev.metrics.totalViews||0), totalLikes: totalLikes-(prev.metrics.totalLikes||0)};
} catch {}
const report = {date:today, metrics, top3, bottom3, wowDelta};
fs.writeFileSync(REPORTS_DIR+'/report_'+today+'.json', JSON.stringify(report, null, 2));
console.log('Weekly review: '+metrics.postCount+' posts, '+metrics.totalViews+' views, '+metrics.avgEngagementRate+'% engagement');Plataformas utilizadas
TikTok
Descubrimiento de videos, creadores y productos en tendencia