Als een marketeer handmatig tientallen openbare IG-profielen controleert, zit het grootste tijdverlies niet in het openen van de pagina’s, maar in het ontbreken van een vergelijkbare geschiedenis. Eén momentopname toont het aantal volgers van vandaag; met twee momentopnamen kun je het verschil over een gekozen periode berekenen. Voor eenvoudige profielmonitoring kun je de aanvraag automatiseren, alleen de benodigde velden opslaan en een tabel met wijzigingen maken.
Hieronder staat een minimaal werkend Python-voorbeeld: het haalt profielgegevens op aan de hand van een gebruikersnaam via de IG Scraper API en schrijft een JSONL-regel met een tijdstempel weg. Het resultaat is een kleine historische gegevensbron die je kunt koppelen aan cron, n8n of je eigen opslag. De officiële beschrijving van de route en parameters staat in de IG API-referentiegids.
Welke vraag een dagelijkse momentopname beantwoordt
Stel dat een team openbare accounts van merken of partners volgt en wijzigingen wil opmerken in het aantal volgers, berichten of de verificatiestatus. Een profielpagina toont de huidige waarden, maar bewaart op zichzelf niet de toestand van vorige week. Bepaal daarom eerst welke velden belangrijk zijn en sla ze vervolgens op met de datum waarop je ze hebt waargenomen.

De route /v1/user/by/username vereist de parameter username. Het antwoord bevat onder meer follower_count, following_count, media_count, is_verified, is_private en biography. Deze set is geschikt voor een profielmomentopname; hij bevat geen berichtgeschiedenis en verklaart op zichzelf niet waarom statistieken veranderen.
Het script heeft bewust een beperkte taak: op een bepaald tijdstip een waarneembare set velden ophalen en die vergelijken met eerdere registraties. Zo ziet een analist bijvoorbeeld dat het aantal volgers tussen de opgeslagen datums is veranderd en kan diegene dit daarna afzonderlijk nader onderzoeken, los van de automatische verzameling.
Bereid de sleutel en de accountlijst voor
Installeer de requests-bibliotheek en stel de API-sleutel in als omgevingsvariabele. Zet het geheim niet in een bronbestand, repository of uitvoer van het programma. De API gebruikt de queryparameter license_key; de bibliotheek hieronder stelt de querystring zelf samen.
python -m pip install requests
export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="uw_sleutel"
Je kunt de lijst met profielen opslaan in een configuratiebestand of projectvariabele. Voor de eerste uitvoering is één gebruikersnaam voldoende om het antwoord, de toegang en het opslaan te testen. In het voorbeeld is username ingesteld als API-parameter en wordt de sleutel uitsluitend uit de omgeving gelezen.
Een momentopname ophalen en opslaan met Python
Het script controleert het HTTP-antwoord, de externe API-status en of het object ig aanwezig is. Daarna slaat het alleen waarden op die expliciet beschikbaar zijn. Als een veld ontbreekt, blijft in de registratie null staan: een nul invullen zou een onbekende waarde verwarren met een echte nul.

