EMAX Studio Blog

Cómo configurar la Meta Ads CLI: tutorial paso a paso para 2026

Manuel Mrosek · 2026-06-16 · visitas

Cómo configurar la Meta Ads CLI: tutorial paso a paso para 2026

Para configurar la Meta Ads CLI, creas un System User en Business Manager, generas un token sin caducidad con los permisos ads_management, ads_read y business_management, vinculas tu Ad Account y tu Página como activos, y después apuntas la CLI a ese token mediante un archivo de configuración. Todo el proceso lleva unos 45 minutos si tienes acceso de administrador a un Business Manager, una Página de Facebook y un método de pago verificado en tu Ad Account.

Este es el complemento técnico de nuestra introducción sobre cómo ejecutar Facebook Ads con agentes de IA. Aquel artículo explica por qué una configuración basada en CLI supera a los clics en el Ads Manager para cualquiera que gestione más que un puñado de campañas. Este es la guía práctica: cada paso, cada mensaje de error con el que tropezamos cuando construimos nuestro propio stack y un recorrido real de la primera campaña al final.

Qué hace en realidad la Meta Ads CLI

La "Meta Ads CLI" no es un único binario oficial. Es una fina capa de automatización del lado servidor que se sitúa entre tus scripts y la Marketing API de Meta. Tú escribes código en Python o Node, la CLI gestiona la autenticación, la firma de las peticiones y el token de System User de larga duración, y tus campañas se publican a través de graph.facebook.com/v23.0/ sin que nadie tenga que pasar por el Ads Manager.

Lo difícil no es el código del wrapper — son unas cien líneas. Lo difícil es el ritual de configuración de 7 pasos dentro de Business Manager que produce un token que Meta realmente aceptará para tráfico de producción. Ese ritual elimina el baile del refresh de OAuth y el dolor de la caducidad de los tokens que termina rompiendo cualquier automatización basada en navegador.

La recompensa es real. Una vez que el stack de la CLI está en marcha, puedes lanzar una campaña con 6 variantes de anuncio en menos de 90 segundos, traer el rendimiento de ayer a un informe diario a las 7:00 de la mañana vía cron y pausar automáticamente los anuncios que no rindan — sin entrar nunca al Ads Manager.

Requisitos previos

Antes de empezar, asegúrate de tener esto en su sitio. Saltarte cualquiera de estos puntos te manda a un agujero de dos horas más adelante.

Necesitas una cuenta de Meta Business Manager con permisos de administrador — las cuentas personales de Facebook no funcionan para tokens de System User. Necesitas una Página de Facebook donde figures como administrador, no solo como editor. Necesitas un Ad Account de Meta dentro de ese Business Manager con un método de pago verificado y al menos un país aprobado para facturación. Necesitas un Pixel (o "Dataset" en la nueva terminología) configurado para el sitio web al que vas a dirigir tráfico. Y necesitas Python 3.10+ o Node 18+ instalados localmente con capacidad para instalar paquetes.

Si aún no tienes un Pixel, créalo antes de continuar. Aunque pienses usar solo Conversions API (CAPI) — como hacemos nosotros — sigues necesitando el ID del Pixel como dirección de enrutamiento para los eventos del lado servidor.

La configuración en 7 pasos

Estos pasos son secuenciales. Cada uno desbloquea el siguiente. Saltarse cualquiera rompe la cadena de formas difíciles de depurar porque los mensajes de error de Meta suelen ser engañosos.

Paso 1: Crear un System User en Business Manager

Ve a Configuración del negocio → Usuarios → Usuarios del sistema. Haz clic en "Añadir" y crea un nuevo System User. El nombre no importa para la API pero sí importa para tu cordura futura — ponle algo como your-brand-agent para que recuerdes qué hace dentro de seis meses. Elige el rol "Administrador" (no "Empleado") porque los System Users sin permisos de admin no pueden gestionar Custom Conversions ni eventos del Pixel.

