Cómo MackSC mide la industria cam

Hacemos ping a tres plataformas de cam cada dos minutos. Esta página documenta cómo agregamos los datos, qué guardamos, qué decidimos no trackear y cómo citar lo que publicamos.

Escribo en primera persona porque esta pipeline es un proyecto personal, no el producto de un comité. Si alguna decisión te parece rara hay razón detrás y la explico. Si encontrás un bug en este documento o en los datos, mandá mail a [email protected].

Stack

Trackeamos Chaturbate, Stripchat y Streamate. Una API por plataforma:

Streaming NowBrowse all →
  • Chaturbate, API de afiliados que devuelve el listado entero de salas activas. La llamamos en cada ciclo de polling.
  • Stripchat, API bulk de StripCash que devuelve las 400 salas top por llamada. Para modelos específicos fuera del top 400 hacemos lookup individual via la API directa de Stripchat con header de User-Agent de navegador.
  • Streamate, endpoint XML SMLive que devuelve hasta 500 modelos en vivo por llamada. Para modelos específicos usamos el endpoint de búsqueda por nombre de SMLive.

Los IPs de OVH reciben 403 del edge de Chaturbate el 4% de las veces aproximadamente. Tratamos el 403 como error retryable, mantenemos el snapshot anterior en un transient de respaldo (TTL 30 minutos) y lo arrastramos hasta el siguiente poll exitoso. El 403 de Cloudflare WAF se trata con la misma regla.

Ciclo de polling

  • Cada 2 minutos, hacemos polling de las 3 plataformas. Totales y modelos top se guardan en transients con TTL de 180 segundos.
  • Cada 10 minutos, escribimos una fila persistente en la tabla wp_macksc_snapshots. Una fila por ventana de 10 minutos.
  • Diario 02:15 UTC, los snapshots crudos con más de 30 días se agregan en promedios horarios. Después de agregarlos, las filas crudas se borran.
  • Semanal lunes 03:00 UTC, publicamos un post automático de estadísticas de la semana con las deltas semana-a-semana.

Los 2 minutos son el intervalo más corto que podemos mantener antes de que los rate limits se activen. Los 10 minutos de persistencia son el límite donde la tabla no se hincha incontrolablemente. El rollup diario mantiene la latencia de queries plana aun cuando la tabla crece.

Esquema de snapshot

Cada fila de wp_macksc_snapshots tiene las columnas abajo. Esta tabla es el documento canónico, si el código se desvía de ella el código está equivocado.

Columna Tipo Contenido
id BIGINT Clave primaria, auto-increment
snapshot_time DATETIME Momento de captura (UTC), alineado al borde de 10 min
cb_rooms INT Salas en vivo de Chaturbate
cb_viewers INT Espectadores concurrentes de Chaturbate (suma)
sc_rooms INT Salas en vivo de Stripchat
sc_viewers INT Espectadores concurrentes de Stripchat (suma)
total_rooms INT Total CB+SC de salas
total_viewers INT Total CB+SC de espectadores
top_tags JSON Top 20 tags por cantidad de performers
top_countries JSON Top países por cantidad de salas
gender_rooms JSON Desglose de salas por código de género (f/m/c/s)
gender_viewers JSON Desglose de espectadores por código de género
created_at TIMESTAMP Momento de inserción de la fila

Las salas de Streamate se trackean en transient aparte y no entran en sc_rooms ni cb_rooms. Los espectadores de Streamate no se publican en la API SMLive, así que las filas de Streamate solo aportan al total de salas, no al total de espectadores.

Qué no trackeamos

Lo que dejamos explícitamente afuera de la pipeline:

  • Identidad del espectador. No vemos quién mira. Las APIs devuelven agregados por sala, no identifiers de sesión ni IPs.
  • Pagos ni propinas. Vemos que una sala tiene un token goal. No vemos quién aportó ni cuánto.
  • Contenido de privados. Cuando una modelo entra en privado, la API oculta la sala. Perdemos visibilidad y no intentamos recuperarla.
  • Datos personales identificables de la modelo. Registramos el username público que la modelo transmite. No nombres legales, no nada que la plataforma no haga público.
  • Logs de chat. No leemos, no guardamos, no indexamos contenido de chat.

