Las marcas necesitan saber cuándo los creadores de TikTok las mencionan en videos o comentarios. El monitoreo manual significa desplazarse sin cesar por los resultados de búsqueda y los hilos de comentarios. La API de Scavio TikTok le permite buscar videos por palabra clave de marca, buscar comentarios para cada video coincidente y marcar cualquiera que haga referencia a su marca o producto. Este tutorial crea una canalización que se ejecuta según una programación, escanea contenido nuevo de TikTok en busca de menciones de marca y registra cada mención con el identificador del creador, la identificación del video y las estadísticas de participación. A $0,005 por llamada API, monitorear 50 videos más sus comentarios cuesta menos de $1 por ejecución.
Requisitos previos
- Python 3.8+ o Node.js 18+
- Una clave API de Scavio de scavio.dev
- solicita biblioteca instalada (Python)
- La marca o el nombre del producto que desea rastrear
Guia paso a paso
Paso 1: Busca videos de TikTok que mencionen tu marca
Utilice el punto final de búsqueda/vídeos para encontrar vídeos de TikTok que mencionen su marca en la descripción o los hashtags.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
HEADERS = {'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json'}
def search_brand_videos(brand, pages=3):
videos = []
cursor = 0
for _ in range(pages):
resp = requests.post('https://api.scavio.dev/api/v1/tiktok/search/videos',
headers=HEADERS,
json={'keyword': brand, 'count': 20, 'cursor': cursor})
data = resp.json()['data']
videos.extend(data.get('videos', []))
if not data.get('has_more'):
break
cursor = data['cursor']
return videosPaso 2: Escanea los comentarios de cada vídeo en busca de menciones de marca
Para cada video devuelto, busque comentarios y verifique si alguno menciona su marca. Esto detecta menciones indirectas en las que el vídeo en sí puede no hacer referencia a la marca, pero los comentaristas sí.
def scan_comments_for_brand(video_id, brand, max_pages=2):
mentions = []
cursor = 0
for _ in range(max_pages):
resp = requests.post('https://api.scavio.dev/api/v1/tiktok/video/comments',
headers=HEADERS,
json={'aweme_id': video_id, 'count': 20, 'cursor': cursor})
data = resp.json()['data']
for c in data.get('comments', []):
if brand.lower() in c['text'].lower():
mentions.append({'user': c['user']['unique_id'],
'text': c['text'], 'likes': c['digg_count']})
if not data.get('has_more'):
break
cursor = data.get('cursor', cursor + 20)
return mentionsPaso 3: Agregar y registrar todas las menciones
Combine menciones a nivel de vídeo y a nivel de comentarios en un único registro con marcas de tiempo. Escriba en un archivo JSON para generar alertas o paneles posteriores.
import json
from datetime import datetime
def run_monitor(brand):
videos = search_brand_videos(brand)
log = []
for v in videos:
entry = {'type': 'video', 'creator': v.get('author', {}).get('unique_id', ''),
'video_id': v['aweme_id'], 'desc': v['desc'][:100],
'plays': v['stats']['playCount'], 'scanned_at': datetime.now().isoformat()}
log.append(entry)
comment_mentions = scan_comments_for_brand(v['aweme_id'], brand)
for cm in comment_mentions:
log.append({'type': 'comment', 'video_id': v['aweme_id'],
'user': cm['user'], 'text': cm['text'][:100],
'scanned_at': datetime.now().isoformat()})
with open(f'brand_mentions_{brand}_{datetime.now().strftime("%Y-%m-%d")}.json', 'w') as f:
json.dump(log, f, indent=2)
print(f'Logged {len(log)} mentions for {brand}')
return logEjemplo en Python
import requests, os, json
from datetime import datetime
API_KEY = os.environ['SCAVIO_API_KEY']
HEADERS = {'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json'}
def search_videos(brand, pages=3):
videos, cursor = [], 0
for _ in range(pages):
resp = requests.post('https://api.scavio.dev/api/v1/tiktok/search/videos',
headers=HEADERS, json={'keyword': brand, 'count': 20, 'cursor': cursor}).json()['data']
videos.extend(resp.get('videos', []))
if not resp.get('has_more'): break
cursor = resp['cursor']
return videos
def scan_comments(video_id, brand):
mentions, cursor = [], 0
for _ in range(2):
resp = requests.post('https://api.scavio.dev/api/v1/tiktok/video/comments',
headers=HEADERS, json={'aweme_id': video_id, 'count': 20, 'cursor': cursor}).json()['data']
for c in resp.get('comments', []):
if brand.lower() in c['text'].lower():
mentions.append({'user': c['user']['unique_id'], 'text': c['text'][:100]})
if not resp.get('has_more'): break
cursor = resp.get('cursor', cursor + 20)
return mentions
def monitor(brand):
videos = search_videos(brand)
log = []
for v in videos:
log.append({'type': 'video', 'creator': v.get('author', {}).get('unique_id', ''),
'video_id': v['aweme_id'], 'plays': v['stats']['playCount']})
for cm in scan_comments(v['aweme_id'], brand):
log.append({'type': 'comment', 'video_id': v['aweme_id'], **cm})
with open(f'mentions_{brand}_{datetime.now():%Y-%m-%d}.json', 'w') as f:
json.dump(log, f, indent=2)
print(f'{len(log)} mentions found')
monitor('scavio')Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { Authorization: `Bearer ${API_KEY}`, 'Content-Type': 'application/json' };
const fs = require('fs');
async function searchVideos(brand, pages = 3) {
const videos = [];
let cursor = 0;
for (let i = 0; i < pages; i++) {
const r = await fetch('https://api.scavio.dev/api/v1/tiktok/search/videos', {
method: 'POST', headers: H, body: JSON.stringify({ keyword: brand, count: 20, cursor })
}).then(r => r.json());
videos.push(...(r.data.videos || []));
if (!r.data.has_more) break;
cursor = r.data.cursor;
}
return videos;
}
async function scanComments(videoId, brand) {
const mentions = [];
let cursor = 0;
for (let i = 0; i < 2; i++) {
const r = await fetch('https://api.scavio.dev/api/v1/tiktok/video/comments', {
method: 'POST', headers: H,
body: JSON.stringify({ aweme_id: videoId, count: 20, cursor })
}).then(r => r.json());
for (const c of r.data.comments || []) {
if (c.text.toLowerCase().includes(brand.toLowerCase()))
mentions.push({ user: c.user.unique_id, text: c.text.slice(0, 100) });
}
if (!r.data.has_more) break;
cursor = r.data.cursor || cursor + 20;
}
return mentions;
}
async function monitor(brand) {
const videos = await searchVideos(brand);
const log = [];
for (const v of videos) {
log.push({ type: 'video', creator: v.author?.unique_id, videoId: v.aweme_id, plays: v.stats.playCount });
const cms = await scanComments(v.aweme_id, brand);
cms.forEach(cm => log.push({ type: 'comment', videoId: v.aweme_id, ...cm }));
}
fs.writeFileSync(`mentions_${brand}_${new Date().toISOString().slice(0, 10)}.json`, JSON.stringify(log, null, 2));
console.log(`${log.length} mentions found`);
}
monitor('scavio').catch(console.error);Salida esperada
[
{
"type": "video",
"creator": "techreviewer42",
"video_id": "7345678901234",
"plays": 24500,
"scanned_at": "2026-05-17T14:30:00"
},
{
"type": "comment",
"video_id": "7345678901234",
"user": "devfan99",
"text": "just tried scavio api and it worked great for my project",
"scanned_at": "2026-05-17T14:30:01"
}
]