Cuando construimos nuestro stack, creamos emaxstudioagent. El ID del System User se asigna automáticamente (número de 15 dígitos). Apúntalo.

Paso 2: Crear una App de desarrollador con caso de uso Marketing API

Ve a developers.facebook.com → Mis apps → Crear app. Elige el caso de uso "Marketing API" si lo ves en el desplegable. Si solo ves "Otro", también vale — los tokens de System User funcionan de cualquier forma. La interfaz alemana llama a esto "Werbeanzeigen mit Marketing API" mientras que la inglesa lo llama simplemente "Marketing API" u "Other". Ambos producen tokens idénticos.

Configura la app como tipo Negocio, no Consumer. Añade el producto Marketing API a la app desde la barra lateral izquierda. La app empieza en modo Desarrollo. Tienes que pasarla a modo Live (más sobre esto abajo) antes de que el token de System User funcione para anuncios reales.

Para pasar a modo Live, Meta requiere una URL pública de política de privacidad y un icono de app (PNG 1024×1024). Ambos son innegociables. El icono no necesita estar pulido — sirve un marcador de posición — pero la URL tiene que resolver de verdad a una página de política de privacidad. Nosotros alojamos la nuestra en /legal en nuestro dominio principal.

Paso 3: Generar un token de System User sin caducidad

De vuelta en Configuración del negocio → Usuarios del sistema → [tu System User] → haz clic en "Generar nuevo token". Selecciona la app que acabas de crear en el Paso 2. Después selecciona los permisos:

  • ads_management — necesario para crear, editar y pausar campañas
  • ads_read — necesario para extraer insights y datos de informes
  • business_management — necesario para gestionar activos y custom conversions

Pon la caducidad en "Nunca". Los tokens de System User son los únicos tokens de Meta que de verdad nunca caducan — los User Access Tokens duran como mucho 60 días, los Page Tokens dependen del User Token del que se derivaron. Este es el sentido entero de usar un System User en vez de OAuth para automatización en el backend.

Copia el token inmediatamente. Meta lo muestra una sola vez. Guárdalo en un gestor de secretos o en un archivo .env con chmod 600. Nunca lo subas a git.

Paso 4: Vincular el Ad Account y la Página como activos

El System User existe pero todavía no tiene acceso a nada. Tienes que asignar los activos explícitamente. En Configuración del negocio → Usuarios del sistema → [tu System User] → haz clic en "Añadir activos".

Asigna tu Ad Account con permisos totales ("Gestionar campañas" + "Gestionar rendimiento"). Asigna tu Página con permisos totales. Asigna tu Pixel/Dataset con permisos totales. Si tienes varios Ad Accounts y quieres que la CLI los gestione todos, asígnalos uno a uno.

Cuando configuramos esto, asignamos act_975780295197610 (nuestro Ad Account) y la Página 1113585798495892 (nuestra página de EMAX Studio) más el Pixel 1464075091373537. El prefijo act_ en los IDs de Ad Account es obligatorio cuando llamas a la API — es parte del ID real, no una convención de formato.

Paso 5: Asignar el permiso "Page verwalten" / "Manage Page" / "Gestionar página"

Este es el paso que pilla a casi todo el mundo la primera vez. El Paso 4 asignó la Página como activo, pero el nivel de permiso por defecto es "Anzeigen erstellen" / "Create Ads" / "Crear anuncios" — y no basta. El System User necesita "Page verwalten" / "Manage Page" / "Gestionar página" para publicar creatividades de anuncios que referencien la Página.

Si te saltas esto, cada llamada a la API de creación de anuncios devolverá un error genérico "permission denied" que no menciona la Página. Pasarás horas revisando los scopes de tu token y los permisos del Ad Account mientras el problema real está a un clic de profundidad en la configuración del activo Página.

Haz clic sobre la Página en la lista de activos, baja hasta los permisos y activa "Gestionar página" para el System User. Guarda.

Paso 6: Instalar la CLI y crear un archivo de configuración

Para Python, instala el SDK oficial:

