Chartex es una plataforma de inteligencia musical que rastrea canciones y sonidos en TikTok, Spotify, YouTube, Instagram Reels y Shazam, y ayuda a sellos discográficos, A&Rs y artistas a ver qué versiones de una pista se están volviendo virales. Este artículo no reproduce cifras privadas de ningún proveedor; en su lugar, explica el modelo de datos que hay detrás de este tipo de herramienta y te ofrece un pipeline reproducible que puedes ejecutar con tus propias fuentes de datos. Diseñarás un esquema normalizado, ingerirás y deduplicarás registros a nivel de sonido, validarás la frescura y la completitud, y diagnosticarás los fallos de atribución multiplataforma más comunes. Cada paso de medición lo ejecutas tú mismo, de modo que los resultados son auditables en lugar de copiados de una página de marketing.
Alcance y respuesta directa
Chartex, tal como se usa el término en analítica musical, se refiere a una categoría de plataforma que agrega el rendimiento de canciones y sonidos en servicios de video corto y de streaming para que sellos discográficos, A&Rs y artistas puedan detectar tendencias virales a tiempo. Las páginas públicas del producto describen el seguimiento de sonidos de TikTok, streams de Spotify, visualizaciones de YouTube, Instagram Reels y recuentos de Shazam, con gráficos y desgloses por sonido. Esa descripción es el comportamiento documentado; las definiciones exactas de las métricas, la cadencia de actualización y la profundidad histórica dependen del proveedor y deben confirmarse en tu propia cuenta o contrato de API.
Este artículo se centra en la metodología. Muestra cómo construir un pipeline que produzca salidas al estilo Chartex a partir de fuentes que controlas o tienes licencia para consultar, y cómo verificar que esas salidas son fiables. Si lo que realmente necesitas es una recomendación breve sobre qué endpoint RPC o proveedor usar para un componente on-chain de tu stack, eso corresponde al RPC Assistant y no a este artículo; consulta la guía de endpoints RPC para el modelo general.
- Documentado: seguimiento multiplataforma de canciones y sonidos, desgloses por sonido, gráficos y atribución de creadores y videos.
- No documentado aquí: fórmulas exactas de las métricas, intervalos de actualización o cobertura garantizada por región.
- Tu responsabilidad: elegir las fuentes, definir la semántica de las métricas y ejecutar la validación antes de confiar en cualquier panel.
Requisitos previos y supuestos
El pipeline que se describe a continuación supone que tienes acceso autorizado a al menos dos fuentes de datos: una plataforma de video corto (TikTok o Instagram Reels) y una plataforma de streaming (Spotify o YouTube). También supone un almacén relacional (en los ejemplos se usa PostgreSQL) y un planificador como cron o un orquestador de flujos de trabajo. No se asume ninguna clave de API de proveedor concreta; sustituye los marcadores de posición por tus propias credenciales.
También deberías decidir de antemano si vas a rastrear grabaciones canónicas, objetos de sonido o subidas de creadores. Son entidades distintas y confundirlas es la causa más común de recuentos inflados o duplicados. Si tu pipeline también toca datos de blockchain con fines de regalías o atribución, mantén esa ruta separada y encamina el acceso a los nodos a través de un proveedor gestionado; la guía de endpoints RPC multicadena explica las ventajas y desventajas.
- Acceso autorizado por API a al menos dos plataformas.
- PostgreSQL 14+ o equivalente con soporte para JSONB.
- Un planificador y un gestor de secretos para las credenciales de API.
- Un diccionario de métricas definido y acordado con las partes interesadas antes de la ingesta.
Modelo mental: canciones, sonidos y creadores son entidades distintas
Una canción es una grabación canónica con un ISRC. Un sonido es un objeto de audio específico de una plataforma que puede ser la pista original, una versión acelerada, un remix, una versión con IA o el audio original de un creador. Un creador es una cuenta que publica videos usando un sonido. Los paneles al estilo Chartex son útiles precisamente porque separan estas capas: una canción puede corresponder a docenas de sonidos, y un sonido puede usarse en miles de videos.
Diseña tu esquema en torno a esa jerarquía. Almacena una tabla songs con clave ISRC cuando esté disponible, una tabla sounds con clave de plataforma más ID de sonido de la plataforma, y una tabla videos con clave de plataforma más ID de video. Una tabla sound_song_map resuelve la relación de muchos a muchos, y una tabla metrics_daily almacena observaciones de series temporales. Esta estructura te permite responder tanto a «cómo va la canción en general» como a «qué sonido la está impulsando» sin recalcular uniones en el momento de la consulta.
CREATE TABLE songs (
song_id BIGSERIAL PRIMARY KEY,
isrc TEXT UNIQUE,
title TEXT NOT NULL,
artist TEXT NOT NULL
);
CREATE TABLE sounds (
sound_id BIGSERIAL PRIMARY KEY,
platform TEXT NOT NULL,
platform_sound_id TEXT NOT NULL,
sound_name TEXT,
UNIQUE (platform, platform_sound_id)
);
CREATE TABLE sound_song_map (
sound_id BIGINT REFERENCES sounds(sound_id),
song_id BIGINT REFERENCES songs(song_id),
confidence NUMERIC(3,2),
PRIMARY KEY (sound_id, song_id)
);
CREATE TABLE metrics_daily (
entity_type TEXT NOT NULL,
entity_id BIGINT NOT NULL,
metric TEXT NOT NULL,
observed_on DATE NOT NULL,
value BIGINT NOT NULL,
source TEXT NOT NULL,
PRIMARY KEY (entity_type, entity_id, metric, observed_on, source)
);Procedimiento de ingesta con código ejecutable
Empieza con una sola fuente y una sola métrica para poder validar la forma antes de escalar. El ejemplo de Python siguiente obtiene una lista paginada de sonidos de una canción determinada desde un endpoint de marcador de posición, normaliza la respuesta y hace upsert en el esquema anterior. Sustituye API_BASE, API_TOKEN y los nombres de los campos de respuesta por los de tu fuente autorizada.
Ejecuta el script de forma programada y registra cada solicitud con su marca de tiempo, código de estado y número de registros. Ese registro es lo que hace posible la validación posterior; sin él no puedes distinguir una caída real de una métrica de una obtención fallida o parcial.
import os, requests, psycopg2
from datetime import date
API_BASE = os.environ["API_BASE"]
TOKEN = os.environ["API_TOKEN"]
DB = psycopg2.connect(os.environ["DATABASE_URL"])
def fetch_sounds(song_id, cursor=None):
params = {"song_id": song_id, "limit": 100}
if cursor:
params["cursor"] = cursor
r = requests.get(f"{API_BASE}/sounds", params=params,
headers={"Authorization": f"Bearer {TOKEN}"}, timeout=30)
r.raise_for_status()
return r.json()
def upsert_sound(cur, platform, sound):
cur.execute("""
INSERT INTO sounds (platform, platform_sound_id, sound_name)
VALUES (%s, %s, %s)
ON CONFLICT (platform, platform_sound_id)
DO UPDATE SET sound_name = EXCLUDED.sound_name
RETURNING sound_id
""", (platform, sound["id"], sound.get("name")))
return cur.fetchone()[0]
with DB, DB.cursor() as cur:
page = fetch_sounds(song_id=12345)
for s in page["items"]:
sid = upsert_sound(cur, "tiktok", s)
cur.execute("""
INSERT INTO metrics_daily (entity_type, entity_id, metric, observed_on, value, source)
VALUES ('sound', %s, 'video_count', %s, %s, 'tiktok')
ON CONFLICT (entity_type, entity_id, metric, observed_on, source)
DO UPDATE SET value = EXCLUDED.value
""", (sid, date.today(), s["video_count"]))Normalización y atribución multiplataforma
La atribución es donde la mayoría de los pipelines fallan en silencio. Un sonido de TikTok llamado 'Come With Me (Sped Up)' y una pista de Spotify llamada 'Come With Me' pueden ser o no la misma grabación. Usa una estrategia de coincidencia por capas: primero coincidencia exacta de ISRC, después título normalizado más artista con puntuación difusa, y por último revisión manual para los sonidos de alto impacto. Guarda la puntuación de confianza para que las consultas posteriores puedan filtrar por ella.
Normaliza el texto de forma coherente antes de hacer la coincidencia: pasa a minúsculas, elimina la puntuación, colapsa los espacios en blanco y separa los sufijos comunes como 'sped up', 'slowed', 'remix' y 'cover' en etiquetas de versión independientes en lugar de descartarlos. Conserva las cadenas originales en una columna sin procesar para poder volver a ejecutar la coincidencia cuando cambien tus reglas.
- Coincidencia exacta de ISRC: máxima confianza, úsala cuando esté disponible.
- Coincidencia difusa de título más artista: confianza media, con umbral y revisión.
- Coincidencia solo por nombre de sonido: baja confianza, nunca fusionar automáticamente sin revisión.
- Etiquetas de versión (sped up, remix, cover) almacenadas por separado del título base.
Verificación: resultados esperados y procedimiento con tabla de resultados
Después de la ingesta, verifica tres cosas: completitud (¿llegó cada entidad esperada?), frescura (¿la observación más reciente está dentro de la ventana esperada?) y consistencia (¿cuadran los totales entre tablas?). El SQL siguiente devuelve una tabla de resultados que puedes pegar en tu runbook. No rellenes los valores esperados a partir de una página de proveedor; registra lo que produce tu propio pipeline y compáralo con la ejecución anterior.
| Comprobación | Propósito de la consulta | Condición de aprobación |
|---|---|---|
| Completitud | Recuento de sonidos por canción frente al total de la API de origen | Igual dentro del 1 % |
| Frescura | Máximo observed_on por fuente | Dentro de las 24 horas posteriores a la ejecución |
| Consistencia | Suma de video_count de sonidos frente al recuento de la tabla de videos | Igual dentro de la tolerancia de deduplicación conocida |
| Atribución | Proporción de sonidos con confianza >= 0.9 | Cumple tu umbral acordado |
| Tasa de errores | Solicitudes fallidas en el registro de ingesta | Por debajo de tu umbral de alerta |
Ejecuta esto después de cada carga programada y guarda la salida junto al registro de ejecución. Una métrica que se mueve sin un cambio correspondiente en la fuente subyacente es un error del pipeline, no una tendencia.
SELECT source,
MAX(observed_on) AS latest_observation,
CURRENT_DATE - MAX(observed_on) AS days_stale
FROM metrics_daily
GROUP BY source
ORDER BY days_stale DESC;
SELECT s.song_id,
COUNT(DISTINCT m.entity_id) AS sounds_with_metrics,
COUNT(DISTINCT s.sound_id) AS sounds_mapped
FROM sound_song_map s
LEFT JOIN metrics_daily m
ON m.entity_type = 'sound' AND m.entity_id = s.sound_id
GROUP BY s.song_id;Resolución de fallos comunes del pipeline
La mayoría de los fallos se agrupan en cuatro categorías: autenticación y límites de tasa, deriva de esquema, entidades duplicadas y desalineación de zonas horarias. Los límites de tasa suelen aparecer como respuestas HTTP 429 y páginas parciales; aplica retroceso exponencial y registra el número de reintentos. La deriva de esquema aparece como campos faltantes después de que una fuente cambia la forma de su respuesta; valida contra un esquema JSON en cada obtención y falla de forma ruidosa en lugar de escribir valores nulos.
Las entidades duplicadas surgen cuando el mismo sonido se devuelve con distintos ID de plataforma, a menudo tras una migración de plataforma. La desalineación de zonas horarias hace que las métricas diarias se desplacen un día entre fuentes; almacena todas las marcas de tiempo en UTC y convierte solo en el momento de la presentación. Si tu pipeline también consulta nodos de blockchain para datos de regalías on-chain, la fiabilidad del endpoint se convierte en un dominio de fallo aparte; la guía de alojamiento de nodos de blockchain cubre el lado operativo.
- HTTP 429: retroceso exponencial, limita los reintentos y alerta ante fallos sostenidos.
- Campos faltantes: valida el esquema JSON, haz fallar el lote y no escribas filas parciales.
- Sonidos duplicados: deduplica por plataforma más platform_sound_id y revisa las fusiones.
- Desfase de fechas: almacena en UTC y documenta explícitamente la zona horaria de los informes.
Limitaciones y compromisos
La analítica musical multiplataforma es inherentemente aproximada. Las plataformas no exponen definiciones de métricas idénticas, y algunos recuentos se muestrean o llegan con retraso. Un pipeline que afirma una paridad exacta entre TikTok, Spotify y YouTube está exagerando su precisión. Trata la salida como inteligencia orientativa para priorizar, no como datos financieros auditados.
También hay un compromiso de coste. Un sondeo más frecuente mejora la frescura, pero aumenta el uso de la API y el almacenamiento. Empieza con granularidad diaria, mide con qué frecuencia tus decisiones dependen realmente de datos intradía y solo entonces aumenta la frecuencia. Para los equipos que gestionan su propia infraestructura, los nodos dedicados y el RPC gestionado pueden reducir la sobrecarga operativa; consulta las páginas de nodo dedicado y precios de RPC para el modelo de costes, y el directorio de redes para las cadenas compatibles si tu pipeline toca datos on-chain.
Próximos pasos: del pipeline al apoyo a la decisión
Una vez que la validación se supera de forma constante, añade una capa de gráficos que muestre las métricas sobre las que tu equipo realmente actúa: tasa de crecimiento por sonido, concentración de creadores y correlación multiplataforma. Mantén intactas las tablas sin procesar para poder recalcular los gráficos cuando cambien las definiciones. Documenta el diccionario de métricas en el mismo repositorio que el código del pipeline para que ambos no se desvíen nunca.
Si necesitas una recomendación concreta de endpoint o proveedor para el lado de infraestructura de tu stack, usa el RPC Assistant en lugar de incrustar una elección de proveedor en esta metodología. Para una visión más amplia de cómo encajan los servicios de API gestionados en una plataforma de datos, la descripción general del servicio de API es el punto de partida adecuado.
- Congela el diccionario de métricas antes de construir los paneles.
- Vuelve a ejecutar la validación después de cada cambio de esquema o de fuente.
- Separa la inteligencia orientativa de los informes auditados.
- Deriva las preguntas de infraestructura al RPC Assistant.