P4.1 · Subir campanha na Meta
Depende de P2.4 (imagens prontas) e **P3.3 verde**. Sem a CAPI validada, não rode este prompt.
O prompt
Automatize a subida de campanhas na Meta a partir de arquivo versionado. Nada de clicar no Gerenciador.
1. Configuração declarativa
ads/meta/campanhas/radar-preco.yaml:
campanha:
nome: "CAMP · Prospecção · Radar de Preço"
objetivo: OUTCOME_SALES
status: PAUSED # sempre nasce pausada
orcamento_diario_centavos: 4500
conjuntos:
- nome: "ADSET · Advantage+ amplo"
otimizacao: OFFSITE_CONVERSIONS
evento: PURCHASE
janela_atribuicao: "7d_click_1d_view"
publico:
paises: [BR]
idade: [25, 55]
advantage_plus: true
interesses_semente:
- "Nuvemshop"
- "Comércio eletrônico"
- "Mercado Livre"
- "Shopify"
excluir_custom_audiences: ["Clientes pagantes"]
posicionamentos: automaticos
anuncios:
- nome: "preco-mockup-perda-feed-branco"
criativo: ./out/preco-mockup-perda-feed-branco.png
texto_principal: >
Seu concorrente baixou o preço às 6h da manhã. Você descobriu às 18h.
Nesse intervalo ele vendeu o que era seu. O Radar te avisa no mesmo dia.
titulo: "Saiba na hora que o concorrente baixa o preço"
descricao: "30 produtos monitorados. R$ 97 por ano."
cta: LEARN_MORE
url: "https://radar.ecomsmart.com.br/radar-de-preco?utm_source=meta&utm_medium=cpc&utm_campaign=radar-preco&utm_content=preco-mockup-perda-feed-branco"
As demais campanhas seguem o mesmo formato. Textos e ângulos estão em docs/06-meta-ads.md; as peças e os nomes de arquivo em out/CONTATO.md.
2. A regra que sustenta a medição
utm_content = nome do anúncio = nome do arquivo do criativo.
Valide isso no código e falhe a publicação se divergir. Sem essa disciplina o painel de ROI não consegue dizer qual imagem vendeu, e todo o resto vira achismo.
3. Comandos
python manage.py meta_publicar ads/meta/campanhas/radar-preco.yaml --dry-run
python manage.py meta_publicar ads/meta/campanhas/radar-preco.yaml --aplicar
python manage.py meta_ativar "CAMP · Prospecção · Radar de Preço"
--dry-runé o padrão. Imprime exatamente o que será criado ou alterado.--aplicaré explícito- Idempotente. Rodar duas vezes não duplica. Casa por nome, guarda ids em
ads/meta/estado.json, versionado - Campanha nasce
PAUSED. Ativar é comando separado e consciente - Upload de imagem com hash, para não reenviar o que já está lá
- Depois de criar, gere o preview de cada anúncio e salve os links num relatório markdown para eu revisar antes de ativar
4. Guardas
META_TETO_DIARIO_CENTAVOSpor env. O comando recusa publicar se a soma dos orçamentos passar do teto- Nunca alterar campanha que não esteja em
estado.json— não mexer no que foi criado à mão - Recusar publicar anúncio cujo criativo não exista em disco
- Recusar se o
meta_diagnosticode P3.1 não estiver verde
5. Ordem de subida
CAMP · Prospecção · Raio-X grátis— R$ 75/dia, 6 criativosCAMP · Prospecção · Radar de Preço— R$ 45/dia, 6 criativosCAMP · Retargeting 7 dias— R$ 30/dia, criativos Profundo- Radar de Anúncios só depois que as três estiverem estáveis
Subir tudo pausado, revisar os previews comigo, ativar em seguida.
6. Depois de ativar
Não mexer por sete dias. É a fase de aprendizado. Depois disso:
- Escalar só adset com CPA abaixo da meta por três dias seguidos
- Aumento máximo de 20% a cada 48 horas
- Desligar criativo com CTR abaixo de 0,8% depois de 3.000 impressões
Critérios de aceite
--dry-rundas campanhas, com a saída completa, revisada comigo- Campanhas criadas pausadas, com os anúncios e os previews gerados
- Rodar o comando de novo não cria nada — prove com o diff
- Teste do teto de orçamento bloqueando
- Teste de que
utm_contentdivergente do nome do anúncio falha a validação - Teste de que publicar com diagnóstico vermelho é recusado