API de tendencias de TikTok: rutas oficiales, gratis y de pago por uso

Las API oficiales de TikTok no dan tendencias. Medimos hashtags y listas musicales a tres horas: las listas cambian por edición y los hashtags cada hora.

Ilustración a mano sobre papel: tres fotos instantáneas en fila con la misma tarjeta de almohadilla y unas barras que crecen y cambian de orden; sobre cada foto cuelga un reloj con otra hora, y una línea amarilla punteada va de la primera a la tercera, donde la barra más alta es amarilla.

Si buscas un endpoint que puedas llamar de forma programada y que devuelva lo que está en tendencia en TikTok ahora, la vía oficial no lo ofrece. El 2026-11-14 revisamos los 9 productos del sitio TikTok for Developers y ninguno devuelve un ranking de hashtags o de canciones en tendencia. Research API es solo para investigación académica y sin fines de lucro, y sus datos llegan con 48 horas a 10 días de retraso; Display API solo lee los videos de los usuarios que dan su permiso; Commercial Content API solo cubre anuncios en Europa; y el Creative Center tiene listas de tendencias, pero es una página web. Los scripts de código abierto gratuitos necesitan un navegador sin interfaz y una cookie, y la biblioteca con más estrellas en GitHub publicó su última versión el 2026-04-01.

Queda una tercera ruta: una API de pago por uso. Con 6 capacidades de TikTok de EveryInfra pedimos los mismos hashtags y las mismas dos listas musicales a tres horas del 2026-11-14 (hora de Singapur), que en Ciudad de México era la mañana del 13 de noviembre, primer día de El Buen Fin. Después lo cruzamos con las capturas de las listas que hicimos el 11 y el 12 de noviembre para otro artículo (Viral 50 cuatro veces y Top 50 tres). Lo que se ve es que los datos de la propia plataforma cambian, y que cada tipo de dato cambia a su manera. Las listas musicales cambian por ediciones completas: en las tres rondas del mismo día no se movió ningún puesto, y frente a la edición del 12 de noviembre a las 00:13, en Viral 50 entraron 12 canciones y otras 34 cambiaron de puesto, 46 en total. Los totales de videos de los hashtags crecieron en cada captura: el primer día de El Buen Fin, #buenfin sumó 1071 y 1222 videos nuevos por hora, y #thanksgiving, 408 y 344. Las cifras de TikTok de este artículo salen de las respuestas originales de 31 llamadas, con un gasto total de 0,0215 USD por 876 filas; por capacidad, el costo fue de entre 0,0161 y 0,0463 USD por cada 1000 filas.

Ilustración isométrica. Tres caminos van de la izquierda hacia una fuente de datos a la derecha que lanza pequeñas fichas con almohadillas y notas musicales. El camino de piedra de arriba termina en una reja cerrada con cuatro figuras que esperan en fila con carpetas. El del medio es un puente colgante al que le faltan tablas, con una caja de herramientas caída debajo. La carretera de abajo pasa por un torniquete de monedas color verde azulado y llega directo a la fuente.
Tres caminos hacia los datos de tendencias de TikTok: la puerta oficial con fila de espera, el puente gratuito que se rompe y la carretera de pago por uso.

¿Tiene TikTok una API oficial de tendencias?

El 2026-11-14 abrimos uno por uno los productos que aparecen al pie del sitio TikTok for Developers. Son nueve: Share Kit, Login Kit, Content Posting API, Research API, Display API, Embed Videos, Data Portability API, Green Screen Kit y Commercial Content API (lista de productos de TikTok for Developers, pie de página). Ninguno se llama «tendencias». Solo tres leen datos: Research API, Display API y Commercial Content API. El Creative Center, donde los anunciantes ven hashtags y canciones en tendencia, es una página web y no aparece en esa lista.

Todo lo que citamos lo leímos el 2026-11-14.

Research API: lo más cercano, pero solo para investigación

La página de Research Tools dice que pueden solicitar acceso los investigadores calificados de Estados Unidos, Europa, Canadá y Brasil (página de Research Tools). Los requisitos son estrictos: hay que pertenecer a una institución académica de Estados Unidos, el Espacio Económico Europeo, Reino Unido, Canadá o Suiza, o a un centro de investigación sin fines de lucro dentro de la Unión Europea. En Brasil solo entran grupos académicos o sin fines de lucro que estudian la seguridad de menores en internet. México y el resto de América Latina no aparecen en la lista.

Captura de la página Research Tools de TikTok for Developers. Bajo el título Research Tools, un recuadro verde azulado marca el primer párrafo, que dice en inglés que los investigadores calificados de Estados Unidos, Europa, Canadá y Brasil pueden solicitar acceso a datos públicos de contenidos y cuentas de TikTok, y que TikTok trabaja para ampliar el acceso.
Primer párrafo de la página Research Tools, captura del 2026-11-14 (hora de Singapur). TikTok for Developers

La pregunta 6 de las preguntas frecuentes de Research API lo dice sin rodeos: los creadores, los anunciantes y los usuarios comerciales no pueden solicitarlo. La misma página de producto indica que TikTok suele responder en un plazo de 4 semanas. Una agencia de Ciudad de México o una marca de Bogotá quedan fuera de esta ruta.

Aun con acceso, Research API no tiene un endpoint de «lo que es tendencia ahora». La consulta de videos funciona como un WHERE de SQL: se filtra por hashtag_name, music_id, region_code, keyword o create_date (guía de inicio de Research API). Cada petición devuelve hasta 100 videos y el end_date no puede quedar a más de 30 días del start_date (referencia de Query Videos, actualizada el 2026-09-01). Para saber si un hashtag sube, hay que contar los videos día por día.

El cupo es de 1000 peticiones y hasta 100.000 registros al día, con reinicio a las 0:00 UTC. En frescura, según las preguntas frecuentes, un video nuevo puede tardar hasta 48 horas en entrar al índice, y las estadísticas como las reproducciones pueden tardar hasta 10 días en actualizarse. Sirve para estudiar el mes pasado, no para ver qué hashtag despegó esta tarde.

El registro de cambios para desarrolladores muestra que la API sigue cambiando. El 2026-02-26 TikTok amplió la cobertura a todos los videos públicos, incluidos los que no son aptos para la sección Para ti, y el 2026-05-21 añadió favorites_count a las consultas de videos. En la Unión Europea existe además el acceso para investigadores verificados según la Ley de Servicios Digitales, pero TikTok no acepta solicitudes directas: la petición la presenta el regulador irlandés, Coimisiún na Meán (acceso para investigadores verificados).

Display API: solo los videos de tus propios usuarios

Display API tiene tres endpoints: /v2/user/info/, /v2/video/list/ y /v2/video/query/ (resumen de Display API, actualizado el 2026-08-04). Sirve para mostrar el perfil y los videos de un creador dentro de tu propio sitio o app. Cada usuario debe iniciar sesión con Login Kit y conceder los permisos user.info.basic y video.list (guía de inicio de Display API, actualizada el 2026-08-19), y cada página de video/list trae como máximo 20 videos (referencia de List Videos). Solo lee los videos de quien dio su permiso, así que no sirve para tendencias.

Commercial Content API: anuncios en Europa

Commercial Content API es una herramienta de transparencia publicitaria. Permite buscar anuncios, anunciantes y datos de segmentación; los datos de un anuncio quedan disponibles mientras se publica y hasta un año después de su última impresión, y TikTok responde a las solicitudes en 1 o 2 semanas (página de Commercial Content API). La cobertura es solo europea: los 27 países de la UE, Noruega, Islandia, Liechtenstein, Reino Unido y Suiza (Supported Countries, actualizada el 2026-09-01). No incluye anuncios de México ni de ningún país latinoamericano.

El tamaño de página no coincide entre documentos. La guía de inicio dice que el valor por defecto es 10 y el máximo 50; la referencia de Query Ads dice 10 y 10. Sirve para ver qué marcas anuncian qué en Europa, no para encontrar hashtags o canciones orgánicas en tendencia.

Creative Center: página web sin API documentada

El Creative Center es la única página oficial que muestra hashtags, canciones y creadores en tendencia. El 2026-11-14 pedimos con curl la dirección antigua de hashtags, ads.tiktok.com/business/creativecenter/inspiration/popular/hashtag/pc/en, y el servidor respondió con una redirección 301 a ads.tiktok.com/creative/creativeCenter/trends. El título de la página ahora es «TikTok One Creative Suite». No figura en la lista de productos para desarrolladores y no encontramos ninguna referencia de API. Se puede consultar a mano; conectarlo a un proceso programado no tiene vía oficial.

Ruta oficial¿Tendencias?Quién puede pedirlaVolumenFrescuraÚltima actualización
Research APISin ranking; filtras por hashtag o música y cuentas túAcademia de EE. UU., EEE, Reino Unido, Canadá, Suiza; ONG de la UE; ciertos estudios en Brasil. No usuarios comercialesHasta 100 por petición; 1000 peticiones y 100.000 registros al díaVideos nuevos hasta 48 h tarde; estadísticas hasta 10 días tarde2026-09-01
Display APINoCualquier desarrollador, con permiso de cada usuarioHasta 20 por página; solo videos propios del usuarioEn vivo2026-08-19
Commercial Content APISolo anuncios, sin tendencias orgánicasInvestigadores y profesionales de cualquier país; revisión de 1 a 2 semanas10 por petición (otra página dice 50)Anuncios hasta un año después de la última impresión2026-09-01
Creative CenterPágina web con hashtags, canciones y creadoresCualquiera con navegadorSin API públicaSe renueva por ciclos301 comprobado el 2026-11-14

