La Meta Ads CLI es la herramienta oficial de línea de comandos de Meta para la Marketing API, lanzada el 29 de abril de 2026 como parte de sus Ads AI Connectors. Se instala como un paquete de Python 3.12+, se autentica con un token de acceso de usuario del sistema y ejecuta comandos con el patrón meta ads <resource> <action>. Cubre campañas, conjuntos de anuncios, anuncios, creatividades, insights, catálogos y datasets, con salida en tabla, JSON o texto plano que los scripts pueden procesar. Permite a desarrolladores y agentes de programación con IA gestionar anuncios de Meta sin escribir código de API.
Meta es una de las primeras plataformas publicitarias en lanzar su propia herramienta de línea de comandos, y dejó claro para quién era: desarrolladores y agentes de IA. Si has intentado configurarla desde el lanzamiento, probablemente te hayas encontrado las piezas repartidas en ocho páginas de documentación, una entrada de blog del lanzamiento y un montón de comentarios de terceros que no se ponen de acuerdo en lo básico, como la forma de instalarla o cómo funciona la autenticación.
Esta guía de la Meta Ads CLI lo reúne todo: la instalación exacta, la configuración del token de usuario del sistema (donde se atasca la mayoría), todos los grupos de comandos, el uso seguro desde Claude Code o Codex, los límites actuales, la resolución de problemas y cómo se compara con la CLI de Ads Uploader. Está contrastada con la documentación actual de Meta y el paquete más reciente, la versión 1.1.0, y la ha escrito un equipo que desarrolla su propia CLI para Meta Ads y lanza anuncios a través de la Marketing API todos los días.
Por qué creo que una CLI es la mejor forma de subir anuncios
Ya he escrito sobre esto en nuestra comparativa entre Meta Ads MCP y CLI, y el fondo de la cuestión no ha cambiado. En mi opinión, una CLI es la mejor infraestructura para subir anuncios.
La primera razón son los archivos. Una CLI tiene control nativo de tu sistema de archivos. Los lanzamientos suelen empezar desde tu disco duro, o desde un almacenamiento en la nube que se transmite o sincroniza con tu ordenador, y una CLI lee esos archivos de forma directa. Un servidor MCP alojado, como el de Meta en mcp.facebook.com/ads, no puede ver tu disco en absoluto, así que los archivos tienen que llegar por URL, un enlace de Drive o datos en línea. Ese rodeo es la razón por la que a la gente le cuesta más el vídeo que las imágenes con un MCP alojado. La lista de herramientas del propio MCP de Meta incluye una herramienta de creatividades descrita como "single-image link ad creative", además de herramientas para listar imágenes y vídeos existentes, pero ninguna herramienta específica de subida ni límites de archivo documentados. Las imágenes parecen viables; el vídeo no está documentado. (Un MCP instalado en local es diferente: se ejecuta en tu máquina y puede leer archivos, por eso el propio MCP de Ads Uploader también se ofrece como paquete local que lee desde el disco).
La segunda razón es cómo el agente encuentra su camino. Me parece que la CLI es más determinista. La respuesta de la línea de comandos funciona como unas barandillas: la salida de --help, los códigos de salida y los errores estructurados llevan al agente por un camino concreto. Con un MCP, el agente necesita saber más sobre cómo encajan las herramientas entre sí para plantear un lanzamiento, y muchos clientes cargan en el contexto todas las definiciones de herramientas desde el principio, unas 90 en el caso de Meta. Algunos clientes ya cargan las herramientas bajo demanda, pero un MCP puede consumir más tokens y, en mi experiencia, la CLI es simplemente más directa.
El MCP sigue teniendo su sitio para los informes conversacionales y las preguntas sobre la cuenta, algo que cubre nuestra guía de Meta Ads MCP. Esta guía se centra en la CLI.
¿Qué es la Meta Ads CLI?
En palabras de Meta, según su documentación de Ads CLI: "Ads CLI es una herramienta de línea de comandos para gestionar la publicidad de Meta desde tu terminal". Es un wrapper de Python sobre la Marketing API que se encarga de las partes que todo desarrollador solía reconstruir a mano: autenticación, paginación, formato de salida y gestión de errores.
Los datos clave, a 23 de septiembre de 2026:
- Paquete:
meta-adsen PyPI, mantenido por Meta. El ejecutable esmeta. - Última versión: 1.1.0, publicada el 17 de junio de 2026.
- Estado: Meta lanzó la familia Ads AI Connectors (la CLI más el servidor MCP alojado) como beta abierta. PyPI clasifica el paquete como Alpha.
- Licencia: propietaria. Se instala gratis, pero no es de código abierto, y no hay repositorio público en GitHub ni gestor de incidencias.
- Público: Meta menciona a desarrolladores que crean integraciones publicitarias, equipos de operaciones que automatizan mediante scripts y CI/CD, y "agentes y herramientas de IA".
La motivación de la Meta Ads CLI le resultará familiar a cualquiera que haya automatizado anuncios de Meta antes. Un comprador de una agencia en r/FacebookAds describió su configuración previa a la CLI, hecha de scripts de Python y cron jobs, como "frágil a más no poder", porque se rompía cada vez que Meta cambiaba algo en la API. Una herramienta oficial traslada buena parte de ese mantenimiento a Meta, aunque no todo.
Lo que puede hacer la Meta Ads CLI
El ejecutable 1.1.0 expone 14 grupos de recursos. La referencia pública de comandos recoge la mayoría, y el paquete instalado incluye algunos extra (feeds de productos, guidance y studies) que la documentación web apenas cubre.
| Recurso | Acciones |
|---|---|
campaign | list, create, get, update, delete |
adset | list, create, get, update, delete |
ad | list, create, get, update, delete |
creative | list, create, get, update, delete |
insights | get |
catalog | list, create, get, update, delete |
product-item | list, create, get, update, delete |
product-set | list, create, get, update, delete |
product-feed | list, create, get, update, delete |
dataset | list, create, get, connect, disconnect, assign-user |
adaccount | list, get, current |
page | list, get |
guidance | list |
study | list |
No hay un grupo independiente de audience, video, image ni lead-form. Las subidas de vídeo pasan por creative create, y las Custom Audiences se referencian dentro del JSON de segmentación del conjunto de anuncios.
Las funciones de automatización son lo que hace que la Meta Ads CLI sea amigable para agentes:
- Tres formatos de salida:
table(el predeterminado, para personas),json(para agentes yjq) yplain(separado por tabulaciones, paraawkycut). --no-inputsuprime las preguntas interactivas para que un script nunca se quede esperando un s/n.- Códigos de salida estándar del 0 al 5, para que un script o agente pueda actuar según el tipo de fallo.
- Variables de entorno y soporte para
.env, para que los tokens no queden en el historial de comandos.

