jsonscraper
Mercados
Volver al diario

IG: cómo detectar problemas en perfiles públicos antes de lanzar una campaña

Comprueba el estado, la privacidad y las métricas básicas de los perfiles mediante una API para convertir la revisión manual de una lista de cuentas en un informe reproducible

Política editorial Informar de un error

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.

Artículo: IG: cómo detectar problemas en perfiles públicos antes de lanzar una campaña
Resumen: Antes de lanzar una campaña, comprueba automáticamente los perfiles de IG: solicita los datos mediante jsonscraper, guarda las respuestas y crea una lista de cuentas que requieren revisión manual.
Función de la imagen: portada — la idea central
Sección: 
Tema visual: Foto editorial de una lista de comprobación de cuentas de campaña junto a un teléfono que muestra la silueta de un perfil genérico de IG, casillas de verificación marcadas y una pequeña tarjeta de datos JSON; sin re
La comprobación previa convierte una lista de nombres en registros con respuestas de la API y campos que pueden revisarse.© jsonscraper · creado con IA

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.

Artículo: IG: cómo detectar problemas en perfiles públicos antes de lanzar una campaña
Resumen: Antes de lanzar una campaña, comprueba automáticamente los perfiles de IG: solicita los datos mediante jsonscraper, guarda las respuestas y crea una lista de cuentas que requieren revisión manual.
Función de la imagen: ilustración complementaria 2 — un aspecto específico diferente
Sección: Cómo interpretar el resultado
Tema visual: Infografía en español: lista de nombres → API GET de perfiles de IG → comprobación de HTTP y JSON → objeto del perfil y campos username
El esquema muestra el recorrido desde la lista de usuarios hasta el informe y distingue los datos del perfil obtenidos de los errores técnicos.© jsonscraper · ilustración generada con IA

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.

Gente

Aún no hay personas en la lista para este artículo.

Sigue leyendoCómo convertir perfiles de IG en un registro diario de cambios
Lee el siguiente artículo

Convierte lo que lees en una integración funcional

Explora las API de datos sociales de jsonscraper, prueba solicitudes y crea tu próximo flujo de trabajo.

Explorar APIs