Antes de lanzar una campaña, puedes procesar una lista de cuentas de IG con un script y obtener un informe JSON con la respuesta de la API para cada nombre. El endpoint IG Scraper API de jsonscraper devuelve un estado externo y un objeto de perfil; el esquema observado incluye el nombre de usuario, indicadores de privacidad y verificación, y el número de publicaciones, seguidores y seguidos. Estos campos ayudan a seleccionar registros para una revisión manual, pero por sí solos no explican por qué falta una respuesta o por qué resulta inesperada.

El problema: la lista de cuentas parece correcta, pero ¿está lista para usarse?
En una hoja de cálculo de campaña puede haber cuentas cuyo nombre ha cambiado, errores tipográficos y perfiles privados. Si el equipo empieza a analizar la lista sin comprobarla antes, alguien tiene que abrir las cuentas una por una. Un proceso automatizado reduce el trabajo manual y deja un registro uniforme de lo que la API devolvió para cada nombre solicitado.
El objetivo de este procedimiento es limitado: recorrer la lista, guardar las respuestas HTTP y el JSON reales, y señalar para revisión manual los perfiles que presentan los indicadores necesarios para la campaña. El informe registra los datos observados; no determina por qué no se devolvió un perfil ni por qué falló la solicitud.
Qué comprueba la solicitud
La documentación de jsonscraper indica el endpoint GET /v1/user/by/username. El parámetro obligatorio es username; la clave se transmite como license_key. El parámetro opcional cache_timeout activa la caché durante el número de segundos especificado; el valor 0 la deja desactivada. El esquema observado de una respuesta correcta contiene un status externo y un objeto ig con los campos del perfil.
Para el diagnóstico, separa tres hechos: si se pudo realizar la solicitud HTTP, si el JSON analizado contiene un objeto ig y qué campos están presentes en ese objeto. Si alguna etapa no termina como se esperaba, el script puede registrar el resultado técnico y la respuesta original. Ese resultado indica que hace falta comprobarlo, pero no establece la causa del problema.
Prepara los datos de entrada y la clave
Crea el archivo usernames.txt, con un nombre de usuario por línea y sin el símbolo @. Elimina las líneas vacías y los duplicados, y conserva solo las cuentas relacionadas con la campaña. Para poder comparar los resultados más adelante, guarda por separado la fecha de la comprobación y el identificador del proyecto.
Guarda la clave en la variable de entorno JSONSCRAPER_INSTAGRAM_LICENSE_KEY, no en el código fuente ni en el repositorio:
export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="tu_clave"
python3 check_profiles.py
El ejemplo utiliza la biblioteca estándar de Python 3.8 o posterior y no requiere instalar paquetes HTTP.
Ejemplo: solicitar perfiles y guardar un informe
El script recorre la lista, un nombre cada vez. Si recibe una respuesta JSON correcta, guarda el cuerpo real y los campos disponibles del perfil; si se produce un error HTTP o de red, lo registra como resultado técnico. Los campos ausentes permanecen como null, y el cuerpo sin procesar se guarda si se ha podido leer.
import json
import os
import time
from datetime import datetime, timezone
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import Request, urlopen
API_KEY = os.environ.get("JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
if not API_KEY:
raise SystemExit("Define JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
BASE_URL = "https://ig.jsonscraper.com/v1/user/by/username"
with open("usernames.txt", encoding="utf-8") as f:
usernames = list(dict.fromkeys(
line.strip().lstrip("@") for line in f if line.strip()
))
results = []
for username in usernames:
params = urlencode({"username": username, "license_key": API_KEY})
request = Request(f"{BASE_URL}?{params}", method="GET")
checked_at = datetime.now(timezone.utc).isoformat()
try:
with urlopen(request, timeout=30) as response:
http_status = response.status
raw_body = response.read().decode("utf-8")
try:
payload = json.loads(raw_body)
json_error = None
except json.JSONDecodeError as exc:
payload = None
json_error = str(exc)
profile = payload.get("ig") if isinstance(payload, dict) else None
record = {
"requested_username": username,
"checked_at": checked_at,
"http_status": http_status,
"api_status": payload.get("status") if isinstance(payload, dict) else None,
"check_result": "profile_returned" if isinstance(profile, dict) else "unexpected_or_missing_profile_object",
"response": payload if payload is not None else raw_body,
}
if json_error:
record["json_error"] = json_error
if isinstance(profile, dict):
record["returned_username"] = profile.get("username")
record["is_private"] = profile.get("is_private")
record["is_verified"] = profile.get("is_verified")
record["media_count"] = profile.get("media_count")
record["follower_count"] = profile.get("follower_count")
record["following_count"] = profile.get("following_count")
results.append(record)
except HTTPError as exc:
body = exc.read().decode("utf-8", errors="replace")
results.append({
"requested_username": username,
"checked_at": checked_at,
"check_result": "http_error",
"http_status": exc.code,
"response": body,
})
except (URLError, TimeoutError) as exc:
results.append({
"requested_username": username,
"checked_at": checked_at,
"check_result": "request_error",
"detail": str(exc),
})
time.sleep(0.5)
with open("profile-check.json", "w", encoding="utf-8") as f:
json.dump(results, f, ensure_ascii=False, indent=2)
print(f"Resultados guardados: {len(results)}")
Este es un ejemplo de integración, no un informe de pruebas realizadas. La clave se transmite en el parámetro license_key, pero no se imprime. La respuesta completa puede contener información cuyo acceso debe limitarse de acuerdo con las normas de conservación de datos de tu equipo.
Cómo interpretar el resultado
El registro profile_returned significa que el script recibió un objeto JSON ig. Compara requested_username con returned_username y revisa los indicadores importantes para el proceso de la campaña. Por ejemplo, puedes enviar is_private: true a revisión manual si la campaña requiere un perfil público.

Los resultados http_error, request_error y unexpected_or_missing_profile_object solo indican la etapa en la que el script no obtuvo la estructura esperada. No demuestran que la cuenta se haya eliminado, sea privada o no esté disponible por un motivo concreto. Guarda la respuesta, comprueba el nombre y la clave y, después, repite la solicitud o ponte en contacto con el soporte habitual del servicio.
Si falta un campo, déjalo como desconocido: no interpretes su ausencia como cero o false. Los contadores del perfil describen el estado devuelto en el momento de la solicitud. La marca de tiempo permite distinguir esta instantánea de los resultados de una ejecución posterior.
Automatización sin perder la trazabilidad
Traslada la ejecución a un planificador de tareas o a una etapa de un proceso ETL existente. Guarda la fecha de la comprobación, el nombre solicitado, el resultado, el estado y el cuerpo de la respuesta. En un paso aparte puedes cargar el JSON en una tabla y enviar al especialista solo los registros que requieren revisión.
Para detectar cambios, compara instantáneas del mismo perfil usando los campos que hayas seleccionado. Un cambio en el número de publicaciones es un motivo para abrir el perfil y comprobarlo, no una fecha exacta de publicación. El contador de seguidores también refleja el valor del momento de la solicitud, así que el historial de observaciones se construye a partir de las instantáneas guardadas.
Si la lista es grande, establece un ritmo controlado, añade reintentos con un límite y lleva un registro de errores. No incluyas la clave en los registros de URL. Guardar por separado la lista de entrada y los resultados ayuda a determinar qué cuentas ya se han procesado.
Resultado esperado
El resultado es un archivo JSON con el procesamiento de cada nombre indicado, una marca de tiempo, los atributos disponibles y la respuesta guardada. Antes de incorporar la lista a la campaña, puedes filtrar los nombres coincidentes, los perfiles privados y los casos técnicos para revisarlos manualmente. El propio equipo define los criterios para el siguiente paso.
El endpoint y sus parámetros se describen en la documentación de IG API; la información del producto está en la página de IG Scraper API. Empieza con una muestra pequeña, comprueba la forma real de las respuestas y adapta las reglas del informe a tu proceso.