Маркетинговая команда может видеть посты конкурентов в ленте, но ручной просмотр плохо отвечает на конкретный вопрос: какие форматы и темы регулярно набирают реакции, а какие стали заметны только один раз? Решение — ежедневно сохранять данные публичных публикаций и сравнивать их по времени, формату и доступным счётчикам.

Ниже — базовый пайплайн на Python и IG Scraper API. Он получает публикации выбранного аккаунта, сохраняет ответы в JSONL и строит сводку по новым материалам. Показатели реакций в таком отчёте отражают значения, возвращённые API в момент сбора; снимки за разные даты позволяют отдельно анализировать их изменение.
Сначала определите, что именно сравнивать
Для небольшой конкурентной выборки достаточно вести список публичных аккаунтов и собирать их публикации по одному расписанию. Начните с вопросов, на которые данные могут ответить: как часто выходит контент, какие публикации относятся к Reels или другим форматам, какие темы повторяются и как меняются доступные счётчики лайков и комментариев.
Разделите в хранилище два понятия: публикацию и её снимок. Публикацию идентифицируйте устойчивым ID, если он присутствует в ответе; каждый новый запуск сохраняйте как отдельную запись со временем сбора. Так можно увидеть, как менялись доступные счётчики, вместо того чтобы перезаписывать вчерашнее значение сегодняшним.
Подключите документированный маршрут
В документации jsonscraper для базового запроса указан адрес https://ig.jsonscraper.com и маршрут GET /v1/user/by/username. Для получения публикаций карта API также перечисляет GET /v1/user/medias/chunk. Точный набор параметров и полей ответа проверьте в связанной с продуктом коллекции Postman: не привязывайте обработчик к предполагаемой структуре, пока не изучили реальный ответ для своего запроса.
Для первичной проверки используйте задокументированный пример запроса профиля; ключ передавайте через переменную окружения, а не записывайте в исходный код:
curl -G "https://ig.jsonscraper.com/v1/user/by/username" \
--data-urlencode "username=apple" \
--data-urlencode "license_key=$JSONSCRAPER_LICENSE_KEY" \
--data-urlencode "cache_timeout=60"
Пример на странице продукта показывает username, license_key и cache_timeout для маршрута профиля. Применяйте параметр к другим маршрутам только если он указан для них в документации. Для запроса публикаций возьмите актуальные имена параметров из спецификации этого маршрута.
Сохраняйте ответы как временные снимки
Следующий скрипт — заготовка для рабочего запуска: URL и параметры маршрута публикаций оставлены в конфигурации, чтобы их можно было заполнить строго по документации Postman. Обработчик сохраняет исходный JSON и время сбора; нормализацию полей добавьте после проверки фактического ответа.
import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
BASE_URL = "https://ig.jsonscraper.com"
USERNAME = os.environ["IG_USERNAME"]
LICENSE_KEY = os.environ["JSONSCRAPER_LICENSE_KEY"]
OUTPUT = Path("instagram_snapshots.jsonl")
# Заполните endpoint и параметры по документации маршрута
# GET /v1/user/medias/chunk в коллекции Postman.
MEDIA_PATH = os.environ["IG_MEDIA_PATH"]
MEDIA_PARAMS = json.loads(os.environ["IG_MEDIA_PARAMS_JSON"])
params = {
**MEDIA_PARAMS,
"username": USERNAME,
"license_key": LICENSE_KEY,
}
response = requests.get(
f"{BASE_URL}{MEDIA_PATH}", params=params, timeout=30
)
response.raise_for_status()
payload = response.json()
record = {
"collected_at": datetime.now(timezone.utc).isoformat(),
"username": USERNAME,
"response": payload,
}
with OUTPUT.open("a", encoding="utf-8") as file:
file.write(json.dumps(record, ensure_ascii=False) + "\n")
Здесь намеренно нет выдуманных параметров пагинации или имён полей: их нужно скопировать из конкретной спецификации и проверить на ответе API. Запросы с тайм-аутом и raise_for_status() помогают обнаружить сетевую ошибку до записи результата как обычных данных. Для автоматического запуска добавьте проверку JSON и журнал ошибок.
Добавьте расписание и метрики
Запускайте сбор один раз в день через cron или планировщик вашей автоматизации. Для нескольких аккаунтов пройдите по конфигурационному списку, сохраните отдельный снимок для каждого и предусмотрите повторный запуск после временной ошибки. Ключ храните в переменной окружения или хранилище секретов; страница API отдельно рекомендует не встраивать его в клиентский код.
После проверки ответа нормализуйте записи в таблицу с полями вроде username, media_id, collected_at, тип контента и доступные счётчики. Не удаляйте исходный JSON: он пригодится, если формат ответа изменится или потребуется проверить расчёт.
В аналитическом слое считайте число новых публикаций за период, медианное значение доступных реакций по формату и изменение счётчика одной и той же публикации между снимками. Медиана снижает влияние единичного вирусного поста на сводку. Сравнивайте аккаунты за одинаковые временные окна и показывайте размер выборки рядом с агрегатом.
Что получится на выходе
Команда получит воспроизводимую таблицу публикаций и ежедневную сводку: частоту выхода контента, распределение по форматам и динамику доступных реакций. Эти сведения помогают сформулировать гипотезы для собственной редакционной сетки, а не просто собирать скриншоты из ленты.
Следующий шаг — отправлять нормализованные записи в Google Sheets, базу данных или систему визуализации, а текстовую сводку формировать отдельным этапом. Если подключаете ИИ, передавайте ему агрегированные данные и просите описывать наблюдаемые закономерности с указанием периода и числа публикаций; решение о стратегии оставляйте за редактором.
Начните с одного аккаунта и одного маршрута: проверьте параметры и структуру ответа в описании IG Scraper API, затем закрепите эту конфигурацию в расписании. Такой подход превращает мониторинг конкурентов из разового ручного просмотра в понятный конвейер с сохраняемой историей.