Før en kampanje starter, kan du behandle en liste med IG-kontoer med et skript og få en JSON-rapport med API-svaret for hvert navn. Endepunktet IG Scraper API fra jsonscraper returnerer en ekstern status og et profilobjekt; det observerte skjemaet inneholder brukernavn, opplysninger om personvern og verifisering, samt antall innlegg, følgere og kontoer som følges. Disse feltene gjør det enklere å velge ut oppføringer for manuell kontroll, men forklarer ikke i seg selv hvorfor et svar mangler eller er uventet.

Problemet: Listen over kontoer ser riktig ut, men er den klar til bruk?
Et regneark for en kampanje kan inneholde kontoer som har byttet navn, skrivefeil og private profiler. Hvis teamet begynner å analysere listen uten en forhåndskontroll, må noen åpne kontoene én etter én. En automatisert gjennomgang reduserer det manuelle arbeidet og gir en samlet logg over hva API-et faktisk returnerte for hvert forespurte navn.
Formålet med denne arbeidsflyten er avgrenset: gå gjennom listen, lagre de faktiske HTTP-svarene og JSON-dataene, og sende profiler med relevante kampanjefelt til manuell kontroll. Rapporten registrerer observerte data; den fastslår ikke hvorfor en profil ikke ble returnert, eller hvorfor forespørselen mislyktes.
Hva forespørselen kontrollerer
I dokumentasjonen fra jsonscraper er endepunktet GET /v1/user/by/username oppført. Den obligatoriske parameteren er username; nøkkelen sendes som license_key. Den valgfrie parameteren cache_timeout aktiverer hurtigbufring i et angitt antall sekunder, mens verdien 0 lar den være deaktivert. Det observerte skjemaet for vellykkede svar inneholder en ytre status og et ig-objekt med profilfelt.
Skill mellom tre forhold i diagnostikken: om HTTP-forespørselen ble utført; om den analyserte JSON-en inneholder et ig-objekt; og hvilke felt som finnes i dette objektet. Hvis et trinn ikke går som forventet, kan skriptet logge det tekniske resultatet og det opprinnelige svaret. Et slikt resultat viser at noe bør kontrolleres, men fastslår ikke årsaken til feilen.
Gjør klar inndata og nøkkel
Opprett filen usernames.txt med ett brukernavn per linje, uten tegnet @. Fjern tomme linjer og duplikater, og behold bare kontoer som hører til kampanjen. Lagre kontrolldato og prosjekt-ID separat, slik at resultatene kan sammenlignes senere.
Lagre nøkkelen i miljøvariabelen JSONSCRAPER_INSTAGRAM_LICENSE_KEY, ikke i kildekoden eller et kodearkiv:
export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="din_nøkkel"
python3 check_profiles.py
Eksemplet bruker standardbiblioteket i Python 3.8+ og krever ingen installasjon av HTTP-pakker.
Eksempel: Hent profiler og skriv en rapport
Skriptet går gjennom listen, ett navn om gangen. Ved et vellykket JSON-svar lagrer det den faktiske responsen og tilgjengelige profilfelt; ved HTTP- eller nettverksfeil registrerer det feilen som et teknisk resultat. Manglende felt forblir null, og den rå svarteksten lagres hvis den kunne leses.
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("Angi 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"Antall lagrede resultater: {len(results)}")
Dette er et integrasjonseksempel, ikke en rapport om en gjennomført test. Nøkkelen sendes i parameteren license_key, men skrives ikke ut. Det fullstendige svaret kan inneholde opplysninger som bør beskyttes i tråd med teamets regler for datalagring.
Slik tolker du resultatet
En oppføring med profile_returned betyr at skriptet mottok et JSON-objekt med ig. Sammenlign requested_username med returned_username, og se på opplysningene som er viktige for kampanjeprosessen. Hvis kampanjen krever en offentlig profil, kan for eksempel is_private: true sendes til manuell kontroll.

Resultatene http_error, request_error og unexpected_or_missing_profile_object viser bare hvilket trinn skriptet ikke fikk den forventede strukturen fra. De beviser ikke at kontoen er slettet, privat eller utilgjengelig av en bestemt grunn. Lagre svaret, kontroller navnet og nøkkelen, og prøv deretter forespørselen på nytt eller kontakt tjenestens ordinære kundestøtte.
Hvis et felt mangler, la det stå som ukjent — ikke tolk mangelen som null eller false. Profilens tellere beskriver tilstanden da forespørselen ble sendt. Tidsstempelet gjør det mulig å skille dette øyeblikksbildet fra resultatene av neste kjøring.
Automatiser uten å miste oversikten
Legg kjøringen inn i en oppgaveplanlegger eller et eksisterende ETL-trinn. Lagre kontrolldato, forespurt navn, resultat, status og svarinnhold. Som et eget trinn kan du laste JSON-filen inn i et regneark og bare sende oppføringene som trenger kontroll, til en fagperson.
For å oppdage endringer kan du sammenligne øyeblikksbilder av én profil ut fra utvalgte felt. En endring i antall innlegg er en grunn til å åpne profilen og kontrollere den, ikke en nøyaktig dato for når innlegget ble publisert. Følgertallet er også en verdi fra tidspunktet forespørselen ble sendt, så historikken bygges opp av lagrede øyeblikksbilder.
Hvis listen er stor, bør du angi et kontrollert tempo, legge til et begrenset antall nye forsøk og føre en feillogg. Ikke ta med nøkkelen i URL-logger. Ved å lagre inndata og resultater hver for seg blir det enklere å se hvilke kontoer som allerede er behandlet.
Forventet resultat
Resultatet er en JSON-fil med behandlingsresultat for hvert oppgitte navn, tidsstempel, tilgjengelige attributter og det lagrede svaret. Før listen brukes i en kampanje, kan du filtrere ut navn som stemmer overens, private profiler og tekniske tilfeller som krever manuell kontroll. Teamet bestemmer selv kriteriene for neste trinn.
Endepunktet og parameterne er beskrevet i dokumentasjonen for IG API-et; produktinformasjon finnes på siden for IG Scraper API. Begynn med et lite utvalg, kontroller den faktiske formen på svarene, og tilpass rapportreglene til arbeidsflyten deres.