Scripts gratuitos de código abierto: hasta dónde llegan

Las cuatro rutas oficiales anteriores no cobran, pero se detienen en los requisitos, en la frescura o en la falta de API. La ruta gratuita que queda es el código abierto. En GitHub hay muchas bibliotecas no oficiales de TikTok para Python: el código no cuesta, pero se paga con mantenimiento. El 2026-11-14 revisamos la biblioteca de Python con más estrellas en la página del tema tiktok-api: 6748 estrellas, 150 issues abiertos, última versión v7.3.3 del 2026-04-01 y último commit del 2026-08-24. Un issue abierto del 2026-07-18 reporta respuestas «200 con el cuerpo vacío» en consultas de usuario (issue #1311). Con un 200 vacío, un monitor que solo mira el código de estado no avisa, y la tabla no recibe filas nuevas. La biblioteca necesita además un navegador sin interfaz y una cookie.

Con la API de datos de YouTube buscamos «tiktok trends api python» y, de los 10 primeros resultados, elegimos tres videos sobre extracción de TikTok con Python (los resultados 1, 7 y 9) para leer sus transcripciones. Ese paso usó 4 llamadas más y costó 0,0024 USD, que no entran en las cifras de TikTok de este artículo. En el tutorial del propio autor de la biblioteca, el primer paso es pip install y el segundo python -m playwright install, que instala un navegador sin interfaz. Un tutorial de 2021 sobre un panel de tendencias copia antes una cookie del navegador, y su autor comenta que cada ejecución devuelve resultados distintos: 10 resultados quedaron en 5 tras filtrar por fecha y en 3 en la siguiente ejecución. Un video corto subido el 2026-08-28 dice que el acceso oficial es lento y que los scrapers se rompen cuando TikTok cambia la estructura de la página; su conclusión es que, para uso comercial, la API oficial sigue siendo la opción más segura.

Hay además una regla. Los Términos de servicio de TikTok para Estados Unidos, actualizados el 2026-07-15, prohíben extraer datos de la plataforma con cualquier sistema automatizado sin aprobación escrita de TikTok USDS Joint Venture. Citamos la cláusula como un hecho; no es asesoría legal y para un caso concreto conviene consultar a un abogado.

Ruta de pago por uso: seis capacidades y qué hace cada una

La tercera ruta es una API de pago por uso: sin iniciar sesión en TikTok, sin navegador y sin esperar aprobación, una petición HTTP devuelve JSON estructurado. A las 00:13 (hora de Singapur) del 2026-11-14 leímos el catálogo gratuito de EveryInfra: la plataforma TikTok tenía 22 capacidades disponibles, y seis sirven directamente para tendencias.

tiktok/hashtag_search busca hashtags por palabra clave y da el número de videos y de reproducciones de cada uno. tiktok/hashtag devuelve hasta 30 videos de la página de un hashtag. tiktok/music_chart trae la lista Top 50 o Viral 50 completa en una sola llamada. tiktok/music_search busca canciones en la biblioteca musical de TikTok. tiktok/sound_videos lista los videos que usan una canción. tiktok/search es la búsqueda de videos por palabra clave; la usamos para seguir por ID las reproducciones de cada video.

Las seis se cobran por llamada: 0,000556 USD o 0,000806 USD según la capacidad. Las llamadas fallidas no se cobran.

Gráfico de barras horizontales con el costo medido por 1000 filas el 2026-11-14 en seis capacidades, de menor a mayor: music_chart 0,0161 USD; hashtag 0,0185 USD; search 0,0202 USD; hashtag_search 0,0403 USD; music_search 0,0403 USD; sound_videos 0,0463 USD. La más barata, music_chart, va en verde azulado.

El costo se calcula con el cobro real y las filas reales, no a partir del precio del catálogo. Con las tres rondas y las llamadas adicionales, llamamos 31 veces a estas seis capacidades; el billing.charged_usd de cada respuesta coincidió con el precio del catálogo, con un total de 0,0215 USD por 876 filas. La fórmula es: cobro total de todas las llamadas a una capacidad ÷ filas que devolvieron en total × 1000. Lo más barato es music_chart: 6 llamadas trajeron 300 filas por 0,004836 USD, es decir, 0,0161 USD por 1000 filas. Lo más caro es sound_videos: 3 llamadas trajeron 36 filas por 0,001668 USD, o 0,0463 USD por 1000 filas. Con el mismo precio por llamada, lo que decide el costo por fila es cuántas filas trae cada llamada.

CapacidadDevuelveFilas por llamada (catálogo)Nuestras llamadas y filas totalesPrecio por llamadaPor 1000 filas
hashtag_searchNombre, videos y reproducciones del hashtag20 por página (con páginas)9 llamadas, 180 filas0,000806 USD0,0403 USD
hashtagVideos de la página del hashtagHasta 30 (10 por defecto)7 llamadas, 210 filas0,000556 USD0,0185 USD
music_chartTop 50 o Viral 50 completaSiempre 506 llamadas, 300 filas0,000806 USD0,0161 USD
music_searchCanciones de la biblioteca musical20 por página (con páginas)2 llamadas, 40 filas0,000806 USD0,0403 USD
sound_videosVideos que usan una canciónHasta 20 por página (con páginas)3 llamadas, 36 filas0,000556 USD0,0463 USD
searchBúsqueda de videos por palabra claveSegún limit (10 por defecto)4 llamadas, 110 filas0,000556 USD0,0202 USD

La tabla solo cuenta el costo de la API. Si buscas una comparación general de precios de las APIs de TikTok, lee TikTok API pricing; para comentarios, cómo extraer comentarios de TikTok.

Qué trae una fila de tendencias: guía de campos

Los campos deciden qué puedes medir. Una fila de hashtag y una fila de video son cosas distintas: hashtag_search devuelve hashtags con sus totales; hashtag y search devuelven videos con sus propios contadores y su fecha; music_chart devuelve canciones con su puesto y su uso. La tabla relaciona los campos de response_fields del catálogo con las cifras que necesita un seguimiento de tendencias.

DatosCamposSignificadoPara calcular
Hashtag (hashtag_search)hashtag_name, video_count, view_countNombre sin #, total de videos, total de reproduccionesVideos y reproducciones nuevos por hora entre dos capturas
Hashtag (hashtag_search)next_page_tokenToken de página, válido 24 horasHashtags después de los primeros 20
Video (hashtag, search, sound_videos)id, posted_at, view_count, like_count, collect_countID, fecha de publicación, reproducciones, me gusta, guardadosCrecimiento de cada video entre capturas, emparejado por ID
Videohashtags, musicHashtags del video; id, título e is_original de la músicaHashtags que aparecen juntos y sonidos en tendencia
Videois_ad, has_shop_productSi es anuncio; si tiene producto de TikTok ShopContar aparte anuncios y videos con compra
Lista musical (music_chart)rank, use_count, released_at, is_commercialPuesto, videos que usan la canción, fecha de lanzamiento, biblioteca comercialCambio de puesto, crecimiento de uso, música apta para marcas

is_commercial importa a las cuentas de marca: indica si la canción está en la biblioteca de música comercial de TikTok, la que pueden usar las cuentas de empresa. music.is_original permite descartar el «sonido original» con una sola línea; el tutorial de 2021 dedica una sección entera a ese filtro.

Paginación, filas por llamada y páginas cortas

Las seis capacidades paginan de dos maneras. hashtag_search, music_search y sound_videos usan page_token: para pedir la siguiente página se devuelve tal cual el next_page_token de la respuesta anterior. El token vale 24 horas y cada página se cobra como una llamada. Estas tres ignoran limit y la plataforma fija el tamaño: 20 hashtags o 20 canciones por página, y en sound_videos hasta 20 videos, a menudo 12 o 13. El catálogo advierte que una página corta no significa el final; solo una respuesta sin next_page_token es la última. Nuestra llamada a sound_videos de las 00:16 trajo 12 videos, pero también un token y has_more: true.

hashtag y search usan limit, con 10 por defecto en las dos; hashtag devuelve hasta 30 videos. Cada llamada se cobra una sola vez y el precio por llamada no cambia si subes el limit. music_chart no pagina y siempre devuelve las 50 canciones.

Un hashtag en tres momentos: las mismas llamadas a tres horas distintas

El 2026-11-14 hicimos las mismas llamadas con los mismos parámetros en tres rondas, a las 00:15, las 01:16 y las 02:17 (hora de Singapur), con alrededor de una hora entre rondas. Cada ronda incluyó las dos listas musicales, hashtag_search y hashtag para #thanksgiving y #buenfin, search para «thanksgiving recipes» y sound_videos para la canción Gangster Bxtch. Las rondas 2 y 3 sumaron «flu shot», un tema de fuera del marketing. Los criterios los escribimos antes de la primera llamada: una lista cuenta como cambiada si entra o sale al menos 1 canción o si cambian de puesto al menos 3; el crecimiento por video usa solo los videos que aparecen en las dos rondas, y damos la mediana; con menos de 5 videos no sacamos conclusiones; y si el total de un hashtag no cambia entre rondas, lo anotamos como «sin crecimiento».

Listas musicales: inmóviles durante horas, y una edición nueva en dos días

El 11 y el 12 de noviembre pedimos las dos listas para otro artículo: Viral 50 cuatro veces (00:20, 01:35 y 02:45 del 11 y 00:13 del 12, hora de Singapur) y Top 50 tres veces (00:20 y 02:45 del 11 y 00:13 del 12). Guardamos esas respuestas originales junto con las llamadas de este artículo. Entre esas capturas ninguna canción entró ni salió de las listas, y ningún puesto cambió. El 14 de noviembre a las 00:15 volvimos a pedirlas: Viral 50 tenía 12 canciones nuevas, y de las 38 que seguían, 34 cambiaron de puesto y solo 4 lo conservaron; Top 50 tenía 17 nuevas, y de las 33 que seguían, 31 cambiaron de puesto y solo 2 lo conservaron. Ese mismo día las pedimos otra vez a las 01:16 y a las 02:17, y las dos listas eran idénticas a las de las 00:15: ninguna canción entró ni salió y ningún puesto cambió; solo subió el uso (43 y 40 canciones de Viral 50 aumentaron su use_count en los dos intervalos).

Gráfico de barras horizontales con las canciones que entraron, salieron o cambiaron de puesto entre dos capturas seguidas de las listas, sobre 50. Viral 50: 11-11 00:20 a 11-11 01:35: 0; 11-11 01:35 a 11-11 02:45: 0; 11-11 02:45 a 11-12 00:13: 0; 11-12 00:13 a 11-14 00:15: 46; 11-14 00:15 a 11-14 01:16: 0; 11-14 01:16 a 11-14 02:17: 0. Top 50 solo cambió entre el 11-12 00:13 y el 11-14 00:15, con 48 canciones. El intervalo con más cambios va en verde azulado.

Es decir, las listas cambian por ediciones completas, no hora a hora. Dentro de una misma edición los puestos no se mueven, pero el uso sigue subiendo: del 11 de noviembre a las 00:20 al 12 a las 00:13, Housewife se quedó en el puesto 28 de Viral 50, y los videos que la usan pasaron de 609.101 a 622.586, es decir, 13.485 más en 23,9 horas, unos 564 por hora; Gangster Bxtch siguió en el 3 y pasó de 5086 a 5472. No encontramos ninguna fuente de TikTok que indique el calendario de actualización, así que solo contamos lo observado: en esos días hubo una edición nueva entre las 00:13 del 12 de noviembre y las 00:15 del 14. Para seguir las listas basta una consulta al día; lo que cambia cada hora es use_count.

Una edición nueva no solo cambia la parte baja de la lista. La tabla muestra el top 10 de Viral 50 en la edición del 14 de noviembre, el puesto de cada canción en la edición del 12 y su use_count en las tres rondas del 14. Solo Beauty School Dropout siguió en el puesto 4; las otras 9 cambiaron de lugar, y nothing, en el 9, venía del 29.

Puesto 14 novCanciónPuesto 12 nov 00:13Usos 14 nov 00:1501:1602:17Cambio en 2,04 h
1Gangster Bxtch3653466386747+213
2Stolen From Each Other619.16019.22319.292+132
3Rechazame5134.562134.598134.625+63
4Beauty School Dropout420.86520.86920.887+22
5Time (2011 Remastered Version)2163.650163.661163.693+43
6Acting Like You Kanye8184418501849+5
7wonder wander13555755665566+9
8Bounce it7425.559425.613425.707+148
9nothing2991.40091.47091.500+100
10Don't You Worry 'Bout A Thing1426.64426.64826.655+11

En Top 50 la edición nueva cambió todavía más: Stolen From Each Other siguió en el 1, Gangster Bxtch entró directamente en el 2, Housewife bajó del 2 al 7 y Last Christmas subió del 15 al 6. La tabla usa las mismas columnas.

Puesto 14 novCanciónPuesto 12 nov 00:13Usos 14 nov 00:1501:1602:18Cambio en 2,04 h
1Stolen From Each Other119.16119.22319.292+131
2Gangster BxtchNueva653466386747+213
3nothing791.40091.47091.501+101
4the feeling818.17818.19018.204+26
5Coming Up Roses4235.590235.674235.752+162
6Last Christmas15672.119672.131672.142+23
7Housewife2648.964649.540650.083+1119
8Beauty School Dropout1220.86520.86920.887+22
9All I Want For Christmas Is You916.297.13416.297.54216.297.960+826
10Rechazame5134.562134.598134.625+63

En las dos tablas, las canciones que más uso sumaron, Housewife y All I Want For Christmas Is You, no están arriba; Housewife incluso bajó del 2 al 7 en Top 50. Las canciones navideñas, como Last Christmas y All I Want For Christmas Is You, ya estaban de vuelta en el top 10 a mediados de noviembre.

De Viral 50 salieron 12 canciones; en la edición del 12 de noviembre estaban, entre otras, Ramalama (Bang Bang) en el 1, Sky en el 11 y What Hurts The Most en el 12. Las que entran tampoco son siempre canciones nuevas. De las 29 entradas nuevas de las dos listas, 25 tienen fecha de lanzamiento, y 19 de esas 25 salieron antes de 2026. En Viral 50, solo 2 de las 11 entradas con fecha son de 2026 y la más antigua es de 2004; en Top 50, 4 de las 14 son de 2026 y la más antigua es de 1990. La fecha de lanzamiento no dice si una canción está en tendencia.

Canción11 nov 00:20 puesto / usos12 nov 00:1314 nov 00:15Cambio de usos en dos días
Gangster BxtchViral n.º 3 / 5086n.º 3 / 5472n.º 1 / 6534+1062 (+19,4 %)
Ramalama (Bang Bang)Viral n.º 1 / 857.779n.º 1 / 858.204Fuera de ambas listas859.203 a las 01:19 con music_search: +999 (+0,12 %); 859.178 a las 02:20
RechazameViral n.º 5 / 133.119n.º 5 / 133.485n.º 3 / 134.562+1077 (+0,81 %)
HousewifeViral n.º 28 / 609.101n.º 28 / 622.586n.º 33 / 648.960+26.374 (+4,24 %)

Los puestos no se movieron, pero el uso sí: en las 2,04 horas entre la ronda 1 y la 3, 67 de las 77 canciones de las dos listas aumentaron su use_count. La que más creció fue Dame Hombro, con 681 videos más por hora (0,15 %), y 8 canciones bajaron: cuando se borran videos o pasan a privados, el número de videos que usan una canción retrocede. Ramalama, ya fuera de las listas, perdió 25 videos entre las 01:19 y las 02:20. Una bajada pequeña aislada no es un cambio de tendencia.

Gráfico de barras horizontales con las 8 canciones que más aumentaron su use_count por hora entre la ronda 1 y la 3 del 2026-11-14: Dame Hombro +681 por hora (0,15 %); Friday +663 por hora (0,43 %); Housewife +547 por hora (0,08 %); All I Want For Christmas Is You +398 por hora (0,00 %); La Mujer del Pelotero +387 por hora (0,10 %); Can I Ride +302 por hora (0,06 %); The One That Got Away - Acoustic +277 por hora (0,23 %); Christmas (Baby Please Come Home) +244 por hora (0,02 %). La primera va en verde azulado. En ese periodo, 8 canciones bajaron su use_count.

El puesto y el uso son cosas distintas. Gangster Bxtch solo tiene unos seis mil videos, pero su uso creció un 19 % en dos días y subió al n.º 1 de Viral 50. Ramalama tiene más de 850.000 videos, ganó 999 más en dos días y aun así salió de las dos listas. Housewife sumó 26.000 videos en dos días, y su puesto en Viral 50 bajó del 28 al 33. En estas canciones, el puesto en Viral 50 se parece más al crecimiento relativo de use_count que al total; TikTok no publica su método de clasificación, así que es solo una observación. Al elegir una canción conviene leer el puesto junto con el cambio de use_count. Coincide con lo que vimos el 11 de noviembre en la prueba de audio en tendencia de Instagram Edits: la lista quieta durante un día y el uso en movimiento. Para un equipo de marketing en México, Rechazame de Prince Royce es el caso más útil: subió del puesto 5 al 3 de Viral 50 con un crecimiento modesto, y está en la biblioteca comercial (is_commercial: true), así que una cuenta de empresa puede usarla.

Totales de hashtags: crecen en cada captura, y el de ofertas crece más rápido

Al contrario que las listas musicales, los totales de hashtag_search cambiaron en cada ronda. La tabla muestra los valores originales de los dos hashtags principales en las tres rondas; la hora es la de cada llamada en Singapur, y como cada palabra clave se pidió por separado, las horas difieren unos minutos.

HashtagHora de la llamada`video_count``view_count`Videos nuevos por hora desde la llamada anteriorReproducciones nuevas por hora
#thanksgiving00:15:505.020.83862.909.924.865——
#thanksgiving01:17:035.021.25462.912.371.953408Unos 2,40 millones
#thanksgiving02:18:205.021.60562.914.954.253344Unos 2,53 millones
#buenfin00:20:02247.2854.283.898.061——
#buenfin01:17:59248.3194.286.340.1211071Unos 2,53 millones
#buenfin02:19:16249.5674.289.165.8711222Unos 2,77 millones

Ningún intervalo de los dos hashtags tuvo crecimiento cero, así que el crecimiento se puede calcular directamente con las diferencias. La fórmula es: diferencia de video_count ÷ horas entre las dos llamadas. Para #buenfin, el primer intervalo da (248.319 − 247.285) ÷ 0,966 horas ≈ 1071 videos por hora. La imagen muestra dos respuestas a la misma petición, a las 00:20 y a las 02:19: solo cambió la hora, y el video_count de #buenfin pasó de 247.285 a 249.567.

Dos respuestas de tiktok/hashtag_search lado a lado para la palabra clave buen fin, ambas HTTP 200. La de la izquierda es de las 00:20:02 y la de la derecha de las 02:19:16, hora de Singapur, del 2026-11-14. Cada una muestra hashtag_name, video_count y view_count de los 4 primeros hashtags. El video_count de buenfin va resaltado: 247285 a la izquierda y 249567 a la derecha; buenfin2022 marca 4683 en las dos.
Dos respuestas a la misma petición de hashtag_search con dos horas de diferencia: #buenfin sumó 2282 videos y #buenfin2022, ninguno. | source: Captura de respuestas reales de la API de EveryInfra, rondas 1 y 3 del 2026-11-14
Gráfico de barras horizontales con los videos nuevos por hora, y su porcentaje del total, entre dos capturas de hashtag_search: #thanksgiving R1 a R2 408 (0,008 %); #thanksgiving R2 a R3 344 (0,007 %); #thanksgivinggame R1 a R2 0 (0,000 %); #thanksgivinggame R2 a R3 0 (0,000 %); #buenfin R1 a R2 1071 (0,433 %); #buenfin R2 a R3 1222 (0,492 %); #buenfin2023 R1 a R2 0 (0,000 %); #buenfin2023 R2 a R3 0 (0,000 %); #flushot R2 a R3 5 (0,030 %); #flushots R2 a R3 0 (0,000 %). La barra mayor va en verde azulado.

Las reproducciones nuevas y los videos nuevos se leen por separado. #thanksgiving sumó por hora menos de la mitad de videos nuevos que #buenfin, pero casi las mismas reproducciones: unos 2,40 y 2,53 millones por hora, frente a 2,53 y 2,77 millones de #buenfin. Si se dividen las reproducciones nuevas por hora entre los videos nuevos por hora, #thanksgiving tiene unas 5900 y 7400 reproducciones nuevas por cada video nuevo, y #buenfin solo unas 2400 y 2300. Buena parte del crecimiento de reproducciones de un hashtag viene de videos viejos que la gente sigue viendo, así que no sustituye a los videos nuevos por hora para saber cuánta gente publica ahora.

Al comparar dos hashtags hay que decir qué cociente se usa. En videos nuevos por hora, #buenfin fue 2,6 veces #thanksgiving en el primer intervalo (1071 ÷ 408) y 3,6 veces en el segundo (1222 ÷ 344); los dos intervalos difieren bastante, así que lo más que se puede decir es «unas 3 veces». En proporción al total (videos nuevos por hora ÷ el video_count anterior), #buenfin tuvo 0,433 % y 0,492 %, y #thanksgiving, 0,0081 % y 0,0068 %: un cociente de 53 y 72 veces. Es tan grande sobre todo porque los totales difieren 20 veces: la mayoría de los cinco millones de videos de #thanksgiving son de años anteriores, y #buenfin tiene unos doscientos mil. Cuando tomamos los datos, en Ciudad de México era entre la mañana y el mediodía del 13 de noviembre, primer día de El Buen Fin.

La proporción del total sirve más dentro de un grupo de hashtags parecidos, para encontrar los pequeños que crecen rápido. En la primera página de «buen fin», #ofertasbuenfin tenía solo 2214 videos y sumó 22,8 y 18,6 por hora, el 1,03 % y el 0,83 % de su total; #promocionesbuenfin tenía solo 793 y sumó 5,2 y 14,7 por hora, el 0,65 % y el 1,84 %.

HashtagVideos a las 00:2001:1702:19Videos nuevos por hora (dos intervalos)Porcentaje del total por hora
#buenfin247.285248.319249.5671071 / 12220,433 % / 0,492 %
#ofertasbuenfin22142236225522,8 / 18,61,03 % / 0,83 %
#promocionesbuenfin7937988135,2 / 14,70,65 % / 1,84 %

En números absolutos son minúsculos al lado de #buenfin, pero en proporción crecieron más que el 0,43 % a 0,49 % de #buenfin. A las marcas y a las redacciones a menudo les importa este caso: el hashtag todavía es pequeño, pero crece rápido, y llegar pronto marca la diferencia. Haz que el script arme dos listas de los diez primeros, por videos nuevos por hora y por proporción del total, y revisa las dos.

En las mismas páginas, algunos hashtags no sumaron ni un video en dos horas: los viejos con año en el nombre (#buenfin2020 a #buenfin2023) y variantes pequeñas como #thanksgivinggame o #thanksgiving🦃. Aun así, sus reproducciones siguieron subiendo: #thanksgivinggame ganó unas 438 por hora y #buenfin2023, unas 436. En un hashtag congelado la gente sigue viendo los videos viejos. Para medir tendencias, sus videos nuevos son 0, así que no cuentan como hashtags en subida; su crecimiento de reproducciones solo dice que el archivo sigue teniendo público.

Gráfico de barras horizontales con las reproducciones nuevas por hora de 8 hashtags viejos que no sumaron videos en unas 2 horas: #thanksgiving? +570 por hora, en verde azulado; #thanksgivinggame +438; #buenfin2023 +436; #thanksgiving🦃 +219; #buenfin2022 +57; #buenfin2021 +13; #thanksgiving🙏 +11; #buenfin2020 +2. Entre paréntesis, el número de videos de cada hashtag.

Los 30 videos de la página de un hashtag: la del hashtag de ofertas cambió casi entera en una hora

tiktok/hashtag devuelve 30 videos de la página del hashtag. El primer día de El Buen Fin, la página de #buenfin cambió muy rápido: solo 6 y 12 videos se mantuvieron entre rondas seguidas, y de los 30 de la ronda 1 solo 3 seguían en la ronda 3. Los que entraban eran videos publicados ese mismo día: de los 30, 14, 24 y 24 tenían menos de un día en las tres rondas, y la mediana de antigüedad bajó de 1,6 días a 0,7 y 0,5. La mediana de reproducciones de la página bajó de 108.700 a 17.450 y 4646, porque la mayoría de los videos nuevos todavía no había tenido tiempo de sumar vistas. Casi todos usan sonido original: music.is_original era true en 24, 21 y 23 de los 30; 3, 2 y 2 llevaban la marca de anuncio (is_ad), y solo uno, en la ronda 1, tenía un producto de TikTok Shop (has_shop_product). Según estos campos, el primer día de la campaña pocos videos de la página vendían un producto directamente; para contar videos con compra hay que buscar por palabras de producto, no solo mirar la página del hashtag.

Los conjuntos de comparación cambiaron mucho menos. En la búsqueda search de «thanksgiving recipes», 13 y 14 de 20 videos se repitieron entre rondas seguidas, con una mediana de antigüedad de 3,6 a 3,7 días; sound_videos para Gangster Bxtch devolvió los mismos 12 videos en las tres rondas.

Gráfico de barras horizontales agrupadas con el índice de Jaccard entre los videos de la misma petición en dos rondas. Hashtag #buenfin: 0,11 de la ronda 1 a la 2, 0,25 de la 2 a la 3 y 0,05 de la 1 a la 3. Búsqueda thanksgiving recipes: 0,48, 0,54 y 0,48. sound_videos de Gangster Bxtch: 1,00 en los tres.
Videos devueltosMediana de días desde la publicación a las 00:1501:1602:17Publicados hace menos de un día (tres rondas)
#buenfin · hashtag1,60,70,514, 24 y 24 (de 30)
«thanksgiving recipes» · search3,63,63,73, 5 y 3 (de 20)
Gangster Bxtch · sound_videos10,810,810,90, 0 y 0 (de 12)
Gráfico de barras horizontales agrupadas con la mediana de días desde la publicación de los videos devueltos en tres rondas. Hashtag #buenfin: 1,6 a las 00:15, 0,7 a las 01:16 y 0,5 a las 02:17. Búsqueda thanksgiving recipes: 3,6, 3,6 y 3,7.

Esto tiene tres efectos directos. Primero, la página de un hashtag es una ventana a lo que la gente publica ahora: sirve para revisar caras nuevas cada pocas horas, no como muestra fija para seguir el crecimiento de los mismos videos. Para seguirlos, guarda los ID de la primera extracción y pide después sus cifras por ID con search o con la consulta de un solo video. Segundo, sound_videos devolvió los mismos 12 videos en las tres rondas: la lista de videos de una canción fue estable durante horas, y para encontrar videos nuevos con esa canción hay que leer las páginas siguientes en lugar de repetir la primera. Tercero, anota en cada extracción la mediana de antigüedad de los videos devueltos, porque ya es una señal de calor: en dos horas, la de #buenfin bajó de 1,6 a 0,5 días, señal de que los videos de ese día estaban llenando la página del hashtag.

Videos individuales: todos suben, y los más antiguos suben más despacio

El crecimiento por video se mide con los resultados de search. De los 20 resultados de «thanksgiving recipes», 13 videos aparecieron en las rondas 1 y 2; 13 ganaron reproducciones, con una mediana de 1803 por hora (0,53 % por hora). 14 aparecieron en las rondas 2 y 3, y 14 subieron, con una mediana de 2807 por hora (0,62 %). Las dos muestras superan los 5 videos, así que según el criterio fijado antes podemos concluir que estos videos siguieron creciendo durante horas.

Gráfico de dispersión. Eje X: horas desde la publicación (escala logarítmica). Eje Y: crecimiento de reproducciones por hora entre dos capturas (escala logarítmica). 27 puntos en dos colores, rondas 1 a 2 y 2 a 3. Los puntos bajan de arriba a la izquierda hacia abajo a la derecha: mediana de 10,76 % por hora en videos de menos de 2 días, 0,56 % de 2 a 7 días y 0,06 % con más de 7 días.

Los 4 puntos de videos con menos de 2 días tienen una mediana de 10,76 % por hora; los 20 de 2 a 7 días, 0,56 %; y los 3 de más de 7 días, 0,06 %. La correlación de rangos (Spearman) entre antigüedad y crecimiento es -0,83; la muestra solo tiene 27 puntos, pero la dirección es clara. Se puede usar así: dentro de un hashtag, un video con menos de un día que todavía crece varios puntos porcentuales por hora representa lo que pasa ahora con ese tema y vale la pena abrirlo; uno con más de una semana que crece décimas de punto por hora es parte del archivo, y su total de reproducciones solo habla del pasado.

Cómo saber si un hashtag está subiendo: tres reglas de lectura

Con capturas cada hora, el paso siguiente es decidir qué cambio cuenta como subida. Cada una de las tres reglas va con las cifras de esta prueba.

Primero, mira el incremento, no el total. #thanksgiving tiene más de cinco millones de videos y #buenfin más de doscientos mil; comparar esos dos totales no dice nada, porque los dos vuelven cada año y la mayor parte de su total son videos de años anteriores. Lo que hay que comparar son los videos nuevos entre dos capturas, divididos entre las horas que las separan: #buenfin sumó 1071 y 1222 por hora, y #thanksgiving, 408 y 344. Ese número, los videos nuevos por hora, muestra cuánta gente publica ahora.

Segundo, marca una subida solo cuando al menos dos señales van en la misma dirección. Hay tres señales: los videos nuevos por hora de hashtag_search, la proporción de videos de la página del hashtag publicados hace menos de un día (con posted_at de hashtag) y el crecimiento mediano de reproducciones de cada video en search. Veamos #buenfin: los videos nuevos por hora subieron de 1071 a 1222, y la proporción del total, de 0,433 % a 0,492 %; en la página del hashtag, los videos de menos de un día pasaron de 14 a 24 de 30. Dos señales subieron a la vez, así que el hashtag se puede marcar como «en subida». Si solo se mueve una, todavía no: el total de un hashtag puede crecer mientras los videos de su página tienen varios días, y entonces quizá la gente solo está añadiendo la etiqueta a videos viejos; al revés, unos pocos videos nuevos en search pueden ganar reproducciones rápido sin que el total del hashtag se mueva, y entonces esos videos funcionan en el feed, pero el hashtag todavía no se ha extendido.

Tercero, pon el umbral de aviso por encima del ruido normal de un hashtag estable. #thanksgiving es un hashtag de temporada estable: sus dos intervalos sumaron 408 y 344 videos nuevos por hora, un 16 % de diferencia; #flushot solo sumó 5 videos entre sus dos capturas. Un hashtag estable puede moverse un 10 % o un 20 % de una hora a otra, así que el umbral tiene que estar por encima. Con tres rondas no se puede fijar un múltiplo exacto: deja correr tus propios hashtags unos días, mira su rango normal y fija el umbral después.

Cada cuánto pedir cada dato: frecuencias según lo medido

Las mediciones anteriores se pueden convertir en un calendario: pide cada dato al ritmo al que cambia de verdad. Los costos mensuales de la tabla son para 30 días y un hashtag o una lista.

DatoCapacidadCómo cambióFrecuencia sugeridaCosto mensual de la API
Puestos de las listas musicalesmusic_chart0 cambios dentro de una edición; una edición nueva en dos díasUna vez al día0,0484 USD por 2 listas
Uso de las cancionesmusic_chart (misma respuesta)Sube cada hora y también puede bajarJunto con la lista; music_search una vez al día para las canciones que sigues0,0242 USD por canción
Totales de hashtagshashtag_searchCrecieron en cada captura; los hashtags viejos noCada hora0,5803 USD
Videos de la página del hashtaghashtag#buenfin solo conservó 6 y 12 de 30 entre rondas; los nuevos eran de ese díaCada hora en campañas, cada 3–6 horas el resto del tiempo0,0667–0,4003 USD
Reproducciones de cada videosearchTodos los videos vistos dos veces subieronCada hora0,4003 USD
Videos de una canciónsound_videosLa primera página fue igual en las tres rondasUna vez al día, leyendo las páginas siguientesDesde 0,0167 USD

Con este calendario, un hashtag (totales y reproducciones de cada video cada hora, página del hashtag cada 3 horas) más las dos listas una vez al día cuesta 1,16 USD al mes. Cada día son 24 llamadas a hashtag_search y otras 24 a search, 8 a hashtag y 1 a cada lista: (24 × 0,000806 + 24 × 0,000556 + 8 × 0,000556 + 2 × 0,000806) USD × 30 días ≈ 1,1624 USD. Diez hashtags con el mismo calendario cuestan 11,19 USD, una cuarta parte menos que los 14,97 USD de pedir cada hora las tres capacidades de hashtags y las dos listas.

Una captura por hora en Python: hashtags y listas musicales

Todas las cifras anteriores salen de un mismo script. Hace cuatro cosas: pide las dos listas musicales, busca hashtags para una palabra clave, trae 30 videos de un hashtag y hace una búsqueda por palabra clave para obtener las reproducciones de cada video. Guarda las filas en un archivo SQLite local y, en cada ejecución, compara la captura nueva con la anterior: cambios de puesto, videos nuevos por hora, coincidencia del conjunto de videos y crecimiento de reproducciones por video. Solo necesita requests y el módulo sqlite3 de Python; la clave se lee de una variable de entorno y por defecto espera 7 segundos entre llamadas. Como el script corre de forma programada y reintenta, cada llamada envía una cabecera Idempotency-Key y repite el mismo valor al reintentar, así que una misma petición nunca se cobra dos veces (cómo hacerlo: añadir Idempotency-Key a las llamadas a la API).

python
"""Take one snapshot of TikTok trend signals and compare it with the previous one.

Usage:
    export EVERYINFRA_API_KEY=...            # your key, never hard-code it
    python3 tiktok_trends.py --hashtag thanksgiving --keyword "thanksgiving recipes"

Each run stores rows in trends.sqlite and prints what changed since the last run.
"""
import argparse, json, os, sqlite3, statistics, time, uuid, datetime as dt
from pathlib import Path
import requests

API = "https://api.everyinfra.com/api/v1/social"
SGT = dt.timezone(dt.timedelta(hours=8))


def call(platform, action, params, raw_dir=None, tag=""):
    """One POST. Retries on 429 with the same Idempotency-Key; follows poll_url if the job is still running."""
    body = {"platform": platform, "action": action, "params": params}
    headers = {"Authorization": f"Bearer {os.environ['EVERYINFRA_API_KEY']}",
               "Idempotency-Key": str(uuid.uuid4())}  # one key per logical call, reused on retry
    for _ in range(3):
        r = requests.post(API, json=body, headers=headers, timeout=120)
        if r.status_code != 429:
            break
        time.sleep(int(r.json().get("error", {}).get("retry_after", 60)) + 1)
    data = r.json()
    while data.get("status") == "running" and data.get("poll_url"):
        time.sleep(5)
        data = requests.get(data["poll_url"], headers=headers, timeout=60).json()
    if raw_dir:
        Path(raw_dir).mkdir(parents=True, exist_ok=True)
        stamp = dt.datetime.now(SGT).isoformat(timespec="seconds")
        out = {"requested_at_sgt": stamp, "http_status": r.status_code, "request": body, "response": data}
        Path(raw_dir, f"{tag}{action}.json").write_text(json.dumps(out, ensure_ascii=False, indent=1))
    if r.status_code != 200:
        raise RuntimeError(f"{platform}/{action}: HTTP {r.status_code} {data.get('error')}")
    return data


def snapshot(args):
    now = dt.datetime.now(SGT).isoformat(timespec="seconds")
    raw, tag = args.raw_dir, args.tag
    rows = []
    for chart in ("viral50", "top50"):
        res = call("tiktok", "music_chart", {"chart": chart}, raw, f"{tag}{chart}-")
        for x in res["results"]:
            rows.append((now, f"chart:{chart}", x["id"], x.get("title"), x.get("rank"), x.get("use_count"), None))
        time.sleep(args.pause)
    res = call("tiktok", "hashtag_search", {"keyword": args.hashtag}, raw, tag)
    for x in res["results"]:
        rows.append((now, "tag_total", x["hashtag_id"], x["hashtag_name"], None, x.get("video_count"), x.get("view_count")))
    time.sleep(args.pause)
    res = call("tiktok", "hashtag", {"hashtag": args.hashtag, "limit": 30}, raw, tag)
    for i, x in enumerate(res["results"], 1):
        rows.append((now, f"tag_videos:{args.hashtag}", x["id"], x.get("posted_at"), i, x.get("like_count"), x.get("view_count")))
    time.sleep(args.pause)
    # per-video view growth is measured on search results, matched by video ID
    res = call("tiktok", "search", {"keyword": args.keyword, "limit": 20}, raw, tag)
    for i, x in enumerate(res["results"], 1):
        rows.append((now, "search_videos", x["id"], x.get("posted_at"), i, x.get("like_count"), x.get("view_count")))
    return now, rows


def compare(db, now):
    prev = db.execute("SELECT MAX(taken_at) FROM rows WHERE taken_at < ?", (now,)).fetchone()[0]
    if not prev:
        print("first snapshot stored; run again later to see changes")
        return
    hours = (dt.datetime.fromisoformat(now) - dt.datetime.fromisoformat(prev)).total_seconds() / 3600
    print(f"comparing {prev} -> {now} ({hours:.2f} h)")
    q = """SELECT a.kind, a.name, a.rank, b.rank, a.n1, b.n1, a.n2, b.n2 FROM rows a JOIN rows b
           ON a.kind = b.kind AND a.item_id = b.item_id WHERE a.taken_at = ? AND b.taken_at = ?"""
    pairs = list(db.execute(q, (prev, now)))
    for chart in ("chart:viral50", "chart:top50"):
        rows = [p for p in pairs if p[0] == chart]
        moved = sum(1 for p in rows if p[2] != p[3])
        new = db.execute("SELECT COUNT(*) FROM rows WHERE kind=? AND taken_at=?", (chart, now)).fetchone()[0] - len(rows)
        print(f"{chart}: {new} new songs, {moved} rank changes")
        top = sorted(rows, key=lambda p: (p[5] or 0) - (p[4] or 0), reverse=True)[:3]
        for _, name, r0, r1, n0, n1, _, _ in top:
            print(f"  #{r1} {name[:30]:30} uses {n0}->{n1} ({((n1 or 0) - (n0 or 0)) / hours:+.0f}/h)")
    for kind, name, r0, r1, n0, n1, v0, v1 in pairs:
        if kind == "tag_total" and n0 and n1 is not None and n1 != n0 and n0 >= 1000:
            print(f"#{name:27} videos {n0}->{n1} ({(n1 - n0) / hours:+.0f}/h)")
    grow = [(v1 - v0) / hours for kind, _, _, _, _, _, v0, v1 in db.execute(q, (prev, now))
            if kind == "search_videos" and v0 and v1 is not None]
    if grow:
        print(f"search videos seen twice: {len(grow)}, median views/h {statistics.median(grow):+.0f}")
    for (kind,) in db.execute("SELECT DISTINCT kind FROM rows WHERE kind LIKE 'tag_videos:%' OR kind = 'search_videos' ORDER BY kind DESC").fetchall():
        a = {i for (i,) in db.execute("SELECT item_id FROM rows WHERE kind=? AND taken_at=?", (kind, prev))}
        b = {i for (i,) in db.execute("SELECT item_id FROM rows WHERE kind=? AND taken_at=?", (kind, now))}
        if a and b:
            print(f"{kind}: {len(a & b)} of {len(b)} videos also in previous run (Jaccard {len(a & b) / len(a | b):.2f})")


def main():
    p = argparse.ArgumentParser()
    p.add_argument("--hashtag", default="thanksgiving")
    p.add_argument("--keyword", default="thanksgiving recipes")
    p.add_argument("--db", default="trends.sqlite")
    p.add_argument("--raw-dir")
    p.add_argument("--tag", default="")
    p.add_argument("--pause", type=float, default=7.0, help="seconds between calls")
    args = p.parse_args()
    db = sqlite3.connect(args.db)
    db.execute("CREATE TABLE IF NOT EXISTS rows (taken_at, kind, item_id, name, rank, n1, n2)")
    now, rows = snapshot(args)
    db.executemany("INSERT INTO rows VALUES (?,?,?,?,?,?,?)", rows)
    db.commit()
    compare(db, now)


if __name__ == "__main__":
    main()

Para ejecutarlo cada hora basta con cron o cualquier programador de tareas, por ejemplo 0 * * * * cd ~/tt && python3 tiktok_trends.py --hashtag buenfin --keyword "buen fin ofertas". Estas son las primeras líneas que imprimió a las 02:17 (hora de Singapur), comparadas con la ejecución anterior:

text
comparing 2026-11-14T01:16:39+08:00 -> 2026-11-14T02:17:55+08:00 (1.02 h)
chart:viral50: 0 new songs, 0 rank changes
  #32 Friday                         uses 155939->156532 (+581/h)
  #33 Housewife                      uses 649539->650076 (+526/h)
  #37 All I Want For Christmas Is Yo uses 16297542->16297959 (+408/h)
chart:top50: 0 new songs, 0 rank changes
  #32 Dame Hombro                    uses 448501->449241 (+725/h)
  #7 Housewife                      uses 649540->650083 (+532/h)
  #9 All I Want For Christmas Is Yo uses 16297542->16297960 (+409/h)
#thanksgiving                videos 5021254->5021605 (+344/h)
search videos seen twice: 14, median views/h +2807
tag_videos:thanksgiving: 0 of 30 videos also in previous run (Jaccard 0.00)
search_videos: 14 of 20 videos also in previous run (Jaccard 0.54)

El script guarda y compara; la decisión queda en manos de una persona o de un agente. Puedes cambiar el hashtag y la palabra clave por tus temas, quitar las dos llamadas de listas musicales si no las usas (ahorras 0,001612 USD por ejecución) o subir el limit de search si quieres listas más largas; el precio por llamada no cambia.

Una ida y vuelta real

Todas las llamadas van a la misma dirección, POST https://api.everyinfra.com/api/v1/social, y el cuerpo de la petición tiene solo tres elementos: platform, action y params. Este es un fragmento de la respuesta real de Viral 50 en la primera ronda, a las 00:15:32 (hora de Singapur): de results dejamos solo la primera fila, quitamos los enlaces de portada y de audio, y del cobro dejamos dos campos.

json
{
  "id": "req_be98682e5b1b451b",
  "platform": "tiktok",
  "action": "music_chart",
  "count": 50,
  "results": [
    {
      "rank": 1,
      "id": "7698515848231372806",
      "url": "https://www.tiktok.com/music/Gangster-Bxtch-7698515848231372806",
      "title": "Gangster Bxtch",
      "author_name": "Additup",
      "language": "English",
      "duration_seconds": 55,
      "use_count": 6534,
      "is_commercial": true
    }
  ],
  "billing": { "charged": true, "charged_usd": 0.000806 }
}

Los campos de primer nivel de la respuesta son siempre los mismos. platform y action repiten la capacidad llamada, count es el número de filas de la página, results contiene las filas, billing.charged_usd es lo que costó realmente la llamada en USD y billing.charged indica si se cobró. Las capacidades con páginas añaden next_page_token y pagination.has_more; nuestra llamada a hashtag_search de las 00:15 devolvió {"page": 1, "has_more": true} en pagination. Cada respuesta trae además un campo async_hint que recuerda que se puede añadir "mode": "async" al cuerpo, recibir un job_id al instante y leer el resultado en GET /api/v1/jobs/{job_id}; sirve cuando un proceso programado no debe dejar una conexión abierta mucho tiempo.

Costo por cada 1000 filas y tres presupuestos mensuales

Con pago por uso, la factura depende solo del número de llamadas. La tabla calcula el costo mensual de la API en tres planes con los precios del catálogo del 2026-11-14: hashtag_search y music_chart cuestan 0,000806 USD por llamada, y hashtag y search, 0,000556 USD. Cada captura de un hashtag usa tres llamadas (hashtag_search, hashtag y search) y cada captura de las dos listas musicales, una por lista.

PlanLlamadas al mesFilas al mesCosto mensual de la API
Pequeño: 1 hashtag + 2 listas musicales, una vez al día150unas 51000,1059 USD
Mediano: 10 hashtags + 2 listas musicales, cada hora23.040unas 576.00014,97 USD
Grande: 100 hashtags + 2 listas musicales, cada hora217.440unas 5.112.000139,26 USD
Gráfico de barras horizontales con el costo mensual de la API en tres planes, con precios del catálogo del 2026-11-14. Pequeño, 1 hashtag y 2 listas musicales una vez al día: 0,1059 USD. Mediano, 10 hashtags y 2 listas cada hora: 14,97 USD, en verde azulado. Grande, 100 hashtags y 2 listas cada hora: 139,26 USD.

El mismo cálculo en código; cambia el número de hashtags y la frecuencia por los de tu plan:

python
PRICE = {"hashtag_search": 0.000806, "music_chart": 0.000806, "hashtag": 0.000556, "search": 0.000556}
def monthly(topics, runs_per_day, charts=2, days=30):
    per_run = topics * (PRICE["hashtag_search"] + PRICE["hashtag"] + PRICE["search"]) + charts * PRICE["music_chart"]
    return round(per_run * runs_per_day * days, 4)
print(monthly(1, 1), monthly(10, 24), monthly(100, 24))   # 0.1059 14.97 139.26

Para gastar menos, pide cada dato al ritmo al que cambia: los totales de cada hashtag con hashtag_search cada hora; la lista de videos de hashtag, cada 3 a 6 horas en días normales, y cada hora solo en un hashtag en plena campaña como #buenfin, que entre rondas conservó solo 6 y 12 de 30 videos; y las listas musicales, una vez al día. Con esas frecuencias, diez hashtags y las dos listas cuestan 11,19 USD al mes, una cuarta parte menos que los 14,97 USD de pedirlo todo cada hora.

Conectarlo a un asistente de IA con MCP remoto

Un asistente de IA puede llamar a las mismas seis capacidades. El servidor MCP remoto de EveryInfra está en https://api.everyinfra.com/mcp y usa un token Bearer. El 2026-11-14 le enviamos una petición tools/list y devolvió 12 herramientas; las tres que hacen el trabajo de datos son everyinfra_list_capabilities (gratis: plataformas, capacidades, parámetros y precios), everyinfra_call_api (llama a cualquier capacidad) y everyinfra_get_job (lee resultados asíncronos). En clientes compatibles con MCP remoto, como Claude Code o Cursor, basta un bloque de configuración; este es un ejemplo de configuración y la clave debe ser la tuya:

json
{
  "mcpServers": {
    "everyinfra": {
      "type": "http",
      "url": "https://api.everyinfra.com/mcp",
      "headers": { "Authorization": "Bearer ${EVERYINFRA_API_KEY}" }
    }
  }
}

Después puedes pedir la tarea en lenguaje natural, por ejemplo: «cada mañana a las 9, trae la Viral 50 de TikTok, compárala con la de ayer y dime las cinco canciones en español con más crecimiento de uso, sin sonidos originales». El modelo llama primero a everyinfra_list_capabilities para la plataforma tiktok y luego a everyinfra_call_api con platform: tiktok, action: music_chart y params: {"chart": "viral50"}. El MCP va bien para una consulta rápida con resumen escrito; para un registro estable cada hora y comparaciones largas, conviene el script con base de datos, porque el modelo no siempre usa los mismos parámetros ni el mismo método de comparación. Las llamadas programadas y las que se reintentan van mejor por la API REST con una cabecera Idempotency-Key, repitiendo el mismo valor al reintentar (más detalle en añadir Idempotency-Key a las llamadas a la API). Los pasos completos están en la página del servidor MCP.

Más allá del marketing: redacciones y equipos de salud pública

No solo las marcas siguen los hashtags de TikTok. Un análisis breve del Pew Research Center del 2026-10-19 indica que una quinta parte de los adultos de Estados Unidos se informa con regularidad en TikTok, frente al 3 % de 2020. El Digital News Report 2026 del Reuters Institute señala que el 20 % de los encuestados en 48 mercados usa TikTok para informarse, la red de video que más crece. Una historia puede subir en TikTok antes que en los buscadores, y un rumor de salud puede circular en videos cortos antes de que llegue la aclaración.

El método es el mismo script con otros hashtags. En las rondas 2 y 3 probamos también un tema de salud pública: hashtag_search con «flu shot» devolvió #flushot como el hashtag más grande: tenía 16.198 videos a las 01:19 y 16.203 videos 1,03 horas después (+5), con 13.206 reproducciones más.

HashtagVideos a las 01:19Videos a las 02:20Reproducciones a las 01:19Reproducciones a las 02:20Cambio en 1,03 h
#flushot16.19816.203172.627.176172.640.382+5 videos, +13.206 reproducciones
#flushots1501150116.607.56516.608.052+0 videos, +487 reproducciones
#flushotseason3943944.387.5174.387.572+0 videos, +55 reproducciones

El segundo hashtag más grande de esa página, #flushots, tenía 1501 videos: en esa hora no sumó ningún video nuevo, pero ganó 487 reproducciones; #flushotseason tenía 394 y ganó 55. En este tema de salud pública, solo el hashtag principal mostró que la gente publicaba contenido nuevo; el crecimiento de reproducciones de las variantes solo dice que los videos viejos siguen teniendo público. Frente a los más de mil videos nuevos por hora de #buenfin, #flushot es un hashtag tranquilo, y eso lo convierte en una buena línea base: si un día suma decenas o cientos de videos por hora, conviene revisar qué pasó. Una redacción puede registrar cada hora el número de videos de varios hashtags de última hora y avisar al editor de guardia cuando los videos nuevos por hora se dupliquen varias horas seguidas. Un equipo de salud pública puede poner en la misma lista hashtags de gripe, vacunas o medicamentos, ver qué afirmación gana videos y después revisar esos videos para juzgar su contenido.

La guía ética de la Organización Mundial de la Salud sobre escucha social fija límites claros: usar datos públicos, preferir cifras agregadas antes que seguir a personas concretas y confirmar cada conclusión con revisión humana. El script guarda solo IDs de video, fechas y contadores, sin nombres de autores; si hace falta ver un video, se abre por su ID. Esta sección describe un método de datos y no es consejo médico.

Cuándo conviene más una ruta oficial

Una API de pago por uso resuelve «ahora, cada hora y sin fila de revisión». En tres casos conviene más una ruta oficial: la investigación académica calificada que necesita muestras históricas completas, con Research API (filtra por ventana de fechas, región y hashtag y entrega 100.000 registros al día sin costo); el estudio de la publicidad en Europa, con Commercial Content API (anunciantes, fechas, alcance y segmentación); y una app que muestra los videos de un creador con su permiso, con Display API, la vía que TikTok ofrece para ese uso. La ruta de pago por uso tampoco hace lo que hacen las oficiales: no tiene búsqueda completa por región y ventana de fechas como Research API, hashtag devuelve 30 videos de la página del hashtag en ese momento y no todos los videos del hashtag, y no incluye datos de segmentación ni de alcance publicitario.

Dos puntos a revisar antes de producción

Primero, hashtag_search devuelve hashtags con nombres parecidos y no los ordena por tamaño. Al buscar «buen fin» a las 00:20 (hora de Singapur), la primera página de 20 hashtags puso #buenfin con 247.285 videos junto a variantes de entre 9 y 8214 videos, como #buenfin2023 o #buenfinmérida, y no incluyó ningún hashtag con el año 2026. Con «thanksgiving» pasó lo mismo: #thanksgiving tenía 5.020.838 videos y las variantes con emoji, entre 4 y 2349. Ordena por video_count o fija un mínimo antes de usar la lista.

Posición en la primera página de «buen fin»HashtagVideos a las 00:20Videos a las 02:19Cambio en dos horas
1#buenfin247.285249.567+2282
2#buen_fin225226+1
9#promocionesbuenfin793813+20
18#ofertasbuenfin22142255+41
5#buenfin2023821482140
3#buenfin2022468346830
7#buenfin2020305330530
6#buenfin2021203220320

De los 20 hashtags de esa página, solo los 4 primeros de la tabla cambiaron su número de videos en dos horas; los otros 16 no sumaron ni uno, incluidos #buenfin2020 a #buenfin2023, con el año en el nombre. Si quitas esos hashtags congelados de tu lista de seguimiento, la lista queda mucho más corta; si los mantienes, registra solo su crecimiento de reproducciones y no los cuentes como hashtags en subida.

Segundo, no hay ranking de hashtags por país. En las seis capacidades de este artículo, las listas musicales y los hashtags son la versión única que devuelve la plataforma: no aceptan parámetro de país y la respuesta no indica la región. Que haya canciones en español, como «Rechazame» de Prince Royce, no prueba que la lista sea de México. Para medir un país, elige palabras clave y hashtags en el idioma local, como #buenfin en México.

Cambios recientes

FechaCambio y qué significa para ti
2026-11-14la antigua dirección de hashtags del Creative Center redirige con un 301 a ads.tiktok.com/creative/creativeCenter/trends, y la página ahora se titula «TikTok One Creative Suite»; lo comprobamos con curl ese día. Los marcadores, documentos y analizadores de páginas que usan la dirección antigua deben cambiar.
2026-11-13empezó El Buen Fin 2026, que según las reglas del programa va del 13 al 17 de noviembre de 2026 y coordina la Profeco. Los hashtags de compras en México crecen esos cinco días por la campaña; no compares ese crecimiento con una semana normal.
2026-11-12TikTok anunció que la competencia dentro de la app de LIVE Fest 2026 empezó el 2026-11-09 y dura hasta finales de diciembre. El evento empuja los hashtags de transmisiones en vivo; tenlo en cuenta al leer tasas de crecimiento.
2026-11-05TikTok Shop Alemania anunció que su campaña de Black Friday va del 11 de noviembre al 16 de diciembre, con la semana fuerte del 23 al 30 de noviembre. La misma nota dice que las publicaciones con #blackfriday entre el 16 de septiembre y el 15 de octubre superaron en un 630 % a los 30 días anteriores. El crecimiento de finales de noviembre en hashtags de compras no se compara directamente con el de octubre.
2026-11-05TikTok actualizó la referencia Get Client Access Token. Los tokens de cliente de Research API y Commercial Content API valen 2 horas (7200 segundos) y el endpoint no devuelve token de renovación; un proceso largo debe pedir un token nuevo cada 2 horas.
2026-10-19el Pew Research Center publicó que el 20 % de los adultos de Estados Unidos se informa con regularidad en TikTok, y el 39 % de los menores de 30 años. Las redacciones tienen más motivos para seguir los hashtags de TikTok.
2026-10-13TikTok Shop Estados Unidos anunció su campaña de Black Friday y Cyber Monday del 11 al 30 de noviembre, y escribió que el contenido con #holidayshopping creció un 263 % en septiembre respecto al mes anterior. Hashtags como #thanksgiving seguirán subiendo hasta el Día de Acción de Gracias, que en el calendario federal de Estados Unidos cae el 26 de noviembre de 2026.

Preguntas frecuentes

Estas preguntas salen del autocompletado de Google, que leímos el 2026-11-14 con una herramienta de sugerencias. La frase original va al final de cada respuesta.

¿TikTok tiene una API oficial de tendencias? ¿Sirven Research API o el Creative Center?

TikTok for Developers lista 9 productos y tres leen datos (Research API, Display API y Commercial Content API), pero ninguno da un ranking de hashtags o de canciones en tendencia (autocompletado: «tiktok api oficial»). Research API es gratis, pero solo para instituciones académicas de Estados Unidos, el EEE, Reino Unido, Canadá o Suiza y organizaciones sin fines de lucro de la UE; los usuarios comerciales y las instituciones de México quedan fuera, y el cupo es de 1000 peticiones y 100.000 registros al día (autocompletado: «tiktok research api free»). El Creative Center tiene listas de tendencias, pero es una página web y la documentación no tiene referencia de API para él; el 2026-11-14 su dirección antigua de hashtags redirigía con un 301 a la nueva página Creative Suite (autocompletado: «tiktok creative center api»).

¿Cómo obtengo hashtags en tendencia de TikTok con una API?

TikTok no ofrece un ranking. Elige un grupo de palabras clave y usa tiktok/hashtag_search de forma programada para registrar el video_count y el view_count de cada hashtag; la diferencia entre dos capturas es el crecimiento por hora. Luego usa tiktok/hashtag para ver qué se publica con ese hashtag (autocompletado: «api de tendencias tiktok»).

¿Cómo obtengo canciones en tendencia de TikTok con una API?

tiktok/music_chart devuelve la Top 50 o la Viral 50 completa en una llamada. Cada fila trae el puesto, use_count (cuántos videos usan la canción) y la fecha de lanzamiento. Para ver los videos de una canción, llama a tiktok/sound_videos con su ID de música (autocompletado: «tiktok trending sounds api»).

¿Me cobran si la llamada falla?

No. Las llamadas fallidas y los resultados vacíos no se cobran: el campo billing.charged de cada respuesta indica si se cobró, y cuando no, charged_usd es 0 (ver la sección de cobros de la documentación). Nuestras 31 llamadas terminaron bien y el billing.charged_usd de cada una coincidió con el precio del catálogo.

¿Cada cuánto actualiza TikTok las canciones en tendencia?

No encontramos ninguna fuente de TikTok que indique el calendario, así que solo podemos dar nuestras mediciones. Entre las 00:20 del 2026-11-11 y las 00:13 del 2026-11-12, cuatro capturas de Viral 50 y tres de Top 50 no mostraron ningún cambio. Entre las 00:13 del 2026-11-12 y las 00:15 del 2026-11-14 llegó una edición nueva: 46 canciones de Viral 50 y 48 de Top 50 entraron o cambiaron de puesto. Las tres rondas del 2026-11-14 volvieron a no mostrar cambios. A ese ritmo basta una consulta al día; lo que cambia cada hora es use_count (autocompletado: «how often does tiktok update trending songs»).

¿Puedo obtener los hashtags en tendencia de TikTok por país?

El Creative Center, la página web oficial, filtra hashtags en tendencia por país, pero no tiene API; Research API filtra videos por region_code, pero solo para investigadores calificados. En las seis capacidades de pago por uso de este artículo, las listas musicales y los hashtags no se filtran por país y la respuesta no indica la región. Para medir el calor en un país, elige palabras clave y hashtags en el idioma local, como #buenfin en México, y registra sus totales con hashtag_search de forma programada (autocompletado: «tiktok trending hashtags by country»).

Primeros pasos: del entorno de pruebas a una captura por hora

  1. Regístrate en la consola de EveryInfra y obtén una clave de API. Sigue la guía rápida para guardar la clave en la variable de entorno EVERYINFRA_API_KEY.
  2. Lee el catálogo gratuito: curl https://api.everyinfra.com/api/v1/social/catalog. Busca las filas con platform igual a tiktok y revisa available, price_usd y las notas de parámetros. También puedes probar llamadas en la página de la plataforma TikTok y en cada página de capacidad, por ejemplo music_chart.
  3. Haz una llamada a mano: curl -X POST https://api.everyinfra.com/api/v1/social -H "Authorization: Bearer $EVERYINFRA_API_KEY" -H "Content-Type: application/json" -d '{"platform":"tiktok","action":"music_chart","params":{"chart":"viral50"}}', y comprueba que recibes 50 filas.
  4. Guarda el script de Python de arriba como tiktok_trends.py, ejecuta pip install requests y córrelo dos veces con una hora de diferencia; en la segunda salida verás los cambios.
  5. Prográmalo cada hora. Si quieres que un asistente de IA consulte los datos, conecta el servidor MCP remoto con la configuración de arriba. Los precios y las reglas de cobro están en la página de precios, y el mercado de datos reúne otras formas de obtener datos parecidos.

Referencias

  1. Research Tools. TikTok for Developers. Consultado el 2026-11-14.
  2. Research API FAQ. TikTok for Developers. Consultado el 2026-11-14.
  3. Research API: Getting Started. TikTok for Developers. Consultado el 2026-11-14.
  4. Research API Reference: Query Videos. TikTok for Developers, 2026-09-01. Consultado el 2026-11-14.
  5. Research API Reference: Query User Info. TikTok for Developers, 2026-09-01. Consultado el 2026-11-14.
  6. Research API Reference: Query Video Comments. TikTok for Developers, 2026-09-01. Consultado el 2026-11-14.
  7. Research API Codebook. TikTok for Developers, 2026-09-10. Consultado el 2026-11-14.
  8. Vetted Researcher Data Access. TikTok for Developers. Consultado el 2026-11-14.
  9. Display API Overview. TikTok for Developers, 2026-08-04. Consultado el 2026-11-14.
  10. Display API: Get Started. TikTok for Developers, 2026-08-19. Consultado el 2026-11-14.
  11. API Reference: List Videos. TikTok for Developers. Consultado el 2026-11-14.
  12. Rate Limits. TikTok for Developers, 2026-08-04. Consultado el 2026-11-14.
  13. Scopes Overview. TikTok for Developers. Consultado el 2026-11-14.
  14. Login Kit Overview. TikTok for Developers, 2026-08-19. Consultado el 2026-11-14.
  15. Get Client Access Token. TikTok for Developers, 2026-11-05. Consultado el 2026-11-14.
  16. Commercial Content API. TikTok for Developers. Consultado el 2026-11-14.
  17. Commercial Content API: Getting Started. TikTok for Developers. Consultado el 2026-11-14.
  18. Commercial Content API Reference: Query Ads. TikTok for Developers. Consultado el 2026-11-14.
  19. Commercial Content API Reference: Query Advertisers. TikTok for Developers, 2026-09-01. Consultado el 2026-11-14.
  20. Commercial Content API: Supported Countries. TikTok for Developers, 2026-09-01. Consultado el 2026-11-14.
  21. Data Portability API. TikTok for Developers. Consultado el 2026-11-14.
  22. Data Portability API: Get Started. TikTok for Developers, 2026-09-10. Consultado el 2026-11-14.
  23. Changelog. TikTok for Developers, 2026-08-25. Consultado el 2026-11-14.
  24. TikTok One Creative Suite: Trends. TikTok for Business. Consultado el 2026-11-14.
  25. Terms of Service (US). TikTok USDS Joint Venture, 2026-07-15. Consultado el 2026-11-14.
  26. Terms of Service (global). TikTok. Consultado el 2026-11-14.
  27. Commercial Music Library. TikTok Help Center. Consultado el 2026-11-14.
  28. What's shaping the holiday season on TikTok Shop. TikTok Newsroom, 2026-10-13. Consultado el 2026-11-14.
  29. Black Friday 2026 bei TikTok Shop. TikTok Newsroom, 2026-11-05. Consultado el 2026-11-14.
  30. Veterans Day 2026: honoring #VeteransofTikTok. TikTok Newsroom, 2026-11-04. Consultado el 2026-11-14.
  31. TikTok LIVE Fest 2026. TikTok Newsroom, 2026-11-12. Consultado el 2026-11-14.
  32. Social data catalog. EveryInfra. Consultado el 2026-11-14.
  33. tiktok-api topic. GitHub. Consultado el 2026-11-14.
  34. TikTok-Api releases. GitHub, 2026-04-01. Consultado el 2026-11-14.
  35. Issue #1311: 200 empty body response for user-level queries. GitHub, 2026-07-18. Consultado el 2026-11-14.
  36. TikTokApi 7.3.3. PyPI, 2026-04-01. Consultado el 2026-11-14.
  37. sqlite3: DB-API 2.0 interface for SQLite databases. Python documentation. Consultado el 2026-11-14.
  38. Requests: HTTP for Humans. Requests documentation. Consultado el 2026-11-14.
  39. Model Context Protocol: Transports. Model Context Protocol, 2025-06-18. Consultado el 2026-11-14.
  40. Regulation (EU) 2022/2065 (Digital Services Act). EUR-Lex, 2022-10-19. Consultado el 2026-11-14.
  41. Delegated act on data access under the Digital Services Act. European Commission, 2025-07-02. Consultado el 2026-11-14.
  42. New measures unlock access to data from largest online platforms. European Commission, 2025-10-29. Consultado el 2026-11-14.
  43. Social listening in infodemic management for public health emergencies: guidance on ethical considerations. World Health Organization, 2025-04-08. Consultado el 2026-11-14.
  44. Infodemic. World Health Organization. Consultado el 2026-11-14.
  45. Federal Holidays. U.S. Office of Personnel Management. Consultado el 2026-11-14.
  46. El Buen Fin. Profeco. Consultado el 2026-11-14.
  47. El Buen Fin 2026. Portal oficial de El Buen Fin. Consultado el 2026-11-14.
  48. 1 in 5 Americans regularly get news on TikTok. Pew Research Center, 2026-10-19. Consultado el 2026-11-14.
  49. Digital News Report 2026: Executive summary. Reuters Institute, 2026-06-16. Consultado el 2026-11-14.

Referencia BL-149

Nuestras estadísticas siempre están activas. Google Analytics, solo con «Permitir analítica». Política de privacidad