TikTok Dashboard. Metricas Diarias Automaticas
Quando Usar
- Quando o aluno quiser monitorar o crescimento do proprio perfil no TikTok de forma automatica, sem precisar abrir ferramentas toda manha.
- Como base de dados para
/copy-social(conteudo baseado no que ja funciona) e para analisar padroes de videos que viralizaram. - Quando o aluno precisar mostrar evolucao de metricas para clientes ou parceiros.
Nao usar para:
- Analisar perfis de concorrentes (adaptar o script passando outro username).
- Perfis privados (o Apify nao coleta dados de perfis privados).
O Que Entrega
| Arquivo | Descricao |
|---|---|
.claude/skills/tiktok-dashboard/scripts/atualizar.py |
Script Python principal (Windows, macOS, Linux) — compartilhado entre todos os produtos |
meus-produtos/{ativo}/entregas/tiktok-dashboard/dashboard.html |
Dashboard HTML completo, abre no navegador |
meus-produtos/{ativo}/entregas/tiktok-dashboard/imagens/ |
Thumbnails dos videos (gerados pelo script) |
meus-produtos/{ativo}/entregas/tiktok-dashboard/insights.json |
Dados estruturados sem base64 |
meus-produtos/{ativo}/entregas/tiktok-dashboard/historico.json |
Snapshots acumulativos (seguidores, engajamento) entre execucoes |
meus-produtos/{ativo}/entregas/tiktok-dashboard/log.txt |
Log de cada execucao com timestamp e status |
Como Funciona
atualizar.py
├── POST Apify (ator TikTok, sync) — perfil
│ username → seguidores, seguindo, likes totais, bio, avatar
│ Baixa avatar → base64
├── POST Apify (ator TikTok, sync) — videos
│ username → ultimos N videos
│ Para cada video: views, likes, comentarios, compartilhamentos,
│ saves, duracao, hashtags, descricao, data
│ Baixa thumbnail de cada video → base64
├── Calcula metricas: engajamento = (likes+comentarios+shares) / views
├── Atualiza historico.json com snapshot do dia
└── Regenera dashboard.html com dados + thumbnails embutidos como variavel JS
O dashboard.html e sempre autossuficiente: dados e thumbnails embutidos diretamente no HTML. Nao depende de servidor local. Funciona abrindo direto no navegador, inclusive offline apos a primeira geracao.
APIs Utilizadas
Ator utilizado: clockworks~tiktok-scraper (o mais estavel e completo em 2026).
| # | Ator Apify | Tipo | Parametro chave | Retorna |
|---|---|---|---|---|
| 1 | clockworks~tiktok-scraper |
sync, timeout 300s | profiles (URL do perfil), resultsPerPage: 30 |
lista de videos com authorMeta embutido (perfil + videos numa so chamada) |
Chamada sync (endpoint run-sync-get-dataset-items). Uma unica chamada retorna perfil (via authorMeta do primeiro item) e todos os videos. Nao ha chamada separada de perfil.
Por que sync e nao async: mesmo motivo do Instagram: endpoints async retornam run IDs que podem ficar inacessiveis dependendo do plano. Sync e mais simples e confiavel.
Todas as thumbnails em base64: TikTok CDN pode bloquear imagens em HTML local. O script baixa cada thumbnail com requests usando User-Agent e Referer adequados.
Custo por execucao: a definir (depende do ator escolhido e do numero de videos coletados).
Compatibilidade por Sistema Operacional
Instalacao da dependencia (unica):
pip install requests
| OS | Como rodar |
|---|---|
| Windows | python .claude/skills/tiktok-dashboard/scripts/atualizar.py --abrir |
| macOS | python3 .claude/skills/tiktok-dashboard/scripts/atualizar.py --abrir |
| Linux | python3 .claude/skills/tiktok-dashboard/scripts/atualizar.py --abrir |
Configuracao Necessaria
| Chave | Onde fica | Como obter |
|---|---|---|
APIFY_API_TOKEN |
.env |
console.apify.com > Settings > Integrations > Personal API token |
TIKTOK_USER |
.env |
@ do perfil do aluno (sem @, lowercase) |
Dashboard: O Que Mostra
ESTRUTURA OBRIGATORIA — todas as secoes devem estar presentes, nesta ordem:
- Cabecalho (perfil): avatar em base64 (fallback: inicial do nome), @username, bio, total de likes, ultima atualizacao
- Visao Geral (KPIs): seguidores, engajamento medio (%), total de videos, formato/duracao mais comum
- Evolucao ao Longo do Tempo: tendencia de seguidores e engajamento medio entre execucoes. So aparece com 2+ snapshots em historico.json.
- Desempenho por Duracao: videos agrupados por faixa de duracao (ate 15s, 16-30s, 31-60s, 60s+). Media de views, likes, engajamento.
- Melhores Horarios para Postar: heatmap 7x24 (dia da semana x hora). Intensidade = engajamento medio.
- Frequencia de Postagem: videos por semana vs engajamento. Insight comparando semanas mais ativas.
- Top 3 Videos: os 3 com maior views ou engajamento, com thumbnail em base64, views, likes, comentarios, shares, saves, taxa de engajamento e link.
- Analise de Hashtags: top 10 hashtags por engajamento medio. Barras horizontais.
- Tamanho da Descricao vs Engajamento: 3 buckets (curta, media, longa) com engajamento medio por faixa.
- Linha do Tempo (graficos): views, likes, engajamento (%), saves ao longo do tempo. Canvas puro, tooltip.
- Barra de Filtros: filtros por duracao e periodo (7/15/30 dias). Afeta grade de videos, Top 3 e KPIs.
- Todos os Videos (grade): thumbnail em base64, views, likes, comentarios, shares, saves, data, descricao truncada e link.
NUNCA omitir nenhuma dessas 12 secoes.
Metricas TikTok (diferente do Instagram)
| Metrica | Campo Apify | Observacao |
|---|---|---|
| Views | playCount ou videoPlayCount |
Metrica principal no TikTok |
| Likes | diggCount ou likesCount |
|
| Comentarios | commentCount ou commentsCount |
|
| Compartilhamentos | shareCount ou sharesCount |
|
| Saves | collectCount ou bookmarkCount |
Pode nao estar disponivel em todos os atores |
| Duracao | duration (segundos) |
|
| Hashtags | hashtags (array) ou extraido da desc |
|
| Engajamento TikTok | (likes + comentarios + shares) / views * 100 | Nao divide por seguidores como no Instagram |
Nota de implementacao: os nomes exatos dos campos dependem do ator Apify escolhido. Verificar no JSON de retorno antes de codar.
Fluxo
PASSO -1. Verificar Plataforma Ativa (OBRIGATORIO — executar antes de qualquer outra coisa)
Leia .env. Verifique o valor de TIKTOK_ATIVO.
Cenario: TIKTOK_ATIVO=false (aluno ja disse que nao tem TikTok)
Voce marcou que nao tem um perfil ativo no TikTok.
Quer atualizar essa preferencia?
1. Sim, tenho TikTok agora — configurar o dashboard
2. Nao, pode ignorar
Se escolher 1: apague a linha TIKTOK_ATIVO=false do .env (ou troque por TIKTOK_ATIVO=true) e continue para o PASSO 0.
Se escolher 2: encerre sem fazer nada.
Cenario: TIKTOK_ATIVO nao existe no .env (primeira vez)
Voce tem um perfil ativo no TikTok que quer monitorar?
1. Sim, tenho TikTok
2. Nao tenho TikTok
Se escolher 1: salve TIKTOK_ATIVO=true no .env (Edit cirurgico, adicionar linha). Continue para o PASSO 0.
Se escolher 2: salve TIKTOK_ATIVO=false no .env. Encerre com:
Tudo bem. Se um dia criar um perfil no TikTok, e so chamar essa skill de novo.
Cenario: TIKTOK_ATIVO=true (aluno confirmou que tem TikTok)
Continue direto para o PASSO 0 sem perguntar nada.
PASSO 0. Detectar Estado
Antes de qualquer pergunta, leia em paralelo:
.envna raiz do projeto — existeAPIFY_API_TOKENcom valor? existeTIKTOK_USERcom valor?meus-produtos/{ativo}/entregas/tiktok-dashboard/dashboard.html— o arquivo existe?
Cenario A. Dashboard ja configurado (dashboard.html existe)
Mostre o menu sem perguntas:
Dashboard do TikTok ja esta configurado.
Perfil monitorado: @{TIKTOK_USER do .env}
O que quer fazer?
1. Abrir o dashboard agora
2. Atualizar os dados agora
3. Trocar o perfil monitorado
4. Recriar o script do zero
Cenario B. Primeira configuracao
1. Username do TikTok
Prioridade: ler .env primeiro (TIKTOK_USER). Se encontrar, confirme:
Encontrei o TikTok configurado: @{username}
E esse mesmo perfil que quer monitorar?
1. Sim, pode continuar
2. Nao, quero usar outro
Se nao encontrar, pergunte:
Qual o usuario do seu perfil no TikTok? (so o nome, sem o arroba)
(ex: meuperfil)
Normalize: sem @, lowercase. Salve com Edit cirurgico no .env: TIKTOK_USER=<username>.
2. Token Apify
Se APIFY_API_TOKEN estiver no .env: use diretamente, nao pergunte.
Se nao estiver: execute a skill configurar-apify e retorne aqui apos concluir.
PASSO 1. Confirmacao
Configuracao confirmada:
- Perfil TikTok: @{username}
- Token Apify: configurado
- Script: .claude/skills/tiktok-dashboard/scripts/atualizar.py
- Dashboard: meus-produtos/{ativo}/entregas/tiktok-dashboard/dashboard.html
1. Tudo certo, gerar agora
2. Quero ajustar algo
PASSO 2. Executar
python .claude/skills/tiktok-dashboard/scripts/atualizar.py --abrir
macOS / Linux: python3 ...
Leia o log para confirmar sucesso:
tail -10 meus-produtos/{ativo}/entregas/tiktok-dashboard/log.txt
Erros comuns:
| Erro no log | Causa | Solucao |
|---|---|---|
401 ou autenticacao |
Token Apify invalido | Verificar token em console.apify.com |
Perfil vazio ou erro |
@ errado ou perfil privado | Confirmar username; perfis privados nao funcionam |
| Timeout | Ator TikTok lento | Aumentar timeout no script ou rodar novamente |
PASSO 3. Entrega
Apos confirmar sucesso no log, atualize o painel de entregas:
py -3 scripts/painel-incremental.py --secao dashboards
(macOS/Linux: python3 scripts/painel-incremental.py --secao dashboards)
Se o painel ainda nao existir, informe:
O painel de entregas ainda nao foi criado para este produto.
Rode /produto-concepcao primeiro para gerar o painel, depois atualize os dashboards.
Informe ao aluno:
Dashboard do TikTok gerado.
Acesse pelo Painel de Entregas:
meus-produtos/{ativo}/painel-entregas.html (aba Dashboards)
Para atualizar os dados quando quiser:
python .claude/skills/tiktok-dashboard/scripts/atualizar.py
(depois rode: py -3 scripts/painel-incremental.py --secao dashboards)
Perfil monitorado: @{username}
Sem agendamento automatico: o aluno roda o script manualmente.
PASSO 4. Verificar Proxima Plataforma na Fila
Apos confirmar entrega com sucesso, verifique se meus-produtos/{ativo}/.dashboard-queue.json existe.
Se o arquivo NAO existir: exibir os "Proximos Passos" normalmente e encerrar. (Skill foi chamada diretamente, sem fila.)
Se o arquivo EXISTIR:
- Leia o conteudo do arquivo.
- Mova
"tiktok"dependentesparaconcluidos(Edit cirurgico no JSON). - Verifique se ainda ha itens em
pendentes.
Se pendentes estiver vazio: delete o arquivo .dashboard-queue.json. Exiba:
Todos os dashboards foram gerados.
E encerre.
Se pendentes tiver proxima plataforma, exiba a oferta de continuacao:
TikTok concluido.
Proximo na fila: {Plataforma} ({@username ou canal, se ja estiver no .env})
1. Gerar o dashboard do {Plataforma} agora
2. Parar por aqui (posso continuar depois chamando /dashboard-social)
- Opcao 1: executar a skill correspondente (
youtube-dashboard). - Opcao 2: encerrar sem alterar a fila. Na proxima chamada a
/dashboard-social, o arquivo sera detectado e oferecera retomada automatica.
Regra: nunca exibir os "Proximos Passos" quando o arquivo de fila existir. A fila tem prioridade sobre as sugestoes de conteudo.
Regras
- Sempre ler
.envantes de pedir o token Apify ao usuario. SeAPIFY_API_TOKENestiver presente, usar diretamente. - O token Apify e o username ficam no
.env(APIFY_API_TOKENeTIKTOK_USER). Nunca hardcodar no script. - Dashboard em HTML puro. Sem libs externas alem de Google Fonts. Canvas puro para graficos.
- Nao usar travessao em nenhum texto exibido no dashboard.
- Design system Fluxo Criativo: fundo
#000000, surface#111111, borda#252525, texto#e8e8e6, muted#a8a8a3, neon#c4ff5ecomo cor de destaque principal. Fontes JetBrains Mono + Space Grotesk via Google Fonts. Cards comborder-top:2px solid, sem sombra, sem border-radius. - Se o perfil for privado, informar e encerrar com orientacao.
- CRITICO — Thumbnails obrigatorias em base64: NUNCA usar URL do CDN do TikTok diretamente como src de img. Baixar via requests com User-Agent adequado.
- CRITICO — Engajamento no TikTok e calculado sobre views, nao sobre seguidores. Formula: (likes + comentarios + shares) / views * 100.
Proximos Passos Apos Configurar
/copy-variacao-post— criar variacoes dos videos com mais views/copy-social— criar conteudo novo baseado nos videos com mais engajamento/copy-anuncio— transformar os dados em anuncios com angulos testados