Cómo instalar la Meta Ads CLI
Los requisitos de Meta son breves: Python 3.12 o superior, y pip o uv.
El comando de instalación oficial es:
pip install meta-ads
La página de primeros pasos de Meta añade a continuación un uv sync suelto, que solo funciona si ya estás dentro de un proyecto de uv con un pyproject.toml. Tras una instalación normal con pip no lo necesitas. Para una configuración limpia y repetible, usa un entorno virtual y fija la versión:
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install meta-ads==1.1.0
meta --version
Conviene conocer de antemano dos trampas de la instalación:
- "No matching distribution found for meta-ads." El paquete se distribuye como wheels compilados, no como distribución de código fuente. Si tu Python es anterior a la 3.12, o tu plataforma no coincide con ningún wheel publicado, pip no lo encuentra. Un usuario de r/FacebookAds se topó exactamente con esto la primera semana. Comprueba
python --versionantes de dar por hecho que el nombre del paquete está mal. - La versión de la API no está fijada. La CLI no fija una versión de la Marketing API. Hereda la que use el SDK
facebook-businessinstalado, y una instalación limpia el 23 de septiembre de 2026 resuelve el SDK 26.0.2, lo que significa Marketing API v26.0. Actualizar dependencias puede cambiar sin avisar la versión de la API que hay debajo de tus scripts, así que fija tantometa-adscomofacebook-businessen todo lo que automatices.
En Claude Code o Codex, puedes pedirle al agente que instale la Meta Ads CLI por ti. Lo que no puede hacer es la configuración del lado de Meta de la siguiente sección.
Autenticación con un token de acceso de usuario del sistema
Meta es explícita en que la Meta Ads CLI necesita un token: "Ads CLI requiere un token de acceso de usuario del sistema para autenticarse en el acceso programático". No hay comando meta auth login, ni flujo OAuth en el navegador, ni whoami. Generas un token en Business Manager y se lo pasas a la CLI mediante una variable de entorno.
Aquí es donde se atascan la mayoría de las configuraciones, así que esta es la secuencia completa.
Crea la app de Meta y el usuario del sistema
- En Meta Business Suite, ve a Configuración > Usuarios > Usuarios del sistema.
- Crea un usuario del sistema con el rol de Administrador.
- Crea o selecciona una app de desarrollador de Meta para el negocio.
- Añade el usuario del sistema a la app como Administrador de la app.
La app de desarrollador es obligatoria para la vía de la CLI. Es una diferencia real respecto al MCP alojado, que funciona mediante un conector OAuth estándar sin una app propia.
Asigna activos y genera el token
- Asigna al usuario del sistema todos los activos que vaya a tocar la CLI: cuentas publicitarias, Páginas de Facebook, datasets (Pixels) y catálogos de productos si los usas. Un activo sin asignar es la razón más habitual de que
meta ads adaccount listdevuelva una lista vacía. - Genera un token para la app con estos scopes, que figuran en la guía de configuración de Meta:
business_management
ads_management
pages_show_list
pages_read_engagement
pages_manage_ads
catalog_management
read_insights
La documentación de Postman de Meta indica que los tokens de usuario del sistema pueden durar hasta 60 días o no caducar nunca, según la opción que elijas y la elegibilidad de tu negocio.

