Resumen
Recopilar user-generated contenido de un branded TikTok campana by monitoreo campana hashtags y mencion de marca searches. Catalog cada UGC video con creator info, engagement metricas, y contenido metadata. Rastrear campana reach y identificar top-performing creators for follow-up.
Desencadenador
Every 4 horas durante active campanas
Programación
Every 4 horas durante active campanas
Pasos del flujo de trabajo
Monitorear campana hashtag
Pull ultimo videos de el campana hashtag. Rastrear total view conteo crecimiento y nuevo video submissions.
Search for untagged UGC
Search for videos mentioning el marca o producto sin el campana hashtag. Estos son organic UGC ese missed el official etiqueta.
Catalog cada video
Record video ID, creator username, publicacion time, views, likes, comentarios, shares, y descripcion text.
Clasificar creators by impact
Sort UGC creators by total engagement generado. Identificar micro-creators con outsized engagement relative to follower conteo.
Exportar campana informe
Generar un campana UGC informe con total submissions, reach, top creators, y engagement referencias.
Implementacion en Python
import requests, os, json
H = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}", "Content-Type": "application/json"}
BASE = "https://api.scavio.dev"
def collect_ugc(campaign_hashtag, brand_query, max_pages=5):
ugc = {}
params = {"hashtag": campaign_hashtag, "count": 20}
for _ in range(max_pages):
resp = requests.post(f"{BASE}/api/v1/tiktok/hashtag/videos",
headers=H, json=params).json()
for v in resp["data"].get("videos", []):
ugc[v["aweme_id"]] = {
"creator": v.get("author", {}).get("unique_id", ""),
"views": v.get("statistics", {}).get("play_count", 0),
"likes": v.get("statistics", {}).get("digg_count", 0),
"desc": v.get("desc", "")[:100],
"source": "hashtag",
}
if not resp["data"].get("has_more"):
break
params["cursor"] = resp["data"].get("cursor")
search_resp = requests.post(f"{BASE}/api/v1/tiktok/search/videos",
headers=H, json={"query": brand_query, "count": 20}).json()
for v in search_resp["data"].get("videos", []):
if v["aweme_id"] not in ugc:
ugc[v["aweme_id"]] = {
"creator": v.get("author", {}).get("unique_id", ""),
"views": v.get("statistics", {}).get("play_count", 0),
"likes": v.get("statistics", {}).get("digg_count", 0),
"desc": v.get("desc", "")[:100],
"source": "search",
}
ranked = sorted(ugc.values(), key=lambda x: x["likes"], reverse=True)
return ranked
results = collect_ugc("brandchallenge", "brand name review")
print(f"Collected {len(results)} UGC videos")
for r in results[:5]:
print(f" @{r['creator']}: {r['views']:,} views, {r['likes']:,} likes ({r['source']})")Implementacion en JavaScript
const BASE = "https://api.scavio.dev";
const H = { Authorization: `Bearer ${process.env.SCAVIO_API_KEY}`, "Content-Type": "application/json" };
async function collectUGC(hashtag, brandQuery) {
const hashResp = await fetch(`${BASE}/api/v1/tiktok/hashtag/videos`, {
method: "POST", headers: H, body: JSON.stringify({ hashtag, count: 20 })
}).then(r => r.json());
const searchResp = await fetch(`${BASE}/api/v1/tiktok/search/videos`, {
method: "POST", headers: H, body: JSON.stringify({ query: brandQuery, count: 20 })
}).then(r => r.json());
const videos = [...(hashResp.data.videos || []), ...(searchResp.data.videos || [])];
console.log(`Collected ${videos.length} UGC videos`);
videos.sort((a, b) => (b.statistics?.digg_count || 0) - (a.statistics?.digg_count || 0));
videos.slice(0, 5).forEach(v =>
console.log(` @${v.author?.unique_id}: ${v.statistics?.play_count?.toLocaleString()} views`));
}
collectUGC("brandchallenge", "brand name review");Plataformas utilizadas
TikTok
Descubrimiento de videos, creadores y productos en tendencia