Guía · Automatización · Claude Code
Sin experiencia en Python · Solo Claude Code

El motor de
guardados de Instagram.

Los prompts exactos, el esquema de base de datos y el scheduler para construir un pipeline automático que convierte tus guardados de Instagram en ideas de contenido listas para publicar — con Claude Code, desde cero.

Guardás posts de Instagram para inspirarte. Después te olvidás de que existen. Cada "vuelvo a esto después" se convierte en peso muerto en el momento en que deslizás al siguiente reel. Esta guía convierte ese peso muerto en un motor de contenido que corre solo.
— Claude Code— Notion— launchd (Mac)— Sin código manual
El recorrido ↓
  1. 01Qué estás construyendo
  2. 0201 · Requisitos e instalación
  3. 0302 · Las dos bases de datos en Notion
  4. 0403 · Cookies de sesión de Instagram
  5. 0504 · Generar el sync daemon (sync.py)
  6. 0605 · Tu primera sincronización
  7. 0706 · Programar con launchd
  8. 0807 · El slash command /instagram-sync
  9. 0908 · Tu primer ciclo de ideación
  10. 10Checklist completo
Qué estás construyendo

Un pipeline que
corre solo.

El sistema tiene tres capas que trabajan juntas:

1
sync.py — el daemon que corre en segundo plano dos veces al día, autentica con Instagram usando tus cookies de sesión, y guarda cada post nuevo en Notion con Status = New.
2
launchd — el scheduler nativo de Mac que lanza sync.py a las 9 AM y 9 PM, incluso después de reiniciar el equipo, sin que vos hagas nada.
3
/instagram-sync — el slash command de Claude Code que lee los guardados nuevos, los reencuadra para tu audiencia, y escribe las ideas aprobadas en tu base de datos de Content Ideas.
— Por qué dos bases de datos en Notion
Saves es tu feed de investigación bruta. Content Ideas es donde vive el contenido reencuadrado y listo para publicar. Mantenerlos separados significa que podés procesar guardados en lotes sin ensuciar tu calendario de contenido real.
Paso 01

Requisitos
e instalación.

Lo que necesitás
Claude Code instalado (claude.ai/claude-code)
Mac (la sección del scheduler es específica para Mac; usuarios de Linux pueden adaptar con cron)
Python 3.9 o más nuevo
Una cuenta de Notion con un token de integración interno
Una cuenta de Instagram con al menos algunos posts guardados
Verificá tu versión de Python
terminal
python3 --version

Si devuelve 3.9 o mayor, estás listo. Si no:

terminal
brew install python3
Creá la integración de Notion
01
Andá a notion.so/profile/integrations
02
Hacé clic en New integration
03
Ponele un nombre como "Instagram Saves Sync"
04
En Capabilities, marcá Read content, Insert content y Update content
05
Hacé clic en Save. Copiá el token que empieza con ntn_. Lo vas a necesitar en el Paso 4.
Creá la carpeta del proyecto
terminal
mkdir instagram-saves-engine
cd instagram-saves-engine
Paso 02

Las dos bases de
datos en Notion.

Necesitás dos bases de datos. La primera captura los guardados brutos. La segunda almacena ideas de contenido pulidas. Mantenerlas separadas significa que tu calendario de contenido se mantiene limpio mientras tu historial de guardados se acumula en el fondo.

Base de datos 1 · Instagram Saves
notion · instagram saves
NameTitle
URLURL
CaptionText
AuthorText
Media TypeSelect · Reel / Image / Carousel
CollectionSelect
Saved AtDate
StatusSelect · New / Used / Reviewed / Skipped
LikesNumber
Post IDText
Base de datos 2 · Content Ideas
notion · content ideas
Idea TitleTitle
HookText
AngleText
PlatformMulti-select · IG / TikTok / LinkedIn
FormatSelect · Reel / Carrusel / Post
PillarSelect
StatusSelect · Draft / Approved / Scheduled / Posted
Source SaveRelation → Instagram Saves
CreatedDate
Pegá este prompt en Claude Code
Creame dos bases de datos en Notion usando mi integración. La primera se llama "Instagram Saves" y tiene estas propiedades: [pegá el schema de arriba]. La segunda se llama "Content Ideas" y tiene estas propiedades: [pegá el segundo schema]. Conectá la integración [nombre] a ambas y devolveme los database IDs de cada una.
Cómo encontrar el Database ID de Notion

Abrí tu base de datos en Notion y mirá la URL:

url
https://www.notion.so/tuworkspace/TU-DATABASE-ID?v=...

La cadena de 32 caracteres antes del ?v= es el database ID. Copiá los dos IDs — los vas a necesitar en los pasos 4 y 7.