Permisos de la app y App Review
La Meta Ads CLI siempre funciona a través de tu propia app de desarrollador de Meta, y los permisos de esa app deciden lo que puede hacer la CLI. Cuando falla una tarea nueva o un tipo de campaña distinto, la causa suele ser un bloqueo de permisos más que un bug de la CLI:
- Las creatividades respaldadas por una Página necesitan
pages_manage_ads. - Los catálogos necesitan
catalog_management. - Los anuncios de colaboración necesitan los permisos de contenido de marca además de los scopes de anuncios.
- Algunas vías de creatividades están bloqueadas mientras la app está en modo de desarrollo, lo que aparece como error 1885183. Un tutorial de YouTube de mayo mostraba cómo la campaña y el conjunto de anuncios se creaban sin problema mientras los anuncios fallaban hasta que la app pasó a Live.
El nivel de acceso también importa. Meta describe ahora el acceso a la Marketing API como Limited o Full. Limited Access basta para las cuentas publicitarias de tu propio negocio, pero gestionar cuentas de otros negocios, que es lo que hacen agencias y partners, requiere Full Access y App Review.
Además, App Review no es algo que se hace una sola vez. A medida que cambian los requisitos de Meta, tienes que volver a pasarlo para estar al día. En nuestra experiencia, las revisiones que hace un año tardaban un par de días, antes de que todo el mundo usara IA, ahora tardan aproximadamente de 10 a 20 días, a veces más. Meta no publica ningún compromiso de plazo de revisión, así que solicita los permisos nuevos con mucha antelación al lanzamiento que los necesite.
Define las variables de entorno y la precedencia de la configuración
La CLI lee tres variables:
| Variable | Finalidad | Obligatoria |
|---|---|---|
ACCESS_TOKEN | Token de acceso de usuario del sistema | Sí |
AD_ACCOUNT_ID | Cuenta publicitaria predeterminada, en formato act_ | Para la mayoría de comandos de anuncios |
BUSINESS_ID | Negocio predeterminado para catálogos y datasets | Opcional |
Ponlas en un archivo .env del proyecto que esté excluido del control de versiones:
ACCESS_TOKEN=<SYSTEM_USER_TOKEN>
AD_ACCOUNT_ID=act_123456789
BUSINESS_ID=123456789
La configuración se resuelve en este orden, de mayor a menor prioridad: flags de línea de comandos, variables de entorno de la shell, el .env del proyecto y, por último, la configuración de usuario en ~/.config/meta/. Después comprueba que todo funciona:
meta auth status
meta ads adaccount current
meta ads page list
meta auth status muestra si estás autenticado, con el token enmascarado. Si adaccount current devuelve el ID act_ correcto, ya está todo listo.
Comandos de la Meta Ads CLI: una chuleta práctica
Hay una regla de sintaxis que importa antes que nada: las opciones raíz como --output van antes de ads, y las opciones de cuenta van después de ads pero antes del recurso.
meta --output json ads campaign list
meta ads --ad-account-id act_123456789 campaign list
¿Te preocupa conectar la IA directamente a Meta?
Media buyers avanzados y agencias confían en Ads Uploader para lanzar cientos de miles de anuncios de Meta cada mes.
Prueba Ads Uploader gratisSin tarjeta de crédito • 7 días de prueba gratis
Comandos de lectura (cuentas, campañas, insights)
meta ads adaccount list
meta ads campaign list
meta ads adset list
meta ads ad list
meta ads insights get --date-preset last_7d
Insights usa por defecto last_30d, devuelve spend,impressions,clicks,ctr,cpc,reach y se limita a 50 filas salvo que lo cambies. Puedes filtrar a un solo objeto y añadir desgloses:
meta --output json ads insights get \
--campaign-id <CAMPAIGN_ID> \
--date-preset last_7d \
--fields spend,impressions,clicks,ctr,cpc \
--breakdown publisher_platform
Hay filtros para --campaign-id, --adset-id y --ad-id, y los desgloses incluyen edad, género, país, plataforma de publicación, plataforma del dispositivo y posición en la plataforma.
Crea una campaña de principio a fin
Esta es la secuencia documentada por Meta. Todos los comandos de creación aceptan --status, así que eliges si cada objeto empieza en pausa o activo. Estos ejemplos lo crean todo en pausa y lo activan al final:
# 1. Campaign (budget in cents: 5000 = $50.00 on a USD account)
meta ads campaign create \
--name "Spring Test | Traffic" \
--objective OUTCOME_TRAFFIC \
--daily-budget 5000 \
--status PAUSED
# 2. Ad set
meta ads adset create <CAMPAIGN_ID> \
--name "US | Broad" \
--optimization-goal LINK_CLICKS \
--billing-event IMPRESSIONS \
--targeting-countries US \
--status PAUSED
# 3. Creative (image or --video ./file.mp4)
meta ads creative create \
--name "Hero Banner" \
--page-id <PAGE_ID> \
--image ./banner.jpg \
--body "Check out our latest deals!" \
--title "Shop Now" \
--link-url https://example.com/sale \
--call-to-action SHOP_NOW \
--status PAUSED
# 4. Ad
meta ads ad create <AD_SET_ID> \
--name "Hero Banner Ad" \
--creative-id <CREATIVE_ID> \
--status PAUSED
Algunas reglas que los flags no te dicen:
- Los presupuestos van en la unidad menor de la moneda de la cuenta.
5000son $50.00 en USD. Comprueba la moneda de la cuenta antes de que un agente escriba un presupuesto. - El presupuesto va en un solo sitio. Ponlo en la campaña (CBO) o en los conjuntos de anuncios (ABO), no en ambos. Los dos a la vez suelen devolver el error 1885621.
--targeting-countrieses el único flag de segmentación sencillo. Edad, género, intereses, Custom Audiences, exclusiones y ubicaciones manuales van por--targetingcomo JSON o@file.json.- El Dynamic Creative necesita un conjunto de anuncios dinámico. Crea primero el conjunto de anuncios con
--dynamic-creative. - El flag de Instagram ha cambiado. La referencia web dice
--instagram-actor-id; el paquete 1.1.0 usa--instagram-user-id. Ejecutameta ads creative create --helpen la versión que tengas instalada.
Los nombres coherentes importan más cuando es un script o un agente quien crea los objetos, porque luego los vas a leer en listados. Define una convención de nomenclatura antes de automatizar nada.