pip install facebook-business

Para Node, usa el cliente mantenido por la comunidad:

npm install facebook-nodejs-business-sdk

Crea un archivo de configuración en ~/.meta-ads/config.json (o donde tu stack guarde los secretos):

{
  "access_token": "EAA...your-system-user-token",
  "app_id": "910292175368026",
  "app_secret": "your-app-secret",
  "ad_account_id": "act_975780295197610",
  "page_id": "1113585798495892",
  "pixel_id": "1464075091373537",
  "api_version": "v23.0"
}

Ajusta los permisos: chmod 600 ~/.meta-ads/config.json. El app_secret es opcional para tokens de System User pero habilita la firma appsecret_proof, que Meta recomienda para producción.

Paso 7: Ejecutar el primer comando de prueba

Verifica que todo funciona listando tus campañas. En Python:

from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adaccount import AdAccount
import json

cfg = json.load(open("/path/to/config.json"))
FacebookAdsApi.init(access_token=cfg["access_token"])
account = AdAccount(cfg["ad_account_id"])
campaigns = account.get_campaigns(fields=["name", "status", "objective"])
for c in campaigns:
    print(c["name"], c["status"], c["objective"])

Si esto devuelve una lista (incluso vacía, si todavía no tienes campañas), has terminado. Si lanza OAuthException o Permission denied, vuelve a la tabla de errores de abajo.

Errores comunes de configuración y cómo arreglarlos

Estos son los 8 errores que nos mordieron durante la construcción. Cada uno costó horas reales. Ahórrate el dolor.

Error Lo que realmente significa Cómo arreglarlo
Cannot use Custom Conversion with 0 events as promoted_object Tu Custom Conversion aún no ha disparado eventos, así que Meta se niega a optimizar para ella Optimiza primero por LANDING_PAGE_VIEWS; cambia a OFFSITE_CONVERSIONS después de que se hayan disparado más de 50 eventos
App must be Live, not Development Generaste un token pero nunca pasaste la app a modo Live Añade la URL de la política de privacidad + el icono de la app y luego cambia App Review → Live en el panel de la app
Use Case must be Marketing API, not Other (la interfaz varía) La etiqueta alemana "Werbeanzeigen mit Marketing API" corresponde a la inglesa "Marketing API". Ambas funcionan para los System User Tokens. Cualquiera de los dos casos de uso funciona; ignora el nombre del desplegable y sigue adelante
Instagram requires EU Pay-or-Consent + Page Linkage Los anuncios con ubicación en Instagram fallan con HARD_ERROR sobre tráfico de la UE si tu cuenta de IG no está vinculada a una Página con Pay-or-Consent configurado Vincula tu cuenta de Instagram Business a una Página en Configuración del negocio → Cuentas → Instagram
bid_strategy is required La creación del Ad Set no incluye el campo bid_strategy Añade "bid_strategy": "LOWEST_COST_WITHOUT_CAP" al payload del Ad Set
targeting_automation.advantage_audience is required El nuevo campo de v23.0 es obligatorio Añade "targeting_automation": {"advantage_audience": 1} (o 0)
video_feeds placement is deprecated Esa ubicación se eliminó en v23.0 Quita video_feeds de tu lista de placements; usa feed e instagram_reels en su lugar
image_hash is required for video_data Las creatividades de vídeo necesitan una imagen de miniatura registrada como hash Extrae un fotograma con ffmpeg -i video.mp4 -ss 00:00:01.5 -frames:v 1 thumb.jpg, súbelo vía /adimages y usa el hash devuelto

El de la Custom Conversion es el más cabrón porque técnicamente el mensaje de error te dice lo que está mal pero la solución no es obvia. Una Custom Conversion recién creada tiene cero eventos en el sistema de Meta. Meta se niega a optimizar una campaña por algo de lo que no tiene datos históricos. El truco está en lanzar la campaña optimizada primero por Landing Page Views, dejar que se disparen más de 50 conversiones a través de CAPI y luego cambiar el promoted_object del Ad Set a OFFSITE_CONVERSIONS con el ID de tu Custom Conversion. A partir de ahí la optimización sí funciona.