Gaps conocidos y advertencias

  • La ubicación en Chaturbate es texto libre. La mapeamos a tags de país con un diccionario de keywords. Edge cases como «south of Bogota» deberían mapear a co pero pueden escaparse.
  • El bulk top 400 de Stripchat corta a transmisores mid-range. Las salas fuera del top 400 son alcanzables con lookup por modelo pero suma tiempo al polling.
  • Los espectadores de Streamate no son públicos. La API SMLive devuelve un score de Relevance (0-1000) pero no espectadores concurrentes. Calculamos un estimado sintético para display: max(20, min(500, round(relevance * 0.5))). Es un proxy de popularidad, no una afirmación de espectadores reales. Las tarjetas de modelos Streamate tienen el atributo DOM data-estimated="true". El badge de social proof («X personas mirando ahora») excluye los espectadores sintéticos de Streamate y cuenta solo los reales de Chaturbate y Stripchat.
  • Un poll que se dispara durante el rollup de las 02:15 UTC (raro) puede chocar con lock de tabla. Si pasa, el poll se retrasa y se recupera en la ventana de 10 minutos siguiente.
  • El ciclo de 2 minutos derivará unos segundos por ciclo porque WP-Cron no es cron real. La deriva no afecta los números publicados, solo implica que los snapshots no quedan perfectamente equiespaciados.

Dónde están los números

Si buscás un número específico, tenemos páginas de respuesta dedicadas para las preguntas más frecuentes. Cada página se actualiza por request y expone el número en microdata, más schema Dataset y FAQPage. El catálogo completo está en macksc.com/ask/.

Links rápidos:

Descarga masiva en CSV

La tabla de snapshots está disponible en macksc.com/data/v1/ como 4 archivos CSV normalizados. Cada archivo arranca con un bloque de 5 líneas de comentario de citación (removible al importar con pandas usando comment="#"). Ventana default de los últimos 30 días, filtrable con ?since=YYYY-MM-DD&until=YYYY-MM-DD.

  • timeseries.csv, una fila por snapshot de 10 min, todas las columnas planas.
  • countries.csv, distribución por país normalizada desde la columna JSON top_countries.
  • tags.csv, top 20 tags por snapshot con columna de rank.
  • gender.csv, desglose por género de salas y espectadores por snapshot.

El manifest JSON de macksc.com/data/v1/ tiene metadatos machine-readable de los 4 endpoints.

Cómo citar

Cuando cites un número del panel de observación, dejá clara la URL de origen y el timestamp que aparece en la página. Ejemplos:

  • Totales desde el dashboard: MackSC Observatory. (2026). Live Cam Industry Statistics. Retrieved from https://macksc.com/stats/
  • URL de respuesta específica: cita la URL de la pregunta y el timestamp del render de la página.
  • Datos crudos: MackSC. (2026). Cam Industry Snapshot Dataset. Version 1.1. https://macksc.com/data/

Todo el contenido del site se publica bajo CC BY 4.0. Libre de citar con mención de fuente, no hace falta pedir permiso por mail.

Versión de la metodología

Este documento es versión 1.1, publicada el 2026-04-13. Si cambia la pipeline de una forma que altera los números publicados, subimos la versión y dejamos el changelog abajo.

  • 1.0 (2026-04-11), versión inicial. Polling de 3 plataformas (Chaturbate, Stripchat, Streamate), ciclo de 2 min, snapshot de 10 min, rollup diario a las 02:15 UTC, post semanal de estadísticas los lunes a las 03:00 UTC.
  • 1.1 (2026-04-13), declaración de los espectadores sintéticos de Streamate. Tarjetas de modelos Streamate reciben atributo data-estimated. El badge de social proof excluye los espectadores sintéticos de Streamate.

Correcciones, pedidos de datos, propuestas de colaboración: [email protected]

Live NowSee all →