# Como Criar Campanha Meta Ads pelo Terminal com IA (Sem Abrir o Gerenciador)
Na Stream 8, Laschuk criou e publicou uma campanha Meta Ads inteira pelo terminal — sem abrir o Gerenciador de Anúncios uma única vez. Campanha configurada, criativo gerado com IA, publicação feita. Tudo por comando.
Este guia documenta o processo completo: do zero até o anúncio no ar, usando Claude Code + skill /meta-ads.
Por Que Criar Ads pelo Terminal?
O Gerenciador de Anúncios do Meta é lento, cheio de cliques e propenso a erro humano. Cada campanha nova exige navegar por menus, esperar carregamentos, clicar em dezenas de opções. Para quem cria campanhas frequentemente ou quer reproduzir estruturas comprovadas, isso é desperdício de tempo.
Criar pelo terminal resolve três problemas de uma vez:
Velocidade. Uma campanha que levaria 20 minutos no Gerenciador leva 3 minutos no terminal. Você descreve o que quer, a IA monta a estrutura, você revisa e confirma.
Reprodutibilidade. O comando que criou uma campanha hoje pode criar outra idêntica amanhã. Nenhuma variação por distração, nenhum campo esquecido.
Rastreabilidade. Tudo que foi criado fica registrado no histórico. Você sabe exatamente o que foi configurado, quando e por quê.
Na live, a campanha criada foi a [EHACKING] [LEADS] — para captação de leads do EmailHacker.ai. A estrutura inteira saiu direto do terminal, com o criativo gerado pela IA e publicado sem uma tela do Gerenciador ser aberta.
O Que Você Precisa
Antes de começar, garanta que você tem:
- ‣Claude Code instalado (com acesso ao terminal)
- ‣Conta Meta for Developers com App criado
- ‣Ad Account ID (formato
act_XXXXXXXXXX) - ‣Page ID da sua página do Facebook/Instagram
- ‣Access Token com permissões de
ads_managementeads_read - ‣Pixel ID (se quiser rastrear conversões — coberto na Stream 5)
Todas as credenciais devem estar no arquivo .secrets na raiz do projeto. Nunca cole tokens diretamente no terminal ou no chat.
# .secrets (nunca versionar esse arquivo)
META_ACCESS_TOKEN=...
META_AD_ACCOUNT_ID=act_...
META_PAGE_ID=...
META_PIXEL_ID=...
.secrets e validar token antes de qualquer chamadaPasso 1: Configurar Credenciais Meta
Com as credenciais no .secrets, carregue-as na sessão:
bashsource .secrets
echo "Credenciais carregadas: $META_AD_ACCOUNT_ID"
Em seguida, valide o access token antes de criar qualquer coisa:
bashcurl -s "https://graph.facebook.com/v21.0/me?access_token=$META_ACCESS_TOKEN" | jq .name
Se retornar o nome da conta, está tudo certo. Se retornar erro de permissão, o token precisa ter ads_management habilitado no App do Meta.
Uma boa prática é verificar também o saldo disponível na Ad Account:
bashcurl -s "https://graph.facebook.com/v21.0/$META_AD_ACCOUNT_ID?fields=name,amount_spent,balance&access_token=$META_ACCESS_TOKEN" | jq .
Passo 2: Criar a Campanha
A campanha é o nível mais alto da estrutura Meta Ads. Define o objetivo (leads, tráfego, conversões) e o limite de orçamento total.
No terminal, peça ao Claude Code:
Crie uma campanha Meta Ads no objetivo LEAD_GENERATION
nome: [EHACKING] [LEADS]
status: PAUSED
limit: R$ 500/mês
O Claude Code usa a skill /meta-ads para montar a chamada de API correta:
bashcurl -X POST \
"https://graph.facebook.com/v21.0/$META_AD_ACCOUNT_ID/campaigns" \
-d "name=[EHACKING] [LEADS]" \
-d "objective=LEAD_GENERATION" \
-d "status=PAUSED" \
-d "special_ad_categories=[]" \
-d "access_token=$META_ACCESS_TOKEN"
A resposta retorna um campaign_id. Guarde esse ID — ele será usado nos próximos passos.
Importante: Crie sempre com status=PAUSED. Só ative depois de revisar o criativo completo.
Passo 3: Criar o Ad Set
O Ad Set define a segmentação, o orçamento diário, o posicionamento e o período de veiculação. É aqui onde você decide quem vai ver o anúncio.
No terminal:
Crie um ad set para a campanha {campaign_id}
nome: [EHACKING] [BR] [INTERESSES]
orçamento diário: R$ 20
público: Brasil, 25-45 anos, interesse em email marketing e marketing digital
posicionamento: automático
pixel: $META_PIXEL_ID
evento de otimização: LEAD
A chamada de API gerada fica assim:
bashcurl -X POST \
"https://graph.facebook.com/v21.0/$META_AD_ACCOUNT_ID/adsets" \
-d "name=[EHACKING] [BR] [INTERESSES]" \
-d "campaign_id={campaign_id}" \
-d "daily_budget=2000" \
-d "billing_event=IMPRESSIONS" \
-d "optimization_goal=LEAD_GENERATION" \
-d "bid_strategy=LOWEST_COST_WITHOUT_CAP" \
-d "targeting={\"geo_locations\":{\"countries\":[\"BR\"]},\"age_min\":25,\"age_max\":45}" \
-d "status=PAUSED" \
-d "access_token=$META_ACCESS_TOKEN"
Observe que daily_budget é em centavos — R$ 20,00 = 2000.
O ad_set_id retornado vai para o passo seguinte.
Passo 4: Gerar o Criativo com IA
Esta é a parte onde o terminal se torna realmente poderoso. Em vez de escrever o copy do anúncio manualmente, você pede ao Claude Code para gerar:
Gere o copy de um anúncio para capturar leads do EmailHacker.ai
público: gestores de infoprodutos que fazem email marketing no Brasil
objetivo: click para página de cadastro
tom: direto, sem hype, foco em resultado
incluir: headline, corpo do texto e call to action
Exemplo de copy gerado na Stream 8:
Headline: Seus emails vendem no piloto automático?
Corpo: O EmailHacker.ai conecta sua Hotmart com o ActiveCampaign e cria funis de email sozinho. Você aprova — a IA escreve, publica e rastreia cada venda.
CTA: Quero testar grátis
Com o copy aprovado, crie o ad creative:
bashcurl -X POST \
"https://graph.facebook.com/v21.0/$META_AD_ACCOUNT_ID/adcreatives" \
-d "name=[EHACKING] Creative v1" \
-d "object_story_spec={\"page_id\":\"$META_PAGE_ID\",\"link_data\":{\"message\":\"O EmailHacker.ai conecta sua Hotmart com o ActiveCampaign...\",\"link\":\"https://emailhacker.ai\",\"call_to_action\":{\"type\":\"SIGN_UP\"}}}" \
-d "access_token=$META_ACCESS_TOKEN"
O creative_id retornado é usado para criar o Ad no próximo passo.
Passo 5: Publicar e Monitorar
Com campanha, ad set e criativo criados, o último passo é criar o Ad (que une os três) e ativar:
bash# Criar o Ad
curl -X POST \
"https://graph.facebook.com/v21.0/$META_AD_ACCOUNT_ID/ads" \
-d "name=[EHACKING] Ad v1" \
-d "adset_id={ad_set_id}" \
-d "creative={\"creative_id\":\"{creative_id}\"}" \
-d "status=PAUSED" \
-d "access_token=$META_ACCESS_TOKEN"
# Revisar tudo antes de ativar
curl -s "https://graph.facebook.com/v21.0/{ad_id}?fields=name,status,effective_status&access_token=$META_ACCESS_TOKEN" | jq .
# Ativar campanha após revisão
curl -X POST \
"https://graph.facebook.com/v21.0/{campaign_id}" \
-d "status=ACTIVE" \
-d "access_token=$META_ACCESS_TOKEN"
Para monitorar o desempenho depois de ativo:
bashcurl -s "https://graph.facebook.com/v21.0/{campaign_id}/insights?fields=impressions,clicks,ctr,spend,leads&access_token=$META_ACCESS_TOKEN" | jq .
Isso retorna impressões, cliques, CTR, gasto e leads — tudo sem abrir o Gerenciador.
Vantagens vs Gerenciador de Anúncios
Próximo Passo
Se você ainda não configurou o Meta Pixel no seu site, esse é o próximo passo antes de ativar qualquer campanha de conversão. O Pixel permite que o Meta otimize para quem tem maior probabilidade de converter — sem ele, o algoritmo trabalha no escuro.
A integração do Pixel com o EmailHacker.ai foi coberta ao vivo nas streams anteriores. Acesse o histórico completo em Streams para ver cada etapa sendo construída.
Tem dúvida sobre algum passo? Entre no Discord — a comunidade está lá para ajudar.
Erros Comuns
"Invalid OAuth access token"
O token expirou ou não tem permissão ads_management. Gere um novo token no Meta for Developers com as permissões corretas.
"Ad account is disabled" A conta pode ter restrições por falta de pagamento ou violação de política. Acesse o Gerenciador de Anúncios para ver o status da conta — essa verificação inicial ainda precisa ser feita no painel.
"daily_budget must be at least 100" O orçamento mínimo é R$ 1,00 por dia (100 centavos). Orçamentos abaixo disso são rejeitados pela API.
O anúncio foi criado mas não aparece no Gerenciador Aguarde 1-2 minutos — há uma latência entre a criação via API e a atualização do painel. O anúncio existe; o Gerenciador só demora para renderizar.
"Unsupported post request" no ad creative
O object_story_spec precisa ter o JSON corretamente escapado. Use a IA para gerar o payload — erros de escaping são comuns quando feito manualmente.
O pixel não está registrando eventos Conferência rápida: o Pixel está instalado na página de destino? O evento correto está mapeado? Verifique no Meta Pixel Helper (extensão Chrome) — é a única ferramenta de debug de Pixel que vale a pena usar.