Якщо маркетолог вручну перевіряє десятки публічних профілів 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; наведена нижче бібліотека формує рядок запиту самостійно.
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; скористайтеся ним, якщо завдання передбачає вивчення самих дописів. Для описаного тут результату — історичної таблиці показників профілю — достатньо одного запиту на користувача й повторюваного збереження знімків.
Почніть з одного профілю та кількох запусків: переконайтеся, що статус відповіді коректний, дати зберігаються, а відсутні дані залишаються явно невідомими. Потім додайте список акаунтів і розклад. Так ви отримаєте відтворювані спостереження з чітким проміжком і вихідними значеннями, які можна перевірити й передати далі в аналітичний процес.