import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
API_URL = "https://ig.jsonscraper.com/v1/user/by/username"
LICENSE_KEY = os.environ["JSONSCRAPER_INSTAGRAM_LICENSE_KEY"]
USERNAME = "apple" # vervang door een profiel uit je lijst
OUTPUT = Path("instagram-profile-snapshots.jsonl")
response = requests.get(
API_URL,
params={"username": USERNAME, "license_key": LICENSE_KEY},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok" or not isinstance(payload.get("ig"), dict):
raise RuntimeError("De API heeft een onverwachte status of structuur geretourneerd")
profile = payload["ig"]
record = {
"observed_at": datetime.now(timezone.utc).isoformat(),
"username": profile.get("username", USERNAME),
"pk": profile.get("pk"),
"follower_count": profile.get("follower_count"),
"following_count": profile.get("following_count"),
"media_count": profile.get("media_count"),
"is_verified": profile.get("is_verified"),
"is_private": profile.get("is_private"),
}
with OUTPUT.open("a", encoding="utf-8") as file:
file.write(json.dumps(record, ensure_ascii=False) + "\n")
print("Momentopname opgeslagen:", record["username"], record["observed_at"])
De velden en structuur in het voorbeeld komen overeen met de profielgegevens die voor deze route worden beschreven. Een geslaagde aanvraag retourneert een waarneming op het moment van de aanvraag; om ontwikkelingen te analyseren, moet je het script opnieuw uitvoeren en elke momentopname opslaan. Op de pagina van de IG Scraper API staan een basisaanvraag en een voorbeeldantwoord in JSON-formaat.
Wijzigingen tussen momentopnamen berekenen
JSONL bevat één registratie per regel en kan daarom met de standaardmodule van Python worden ingelezen. Het volgende fragment selecteert de twee meest recente registraties voor een profiel en berekent het verschil in het aantal volgers. Het toont het resultaat alleen als beide registraties een numerieke waarde bevatten.
import json
from pathlib import Path
rows = [
json.loads(line)
for line in Path("instagram-profile-snapshots.jsonl").read_text(encoding="utf-8").splitlines()
]
username = "apple"
profile_rows = [row for row in rows if row.get("username") == username]
profile_rows.sort(key=lambda row: row["observed_at"])
if len(profile_rows) >= 2:
previous, current = profile_rows[-2:]
old = previous.get("follower_count")
new = current.get("follower_count")
if isinstance(old, int) and isinstance(new, int):
print({
"username": username,
"from": previous["observed_at"],
"to": current["observed_at"],
"follower_delta": new - old,
})
Het verschil heeft uitsluitend betrekking op de twee geselecteerde waarnemingen. Als je uitvoeringen overslaat, wordt de periode ertussen langer; het rapport moet daarom beide datums tonen en de wijziging niet automatisch «per dag» noemen. Stel voor regelmatig gebruik een geplande uitvoering in met cron of de planner van een cloudplatform. In n8n kun je dezelfde reeks stappen samenstellen met planner-, HTTP-aanvraag- en opslagknooppunten voor een database of tabel; de namen van knooppunten en de koppeling met opslag hangen af van je installatie.
Uitbreiden naar meerdere profielen
Zet voor een lijst met accounts de gebruikersnamen in een apart bestand en loop erdoorheen. Sla de status van elke aanvraag afzonderlijk op: zo zorgt een fout bij één profiel er niet voor dat de gegevens van de andere profielen verloren gaan. Voeg een time-out, een foutenlogboek en een nieuwe poging toe, maar alleen voor accounts waarvoor de aanvraag is mislukt.
Je kunt pk als registratiesleutel gebruiken als de API deze terugstuurt, en tegelijk de gebruikersnaam bewaren voor de leesbaarheid. Met een identificatie kun je een profiel onderscheiden van een tekstlabel in een rapport; als de waarde ontbreekt, moet je er geen verzinnen of door een ander veld vervangen. Voor analyses is het nuttig de oorspronkelijke verzameltijd in UTC op te slaan en de vergelijkingsperiode expliciet vast te leggen.
Als je voor de taak gegevens met een bepaalde frequentie wilt ophalen, kun je met de gedocumenteerde parameter cache_timeout de cacheduur in seconden instellen; voor IG staat caching standaard uit. Kies de duur op basis van het monitoringsinterval en sla deze op bij de verzamelinstellingen, zodat je bij de interpretatie van resultaten rekening kunt houden met de aanvraagparameters.
Wat het resultaat is
Na enkele uitvoeringen heb je een bestand met tijdgestempelde momentopnamen van openbare statistieken en een eenvoudig te berekenen verschil tussen gekozen datums. Je kunt het bestand laden in Google Sheets, PostgreSQL of een analysesysteem; een aparte verwerkingslaag kan een melding maken wanneer een wijziging een door het team ingestelde drempel overschrijdt. De drempel is je bedrijfsregel, geen ingebouwde functie van de API.
De profielroute levert accountvelden op. Voor een audit van nieuwe berichten heb je daarom een bijbehorende verzameling van media nodig, niet conclusies op basis van media_count. De IG API-referentiegids vermeldt een afzonderlijke route voor het ophalen van berichten met paginering via user_id en de parameter end_cursor; gebruik die als je de berichten zelf wilt bestuderen. Voor het hier beschreven resultaat — een historische tabel met profielstatistieken — volstaat één aanvraag per gebruiker en het herhaaldelijk opslaan van momentopnamen.
Begin met één profiel en een paar uitvoeringen: controleer of de antwoordstatus klopt, datums worden opgeslagen en ontbrekende gegevens duidelijk onbekend blijven. Voeg daarna de accountlijst en planning toe. Zo krijg je reproduceerbare waarnemingen met een duidelijk interval en oorspronkelijke waarden, die je kunt controleren en doorgeven aan een volgend analyseproces.