Monte o seu painel
de anúncios da Meta

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.

9 passos Links prontos Leva uma tarde A conta é sua
Painel mostrando investido, cliques, custo por conversa e o gráfico do período
É isto que você vai ter no fim. Os números são de uma conta real, lidos na hora em que a tela abriu.
Antes de começar, entenda a peça central: o token O painel não é uma conversa. É um endereço que você abre às três da manhã, sem ninguém do outro lado. Pra ele perguntar à Meta sozinho, precisa de uma credencial própria: o token.
O token fica guardado no servidor, numa variável de ambiente. Ele nunca aparece no navegador de quem abre o painel.
O que você vai gerar é um token de usuário do sistema, que não expira. O token do Explorador de API vence em duas horas e derruba o painel no meio do dia.
Se algum dia vazar, você volta na mesma tela e clica em Anular tokens. Morre na hora.
1

Crie o app no Meta for Developers

O token precisa nascer ligado a um app. Você cria uma vez e nunca mais mexe. Não precisa publicar nada, não precisa de revisão.
Tela de entrada do Meta for Developers
Passo 1.1. Se pedir login, entre com a conta do Facebook que administra o seu negócio.
Depois do login
Clique em Criar app.
Em "o que você quer que seu app faça", escolha Outro e depois o tipo Empresa.
Dê um nome qualquer (o seu nome serve) e associe ao seu portfólio de negócios.
Guarde o ID do app, que fica no topo do painel. Você vai precisar dele daqui a dois passos.
2

Crie o usuário do sistema

É um "funcionário robô" dentro do seu Business Manager. O token vai ser dele, não seu: assim ele não morre se você trocar a senha do Facebook.
Tela de entrada das ferramentas comerciais da Meta com o botão Continuar com o Facebook destacado
Passo 2.1. Se pedir login, clique no botão destacado.
Dentro das Configurações do negócio
No menu da esquerda, em Usuários, abra Usuários do sistema.
Clique em Adicionar. Nome: o que você quiser. Função: Administrador.
Se essa opção não aparecer, é porque a conta de anúncios não está dentro de um Business Manager. Crie um em business.facebook.com e traga a conta pra dentro dele primeiro.
3

Dê a ele acesso à sua conta de anúncios

O usuário do sistema nasce sem enxergar nada. Você precisa entregar a conta na mão dele.
Ainda na tela de Usuários do sistema
Com o usuário selecionado, clique em Adicionar ativos.
Escolha Contas de anúncios, marque a sua e ligue Gerenciar campanhas (o acesso total).
Salve. Se você cuida de mais de uma conta, marque todas agora: o mesmo token vai ler todas, e o painel deixa você trocar de conta no topo.
Anote o ID da conta de anúncios. É aquele número que aparece no Gerenciador, no formato act_1234567890. O painel vai perguntar por ele.
4

Gere o token

Esta é a parte que dá o acesso. Leva quinze segundos e você só faz uma vez.
Com o usuário do sistema selecionado
Clique em Gerar novo token.
Escolha o app que você criou no passo 1.
Marque as permissões ads_read, ads_management e business_management.
Clique em gerar e copie o token. Ele aparece uma vez só. Se perder, é só gerar outro.
Trate esse texto como a senha do seu cartão. Quem tiver ele lê e mexe nas suas campanhas. Não mande por grupo, não cole em site de encurtar link, não deixe em print. Ele vai viver só em dois lugares: no seu computador e na variável de ambiente do servidor.
5

Abra o Claude Code e teste a conexão

O Claude Code é o Claude que roda no seu computador e consegue executar comandos. É ele que vai conversar com a Meta usando o seu token, e depois construir o painel.
Antes de colar o prompt
Crie uma pasta vazia pro projeto (exemplo: meu-painel) e abra o Claude Code dentro dela.
Tenha à mão o token do passo 4 e o ID da conta do passo 3.
Prompt 1 — testar a conexão
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.
Se aparecer erro 190, o token está errado ou foi copiado pela metade. Erro 100 ou 200: falta uma das permissões do passo 4, ou o usuário do sistema não recebeu a conta no passo 3.
6

Leia a sua conta antes de construir

Agora que o Claude fala com a sua conta, faça as perguntas que quase ninguém faz. Isso já vale a tarde, mesmo que você pare por aqui.
Prompt 2 — o raio-X
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".
Prompt 3 — onde vaza dinheiro
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.
Prompt 4 — criativo campeão e cansado
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.
7

Peça o painel

Agora sim. Repare que o pedido é um projeto que busca os dados toda vez que abre, e não um arquivo com números colados dentro, que nasce velho.
Prompt mestre
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.
Tela de campanhas com tabela e painel lateral de detalhe
Mais ou menos assim. Tabela de um lado, detalhe da campanha do outro, com orçamento e situação editáveis.
8

Coloque no ar, de graça

A Vercel hospeda no plano gratuito. É lá que o token vai morar, longe do arquivo e longe do navegador de quem abre.
Tela de cadastro da Vercel
Passo 8.1. Entre com Google ou GitHub. Não pede cartão.
Prompt 5 — 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.
9

Deixe ao vivo, instale no celular e carimbe os links

Os dois últimos ajustes: o painel virar aplicativo, e a venda passar a chegar com endereço de origem.
Prompt 6 — ao vivo no celular
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.
  • iPhone: abra o endereço no Safari, toque em Compartilhar e escolha "Adicionar à Tela de Início".
  • Android: abra no Chrome, toque no menu e escolha "Instalar app".
Prompt 7 — carimbar os links
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.
Tela de criativos com cards, notas e leitura automática
Com tudo no ar. Cada criativo com nota, custo e quanto prendeu nos 3 primeiros segundos.
Depois que estiver rodando
Atualize sem refazer. Volte na mesma conversa e peça "puxe os dados de novo". O Claude troca só os números.
Peça o que faltou. O painel é seu. Vende por WhatsApp? Peça a tela de conversas. Atende clientes? Peça uma aba por conta.
Cuide da senha. O painel mostra quanto você gasta e quanto vende. Senha curta em endereço público é convite.