Перед запуском кампании можно автоматически сверить каждый IG-аккаунт из брифа с публичными данными профиля. Такой контроль выявляет несовпадение username, приватный статус, изменение имени или биографии и расхождение числа публикаций с ожидаемым диапазоном. Результат — таблица проверок для маркетолога, а не автоматическое решение о пригодности автора.

Проблема: бриф устаревает быстрее таблицы
В списке кампании могут храниться имя аккаунта, ссылка, ориентир по подписчикам и требования к публичному профилю. Эти сведения легко расходятся: аккаунт меняет username, профиль становится приватным, а цифры в брифе остаются прежними. Ручная проверка по одному профилю проста; повторять её для списка аккаунтов перед каждой кампанией уже труднее контролировать и воспроизводить.
Полезный выход — задать для каждой строки явные правила, получить доступные публичные поля на момент проверки и записать рядом исходные и фактические значения. «Совпадает» тогда означает только то, что конкретное поле соответствует конкретному правилу; решение о соответствии аудитории или качестве контента остаётся за специалистом.
Какие данные запрашивать
В справочнике маршрутов IG API описан маршрут GET /v1/user/by/username с обязательным параметром username. В проверенном ответе данные профиля находятся в объекте ig: там указаны username, полное имя, биография, признаки приватности и верификации, число публикаций, подписчиков и подписок. Эти поля описывают доступный снимок профиля.
Для предварительной проверки этого достаточно, чтобы сопоставить имя аккаунта, приватность и числовые пороги. Биографию можно вывести оператору для просмотра или проверять по простому правилу, например наличию обязательного термина. Такой текстовый фильтр находит совпадение строки, но сам по себе не оценивает смысл и не подтверждает выполнение договорных условий.
Как встроить запрос в Python
Сначала сохраните лицензионный ключ в переменной окружения JSONSCRAPER_INSTAGRAM_LICENSE_KEY. Пример использует подтверждённые базовый адрес, маршрут, параметр username и имя ключа license_key. CSV содержит поля username,min_followers,max_followers,require_public; для каждого аккаунта скрипт сверяет ответ с правилами и отмечает строки, требующие проверки.
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
Запуск: python check_profiles.py. Установите библиотеку requests, задайте переменную окружения в среде запуска и положите рядом brief.csv. Не записывайте ключ в исходный код или итоговый CSV. Скрипт обрабатывает список последовательно, что удобно для проверки и отладки небольших наборов аккаунтов.
Почему пропуски должны оставаться видимыми
В правилах проверки важно различать нулевое значение и поле, которого нет. В примере число подписчиков считается подходящим только при наличии числового поля; если счётчик отсутствует, условие не подтверждено и запись отправляется на ручную проверку. Пустой порог min_followers тоже помечается как ошибка входных данных, а не автоматически превращается в ноль.
Проверку ответа стоит сохранить как часть рабочего процесса. Скрипт сначала убеждается, что внешний статус равен ok, а затем проверяет наличие объекта ig. Ошибка HTTP, неожиданный JSON или некорректное правило попадают в отчёт без текста исключения, которое могло бы раскрыть ключ в URL. Так оператор отличает сбой запроса от несовпадения профиля, не распространяя секрет.
Как читать результат и автоматизировать проверку
Файл profile_check.csv содержит исходный username, возвращённое имя, доступные публичные поля, результаты отдельных условий и общий флаг needs_review. Команда может отфильтровать строки по этому флагу, а разработчик — сохранить отчёт в хранилище или передать в следующий шаг ETL-процесса. Для расписания запускайте скрипт планировщиком и сохраняйте дату запуска отдельно, чтобы сравнивать снимки кампаний.

Если правило меняется, храните его в брифе, а не зашивайте в код. Это делает пороги проверяемыми: для каждой строки видно, какой диапазон подписчиков или какой признак публичности ожидался. Для биографии можно добавить проверку наличия заданного текста, но буквальное совпадение не заменяет содержательную оценку специалиста.
На странице IG Scraper API приведены базовый адрес, пример запроса и ссылка на Postman. Сценарий выше использует только подтверждённый lookup профиля по username и не предполагает, что этот запрос возвращает публикации.
Практический результат — воспроизводимый предварительный контроль: вместо ручного просмотра всего списка команда получает перечень совпадений и исключений, связанных с конкретными полями брифа. Это ускоряет проверку перед запуском, сохраняя решение о соответствии кампании за ответственным специалистом.