Postmill AI
Open-source, AI-native social media management. Schedule to 45+ channels, reply from one inbox, design in-app, and run AI on your own keys — plans from $9/mo. Start free.
View and analyze Meta ad performance data
Translation pending
AI summary · website content
MarketingHTML · JavaScriptGitHub @MatheusHenriqueh7OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Dashboard estático (index.html) + funções serverless na Vercel (api/*.js) que consolidam
Meta Ads (investimento, leads, CPL, visitas ao Instagram) e conversão real (matrículas) via
RD Station CRM, para as unidades Panobianco.
Sem nenhuma variável de ambiente configurada, o dashboard funciona em modo demonstração (dados fictícios), então é seguro publicar/testar antes de configurar produção.
api/meta.js recebe só ?endpoint=act_123.../insights?... do frontend, descobre a conta
(act_<id>) e resolve automaticamente qual token de META_API_TOKENS_JSON enxerga aquela
conta. O token nunca volta na resposta.api/rdstation.js usa RD_STATION_API_TOKEN só no servidor para buscar negociações ganhas.api/status.js informa ao frontend se há contas descobertas (booleano/contagem), nunca os
valores dos tokens.token_nao_configurado em api/meta.js).META_API_TOKENS_JSON (obrigatória para sair do modo demo)É um array simples de tokens, um por Business Manager — não precisa mapear conta por conta manualmente (cada BM tem ~12 contas, isso não escalaria):
["TOKEN_BM_1", "TOKEN_BM_2", "TOKEN_BM_3", "TOKEN_BM_4"]
Como isso funciona (descoberta automática): ao receber a primeira requisição (ou a cada 1h,
para renovar o cache), o backend (api/_lib/metaTokens.js) chama, para cada token da lista,
GET /me/adaccounts?fields=id,account_id,name na Graph API — o próprio endpoint que lista quais
contas de anúncio aquele token de Usuário do Sistema enxerga. Com isso monta em memória o mapa
conta → token, sem precisar saber de antemão quais IDs de conta existem em cada BM.
/me/adaccounts só lista contas atribuídas diretamente ao usuário do sistema. Uma conta
que o token consegue ler por outro caminho (ex: acesso herdado da BM — caso da Parque Prado,
antiga Campestre) não aparece ali. Para as contas cadastradas em shared/funil.js que a
descoberta não achar, o backend testa cada token direto na conta (resolveToken em
api/_lib/metaTokens.js, cache de 1h). IDs fora dessa lista nunca são sondados.UNIDADES do index.html
se for uma unidade nova.Como gerar um token de Usuário do Sistema sem expiração, por Business Manager:
/me/adaccounts enxergar as contas.ads_read (mínimo) ou
ads_management se o dashboard também precisar pausar/duplicar campanhas.META_API_TOKENS_JSON.Repita para cada Business Manager e junte todos os tokens num único array.
RD_STATION_API_TOKEN (opcional — habilita a métrica de conversão real)Token privado da API v1 do RD Station CRM (Configurações → Integrações → API).
Sem essa variável, as colunas de Convertidos/Taxa de Conversão/CAC mostram -- e o dashboard
segue funcionando normalmente com os dados do Meta.
| Variável | Default | Para que serve |
|---|---|---|
RD_STATION_SOURCE_MATCH | Facebook Ads,Busca Paga | Trechos (separados por vírgula) que identificam a origem Meta Ads no deal_source da negociação. |
RD_STATION_WON_STAGE_MATCH | (vazio) | Se preenchido, além do campo nativo "ganho" (win=true) do RD Station, também exige que o nome da etapa (deal_stage) contenha esse texto (ex: Matriculado). |
A unidade de cada negociação é identificada pelo nome da campanha (
deal.campaign.name, ex:"(MM) ENVIO DE LEADS - CONDADO") — não existe um campo personalizado confiável para isso no RD Station (o campo "Unidade" existe mas não é preenchido em nenhuma negociação). O cruzamento com o nome usado no Meta Ads é feito por aproximação (ignora acentuação/maiúsculas e aceita correspondência parcial). Negociações cujo texto não bate com nenhuma unidade conhecida ficam agrupadas emunmatchedna resposta de/api/rdstation— útil para depurar nomes de campanha divergentes sem perder o dado.
This is the beginning of the README. Read the rest at the original. Read the full README ↗