Construí una habilidad de Claude que gestiona mis anuncios de Facebook — aquí está el código
Construí una habilidad de Claude que lee mi cuenta de Meta Ads a través de la Graph API, identifica los anuncios de bajo rendimiento, reescribe el copy en mi voz de marca y crea nuevos conjuntos de anuncios sin que yo toque el Administrador de Anuncios. Todo en menos de 300 líneas de TypeScript. El retorno fue inmediato: reduje el tiempo semanal de gestión de anuncios de ~3 horas a unos 20 minutos.
Cada miércoles. 28.400+ operadores. Sin relleno.
✓ Revisa tu bandeja — haz clic en el enlace de confirmación para completar el registro.
✓ ¡Ya estás suscrito!
✓ Ya estás en la lista.
Tabla de contenidos
Actualizado junio 2026.
TL;DR: Construí una habilidad de Claude que lee mi cuenta de Meta Ads a través de la Graph API, identifica los anuncios de bajo rendimiento, reescribe el copy en mi voz de marca y crea nuevos conjuntos de anuncios sin que yo toque el Administrador de Anuncios. Todo en menos de 300 líneas de TypeScript. El retorno fue inmediato: reduje el tiempo semanal de gestión de anuncios de ~3 horas a unos 20 minutos.
[Lectura del operador] Gestiono anuncios para Pickleland y para mi marca de consultoría. Dos cuentas, audiencias distintas, fatiga creativa constante. Estaba pasando los domingos por la tarde en el Administrador de Anuncios haciendo cosas que debería hacer un modelo. Así que lo automaticé.
Por qué dejé de gestionar los anuncios de Facebook manualmente
El trabajo real de gestionar anuncios de Facebook se divide en tres tareas:
- Monitoreo — revisar qué conjuntos de anuncios están quemando dinero vs. generándolo
- Diagnóstico — averiguar por qué algo tiene bajo rendimiento (¿fatiga creativa? ¿mal targeting? ¿página de destino?)
- Iteración — escribir nuevo copy, crear nuevos conjuntos de anuncios, ajustar presupuestos
La tarea 1 es mecánica. La tarea 3 es mayormente mecánica (con una restricción de voz). La tarea 2 requiere juicio — y es la única que se beneficia de tener un humano en el ciclo.
Una habilidad de Claude puede hacer el 1 y el 3. Yo reviso los resultados de la tarea 2 antes de que algo se publique. Esa es la arquitectura en la que me decidí.
La configuración de la Meta Graph API (esta es la parte tediosa)
Antes de cualquier código: necesitas una cuenta de Meta Business, un Usuario del Sistema y un token de acceso permanente. El portal de desarrolladores de Facebook es hostil, pero el camino es:
- Crear una Meta App en developers.facebook.com (tipo: Business)
- Agregar el producto Marketing API
- En tu Portafolio de Negocio → Configuración → Usuarios → Usuarios del Sistema, crear un usuario del sistema y darle el rol
ADVERTISERen tu cuenta publicitaria - Generar un token con estos permisos:
ads_read,ads_management,business_management
Guarda el token como META_ACCESS_TOKEN y el ID de tu cuenta publicitaria (formato: act_XXXXXXXX) como META_AD_ACCOUNT_ID en tu .env.
La estructura de archivos de la habilidad
.claude/skills/fb-ads/
SKILL.md ← instrucciones que Claude lee
index.ts ← la implementación real de la herramienta
types.ts ← tipos compartidosEl SKILL.md es lo que le dice a Claude cuándo y cómo usar la habilidad. El mío dice:
# Facebook Ads Manager Skill
Use this skill when the user says "check my ads", "run ads report",
"pause underperformers", or "write new ad copy". Never run this
without explicit user instruction — it touches live ad spend.
## What it can do
- Pull performance data for all active ad sets (last 7 or 30 days)
- Flag ad sets with ROAS < 1.5 or CTR < 0.8% as underperformers
- Rewrite ad copy for flagged creatives in Ale's voice
- Create new ad sets with revised copy (PAUSED by default — you approve before activating)
## What it will NOT do
- Change budgets on live ad sets without explicit confirmation
- Activate new ad sets automatically
- Delete anythingLa restricción de “nunca activar automáticamente” es innegociable. Esta habilidad crea cosas en estado PAUSADO. Yo reviso y activo manualmente. Cualquier cosa que toque el gasto en vivo necesita un punto de control humano.
El código TypeScript principal
(Los bloques de código se mantienen en inglés — solo se traduce el texto que los rodea.)
Cómo lo uso día a día
La habilidad se invoca desde Claude Code (mi herramienta diaria). Una sesión típica de lunes por la mañana:
> check my ads from the last 7 daysClaude ejecuta runAdsReport(7), formatea los resultados como una tabla, señala los de bajo rendimiento y pregunta si quiero reescrituras. Digo que sí. Genera el nuevo copy, me muestra ambas versiones lado a lado y crea conjuntos de anuncios PAUSADOS con el nuevo creativo. Los reviso en el Administrador de Anuncios, activo los que me gustan y archivo los perdedores.
Tiempo total: 20 minutos. Cero domingos por la tarde en el Administrador de Anuncios.
Lo que esto no reemplaza
La habilidad no puede decirme si un problema de ajuste producto-mercado se está disfrazando de un problema de copy. Si el ROAS es malo en general, es un problema de embudo u oferta, no de titular. Claude reescribirá fielmente el copy en un embudo roto — y las reescrituras no lo salvarán.
El paso de diagnóstico sigue siendo mío. Leo el informe, miro los datos del embudo y decido si estamos iterando el creativo o resolviendo algo más arriba. El agente es rápido en todo excepto en ese juicio.
La conclusión del operador
Si estás gestionando anuncios manualmente y tocando el Administrador de Anuncios más de dos veces por semana, estás haciendo operaciones que debería hacer un script. La Graph API está bien documentada y el flujo de permisos de Meta, aunque tedioso, es una configuración única. Construye la habilidad en una tarde. El retorno en tiempo recuperado se nota en la primera semana.
Cada miércoles. 28.400+ operadores. Sin relleno.
✓ Revisa tu bandeja — haz clic en el enlace de confirmación para completar el registro.
✓ ¡Ya estás suscrito!
✓ Ya estás en la lista.
Recibe el manual de IA en tu buzón
Cada miércoles. 28.400+ operadores. Sin relleno.
Revisa tu bandeja de entrada.
Te enviamos un correo de confirmación — haz clic en el enlace para completar tu suscripción. Revisa spam si no lo ves en un minuto.
Ya estás suscrito.
Bienvenido — la próxima edición llegará pronto a tu bandeja.
Ya estás en la lista — búscalo cada miércoles.