Para seleccionar vídeos públicos de TikTok que mencionen una marca y contengan expresiones publicitarias explícitas, recopila resultados de varias búsquedas, extrae las descripciones y señala las palabras indicadoras. El resultado es un CSV con enlaces y métricas disponibles: una cola para que la revise una persona, no una conclusión automática sobre el cumplimiento de las normas.
Este proceso puede ser útil para una agencia que compare una campaña con el briefing o para un equipo interno que mantenga un registro de menciones públicas. Ayuda a organizar los resultados de búsqueda y conserva los indicios que permiten al analista decidir qué vídeo abrir y examinar.
¿Qué se debe buscar en los vídeos?
Para revisar la publicidad, importan la relación del autor con la marca y la forma en que se divulga junto con la recomendación. La guía de la FTC para influencers explica que una relación relevante puede ser financiera, laboral, personal o familiar, y que la divulgación debe ser clara y fácil de entender. En el caso de una recomendación en vídeo, la FTC indica que la divulgación debe aparecer en el propio vídeo, no solo en la descripción. Por eso, la descripción sirve para clasificar, pero por sí sola no muestra lo que el espectador vio en pantalla o escuchó en el audio.
El objetivo de este script es más limitado: encontrar en los resultados de búsqueda devueltos vídeos cuyas descripciones incluyan frases relacionadas con la marca y posibles indicadores como «publicidad», «patrocinador» o «colaboración». Adapta el vocabulario al idioma y a la terminología de la campaña. Si no aparece ningún indicador en la descripción, abre el vídeo y comprueba su contenido: una coincidencia de texto no permite determinar si hay una divulgación en el propio vídeo.
¿Cómo convertir los resultados de búsqueda en una cola de revisión?
Prepara una lista breve de consultas: el nombre de la marca, el de la campaña y la forma habitual de escribir el producto. Ejecuta las consultas por separado y guarda sus términos junto con los resultados. Así, el equipo podrá ver con qué consulta se encontró cada vídeo y repetir la recopilación si hace falta.


Para recopilar los datos, puedes usar la API TikTok Scraper de jsonscraper. La ruta GET documentada /searchVideo está disponible en https://tiktok.evelode.com y acepta los parámetros keyword, count, date_posted, sort_by, region y cursor. En una respuesta observada, los datos de TikTok incluían vídeos en search_item_list[].aweme_info; aweme_list podía estar vacío. El analizador que aparece más abajo comprueba ambas ubicaciones.
La clave se pasa mediante el parámetro license_key. Guárdala en una variable de entorno, no en el script ni en el repositorio. La documentación de las rutas de TikTok incluye los nombres de los parámetros de búsqueda; para la página siguiente, utiliza el cursor devuelto. Registra el número de objetos procesados y la consulta de búsqueda: la paginación permite continuar con los resultados, pero no garantiza por sí sola que el conjunto esté completo.
Ejemplo mínimo en Python
El script realiza una consulta por cada frase, recopila las dos formas documentadas de los resultados, elimina los duplicados según el ID del vídeo, marca las palabras de la descripción y escribe un CSV. Instala requests con el comando python -m pip install requests, define JSONSCRAPER_TIKTOK_LICENSE_KEY en el entorno y ejecuta el archivo. El ejemplo es compatible con Python 3.8 y versiones posteriores.
import csv
import os
import sys
import requests
BASE_URL = "https://tiktok.evelode.com/searchVideo"
KEY = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
if not KEY:
raise SystemExit("Set JSONSCRAPER_TIKTOK_LICENSE_KEY first")
QUERIES = ["Example Brand", "Example Product", "Example Campaign"]
MARKERS = ("#реклама", "реклама", "спонсор", "партнерство", "партнёрство", "#ad", "sponsored")
def videos_from(payload):
data = payload.get("tiktok") or {}
videos = data.get("aweme_list") or []
if not videos:
videos = [
item.get("aweme_info")
for item in (data.get("search_item_list") or [])
if isinstance(item, dict) and isinstance(item.get("aweme_info"), dict)
]
return [video for video in videos if isinstance(video, dict)]
rows = {}
for query in QUERIES:
response = requests.get(
BASE_URL,
params={"keyword": query, "count": 20, "date_posted": "this-month", "license_key": KEY},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok":
print("Unexpected API status for query:", query, file=sys.stderr)
continue
for video in videos_from(payload):
video_id = video.get("aweme_id")
if not video_id:
continue
author = video.get("author") or {}
stats = video.get("statistics") or {}
caption = video.get("desc") or ""
matched = [word for word in MARKERS if word in caption.casefold()]
row = rows.setdefault(str(video_id), {
"video_id": str(video_id),
"url": video.get("share_url") or "",
"author": author.get("unique_id") or author.get("nickname") or "",
"caption": caption,
"queries": set(),
"disclosure_markers": set(),
"play_count": stats.get("play_count"),
"digg_count": stats.get("digg_count"),
"comment_count": stats.get("comment_count"),
"review_status": "manual_review",
})
row["queries"].add(query)
row["disclosure_markers"].update(matched)
with open("tiktok_disclosure_review.csv", "w", newline="", encoding="utf-8-sig") as file:
fields = ["video_id", "url", "author", "caption", "queries", "disclosure_markers",
"play_count", "digg_count", "comment_count", "review_status"]
writer = csv.DictWriter(file, fieldnames=fields)
writer.writeheader()
for row in rows.values():
row["queries"] = " | ".join(sorted(row["queries"]))
row["disclosure_markers"] = " | ".join(sorted(row["disclosure_markers"]))
writer.writerow(row)
print("Saved", len(rows), "unique returned videos")
Antes de guardar el código, comprueba el estado de la respuesta externa y después los datos en tiktok. El normalizador lee ambas ubicaciones de los vídeos. Para la página siguiente, puedes pasar el cursor recibido en la siguiente consulta sin transformarlo; este ejemplo mínimo se limita deliberadamente a una página por consulta.
¿Qué mostrará el CSV?
Cada fila relaciona el ID y el enlace del vídeo, el identificador de autor disponible, la descripción, las frases de búsqueda y los indicadores coincidentes. Si la respuesta incluye cifras de reproducciones, «me gusta» y comentarios, se guardan como contexto para decidir el orden de revisión. Estos campos pueden no estar disponibles; el script los deja vacíos en lugar de sustituirlos por ceros.
A continuación, abre el vídeo, comprueba si hay una divulgación dentro del vídeo y si es visible, y registra el resultado según las categorías acordadas, por ejemplo «detectada», «requiere revisión adicional» o «no detectada durante la visualización». El código solo busca coincidencias exactas de texto en la descripción: no analiza la imagen ni el audio, ni decide si se cumplen las normas.
Para un proceso periódico, programa la recopilación, registra la hora de la consulta y guarda el JSON original junto con el CSV. Limita la lista de consultas a las frases necesarias y establece un periodo de conservación para los datos recopilados. La política de recopilación responsable de datos de jsonscraper aborda la frecuencia razonable de las consultas, la minimización de datos y la revisión de los resultados de IA antes de tomar medidas posteriores.
El resultado es una cola reproducible de vídeos públicos para revisar manualmente las divulgaciones publicitarias: las coincidencias de búsqueda y las métricas disponibles ayudan a decidir qué abrir primero, mientras que la evaluación del vídeo en sí queda en manos de quien lo revisa. Puedes consultar los nombres de los parámetros en la documentación de la API de TikTok y obtener información del producto en la página de TikTok Scraper API.