← Todos los artículos Cómo conecté Instagram y Threads a mi bot — paso a paso, sin magia
Equipo de IA

Cómo conecté Instagram y Threads a mi bot — paso a paso, sin magia

20 de abril de 2026

Dos tardes, un archivo de Python, y el bot publica solo Reels, Stories y Threads. Nada complicado, mientras no te empeñes en pasar por planificadores de terceros.

Hoy llegó una pregunta de Dima: «¿y cómo conectaste Insta y Threads?». Es importante porque para la mayoría es justo esa la principal barrera — parece que hace falta algún tipo de magia, claves API del propio Zuckerberg, y una semana lidiando con la documentación de Meta.

En realidad — no. Dos tardes y todo funciona. Lo cuento.

Aclaro de entrada

Lo conecté directamente por las APIs oficiales de Meta. No por SMMplanner, Postmypost, Buffer y otros planificadores. Los servicios de terceros están bien si solo te resulta más cómodo programar posts a mano — pero si tienes un bot que decide solo qué publicar, cuándo, y luego además lee la reacción — solo API. Todo lo siguiente — sobre el enfoque API.

Lo que hace falta de fábrica

Antes de meterte en el código — comprueba cinco cosas:

1. Cuenta Instagram Business o Creator. La personal normal no sirve. Cambiar es gratis, se hace en ajustes con un clic. No quita nada.

2. Una página de Facebook vinculada a la cuenta de Instagram. Suena arcaico, pero Meta está armado así: Instagram vive a través de una Facebook Page. Creas una página vacía, la vinculas — no tienes que publicar ahí.

3. Una app en Meta for Developers. Entras a developers.facebook.com, creas una App (tipo Business), obtienes App ID y Secret. Gratis, 5 minutos.

4. Long-lived Access Token. Un token normal vive 1 hora, eso no sirve. Hace falta uno long-lived — vive 60 días y se renueva. Se obtiene por Graph API Explorer + cambio de corto por largo.

5. ID de tu cuenta (Instagram y Threads por separado). Solo un número del tipo 17841472854897166. Se obtiene con una petición a la API en cuanto tengas el token.

Eso es todo. Sin estas cinco cosas ninguna parte de la API te dejará publicar nada.

Instagram — 6 pasos

Paso 1. En developers.facebook.com → My Apps → Create App → Business. Anotas App ID y Secret.

Paso 2. En la configuración de la App añades dos productos:

  • Instagram Graph API (para publicar)
  • Facebook Login for Business (para obtener el token)

Paso 3. En el Graph API Explorer eliges tu App, Generate Access Token, das los permisos: instagram_basic, instagram_content_publish, pages_read_engagement, pages_show_list, business_management.

Paso 4. Cambias el token corto por uno long-lived en una petición:

GET https://graph.facebook.com/v21.0/oauth/access_token
    ?grant_type=fb_exchange_token
    &client_id=APP_ID
    &client_secret=APP_SECRET
    &fb_exchange_token=SHORT_TOKEN

A la salida — un token de 60 días. Lo guardas en .env.

Paso 5. Averiguas tu Instagram User ID:

GET https://graph.facebook.com/v21.0/me/accounts
    ?access_token=LONG_TOKEN

Devuelve una lista de tus Facebook Pages, cada una con el Instagram ID vinculado a la vista. Lo anotas.

Paso 6. Publicación en dos pasos. Aquí va lo importante con lo que la gente tropieza a menudo: no puedes simplemente publicar. La API funciona así:

  1. Creas un media container — dices «aquí está la URL del video, aquí está la descripción»
  2. Esperas a que el container se procese (10 segundos — 2 minutos, sondeo de estado cada 5–10 segundos)
  3. Envías el comando «publica este container»

Otro punto importante: la API de Instagram no acepta archivos directamente en el POST. Acepta una URL donde el archivo está en internet. En mi caso los archivos vuelan a catbox.moe (hosting anónimo gratuito), vuelve un enlace directo y ese se lo paso a la API. Todas las integraciones funcionan así.

Soportados: Reels (video), Stories (video o foto), post normal (foto / carrusel hasta 10 fotos).

Threads — los mismos pasos, API aparte

Buena noticia: Threads tiene una API aparte (graph.threads.net), pero la lógica es uno a uno. Si pudiste con Insta — Threads es una tarde extra.

Paso 1. En la misma Meta App añades el producto Threads API.

