Vóór de start van een campagne kun je elk IG-account uit de briefing automatisch vergelijken met openbare profielgegevens. Zo’n controle spoort afwijkende gebruikersnamen, een privéstatus, gewijzigde namen of biografieën en aantallen berichten buiten het verwachte bereik op. Het resultaat is een controletabel voor de marketeer, geen automatische beoordeling van de geschiktheid van de maker.

Het probleem: een briefing veroudert sneller dan een spreadsheet
Een campagnelijst kan de accountnaam, een link, een indicatie van het aantal volgers en vereisten voor het openbare profiel bevatten. Die gegevens kunnen gemakkelijk uiteenlopen: een account verandert van gebruikersnaam, een profiel wordt privé en de cijfers in de briefing blijven ongewijzigd. Eén profiel handmatig controleren is eenvoudig; een lijst met accounts vóór elke campagne opnieuw nalopen is lastiger te beheren en reproduceerbaar uit te voeren.
Een nuttige aanpak is om voor elke rij expliciete regels vast te leggen, de beschikbare openbare velden op het moment van controle op te halen en de oorspronkelijke en actuele waarden naast elkaar te noteren. ‘Komt overeen’ betekent dan alleen dat een specifiek veld aan een specifieke regel voldoet; een specialist blijft verantwoordelijk voor de beoordeling van de doelgroep of de kwaliteit van de content.
Welke gegevens je opvraagt
De documentatie van de IG API-routes beschrijft de route GET /v1/user/by/username, met de verplichte parameter username. In het gecontroleerde antwoord staan de profielgegevens in het object ig: daarin staan de gebruikersnaam, volledige naam, biografie, privacy- en verificatiestatus, en het aantal berichten, volgers en gevolgde accounts. Deze velden beschrijven een momentopname van het beschikbare profiel.
Voor een eerste controle volstaat dit om de accountnaam, privacystatus en numerieke drempelwaarden te vergelijken. Je kunt de biografie aan de medewerker tonen of controleren met een eenvoudige regel, zoals de aanwezigheid van een verplichte term. Zo’n tekstfilter vindt een tekenreeks, maar beoordeelt op zichzelf niet de betekenis en bevestigt niet dat aan contractuele voorwaarden is voldaan.
De aanvraag in Python opnemen
Sla eerst de licentiesleutel op in de omgevingsvariabele JSONSCRAPER_INSTAGRAM_LICENSE_KEY. Het voorbeeld gebruikt het bevestigde basisadres, de route, de parameter username en de sleutelnaam license_key. Het CSV-bestand bevat de velden username,min_followers,max_followers,require_public; voor elk account vergelijkt het script het antwoord met de regels en markeert het rijen die moeten worden gecontroleerd.
import csv
import os
import sys
import requests
BASE_URL = "https://ig.jsonscraper.com"
API_KEY = os.environ.get("JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
if not API_KEY:
raise SystemExit("Set JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
# brief.csv: username,min_followers,max_followers,require_public
with open("brief.csv", newline="", encoding="utf-8") as source:
brief = list(csv.DictReader(source))
results = []
for row in brief:
username = row.get("username", "").strip()
minimum_text = row.get("min_followers", "").strip()
if not username or not minimum_text:
results.append({
"requested_username": username,
"needs_review": True,
"error": "Missing username or min_followers",
})
continue
try:
response = requests.get(
f"{BASE_URL}/v1/user/by/username",
params={"username": username, "license_key": API_KEY},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok" or not isinstance(payload.get("ig"), dict):
raise ValueError("Unexpected API response")
profile = payload["ig"]
followers = profile.get("follower_count")
minimum = int(minimum_text)
maximum_text = row.get("max_followers", "").strip()
maximum = int(maximum_text) if maximum_text else None
public_required = row.get("require_public", "").strip().lower() == "true"
checks = {
"username_matches": (
isinstance(profile.get("username"), str)
and profile["username"].lower() == username.lstrip("@").lower()
),
"followers_in_range": (
isinstance(followers, int)
and followers >= minimum
and (maximum is None or followers
Uitvoeren: python check_profiles.py. Installeer de bibliotheek requests, stel de omgevingsvariabele in de uitvoeromgeving in en plaats brief.csv in dezelfde map. Sla de sleutel niet op in de broncode of het uiteindelijke CSV-bestand. Het script verwerkt de lijst achtereenvolgens, wat handig is om kleine groepen accounts te controleren en fouten op te sporen.
Waarom ontbrekende gegevens zichtbaar moeten blijven
Bij de controles is het belangrijk onderscheid te maken tussen een nulwaarde en een ontbrekend veld. In het voorbeeld telt het aantal volgers alleen als passend wanneer er een numeriek veld aanwezig is; als de teller ontbreekt, is de voorwaarde niet bevestigd en wordt de vermelding handmatig gecontroleerd. Een lege drempelwaarde voor min_followers wordt eveneens gemarkeerd als invoerfout, en niet automatisch omgezet in nul.
Het controleren van het antwoord hoort onderdeel te zijn van de workflow. Het script controleert eerst of de externe status gelijk is aan ok en kijkt daarna of het object ig aanwezig is. Een HTTP-fout, onverwachte JSON of ongeldige regel komt in het rapport terecht zonder de tekst van de uitzondering, die de sleutel in de URL zou kunnen prijsgeven. Zo kan de medewerker een aanvraagfout onderscheiden van een profielafwijking, zonder het geheim te verspreiden.
Het resultaat lezen en de controle automatiseren
Het bestand profile_check.csv bevat de oorspronkelijke gebruikersnaam, de geretourneerde naam, beschikbare openbare velden, de resultaten van afzonderlijke voorwaarden en de algemene markering needs_review. Het team kan op deze markering filteren; een ontwikkelaar kan het rapport opslaan in een gegevensopslag of doorgeven aan de volgende stap in een ETL-proces. Plan het script voor periodieke uitvoering in en sla de uitvoerdatum apart op, zodat campagneopnamen kunnen worden vergeleken.

Als een regel verandert, bewaar die dan in de briefing in plaats van hem in de code vast te leggen. Zo zijn de drempelwaarden controleerbaar: per rij is zichtbaar welk bereik voor het aantal volgers of welke privacystatus werd verwacht. Voor de biografie kun je een controle toevoegen op de aanwezigheid van een bepaalde tekst, maar een letterlijke overeenkomst vervangt geen inhoudelijke beoordeling door een specialist.
Op de pagina IG Scraper API staan het basisadres, een voorbeeldverzoek en een link naar Postman. Het bovenstaande scenario gebruikt alleen de bevestigde profielopzoeking op gebruikersnaam en gaat er niet van uit dat deze aanvraag berichten retourneert.
Het praktische resultaat is een reproduceerbare eerste controle: in plaats van de hele lijst handmatig te bekijken, krijgt het team een overzicht van overeenkomsten en uitzonderingen die aan specifieke briefingvelden zijn gekoppeld. Dat versnelt de controle vóór de start, terwijl de verantwoordelijke specialist blijft bepalen of een profiel bij de campagne past.