Tony Wang4 min de lecturaCómo scrapear Instagram en 2026 (API y Python)
Tres formas de scrapear Instagram en 2026 — Python DIY, herramientas sin código o una API estructurada, con las bases legales.
La forma más rápida de scrapear Instagram en 2026 es llamar a una API de Instagram estructurada que devuelve JSON normalizado — perfiles públicos, publicaciones y reels — en lugar de manejar un navegador headless a través de los logins y las defensas anti-bot de Instagram. Hacerlo tú mismo es posible, pero Instagram está fuertemente protegido y defendido de forma agresiva, y los datos personales plantean preocupaciones reales de privacidad. Esta guía cubre los tres enfoques, qué devuelve cada uno, dónde falla cada uno y las bases legales.
¿Es legal scrapear Instagram?
Procede con cuidado. Scrapear datos públicos de Instagram (perfiles públicos, publicaciones públicas) es menos riesgoso que los datos protegidos, y hiQ v. LinkedIn estableció que acceder a datos públicos no viola la CFAA — pero los Términos de Servicio de Instagram prohíben el acceso automatizado, gran parte del valor son datos personales regidos por el GDPR/CCPA, y todo lo que está detrás de un login queda fuera de los límites. Reglas generales: solo datos públicos y no personales; nunca evadas los logins; evita recolectar datos personales sin una base legal; revisa los términos de Instagram. Consulta is web scraping legal. No es asesoría legal.
Opción 1: Hazlo tú mismo en Python (y por qué falla)
Para perfiles públicos, Instagram expone un endpoint web que devuelve el perfil más sus últimas ~12 publicaciones sin necesidad de login — todo lo demás requiere un navegador headless con sesión iniciada:
import requests
resp = requests.get(
"https://www.instagram.com/api/v1/users/web_profile_info/",
params={"username": "example"},
headers={"User-Agent": "Mozilla/5.0", "X-IG-App-ID": "936619743392459"}, # required, undocumented
)
user = resp.json()["data"]["user"]
print(user["full_name"], user["edge_followed_by"]["count"])
Funciona en una demo y después se rompe:
- Límite de tasa estricto — el endpoint tiene un tope de alrededor de 200 solicitudes/hora por IP y banea las IPs de centros de datos al instante, así que necesitas muchas IPs residenciales rotativas con sesiones persistentes (sticky sessions).
- Muros de login más allá de los perfiles — el historial completo de publicaciones, comentarios, historias y seguidores requieren autenticación, lo que cruza los límites de los Términos de Servicio y de privacidad.
- Fingerprinting de TLS y headers — los clientes de Python tienen firmas TLS detectables y los headers/
X-IG-App-IDrequeridos cambian, así que las solicitudes quedan marcadas. - La Graph API no ayuda — la Instagram Graph API de Meta solo da servicio a tus propias cuentas Business/Creator, no a usuarios públicos arbitrarios.
Opción 2: Herramientas sin código
Los extractores visuales y las extensiones de navegador exportan CSV/JSON — están bien para extracciones puntuales de datos públicos, menos para pipelines dentro del producto con campos predecibles.
Opción 3: Una API de Instagram estructurada
Para flujos de trabajo repetibles sobre datos públicos, una Instagram scraping API devuelve JSON normalizado sin necesidad de ejecutar un navegador. Obtén un perfil público:
curl https://api.crawlora.net/api/v1/instagram/profile/USERNAME \
-H "x-api-key: $CRAWLORA_API_KEY"
La misma llamada en Python:
import requests
profile = requests.get(
"https://api.crawlora.net/api/v1/instagram/profile/USERNAME",
headers={"x-api-key": "YOUR_API_KEY"},
).json()["data"]
print(profile.get("username"), profile.get("followers"))
Una respuesta es JSON normalizado (los campos son ilustrativos — revisa los docs):
{
"code": 200,
"msg": "OK",
"data": {
"username": "example",
"full_name": "Example Brand",
"followers": 184000,
"posts_count": 420,
"is_verified": true
}
}
Las publicaciones y los reels se identifican por el id numérico del usuario (obtenido del perfil), no por el @handle, así que primero obtén el perfil:
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/instagram"
profile = requests.get(f"{base}/profile/example", headers=h).json()["data"]
uid = profile["id"]
reels = requests.get(f"{base}/reels/{uid}", headers=h, params={"max_id": ""}).json()["data"]
post = requests.get(f"{base}/post/{uid}/POST_ID", headers=h).json()["data"]
Los reels se paginan mediante max_id. Limítate a campos públicos y no personales.
Qué puedes recolectar
Donde el perfil público los expone: nombre de usuario, nombre para mostrar, conteos de seguidores/publicaciones, verificación, metadatos de publicaciones y reels públicos, y conteos de interacción — además del nombre de usuario o id que solicitaste. Limítate a campos públicos y no personales.
Limitaciones y desafíos comunes
- La mayor parte del valor está protegida. Se puede acceder a los perfiles públicos y a sus publicaciones más recientes, pero el historial completo de publicaciones, comentarios, historias y seguidores están detrás de un login — fuera de los límites sin cruzar líneas de Términos de Servicio y privacidad.
- La Graph API no ayuda. La Instagram Graph API de Meta solo da servicio a tus propias cuentas Business/Creator, no a usuarios públicos arbitrarios.
- Límite de tasa estricto. Instagram limita las solicitudes no autenticadas (~200/hora por IP) y banea las IPs de centros de datos al instante, así que hacerlo tú mismo requiere muchas IPs residenciales rotativas; una API estructurada gestiona eso detrás de una sola key.
- El salto por el id de usuario. Las publicaciones y los reels se identifican por el id numérico de usuario del perfil, no por el
@handle. - Las identidades son datos personales. Los nombres de usuario, nombres y contenido de publicaciones son datos personales bajo el GDPR/CCPA — recolecta solo campos públicos y no personales con una base legal.
Dónde se usa esto
- Monitoreo de marca — rastrea la presencia pública de marcas y competidores. Consulta el caso de uso brand monitoring.
- Investigación de creadores — evalúa perfiles públicos de creadores y su alcance.
- Investigación de tendencias — combínalo con señales de TikTok y YouTube.
Fuentes
Empieza a recolectar
Pruébalo primero, gratis: ejecuta cualquier URL pública en el Free Web Scraper, o comprueba si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba el endpoint de perfil en el Playground, revisa el schema en los API docs y consulta los pricing. Para una comparación completa frente a otras APIs de datos de Instagram, consulta best Instagram scraper APIs in 2026. Consulta también how to scrape TikTok, how to scrape YouTube, how to scrape LinkedIn, y how to scrape Twitter/X para el resto del stack social, además de how to scrape Pinterest y how to scrape Strava para otros feeds impulsados por imágenes y actividad, how to choose a web scraping API, y is web scraping legal.
Parte de nuestra serie de guías how-to-scrape — cada plataforma que cubrimos, en un solo índice.
Preguntas frecuentes
¿Puedo scrapear Instagram sin que me bloqueen?
Con una API estructurada, el enrutamiento de proxies y la ejecución del navegador para los datos públicos compatibles se gestionan detrás del endpoint. Hacerlo tú mismo es difícil: Instagram limita las solicitudes no autenticadas (~200/hora por IP), banea las IPs de centros de datos al instante y hace fingerprinting de TLS y headers, así que necesitas muchas IPs residenciales rotativas.
¿Funciona la Instagram Graph API para datos públicos?
No. La Instagram Graph API de Meta solo da servicio a tus propias cuentas Business o Creator, no a usuarios públicos arbitrarios — por eso recolectar datos de perfiles, publicaciones y reels públicos requiere scraping.
¿Puedo scrapear datos privados o personales?
No. Los endpoints de Crawlora son solo para datos públicos; el historial completo de publicaciones, comentarios, historias y seguidores están detrás de un login. Trata los nombres de usuario, nombres y contenido de publicaciones como datos personales bajo el GDPR/CCPA y no los recolectes sin una base legal.
¿Cómo obtengo las publicaciones y los reels de un usuario?
Primero obtén el perfil por el nombre de usuario para conseguir el id numérico de usuario, y luego llama a los endpoints de reels y publicaciones con ese id (las publicaciones y los reels se identifican por el id de usuario, no por el @handle); los reels se paginan mediante max_id.
¿Es esta la API oficial de Instagram?
No. Extrae datos públicos de Instagram y es independiente de las APIs oficiales de Meta.
¿Con qué frecuencia puedo actualizar los datos?
Ejecuta snapshots programados dentro de los límites de tu plan y del uso razonable (fair use).