Если маркетолог вручную проверяет десятки публичных IG-профилей, главная потеря — не время на открытие страниц, а отсутствие сопоставимой истории. Один снимок сообщает число подписчиков сегодня; два снимка позволяют посчитать разницу за выбранный интервал. Для простого мониторинга профилей можно автоматизировать запрос, сохранить только нужные поля и получить таблицу изменений.
Ниже — минимальный рабочий пример на Python: он получает сведения о профиле по имени пользователя через IG Scraper API и записывает строку JSONL с меткой времени. Результат — небольшой источник истории, который можно подключить к cron, n8n или собственному хранилищу. Официальное описание маршрута и параметров приведено в справочнике IG API.
Какой вопрос решает ежедневный снимок
Предположим, команда отслеживает публичные аккаунты брендов или партнёров и хочет заметить изменение числа подписчиков, публикаций или статуса верификации. Просмотр страницы показывает текущие значения, но сам по себе не хранит состояние за прошлую неделю. Поэтому сначала нужно определить, какие поля важны, затем сохранять их с датой наблюдения.

Маршрут /v1/user/by/username принимает обязательный параметр username. В ответе зафиксированы, среди прочих, follower_count, following_count, media_count, is_verified, is_private и biography. Этот набор подходит для снимка профиля; он не содержит истории публикаций и сам по себе не объясняет причину изменения показателей.
Сценарий намеренно узкий: получить наблюдаемый набор полей в заданное время и сравнить его с предыдущими записями. Так аналитик видит, например, что между сохранёнными датами изменилось число подписчиков, и может перейти к дальнейшей проверке отдельно от автоматического сбора.
Подготовьте ключ и список аккаунтов
Установите библиотеку запросов и задайте ключ API в переменной окружения. Не помещайте секрет в исходный файл, репозиторий или вывод программы. API использует параметр запроса license_key; библиотека ниже формирует query string самостоятельно.
python -m pip install requests
export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="ваш_ключ"
Список профилей удобно хранить в конфигурационном файле или переменной проекта. Для первого запуска достаточно одного имени пользователя, чтобы проверить ответ, доступ и запись в хранилище. В примере поле username задано как параметр API, а ключ читается только из окружения.
Запрос и сохранение снимка на Python
Скрипт проверяет HTTP-ответ, внешний статус API и наличие объекта ig. Далее он сохраняет только явно существующие значения. Если какое-либо поле отсутствует, в записи остаётся null: подставлять ноль означало бы смешивать неизвестное значение с настоящим нулём.

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" # замените на профиль из своего списка
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("API вернул неожиданный статус или структуру")
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("Снимок сохранён:", record["username"], record["observed_at"])
Поля и структура примера соответствуют сведениям о профиле, описанным для этого маршрута. Успешный запрос возвращает наблюдение на момент обращения; для анализа динамики скрипт нужно запускать повторно и сохранять каждый снимок. На странице IG Scraper API показаны базовый запрос и демонстрационный ответ в формате JSON.
Посчитать изменение между снимками
JSONL хранит по одной записи на строку, поэтому его можно читать стандартным модулем Python. Следующий фрагмент выбирает две последние записи для профиля и вычисляет разность числа подписчиков. Он выводит результат только тогда, когда обе записи содержат числовое значение.
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,
})
Разность относится строго к двум выбранным наблюдениям. Если пропустить запуски, интервал между ними станет длиннее; поэтому отчёт должен показывать обе даты, а не называть изменение «за день» автоматически. Для регулярной работы настройте запуск по расписанию в cron или планировщике облачной платформы. В n8n тот же порядок действий можно собрать из узлов планировщика, HTTP-запроса и записи результата в базу или таблицу; имена узлов и подключение хранилища зависят от вашей установки.
Расширение на несколько профилей
Для списка аккаунтов вынесите имена в отдельный файл и проходите по нему циклом. Сохраняйте статус каждого запроса отдельно: тогда сбой одного профиля не стирает успешно полученные данные остальных. Добавьте ограничение времени ожидания, журнал ошибок и повторный запуск только для тех аккаунтов, где запрос завершился ошибкой.
В качестве ключа записи можно использовать pk, если API его вернул, сохраняя также имя пользователя для удобства чтения. Идентификатор помогает отличать профиль от текстовой метки в отчёте; при отсутствии значения не следует придумывать его или подменять другим полем. Для аналитики полезно хранить исходное время сбора в UTC и явно задавать период сравнения.
Если для задачи достаточно получать сведения с определённой частотой, документированный параметр cache_timeout позволяет указать срок кэширования в секундах; для IG кэширование по умолчанию выключено. Выберите срок с учётом интервала мониторинга и сохраняйте его вместе с настройками сбора, чтобы при интерпретации результатов учитывать параметры запроса.
Что получится на выходе
После нескольких запусков у вас будет файл с временными снимками публичных показателей и простая вычисляемая разница между выбранными датами. Его можно загружать в Google Sheets, PostgreSQL или аналитическую систему; отдельный слой обработки сможет формировать уведомление, когда изменение превысит заданный командой порог. Порог — ваше бизнес-правило, а не встроенная возможность API.
Маршрут профиля даёт поля аккаунта, поэтому для аудита именно новых публикаций понадобится соответствующий сбор медиа, а не выводы из media_count. В справочнике IG API перечислен отдельный маршрут выдачи публикаций с постраничной загрузкой по user_id и параметру end_cursor; используйте его, если задача требует изучать сами посты. Для описанного здесь результата — исторической таблицы показателей профиля — достаточно одного запроса на пользователя и повторяемого сохранения снимков.
Начните с одного профиля и пары запусков: убедитесь, что статус ответа корректен, даты сохраняются, а отсутствующие данные остаются явно неизвестными. Затем добавьте список аккаунтов и расписание. Так вы получите воспроизводимое наблюдение с понятным интервалом и исходными значениями, которое можно проверять и передавать дальше в аналитический процесс.