Un recorrido real de la primera campaña

Esto es lo que lanzamos como primera prueba real. Valores reales, flujo real, resultados reales.

Crear la campaña. Objetivo: OUTCOME_TRAFFIC (más tarde cambiado a OUTCOME_SALES una vez que tuvimos datos de conversión). Estado: PAUSED al principio para que el Ad Set y los Ads puedan crearse por debajo antes de activar todo a ACTIVE en un solo paso. El presupuesto vive a nivel de Ad Set en nuestra configuración.

Crear el Ad Set. Presupuesto diario: 1000 (céntimos = 10 $/día). Optimización: LANDING_PAGE_VIEWS. Estrategia de puja: LOWEST_COST_WITHOUT_CAP. Targeting: países ["US", "GB", "CA"], edad 25 a 55, idioma inglés. Placements: feed, instagram_reels, stories, marketplace. Targeting automation: {"advantage_audience": 1}.

Construir las creatividades. Tres creatividades de imagen y tres de vídeo — seis anuncios en total. Para las imágenes usamos nuestro propio output de EMAX Studio (eat your own dogfood): tres hooks, tres fondos con el color de marca, todos 1080×1080. Para los vídeos, tres reels verticales de 15 segundos con subtítulos palabra a palabra y voz de IA, generados a través de nuestro propio pipeline (explicado en Cómo crear una campaña de marketing con IA paso a paso). Cada creatividad de vídeo necesita un image_hash para la miniatura — extrae un fotograma a los 1,5 segundos con ffmpeg, súbelo a /adimages y usa el hash devuelto dentro del bloque video_data.

Activar. Pasa Campaign, luego Ad Set y luego los seis Ads a ACTIVE. La revisión de Meta suele despejarse en 15 a 30 minutos. Los anuncios rechazados aparecen por anuncio vía ad.get('effective_status').

Informe diario. Un script meta_daily_report.py se ejecuta a las 7:00 hora de Berlín vía cron. Extrae los insights, formatea gasto / CTR / CPM / conversiones en un mensaje de Telegram y pausa automáticamente cualquier anuncio con CTR por debajo del 0,5 % después de más de 100 impresiones. Las primeras 48 horas produjeron 4.200 impresiones, 78 clics (CTR 1,86 %) y 12 Quick Scans completados a 1,67 $ por conversión — señal suficiente para cambiar la optimización de Landing Page Views a OFFSITE_CONVERSIONS contra la Custom Conversion QuickScanComplete al tercer día.

Trampas que conviene evitar

Hay un par de cosas que te van a quemar. Cada una de estas la aprendimos por las malas.

No metas los tokens directamente en git. Ni siquiera en repositorios privados. Los tokens se filtran a través de los logs de CI, de forks que se vuelven públicos sin querer y de commits hechos antes de cambiar la visibilidad del repo. Lee siempre desde variables de entorno o desde un archivo de configuración con chmod 600 fuera del repo.

No te saltes el permiso de Gestionar página del Paso 5. Los errores que vas a ver parecen ser sobre el Ad Account o el token. No lo son. Vuelve a comprobar primero el permiso de activo Página siempre que veas un vago "permission denied" en la creación de creatividades.

No despliegues con la app de desarrollador todavía en modo Desarrollo. El token funciona para el usuario que lo creó pero falla en silencio para cualquier otro contexto de System User. Pasa a modo Live antes de ejecutar nada en un servidor.

No te olvides del image_hash para las creatividades de vídeo. Sin él, la creación entera del Ad falla con un error engañoso sobre video_data.

No te saltes CAPI si piensas escalar. Los píxeles de navegador pierden entre el 30 y el 50 % de los eventos por culpa de iOS ATT, los ad blockers y la prevención de seguimiento. La Conversions API del lado servidor recupera la mayoría — un fin de semana de trabajo que se amortiza la primera semana en la que escalas el gasto.

