Um endereço só seu, que lê a sua conta de anúncios ao vivo, aponta onde o dinheiro está vazando e abre no celular como aplicativo. É o mesmo caminho que eu usei pra construir o meu, passo por passo.
Tenho um token de usuário do sistema da Meta e quero montar um painel dos meus anúncios. Primeiro teste se o token funciona. Meu token: COLE_O_TOKEN_AQUI Chame a Graph API da Meta e me traga a lista das minhas contas de anúncio: https://graph.facebook.com/v21.0/me/adaccounts?fields=id,name,account_status,currency,timezone_name Para cada conta me diga: nome, moeda, se está ativa ou bloqueada, o fuso da conta e quanto ela gastou nos últimos 7 dias. Depois grave o token num arquivo .env na pasta, com o nome META_TOKEN, e crie um .gitignore que ignore esse arquivo. O token não pode ir parar em lugar nenhum além do .env. Se a Meta devolver erro, me diga o número e o texto do erro antes de tentar de novo, e o que provavelmente falta na permissão.
Usando o mesmo token, puxe os últimos 30 dias da minha conta e compare com os 30 dias anteriores. Use o endpoint de insights da conta. Me traga, em português e sem jargão: 1. Investido, resultados e custo por resultado. Use o resultado que combina com o objetivo da campanha: compra, lead ou conversa. 2. O funil: impressões, cliques no link, visitas à página, checkouts e compras. Em cada etapa, quantos por cento passaram da anterior. 3. CPM, CTR do link, custo por clique e frequência, comparados com o período anterior em porcentagem. 4. Qual etapa do funil é o gargalo, e por quê. Regras que não podem ser quebradas: - O dia é o dia da CONTA DE ANÚNCIOS (campo timezone_name), não o do meu computador. Contando em UTC, tudo que acontece das 21h à meia-noite pula pro dia seguinte e nunca bate com o Gerenciador. - A Meta reporta a mesma conversão com vários nomes ao mesmo tempo (purchase, offsite_conversion.fb_pixel_purchase, omni_purchase). Conte só UM, por ordem de prioridade. Somar a lista faz uma venda virar três. - CTR e CPM são recalculados a partir dos totais. Média de médias dá um número que não existe. - Frequência acima de 3 em 30 dias é público saturando: me avise. - Menos de 60% dos cliques virando visita é problema de página, não de anúncio: me avise. - Nunca invente número. O que não veio da Meta, escreva "não veio".
Liste todas as campanhas dos últimos 30 dias com gasto, resultado e custo por resultado, ordenadas por gasto. Depois separe em três grupos: SANGRANDO: ligadas, gastaram mais que o dobro do custo médio por resultado da conta e não trouxeram nenhum resultado. PUXANDO: custo por resultado abaixo da média da conta. Diga quanto orçamento a mais elas aguentariam. LIGADAS E SEM ENTREGAR: ativas com zero impressão no período, com as três causas mais prováveis de cada uma. Atenção: status e orçamento NÃO vêm no relatório de insights. Eles vêm da entidade, em /campaigns. Junte as duas coisas, senão campanha ligada que não gastou some da lista, e é justamente ela que eu preciso ver. No fim, escreva a realocação: de qual campanha tirar quanto e pra qual levar, em reais. Não pause nada sem eu mandar.
Analise todos os anúncios dos últimos 14 dias contra os 14 dias anteriores. Para cada um: gasto, CTR do link, CPM, custo por resultado e, em vídeo, quantos por cento pararam nos 3 primeiros segundos e quantos viram até o fim. Depois responda: 1. Qual é o criativo campeão e o que nele está funcionando. 2. Quais estão cansados. Sinal: CTR caiu mais de 20% E o CPM subiu mais de 10%. 3. Qual prende no começo e perde no meio. 4. Qual prende e converte, pra eu fazer variações dele. Termine com 3 ideias de criativo novo baseadas no que já funcionou NESTA conta, descrevendo a primeira cena e a primeira frase de cada um.
Construa o meu painel de anúncios da Meta nesta pasta. Um projeto que vai pro
ar, não um arquivo solto: ele busca os dados na hora em que eu abro.
ESTRUTURA
- api/dados.js — função de servidor que fala com a Graph API usando o token do
.env (META_TOKEN). Devolve pronto: totais, o período anterior pra comparar, a
série do gráfico, as campanhas e os avisos.
- api/contas.js — lista as contas de anúncio do token.
- public/index.html — a tela, que chama /api/dados e desenha.
- package.json com "type": "module".
O token NUNCA aparece no HTML nem no JavaScript da tela. Fica só na variável de
ambiente, lido no servidor. Se aparecer no navegador, qualquer um que abrir o
painel rouba minha conta de anúncios.
TELAS
1. Resumo: investido, resultados, custo por resultado e retorno, cada um com a
variação contra o período anterior. Gráfico dia a dia. Funil de impressão até
compra com a taxa de passagem de cada etapa.
2. Campanhas: tabela com gasto, resultado, custo e CTR, ordenável.
3. Criativos: um card por anúncio com gasto, custo, CTR e, em vídeo, quantos por
cento prenderam 3 segundos e quantos viram até o fim.
4. Horário: mapa de calor de dia da semana por hora.
5. Diagnóstico: avisos em português claro, cada um com o que fazer.
REGRAS QUE NÃO PODEM SER QUEBRADAS
- O dia é o dia da CONTA DE ANÚNCIOS (timezone_name), não o do servidor. Servidor
roda em UTC: contando em UTC, o que acontece das 21h à meia-noite pula pro dia
seguinte e o painel nunca bate com o Gerenciador.
- A mesma conversão vem com vários nomes ao mesmo tempo. Conte só UM, por ordem
de prioridade.
- CTR, CPM e custo por resultado recalculados a partir dos totais.
- Status, orçamento e fase de aprendizagem vêm da entidade (/campaigns e
/adsets), não do insights. Pra listar os conjuntos de uma campanha use
/{id_da_campanha}/adsets.
- Campanha ligada que não gastou nada tem que aparecer, marcada como "sem
entrega".
- A Meta limita chamadas por conta e devolve erro 17 por vários minutos quando
estoura. Guarde a resposta por 90 segundos e, quando o erro vier, escreva o
aviso na tela em vez de mostrar tabela vazia.
- Proteja com uma senha simples em variável de ambiente, conferida no servidor.
VISUAL
Fundo escuro, uma cor de destaque só, números grandes com rótulo pequeno. Cada
cartão explica em uma linha o que aquilo quer dizer. Feito pro celular primeiro.
Rode aqui na minha máquina e me mostre funcionando antes de falarmos em publicar.
O painel está funcionando aqui. Agora coloque no ar na Vercel, plano grátis. 1. Publique esta pasta. 2. Cadastre as variáveis de ambiente NA VERCEL: META_TOKEN com o meu token e PAINEL_SENHA com a senha que eu escolher. O .env fica só na minha máquina e não sobe pro repositório. 3. Me devolva o endereço final e confirme, abrindo ele, que: - a tela de senha aparece antes de qualquer número; - o painel carrega os dados de verdade depois da senha; - o token não aparece em nada que o navegador baixou. A Vercel dá dois endereços: o do deployment, cheio de letras no meio, pede login e não serve; o que abre pra todo mundo é o endereço curto do projeto. Me passe esse, e confirme que ele responde sem pedir login.
Deixe o painel vivo e pronto pro celular: 1. Ele se atualiza sozinho enquanto está aberto na frente da pessoa, e para de buscar quando a aba está escondida ou o celular no bolso. Chamada à toa encurta o limite da Meta pras consultas de verdade. 2. Selo de "ao vivo" no topo com a hora da última atualização, que esfria quando a atualização falha. Falha de rede não pode virar recado vermelho: no celular a conexão cai o tempo todo. 3. Ao voltar depois de um tempo fora, busca de novo na hora. Instalado na tela de início, o iPhone não recarrega a página ao reabrir: só acorda o que estava na memória, e sem isso eu veria o número de ontem. 4. Adicione manifest e ícone pra eu instalar na tela de início. Publique de novo e me diga o endereço.
Quero saber de onde vem cada venda.
Primeiro, veja quais anúncios meus já têm parâmetros de URL preenchidos (o campo
url_tags do criativo) e quais estão sem nenhum. Liste os que estão sem, com o
gasto de cada um nos últimos 30 dias, pra eu ver quanto dinheiro está rodando
sem rastreio.
Depois monte o texto que eu vou colar no campo "Parâmetros de URL" do Gerenciador
de Anúncios, usando as macros que a Meta preenche sozinha no clique:
{{campaign.name}}, {{adset.name}} e {{ad.name}}.
Regras do carimbo:
- utm_source é de onde veio, utm_medium é como chegou, utm_campaign é a campanha.
- Acrescente sck e src com o mesmo conteúdo, no formato origem-meio-campanha,
porque é esse campo que aparece na lista de vendas do checkout.
- Enxuto: parâmetro demais faz o link estourar o limite e a ponta ser cortada.
- Não escape as chaves duplas. Se virar %7B%7B a macro nunca é substituída.
Por último, me diga onde colar isso no Gerenciador e como conferir que funcionou
depois da primeira venda.