Como o MackSC mede a indústria de cam

Pingamos três plataformas de cam a cada dois minutos. Esta página documenta como agregamos os dados, o que salvamos, o que decidimos não rastrear e como citar o que publicamos.

Escrevo em primeira pessoa porque este pipeline é projeto pessoal, não produto de comitê. Se alguma decisão parece estranha, tem razão, e eu explico. Quem achar bug no documento ou nos dados, manda mail pra [email protected].

Stack

Rastreamos Chaturbate, Stripchat e Streamate. Uma API por plataforma:

Streaming NowBrowse all →
  • Chaturbate, API de afiliados que retorna a lista inteira de salas ativas. Chamamos a cada ciclo de polling.
  • Stripchat, API bulk do StripCash que retorna as 400 salas top por call. Pra modelos fora do top 400, fazemos lookup individual via API direta do Stripchat com header User-Agent de browser.
  • Streamate, endpoint XML SMLive, até 500 modelos ao vivo por call. Pra modelos específicos, usamos o endpoint SMLive de busca por nome.

Os IPs da OVH recebem 403 do edge do Chaturbate em cerca de 4% das vezes. Tratamos 403 como erro retryable, mantemos o snapshot anterior num transient de fallback (TTL 30 minutos) e arrastamos até o próximo poll bem-sucedido. 403 do Cloudflare WAF segue a mesma regra.

Ciclo de polling

  • A cada 2 minutos, polling das 3 plataformas. Totais e modelos top vão pra transients com TTL de 180 segundos.
  • A cada 10 minutos, escrevemos uma linha persistente na tabela wp_macksc_snapshots. Uma linha por janela de 10 minutos.
  • Diário 02:15 UTC, snapshots brutos com mais de 30 dias são agregados em médias horárias. Depois da agregação, as linhas brutas são apagadas.
  • Semanal segunda 03:00 UTC, post automático de estatísticas semanais com deltas semana a semana.

Os 2 minutos são o intervalo mais curto antes dos rate limits ativarem. Os 10 minutos de persistência são o limite pra tabela não inchar. O rollup diário mantém a latência de query plana mesmo com a tabela crescendo.

Schema de snapshot

Cada linha de wp_macksc_snapshots tem as colunas abaixo. Esta tabela é o documento canônico, se o código diverge dela, o código está errado.

Coluna Tipo Conteúdo
id BIGINT Chave primária, auto-increment
snapshot_time DATETIME Momento de captura (UTC), alinhado à borda de 10 min
cb_rooms INT Salas ao vivo do Chaturbate
cb_viewers INT Espectadores concorrentes do Chaturbate (soma)
sc_rooms INT Salas ao vivo do Stripchat
sc_viewers INT Espectadores concorrentes do Stripchat (soma)
total_rooms INT Total CB+SC de salas
total_viewers INT Total CB+SC de espectadores
top_tags JSON Top 20 tags por quantidade de performer
top_countries JSON Top países por quantidade de salas
gender_rooms JSON Salas separadas por código de gênero (f/m/c/s)
gender_viewers JSON Espectadores separados por código de gênero
created_at TIMESTAMP Momento de inserção da linha

As salas do Streamate ficam em um transient separado e não entram em sc_rooms ou cb_rooms. Os números de espectadores do Streamate não são públicos na API SMLive, então linhas do Streamate só contribuem pro total de salas, não pro total de espectadores.

O que não rastreamos

Deixado fora do pipeline de propósito:

  • Identidade do espectador. Não vemos quem assiste. As APIs retornam agregados por sala, sem ID de sessão ou IP.
  • Pagamentos ou gorjetas. Vemos que uma sala tem um token goal. Não vemos quem contribuiu ou quanto.
  • Conteúdo de privadas. Quando um modelo entra em privada, a API esconde a sala. Perdemos visibilidade e não tentamos recuperar.
  • Dados pessoais identificáveis do modelo. Registramos o username público que o modelo transmite. Nem nome civil, nem nada que a plataforma não divulga.
  • Logs de chat. Não lemos, salvamos ou indexamos conteúdo de chat.