— Conectá la integración a cada base de datos
Abrí cada base de datos → Menú de tres puntos (arriba a la derecha) → Connect to → elegí tu integración. Repetí para la segunda base de datos.
Paso 03

Cookies de sesión
de Instagram.

Instagram no tiene API pública para posts guardados. Nos autenticamos usando las mismas cookies de sesión que tu navegador ya envía con cada request.

01
Abrí Chrome e iniciá sesión en instagram.com
02
Presioná Cmd+Option+I para abrir DevTools
03
Hacé clic en la pestaña Application
04
En la barra lateral izquierda, expandí Cookies y hacé clic en https://www.instagram.com
05
Encontrá sessionid → copiá el Value completo
06
Encontrá csrftoken → copiá el Value completo
07
Encontrá ds_user_id → copiá el Value completo (es tu user ID de Instagram como número)
— Tratá estas cookies como una contraseña
Cualquiera con tu sessionid puede acceder a tu cuenta de Instagram. Nunca las commités a git. Las guardamos en un config.json local que se queda solo en tu máquina.
— Las cookies expiran
Instagram rota las cookies de sesión cada pocas semanas. Cuando tu sync empiece a fallar, volvé a este paso y tomá valores frescos. El slash command /instagram-sync tiene una acción "Refresh session" para guiarte.
Paso 04

Generar el
sync daemon.

Le pedís a Claude Code que genere el archivo Python completo. No necesitás escribir ni una línea de Python vos mismo.

Pegá este prompt en Claude Code
Construime un daemon de sincronización de Python llamado sync.py para este proyecto. Tiene que: autenticarse en Instagram usando cookies de sesión web (sessionid, csrftoken, ds_user_id) — NO uses instagrapi; usá la web API directamente para imitar lo que hace el navegador. Obtener posts guardados de colecciones específicas configurables en config.json. Deduplicar contra un archivo state.json local para evitar entradas duplicadas en Notion. Escribir nuevos posts en una base de datos de Notion con propiedades: Name (título), URL, Caption, Author, Media Type, Collection, Saved At, Status="New", Likes, Post ID. Crear también: config.example.json con todos los campos requeridos, requirements.txt con las dependencias, y .gitignore que excluya config.json y state.json.
— Por qué no instagrapi
La popular librería instagrapi apunta a la API móvil de Instagram y se detecta más fácil. La web API que usamos acá imita exactamente lo que envía tu navegador, lo que es menor riesgo para un script personal corriendo en tu propia cuenta.
Una vez que Claude genere los archivos
terminal
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Completá tu config.json
terminal
cp config.example.json config.json

Abrí config.json y reemplazá cada placeholder:

ig_session_id, ig_csrftoken, ig_user_id: los valores de cookies del Paso 3
notion_token: tu token ntn_... del Paso 1
notion_database_id: el ID de la base de datos Instagram Saves del Paso 2
collections_filter: un JSON array de nombres de colecciones, o remové la key para traer todos los guardados
Paso 05

Tu primera
sincronización.

terminal
.venv/bin/python3 sync.py

Un run exitoso se ve así:

Instagram session valid for @tuusuario
Fetching saved posts...
Found X collections
Sync complete: 47 new | 0 skipped | 47 total | 0 errors

Abrí tu base de datos Instagram Saves en Notion. Deberías ver filas con Status = New y los campos de cada guardado completados.

— Si el primer run trae demasiados guardados
Agregá collections_filter al config.json listando solo las colecciones que realmente querés. Mi setup solo trae de dos: "Content Ideas" y "Claude Code". Todo lo demás se queda afuera.
— state.json es crítico
Tu state.json es lo único que previene páginas duplicadas en Notion. Hacé backup ocasionalmente. Si se borra, el próximo sync va a recrear cada guardado anterior como una fila nueva.
Paso 06

Programar
con launchd.

launchd es el scheduler nativo de Mac. Este job va a correr sync.py dos veces al día, todos los días, incluso cuando no estés en tu escritorio.

Pegá este prompt en Claude Code
Creame un plist de launchd que corra .venv/bin/python3 sync.py desde mi carpeta de proyecto dos veces al día: a las 9 AM y las 9 PM. Guardalo en ~/Library/LaunchAgents/com.miusuario.instagram-saves-sync.plist. Después dame los dos comandos para instalarlo y cargarlo con launchctl, y el comando para verificar que está corriendo.

Ejecutá los dos comandos que te da Claude. Luego verificá:

terminal
launchctl list | grep instagram-saves

Si ves una entrada, el scheduler está corriendo. Va a dispararse a las 9 AM y 9 PM incluso después de reiniciar tu Mac.