Paso 2. En el Graph API Explorer generas un token con permisos: threads_basic, threads_content_publish, threads_manage_replies, threads_read_replies.

Paso 3. Lo cambias por long-lived por el mismo fb_exchange_token.

Paso 4. Averiguas tu Threads User ID:

GET https://graph.threads.net/v1.0/me
    ?fields=id,username
    &access_token=THREADS_TOKEN

Paso 5. La misma publicación en dos pasos: /threads → polling → /threads_publish. Soportado: texto, imagen, video, carrusel.

Bonus: en Threads se puede publicar texto puro sin medios. En Insta no se puede.

El detalle principal de Threads

Threads tiene una jugarreta de la que poco se escribe: si en el post principal hay un enlace — el alcance se corta unas tres veces. No la API, sino el algoritmo de la propia red social.

La solución a la que llegué y que funciona:

  1. Publicas el post sin enlace
  2. A los 90 minutos — automáticamente envías tu propia reply debajo de ese post con el enlace

El algoritmo ya empujó el post principal, el enlace en una reply no corta el alcance, los clics funcionan. Tengo un script aparte para esto + una cola de replies diferidas en JSON, corre cada 30 minutos vía launchd.

Si vas a hacerlo — mete esta lógica de entrada. De lo contrario, en un mes vas a ver una caída de alcance y no vas a entender por qué.

Rastrillos que pisé

Rastrillo 1. El token. Meta promete que los long-lived se pueden renovar una semana antes del vencimiento. En la práctica — mejor rotar cada 30 días en silencio con un script. Si lo pasas por alto — te despiertas con que todos los posts del día se fueron en 401. Desagradable.

Rastrillo 2. El archivo de medios tiene que estar en internet. No en memoria, no en base64 — una URL con enlace directo. Yo uso catbox.moe. Cualquier hosting con entrega directa sirve.

Rastrillo 3. Polling del container. No esperaste FINISHED — fuiste a publicar — recibiste error. Te quedaste en bucle sin timeout — el bot se puede morir con un video roto. Yo tengo 30 intentos de 10 segundos, después «al carajo» y log a errors.

Rastrillo 4. Requisitos de Reels. Insta tiene un formato de video estricto: h264 / mp4, 1080×1920, hasta 30fps, hasta 90 segundos. Si no entra — ERROR sin explicación clara. Pásalo por ffmpeg, llévalo al estándar.

Rastrillo 5. Política de Meta. Una vez cada 2–4 meses cambian algo: versión de la API, proceso de review, alcance de los permisos. Suscríbete a su Developer Newsletter, revisa el changelog una vez al mes.

Rastrillo 6. Rate limits. Insta tiene 50 posts al día por cuenta. Margen enorme para un humano, pero si manejas automática agresiva — no te salgas.

Cuánto cuesta

  • Meta Developer App — gratis.
  • Cuenta Instagram/Threads Business — gratis.
  • Hosting de archivos (catbox.moe) — gratis.
  • Servidor para el script — el mío corre en un Mac mini común vía LaunchAgent. Se puede en Hetzner por 4 euros al mes si no hay Mac.

En total: cero rublos y 2–3 tardes para entenderlo (si es la primera vez).

Script funcionando

Subí a un gist un ejemplo mínimo y limpio — solo Instagram y Threads, sin mi cableado de casa (en lo mío encima hay VK, Pinterest, Telegram). El archivo tiene ~280 líneas, una dependencia (requests).

📎 Script: gist.github.com/magic-dev-kz/meta_publisher.py

Tómalo, ábrelo en tu propio Claude Code — y dile «lee esto y adáptalo a mis necesidades». Lo va a entender, lo va a meter en tu bot.

En resumen

Conectar Insta y Threads no es magia. Son cinco casillas en ajustes, un cambio de token, dos noches de lectura atenta de la documentación de Meta, y un archivo de Python.

Vale la pena hacerlo tú mismo si tienes un bot o un pipeline — algo que decide solo cuándo y qué publicar. Si solo quieres una manera más cómoda de planificar a mano — toma SMMplanner, no sufras.

El futuro no está en publicar a mano de manera bonita. Está en que tu bot lo haga solo mientras tú estás ocupado con otra cosa.

Preguntas y mostrarme tu primer post funcionando — al privado de @magic4e. Suscríbete a @mdkguru — ahí muestro cómo armo el equipo de agentes de IA y en qué se está convirtiendo.