Preguntas frecuentes

¿Cuánto cuesta configurar la Meta Ads CLI?

La configuración en sí es gratis. La Marketing API, los tokens de System User, Business Manager y todas las herramientas de desarrollador son a coste cero — solo pagas los anuncios que efectivamente ejecutes. Cuenta entre 4 y 6 horas la primera vez y 30 minutos las veces siguientes.

¿Puedo ejecutar varios ad accounts a través de una sola instalación de la CLI?

Sí, y esta es una de las principales razones por las que las agencias usan tokens de System User. Añade cada Ad Account como activo en Configuración del negocio y podrás dirigirte a cualquiera de ellos cambiando el ad_account_id en tu configuración o pasándolo como parámetro. Un único token de System User puede gestionar cientos de Ad Accounts a través de varios Business Managers si los permisos están en su sitio.

¿Y qué pasa con una CLI de Google Ads — la configuración es parecida?

El concepto es parecido pero la configuración de Google es más áspera. Google requiere una aprobación de developer token que puede tardar entre 7 y 21 días, refresh tokens de OAuth2 que caducan periódicamente y una capa adicional de permisos de MCC (Cuenta de Administrador). El token de System User de Meta es genuinamente el más sencillo de los dos sistemas. Si trabajas con ambas plataformas, configura Meta primero para aprender los patrones.

¿Cómo roto los tokens de forma segura si uno queda comprometido?

Genera un nuevo token de System User (mismos permisos, misma caducidad "Nunca"), actualiza tu configuración, prueba que el nuevo token funciona y luego revoca el viejo. Meta te permite mantener varios tokens activos simultáneamente para el mismo System User, así que puedes hacer la rotación sin downtime. Si un token se filtra, revócalo de inmediato y audita el gasto reciente de anuncios a través de la API por si hay campañas no autorizadas.

¿Cómo encaja la Conversions API (CAPI) en esta configuración?

CAPI es un sistema separado pero complementario. La Meta Ads CLI gestiona campañas, ad sets y anuncios. CAPI envía eventos de conversión del lado servidor contra los que esos anuncios optimizan. Ambos usan el mismo Pixel ID. Los eventos de CAPI fluyen independientemente de cualquier pixel de navegador — son la base de un tracking limpio bajo el RGPD porque no se involucran cookies y la PII se hashea antes de la transmisión. La introducción a Facebook Ads con agentes de IA cubre cómo CAPI encaja en el stack de automatización mayor.

La conclusión honesta

La Meta Ads CLI no es magia. Es una manera disciplinada de eliminar tres cosas de tu flujo de trabajo: los refresh de tokens OAuth, los logins manuales al Ads Manager y el coste de error humano de hacer clic en 14 ajustes cada vez que lanzas un anuncio. Una vez que está en marcha, haces en 90 segundos lo que antes te llevaba 30 minutos.

La configuración es engorrosa porque las herramientas de Meta son engorrosas. Pero los pasos son deterministas. Sigue al pie de la letra la configuración de 7 pasos, vigila los 8 errores de la tabla y tendrás un stack de anuncios listo para producción al final de la tarde. Para la imagen mayor de cómo la CLI se enlaza con las creatividades de IA y el reporting diario, mira nuestra introducción sobre Facebook Ads con agentes de IA y AI news semana 18, 2026 para saber qué se está moviendo en el ecosistema de anuncios este año.

Una vez que la CLI está en vivo, la pregunta pasa a ser qué creatividades alimentarla. Pasa tu landing page por un escaneo gratuito de 90 segundos de AI-readiness en emax.studio — recibes una puntuación, una lista de huecos de conversión y un briefing de campaña listo para ejecutar en menos de dos minutos.


Sigue a EMAX Studio: Instagram | YouTube | Facebook

Compartir:

¿Listo para crear tus propios reels de video con IA?

5 créditos gratis. Sin tarjeta de crédito.

Empieza gratis