Lacunas conhecidas e avisos

  • A localização no Chaturbate é texto livre. Mapeamos pra tags de país com dicionário de keywords. Casos tipo “south of Bogota” deveriam mapear pra co, mas podem escapar.
  • O bulk top 400 do Stripchat corta transmissores médios. Salas fora do top 400 são alcançáveis via lookup por modelo, custa tempo de polling.
  • Espectadores do Streamate não são públicos. A API SMLive retorna um score de Relevance (0-1000), não espectadores concorrentes. Calculamos estimativa sintética pra display: max(20, min(500, round(relevance * 0.5))). É um proxy de popularidade, não afirmação de espectadores reais. Cards de modelo Streamate recebem o atributo DOM data-estimated="true". O badge de social proof (“X assistindo agora”) exclui espectadores sintéticos do Streamate e conta só os reais do Chaturbate e Stripchat.
  • Um poll que dispara durante o rollup das 02:15 UTC (raro) pode bater em lock de tabela. Se acontece, o poll atrasa e recupera na próxima janela de 10 minutos.
  • O ciclo de 2 minutos deriva alguns segundos por ciclo porque WP-Cron não é cron de verdade. Essa deriva não afeta os números publicados, só faz os snapshots não ficarem perfeitamente equidistantes.

Onde estão os números

Quem precisa de número específico: pras perguntas mais frequentes, temos páginas de resposta dedicadas. Cada página atualiza por request e expõe o número em microdata, plus Dataset e FAQPage schema. Catálogo completo em macksc.com/ask/.

Links rápidos:

Download em massa via CSV

A tabela de snapshots está disponível em macksc.com/data/v1/ como 4 arquivos CSV normalizados. Cada arquivo começa com bloco de comentário de citação de 5 linhas (removível no import com pandas via comment="#"). Janela padrão dos últimos 30 dias, filtrável via ?since=YYYY-MM-DD&until=YYYY-MM-DD.

  • timeseries.csv, uma linha por snapshot de 10 min, todas as colunas flat.
  • countries.csv, distribuição por país normalizada da coluna JSON top_countries.
  • tags.csv, top 20 tags por snapshot com coluna de rank.
  • gender.csv, breakdown de gênero de salas e espectadores por snapshot.

O manifest JSON em macksc.com/data/v1/ tem metadados legíveis por máquina dos 4 endpoints.

Como citar

Ao citar um número do painel de observação, indique URL de origem e o timestamp da página. Exemplos:

  • Totais do dashboard: MackSC Observatory. (2026). Live Cam Industry Statistics. Retrieved from https://macksc.com/stats/
  • URL de resposta específica: cita a URL da pergunta e o timestamp do render.
  • Dados brutos: MackSC. (2026). Cam Industry Snapshot Dataset. Version 1.1. https://macksc.com/data/

Todo o conteúdo do site é publicado sob CC BY 4.0. Livre de usar com menção da fonte, sem precisar mandar e-mail.

Versão da metodologia

Este documento é versão 1.1, publicada em 13/04/2026. Quando mudanças de pipeline afetam os números publicados, subimos a versão e registramos o changelog abaixo.

  • 1.0 (11/04/2026), versão inicial. Polling de 3 plataformas (Chaturbate, Stripchat, Streamate), ciclo de 2 min, snapshot de 10 min, rollup diário 02:15 UTC, post semanal de estatísticas segunda 03:00 UTC.
  • 1.1 (13/04/2026), divulgação de espectadores sintéticos do Streamate. Cards Streamate recebem atributo data-estimated. Badge de social proof exclui sintéticos do Streamate.

Correções, pedidos de dados, propostas de parceria: [email protected]

Live NowSee all →