Before launching a campaign, you can automatically compare each IG account in the brief with publicly available profile data. This check can flag a username mismatch, a private account, a changed name or bio, and a post count outside the expected range. The result is a validation table for the marketer—not an automatic decision about whether a creator is suitable.

The problem: briefs go out of date faster than spreadsheets
A campaign list may include an account name, a link, an approximate follower count, and requirements for a public profile. These details can easily become inconsistent: an account changes its username, a profile becomes private, or the figures in the brief remain unchanged. Checking one profile manually is simple; repeating the process for a list of accounts before every campaign is harder to control and reproduce.
A useful approach is to define explicit rules for each row, retrieve the available public fields at the time of the check, and record the original and actual values side by side. “Matches” then means only that a particular field meets a particular rule; assessing audience fit or content quality remains the specialist’s responsibility.
Which data to request
The IG API endpoint reference describes the GET route /v1/user/by/username, which requires the username parameter. In a verified response, profile data is in the ig object, which contains the username, full name, bio, privacy and verification indicators, and counts for posts, followers, and following. These fields describe the available profile snapshot.
For an initial check, this is enough to compare the account name, privacy status, and numeric thresholds. You can show the bio to an operator for review or apply a simple rule, such as checking for a required term. This kind of text filter finds a string match, but does not assess meaning or confirm that contractual conditions have been met.
How to add the request in Python
First, save your license key in the JSONSCRAPER_INSTAGRAM_LICENSE_KEY environment variable. The example uses the confirmed base URL, route, username parameter, and license_key key name. The CSV contains the fields username,min_followers,max_followers,require_public; for each account, the script compares the response with the rules and flags rows that need review.
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
Run it with python check_profiles.py. Install the requests library, set the environment variable in the runtime environment, and place brief.csv alongside the script. Do not put the key in source code or the output CSV. The script processes the list sequentially, which is convenient for checking and debugging small sets of accounts.
Why missing values should remain visible
Validation rules need to distinguish a zero value from a missing field. In the example, the follower count is considered acceptable only when a numeric field is present; if the count is missing, the condition is unconfirmed and the record is sent for manual review. An empty min_followers threshold is also flagged as an input error rather than automatically converted to zero.
Response validation should be part of the workflow. The script first confirms that the external status is ok, then checks for the ig object. An HTTP error, unexpected JSON, or invalid rule is recorded without the exception text, which could reveal the key in the URL. This lets the operator distinguish a request failure from a profile mismatch without exposing the secret.
How to read the results and automate the check
The profile_check.csv file contains the submitted username, the returned name, available public fields, the results of individual checks, and an overall needs_review flag. The team can filter rows by this flag, while a developer can store the report or pass it to the next ETL step. To schedule runs, use a task scheduler and save the run date separately so you can compare campaign snapshots.

If a rule changes, store it in the brief rather than hard-coding it. This makes the thresholds verifiable: each row shows the expected follower range or public-profile requirement. You can add a check for specified text in the bio, but an exact string match does not replace a specialist’s assessment of its meaning.
The IG Scraper API page provides the base URL, a request example, and a link to Postman. The example above uses only the confirmed profile lookup by username and does not assume that this request returns posts.
The practical result is a repeatable preliminary check: instead of manually reviewing the entire list, the team gets a set of matches and exceptions tied to specific brief fields. This speeds up pre-launch checks while leaving the final decision about campaign fit to the responsible specialist.