Alejandro Rioja.
AI Agents

Construí una habilidad de Claude que gestiona mis anuncios de Facebook — aquí está el código

Alejandro Rioja
Alejandro Rioja
4 min de lectura
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.

Newsletter gratuita

Cada miércoles. 28.400+ operadores. Sin relleno.

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:

  1. Monitoreo — revisar qué conjuntos de anuncios están quemando dinero vs. generándolo
  2. Diagnóstico — averiguar por qué algo tiene bajo rendimiento (¿fatiga creativa? ¿mal targeting? ¿página de destino?)
  3. 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:

  1. Crear una Meta App en developers.facebook.com (tipo: Business)
  2. Agregar el producto Marketing API
  3. En tu Portafolio de Negocio → Configuración → Usuarios → Usuarios del Sistema, crear un usuario del sistema y darle el rol ADVERTISER en tu cuenta publicitaria
  4. 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

code
.claude/skills/fb-ads/
  SKILL.md          ← instrucciones que Claude lee
  index.ts          ← la implementación real de la herramienta
  types.ts          ← tipos compartidos

El SKILL.md es lo que le dice a Claude cuándo y cómo usar la habilidad. El mío dice:

markdown
# 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 anything

La 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:

code
> check my ads from the last 7 days

Claude 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.

Seguir leyendo

Recibe el manual de IA en tu buzón

Cada miércoles. 28.400+ operadores. Sin relleno.

↵ para ver todos los resultados esc esc para cerrar