Fuentes de tráfico y UTMs
Compara campañas, fuentes y anuncios por visualizaciones, retención, pitch y ventas
Cada parámetro de la dirección de la página donde se vio el reproductor se registra con la sesión, siempre que tenga un valor: por lo general las UTM (utm_source, utm_medium, utm_campaign, utm_term, utm_content), src y sck, pero también cualquier otro parámetro. Agrupar las métricas por sus valores indica qué fuente, campaña o anuncio trae a los espectadores que se quedan y compran.
Necesitas el ID del reproductor, la duración del vídeo y el tiempo de pitch. GET /players/list devuelve los tres.
Mira qué parámetros trae tu tráfico
POST /traffic_origin/valid_utms cuenta cuántas veces se registró cada parámetro para el reproductor:
curl -X POST 'https://analytics.vturb.com/traffic_origin/valid_utms' \
-H "X-Api-Token: $VTURB_API_TOKEN" \
-H 'X-Api-Version: v1' \
-H 'User-Agent: mi-integracion/1.0' \
-H 'Content-Type: application/json' \
-d '{
"player_id": "64a5c8072e6fd10009828db2",
"start_date": "2026-09-01 00:00:00",
"end_date": "2026-09-07 23:59:59",
"timezone": "America/Sao_Paulo"
}'[
{ "utm_source": 1520 },
{ "utm_campaign": 1488 },
{ "utm_content": 960 },
{ "src": 312 }
]Cada elemento contiene un parámetro y su recuento. start_date es obligatorio; end_date es opcional.
Compara los valores de un parámetro
POST /traffic_origin/stats devuelve una fila por cada valor del parámetro de query_key:
curl -X POST 'https://analytics.vturb.com/traffic_origin/stats' \
-H "X-Api-Token: $VTURB_API_TOKEN" \
-H 'X-Api-Version: v1' \
-H 'User-Agent: mi-integracion/1.0' \
-H 'Content-Type: application/json' \
-d '{
"player_id": "64a5c8072e6fd10009828db2",
"start_date": "2026-09-01 00:00:00",
"end_date": "2026-09-07 23:59:59",
"timezone": "America/Sao_Paulo",
"query_key": "utm_source",
"video_duration": 2340,
"pitch_time": 1260
}'Omite query_key para recibir todos los parámetros a la vez, cada fila con su propio query_key, o envía query_keys, una lista, para recibir solo esos parámetros.
video_duration y pitch_time, en segundos, no se leen del reproductor aquí: envíalos con los valores de GET /players/list. video_duration es obligatorio; envía pitch_time cuando el reproductor tenga uno, y déjalo fuera cuando la lista devuelva 0.
[
{
"query_key": "utm_source",
"grouped_field": "facebook",
"total_viewed_device_uniq": 840,
"total_started_device_uniq": 410,
"play_rate": 48.8,
"engagement_rate": 41,
"total_over_pitch": 140,
"total_under_pitch": 290,
"over_pitch_rate": 32.55,
"total_conversions": 22,
"overall_conversion_rate": 5.36,
"total_amount_brl": 437800
}
]grouped_field es el valor del parámetro. Los campos tienen los nombres y las fórmulas del informe diario, con estas diferencias:
total_over_pitchytotal_under_pitchcuentan solo las sesiones que pulsaron play, y una sesión que pulsó play sin ningún progreso registrado cuenta por debajo del pitch.- Las ventas y sus importes se seleccionan por el momento en que se registró la venta, no por el momento del clic.
engagement_ratees un número entero, yplay_ratenunca supera 100.
Síguelos día a día
POST /traffic_origin/stats_by_day recibe el mismo cuerpo con query_keys, una lista, en lugar de query_key, y devuelve una fila por día, parámetro y valor, cada una con su date_key. Un día sin tráfico vuelve como una fila con query_key y grouped_field vacíos, y ceros:
{
"player_id": "64a5c8072e6fd10009828db2",
"start_date": "2026-09-01 00:00:00",
"end_date": "2026-09-07 23:59:59",
"timezone": "America/Sao_Paulo",
"query_keys": ["utm_source", "utm_campaign"],
"video_duration": 2340,
"pitch_time": 1260
}Úsalo para ver si una campaña se sostiene a lo largo de la semana o se apaga después de los primeros días.
Compara dónde abandona el vídeo cada fuente
POST /times/user_engagement_by_traffic_origin devuelve los datos de retención separados por valor. values lista los valores que quieres comparar:
{
"player_id": "64a5c8072e6fd10009828db2",
"start_date": "2026-09-01 00:00:00",
"end_date": "2026-09-07 23:59:59",
"timezone": "America/Sao_Paulo",
"query_key": "utm_source",
"values": ["facebook", "google"]
}[
{ "group_key": "facebook", "group_values": [{ "timed": 0, "totalUsers": 120 }, { "timed": 5, "totalUsers": 31 }] },
{ "group_key": "google", "group_values": [{ "timed": 0, "totalUsers": 64 }, { "timed": 5, "totalUsers": 12 }] }
]Como en la curva de retención, cada elemento cuenta las sesiones que se detuvieron en ese segundo. Convierte cada group_values en una curva de la misma forma, renombrando totalUsers a total_users, y dibuja las fuentes en un mismo gráfico: la que mantiene la curva más alta hasta el pitch es la que trae a los espectadores que ven el vídeo.
Mantén los parámetros coherentes
Los valores se agrupan como llegan en la dirección, una vez decodificados de la URL: black%20friday y black friday son una sola fila, pero Facebook y facebook son dos. Una sesión cuenta una vez por parámetro, con el último valor que trajo. Estandariza cómo escriben sus parámetros tus campañas, y la comparación funciona sin limpiar los datos después.