— Por qué launchd y no cron
launchd es el scheduler oficial de Mac. Arranca en el boot automáticamente, loggea limpio, y es como Apple quiere que corran los procesos en segundo plano.
— Si el scheduler deja de funcionar después de una actualización de macOS
Recargalo con: launchctl load ~/Library/LaunchAgents/com.miusuario.instagram-saves-sync.plist
Paso 07

El slash command
/instagram-sync.

El slash command es la capa creativa. Lee tus guardados sin procesar, reencuadra cada uno para tu audiencia, y genera ideas de contenido listas para cada plataforma. Personalizá los placeholders antes de pegarlo.

Pegá este prompt en Claude Code
Creame un slash command en .claude/commands/instagram-sync.md con estas acciones: ideate (lee filas con Status=New de mi base de datos Notion ID=[TU_SAVES_DB_ID], reencuadra cada guardado para mi audiencia de [TU_NICHO], presenta las ideas con opciones de hook y breakdown por plataforma, escribe las aprobadas en mi base de datos Content Ideas ID=[TU_IDEAS_DB_ID], y cambia el status de cada guardado procesado a Used o Reviewed) y refresh session (guíame a través del proceso de actualizar mis cookies de sesión de Instagram en config.json y verificar que el sync funciona). Usá el notion_token de config.json para todas las queries. El mapeo de colecciones a pilares de contenido es: [COLECCIÓN_1]=[PILAR_1], [COLECCIÓN_2]=[PILAR_2].
— Por qué es separado de sync.py
sync.py es la capa tonta — busca, deduplica y escribe. El slash command es la capa inteligente — lee, reencuadra y adapta. El sync corre desatendido en un schedule. La ideación corre on-demand, cuando estás listo para pensar en contenido.
Paso 08

Tu primer ciclo
de ideación.

Abrí Claude Code en la carpeta de tu proyecto y escribí:

claude code
/instagram-sync ideate

Claude va a:

1
Consultar tu base de datos Saves para filas con Status = New
2
Reencuadrar cada guardado para tu audiencia específica
3
Presentar las ideas con opciones de hook y breakdowns por plataforma
4
Escribir las aprobadas en tu base de datos Content Ideas
5
Cambiar cada guardado procesado a Used o Reviewed

Abrí tu base de datos Content Ideas en Notion. Cada idea aprobada está ahí, con su ángulo, esquema y breakdown por plataforma, lista para que la filmes.

✓ Cada guardado se convierte en una idea de contenido, con tu voz, con breakdowns por plataforma. Tus guardados ya no son peso muerto.
Checklist

El resumen
completo.

Setup inicial (una sola vez)
Dos bases de datos de Notion creadas con las propiedades correctas
Integración de Notion conectada a ambas bases de datos
Cookies de Instagram copiadas desde Chrome DevTools
Claude Code generó sync.py, config.example.json, requirements.txt y .gitignore
Python venv creado y dependencias instaladas
config.json completado con cookies reales, token de Notion y database ID
Primera sincronización manual exitosa (filas en Instagram Saves con Status = New)
Plist de launchd instalado y cargado
Slash command creado en .claude/commands/instagram-sync.md
Database IDs y placeholders de nicho actualizados en el archivo del slash command
Cada semana
Abrir Claude Code en la carpeta del proyecto
Ejecutar /instagram-sync ideate
Aprobar las ideas que encajan con tu semana
Verificar la base de datos Content Ideas para nuevas entradas
Cuando el sync empiece a fallar
!Ejecutar /instagram-sync refresh session
!Abrir Chrome, ir a instagram.com, abrir DevTools → Application → Cookies
!Copiar sessionid, csrftoken y ds_user_id frescos
!Actualizar config.json con los valores nuevos
!Ejecutar .venv/bin/python3 sync.py para confirmar el fix
Qué hacer ahora

Cuatro formas de
sacarle más.

Guardá con intención
Creá colecciones de Instagram para tus pilares de contenido antes de empezar. Guardados organizados → ideas organizadas.
Procesá semanal, no diario
El batching reduce la carga cognitiva y tus ideas serán más afiladas cuando revisás una semana entera de una vez.
Ajustá el mapeo de pilares
La lógica colección→pilar del slash command es donde el motor aprende tu voz. Dedicá 10 minutos a personalizarla para tu nicho.
Expandí a otras plataformas
El mismo patrón funciona para bookmarks de X, YouTube watch-later y guardados de TikTok. Mismo daemon, diferentes endpoints de API.
— seguí aprendiendo

Pipeline montado.
Guardados convertidos.

Más guías de automatización con Claude Code, en español, en la biblioteca de Nico IA.

Ver todas las guías →