Activar, pausar y limpiar
La activación son tres actualizaciones separadas, una por cada capa de entrega:
meta ads campaign update <CAMPAIGN_ID> --status ACTIVE
meta ads adset update <AD_SET_ID> --status ACTIVE
meta ads ad update <AD_ID> --status ACTIVE
Pausar es el mismo comando con --status PAUSED. Las eliminaciones piden confirmación salvo que pases --force, y se propagan en cascada: eliminar una campaña elimina sus conjuntos de anuncios y anuncios, y eliminar un conjunto de anuncios elimina sus anuncios.
meta ads campaign delete <CAMPAIGN_ID>
Catálogos y datasets
Los comandos de catálogos y datasets resuelven el negocio a partir de --business-id, después de BUSINESS_ID y, por último, de la cuenta publicitaria configurada.
meta ads dataset create --name "Website Pixel"
meta ads dataset connect <PIXEL_ID> --ad-account-id act_123456789
meta ads dataset connect <PIXEL_ID> --catalog-id <CATALOG_ID>
meta ads catalog create --name "My Product Catalog"
meta ads product-set list --catalog-id <CATALOG_ID>
Para crear un dataset, un administrador del negocio tiene que haber aceptado las condiciones de las Herramientas para empresas de Meta (error 1870092 si no es así). Los datasets son los mismos Pixels que ves en el Administrador de eventos, así que todo lo que crees aquí aparece también allí.
¿La Meta Ads CLI crea los anuncios en pausa o activos?
Las campañas, los conjuntos de anuncios y los anuncios empiezan en pausa salvo que pases --status ACTIVE. El tutorial de Ads CLI de Meta dice: "Ads CLI crea todo en estado PAUSED por defecto". En la versión 1.1.0, las creatividades son la excepción y se crean activas por defecto. En cualquier caso, la decisión es tuya: define --status en cada creación y activa o desactiva los objetos después con update.
Cómo usar la Meta Ads CLI desde Claude Code o Codex
No hace falta nada especial para conectar un agente. Claude Code, Codex y herramientas similares ejecutan comandos de shell, así que ejecutan la Meta Ads CLI exactamente igual que tú y procesan --output json. Esa es toda la integración.
Lo importante es entender que el agente hereda todos los permisos que tiene el token. El comentario más certero de un hilo temprano de r/FacebookAds lo dejaba claro: la misma configuración que redacta creatividades de reemplazo también puede cambiar presupuestos y pausar campañas, así que tu paso de revisión es lo único que se interpone entre un borrador y un cambio en vivo, y solo funciona si el agente no aprueba automáticamente las escrituras. La división que recomendaban es la que hay que copiar: aprobar automáticamente las lecturas y controlar todo lo que modifique el gasto o el estado.
En Claude Code, eso se traduce directamente en reglas de permisos en .claude/settings.json:
{
"permissions": {
"allow": [
"Bash(meta --output json ads campaign list:*)",
"Bash(meta --output json ads insights get:*)",
"Bash(meta ads adaccount current:*)"
],
"ask": [
"Bash(meta ads campaign create:*)",
"Bash(meta ads campaign update:*)",
"Bash(meta ads adset update:*)",
"Bash(meta ads ad update:*)"
],
"deny": [
"Bash(meta ads campaign delete:*)"
]
}
}
Codex tiene su propia configuración de aprobaciones; úsala de la misma forma, para que las lecturas se ejecuten libremente y las escrituras te esperen.
Algunas salvaguardas más que funcionan en la práctica:
- Usa un usuario del sistema dedicado para el agente, asignado solo a las cuentas que necesite. No reutilices un token compartido con acceso amplio.
- Guarda el token en
.env, nunca en un prompt, en un archivoCLAUDE.mdni en un argumento de comando. - Pide un plan por escrito antes de cualquier creación: ID de cuenta, IDs de los objetos padre, objetivo, presupuestos en céntimos y en dólares, segmentación, Pixel y estado final de cada objeto. Después haz que el agente lea cada objeto en JSON y lo compare.
- No dejes nunca que el agente use
--forcepor su cuenta. Y ten en cuenta que--no-inputsolo suprime las preguntas. No es una medida de seguridad. - Limita los bucles y los reintentos. Un bucle de reintentos sobre una creación fallida es la forma de acabar con cinco campañas duplicadas.
Los flujos de trabajo más útiles con agentes son los de lectura. El mismo profesional de Reddit ejecuta una revisión matutina que obtiene las campañas activas, compara el gasto, el ROAS y el CPL de las últimas 72 horas y marca todo lo que supere los umbrales de cada cliente (un CPL de $5 es buenísimo para una cuenta y malísimo para otra). Contaba que le ahorraba unos 45 minutos al día. Su regla de fatiga también es un buen punto de partida: si la frecuencia sube mientras el CTR baja durante tres días o más, se genera un borrador de copy de reemplazo que revisa una persona. Y los buenos agentes aportan un contexto que un umbral no puede dar, como no tocar una campaña cuyo CPL se disparó porque escalaste su presupuesto hace dos días.
Limitaciones y carencias conocidas
La Meta Ads CLI es una base sólida, pero hay cosas que todavía no hace:
- Sin dry run ni vista previa. No existe
--dry-run,--previewni--validate-only. Tu paso de revisión tiene que ser un plan por escrito más una relectura. - Sin transacciones. Una creación son cuatro llamadas a la API por separado. Si el anuncio falla después de que la campaña y el conjunto de anuncios se hayan creado bien, esos objetos se quedan ahí y los limpias tú.
- Sin comando por lotes. El trabajo masivo implica bucles de shell, lo que aumenta el riesgo de fallos parciales, duplicados y límites de frecuencia.
- Las funciones avanzadas necesitan JSON en bruto. Los carruseles, los controles de creatividades de Advantage+ (
--degrees-of-freedom-spec,--asset-feed-spec), la personalización de activos por ubicación y la segmentación compleja requieren JSON de la Marketing API. A partir de ahí necesitas conocer el esquema de la API. - Insights es más limitado que la API. Puedes filtrar por campaña, conjunto de anuncios o anuncio, pero no hay un flag
--levelexplícito, ni informes asíncronos, ni control de la ventana de atribución. - Sin perfiles de cuenta con nombre. El trabajo con varias cuentas pasa por
AD_ACCOUNT_IDy--ad-account-id, sin un selector del tipoclient-a/client-b. - Algunos campos de las creatividades no se pueden editar tras crearlas. Cuenta con crear una creatividad de reemplazo.
- La documentación va por detrás del paquete. La versión 1.1.0 instalada tiene más flags y grupos de recursos que la referencia pública, y no hay changelog público. Los primeros usuarios en Reddit contaron que descubrieron algunos comandos a base de prueba y error, y
--helpen tu versión instalada sigue siendo la referencia más fiable.
Algunos límites iniciales ya se han resuelto. Los informes de la semana del lanzamiento decían que no se podían subir vídeos y que insights solo funcionaba a nivel de campaña. Las versiones actuales admiten --video en las creatividades y filtros para insights de conjuntos de anuncios y anuncios.
Solución de errores comunes
Empieza por el código de salida, que te indica qué capa ha fallado:
| Código de salida | Significado |
|---|---|
| 0 | Éxito |
| 1 | Error general |
| 2 | Error de uso o de argumentos |
| 3 | Error de autenticación |
| 4 | Error de la API |
| 5 | Recurso no encontrado |
En los scripts, trátalos de forma distinta. Reintentar un error de uso (2) o de autenticación (3) nunca funciona. Solo merece la pena reintentar algunos errores de la API (4).
Los errores de Meta con los que más probablemente te encontrarás:
| Síntoma | Causa probable | Solución |
|---|---|---|
| Salida 3, error de API 190 | Token ausente, caducado o revocado | Regenera el token y ejecuta meta auth status |
| Errores 10, 200 o 294 | Falta un scope o nivel de acceso | Revisa los scopes del token, el acceso de la app y la asignación de activos |
adaccount list está vacío | El usuario del sistema no está asignado a la cuenta | Asigna la cuenta publicitaria en la Configuración del negocio |
| Error 1885183 | Publicación de la creatividad hecha por una app en modo de desarrollo | Pasa la app a Live y confirma el nivel de acceso |
| Error 1885621 | Presupuesto en la campaña y en el conjunto de anuncios | Elige CBO o ABO, no ambos |
| Error 1870092 | Condiciones de las Herramientas para empresas sin aceptar | Un administrador del negocio acepta las condiciones |
| Salida 4 con error 17 o 613 | Límite de frecuencia | Espera antes de reintentar; no reintentes en un bucle cerrado |
La Meta Ads CLI no tiene un margen de límite de frecuencia propio. Comparte los límites de la Marketing API, que Meta documenta en su página sobre límites de frecuencia. Con Limited Access, la puntuación de la cuenta publicitaria tiene un tope de 60 (una lectura cuesta aproximadamente un punto, una escritura unos tres) y un bloqueo dura cinco minutos. Full Access sube el tope a 9.000. Los cambios de presupuesto tienen su propio límite de unos cuatro por conjunto de anuncios por hora, algo que importa si a un agente le gusta andar retocando.
¿Es segura la Meta Ads CLI para tu cuenta publicitaria?
Si pasas tiempo en X o en comunidades de media buying, habrás visto el revuelo: anunciantes que conectaron los conectores de IA de Meta, o que apuntaron un agente a su cuenta, y después publicaron que la cuenta había sido restringida por automatización. Merece la pena tomárselo en serio. También merece la pena leerlo con atención, porque cada caso es distinto, las restricciones rara vez tienen una sola causa y no podemos opinar sobre los detalles de ninguna cuenta concreta.
La posición oficial de Meta es lo que dice su documentación. La CLI es una herramienta creada por Meta y dirigida explícitamente a desarrolladores y agentes de IA, y llama a la misma Marketing API que cualquier otra integración, así que se aplican las mismas políticas publicitarias, niveles de acceso y límites de frecuencia. Meta no ha dicho que la CLI exima a una cuenta de ninguno de ellos, ni tampoco que usar la CLI cause restricciones.
Lo que cambia un agente es el patrón de actividad. Un media buyer en Ads Manager trabaja a velocidad humana. Un agente en un bucle puede lanzar docenas de escrituras en un minuto, reintentar llamadas fallidas, volver a subir el mismo contenido y cambiar presupuestos una y otra vez, y ese patrón se ve muy diferente desde fuera que cualquier llamada aislada. Los riesgos que controlas son los que vimos antes: escrituras en la cuenta act_ equivocada, presupuestos en la unidad equivocada, reintentos descontrolados y tokens filtrados. Controla las escrituras, limita los bucles y respeta los errores de límite de frecuencia, y la CLI se comporta como cualquier otra integración bien construida.
Dónde encaja la CLI de Ads Uploader
La CLI y el MCP de Meta básicamente exponen la Marketing API con una forma más amigable para que los agentes la llamen. Eso es útil, y es lo que Meta se propuso crear. En lo que probablemente se ha pensado menos en una capa fina y de propósito general es en todo lo que rodea a las llamadas: dosificar las peticiones dentro de los límites de frecuencia, el patrón de acciones que un agente realiza sobre una cuenta a lo largo del día y la subida segura de contenido multimedia. La documentación de la CLI de Meta no describe ninguna capa de dosificación ni de reintentos; la herramienta hereda los límites de la Marketing API tal cual. Eso es lo que Ads Uploader tiene integrado y gestiona en su propio backend.
También hay un problema más discreto. Conseguir que las campañas, los conjuntos de anuncios y los anuncios queden exactamente con el objetivo y la configuración que quieres es un arte infravalorado. El objetivo, la meta de optimización, las ubicaciones, la identidad, el seguimiento, la nomenclatura y el formato de la creatividad tienen que encajar, y las combinaciones que funcionan no están escritas en un solo sitio. Esa es precisamente la razón de ser de Ads Uploader.
La CLI de Ads Uploader está pensada para que la maneje un agente como Claude Code o Codex, y te permite modelar anuncios nuevos a partir de tus anuncios existentes: guarda como preset un anuncio que ya está configurado como te gusta (ads presets:save --from-ad) y los nuevos lanzamientos heredan esa configuración. Tras millones de anuncios lanzados, sabemos qué combinaciones de ajustes van juntas y dónde se atasca la gente, y ese conocimiento colectivo vive dentro del flujo de trabajo, no en un prompt. Tu agente sube una carpeta de creatividades, ejecuta ads create:preview para comprobar exactamente qué se va a crear y después crea los anuncios, usando los mismos presets y builds guardados que la app web. La documentación de la CLI cubre el conjunto completo de comandos.
Enseguida se notan tres diferencias prácticas:
- Configuración. La instalación es
npm install -g @adsuploader/cli(necesita Node.js 18+) y despuésads loginte autentica en el navegador con tu cuenta de Ads Uploader. No hay app de desarrollador ni token de usuario del sistema. Elpip install meta-adsde Meta también es una sola línea si tienes Python 3.12+; el verdadero lío ahí es la autenticación: una app de desarrollador, un usuario del sistema administrador, la asignación de activos y un token con scopes. - Almacenamiento en la nube. Las creatividades suelen estar en Google Drive.
ads upload:drive "<shared folder link>"entrega una carpeta de Drive compartida por enlace a nuestra infraestructura, que descarga y procesa el contenido en el servidor, y el MCP alojado de Ads Uploader acepta un enlace a una carpeta o archivo de Drive de la misma forma. Suele ser más rápido que mover tú los archivos. - Builds guardados que puedes abrir. La app web, la CLI y el MCP comparten el mismo build. Un agente puede montar una campaña entera con la CLI o el MCP y devolver un enlace al build. Ábrelo en el uploader de Ads Uploader y podrás cambiar el texto, la configuración del conjunto de anuncios y las mejoras o añadir más contenido, y luego lanzar desde la web o seguir con la CLI o el MCP con el mismo build. Una pestaña abierta del uploader recoge automáticamente las ediciones del agente. En un flujo de trabajo solo de chat no ves realmente el resultado previsto hasta que se lanzan los anuncios, y eso importa sobre todo en las cuentas de otras personas.
La opción que tiene sentido depende de tu configuración:
- Una configuración sencilla: una cuenta publicitaria, imágenes estáticas en unos pocos tamaños y una única estructura de campaña. Puedes crear tus propias skills sobre la CLI o el MCP de Meta para subir exactamente como quieras, y es una buena forma de aprender la API.
- Agencias y partners: muchas cuentas, configuraciones de campaña distintas para cada cliente y las complicaciones que trae cada una. Ahí es donde las skills hechas a mano suelen venirse abajo, porque cada cuenta nueva añade combinaciones que gestionar. Ads Uploader es la red de seguridad en ese caso. Externalizas el conocimiento y la implementación a un flujo de trabajo probado y contrastado por miles de media buyers y agencias, a un precio muy asequible.
También está el mantenimiento. Las herramientas, los permisos y las normas de aprobación de Meta no paran de cambiar: los niveles de acceso se han renombrado a Limited y Full, los nuevos tipos de campaña traen permisos nuevos, App Review se aplica en cuanto una app gestiona cuentas de otros negocios y hay que repetirlo cuando cambian los requisitos, y en nuestra experiencia esas revisiones tardan ahora mucho más que antes. Que otra persona se encargue de seguir el ritmo de las herramientas, los permisos y las aprobaciones significa que no te quedas atrás cuando cambian. Ads Uploader es una app de Meta aprobada, mantenida por nosotros, con canales establecidos para trasladar a Meta los problemas de la plataforma y de la API cuando algo se rompe de su lado, así que seguir esos cambios es trabajo nuestro y no tuyo.
Meta Ads CLI vs CLI de Ads Uploader
Así se comparan las dos, lado a lado:
| Meta Ads CLI | CLI de Ads Uploader | |
|---|---|---|
| Instalación | pip install meta-ads (Python 3.12+) | npm install -g @adsuploader/cli (Node.js 18+) |
| Autenticación y configuración | Tu propia app de desarrollador de Meta, un usuario del sistema administrador, asignación de activos y un token con scopes | ads login en el navegador con tu cuenta de Ads Uploader |
| Vista previa | Sin dry run ni vista previa; revisión leyendo los objetos de vuelta | ads create:preview muestra lo que se va a crear antes de crearlo |
| Importación desde la nube | Lee archivos locales; el almacenamiento en la nube tiene que sincronizarse con el disco | ads upload:drive importa en el servidor una carpeta de Google Drive compartida por enlace |
| Builds y revisión | Cada comando es una llamada a la API independiente, sin plan guardado | Builds guardados compartidos con la app web y el MCP; abre el enlace del build para revisarlo y editarlo en la interfaz |
| Mantenimiento y aprobaciones de la app | Tú mantienes la app, el token, el nivel de acceso y cualquier App Review | App de Meta aprobada, mantenida por nosotros |
| Coste | Gratis; solo pagas la inversión publicitaria | Planes de pago |
Si quieres darle a un agente de programación la API de Meta sin nada en medio, la Meta Ads CLI oficial es el punto de partida evidente, y para una configuración sencilla es buena opción. Si prefieres no crear y mantener tú mismo la vista previa, la lógica de lanzamiento y las aprobaciones, ese es el trabajo que hace la CLI de Ads Uploader.
Dale a Tu Agente de IA una Red de Seguridad
Lanza en todas las cuentas de tus clientes con un MCP y una CLI creados para media buyers avanzados y agencias.
Prueba Ads Uploader gratisSin tarjeta de crédito • 7 días de prueba gratis
Preguntas frecuentes
¿La Meta Ads CLI es gratuita?
Sí. Meta no cobra ninguna tarifa aparte por la CLI. Instalas el paquete meta-ads desde PyPI sin coste y solo pagas tu inversión publicitaria habitual. El paquete es propietario y no de código abierto, y aun así necesitas una app de desarrollador de Meta y un token de usuario del sistema.
¿Existe una CLI oficial de Facebook Ads?
Sí. La CLI oficial de Meta para anuncios de Facebook e Instagram es el paquete de Python meta-ads, lanzado el 29 de abril de 2026, con comandos bajo meta ads.
¿La Meta Ads CLI puede subir anuncios de vídeo?
Sí. Pasa un archivo local a meta ads creative create con --video y la CLI lo sube. Meta documenta archivos mp4, mov, avi, mkv y wmv, y el Dynamic Creative acepta hasta 10 vídeos mediante flags --videos repetibles.
¿Necesito ser desarrollador para usar la Meta Ads CLI?
No necesitas escribir código de API, pero la configuración tiene un aire técnico: Python 3.12+, una app de desarrollador de Meta, un usuario del sistema administrador con activos asignados y un token con los scopes correctos. Muchos media buyers dejan que un agente de programación con IA se encargue de la instalación y ejecute los comandos.
¿Puedo gestionar varias cuentas publicitarias con la Meta Ads CLI?
Sí, si el usuario del sistema está asignado a cada cuenta. Lístalas con meta ads adaccount list, define una por defecto con AD_ACCOUNT_ID o sobrescríbela en cada comando con --ad-account-id. No hay perfiles con nombre, así que indica la cuenta de forma explícita en cada escritura.
¿Qué versión de Python necesita la Meta Ads CLI?
Python 3.12 o superior. El paquete se distribuye como wheels compilados, así que una versión antigua de Python o una plataforma no compatible devuelve "No matching distribution found". Un entorno virtual de Python 3.12 o 3.13 lo evita.
¿La Meta Ads CLI funciona con Claude Code y Codex?
Sí. Meta incluye a los agentes de IA entre su público objetivo, y cualquier agente que ejecute comandos de shell y lea JSON puede manejarla. Ninguno de los dos agentes añade seguridad por sí solo, así que aprueba automáticamente las lecturas y exige tu aprobación para creaciones, activaciones, cambios de presupuesto y eliminaciones.
¿Usar la Meta Ads CLI hará que me bloqueen la cuenta publicitaria?
No hay un sí o un no sencillo. La CLI es la propia herramienta de Meta para desarrolladores y agentes de IA, y Meta no ha dicho que usarla cause restricciones ni que te exima de ellas. Las políticas, los niveles de acceso y los límites de frecuencia se aplican igual que a cualquier integración. Algunos anunciantes reportan restricciones tras automatizar con agentes, pero cada caso es distinto, así que mantén las escrituras controladas y los bucles limitados.
¿Cuál es la diferencia entre la Meta Ads CLI y el Meta Ads MCP?
La CLI es una herramienta local de Python que ejecuta comandos de shell con un token de usuario del sistema. El Meta Ads MCP es un servidor alojado por Meta en mcp.facebook.com/ads al que los clientes de chat con IA se conectan mediante OAuth, sin app de desarrollador en el flujo estándar del conector. La CLI encaja con scripts y agentes de programación; el MCP encaja con el trabajo conversacional.
Primeros pasos con la Meta Ads CLI
La Meta Ads CLI ofrece a desarrolladores y agentes de IA una vía oficial y programable hacia la Marketing API, y la versión 1.1.0 cubre mucho más que la del lanzamiento. En resumen:
- Instala
meta-adsen un entorno virtual de Python 3.12+ y fija su versión junto con la defacebook-business. - Autentícate con un token de usuario del sistema administrador, asignado solo a los activos que necesites y guardado en
.env. - Decide qué vas a construir: una configuración sencilla de una sola cuenta es fácil de automatizar por tu cuenta; el trabajo de agencia con varias cuentas es donde un flujo de lanzamiento mantenido demuestra su valor.
- Planifica en torno a las carencias: sin dry run, sin transacciones, sin comando por lotes y JSON en bruto para los formatos avanzados.
- Con un agente, aprueba automáticamente las lecturas y controla cada escritura.
Haz que tu primera semana con la Meta Ads CLI sea solo de lectura. Obtén insights en JSON, después crea una campaña de prueba y llévala a mano por la revisión y la activación. Cuando ese ciclo te resulte rutinario, sabrás qué partes automatizar y cuáles mantener en tus manos.
