Jeśli marketingowiec ręcznie sprawdza dziesiątki publicznych profili na IGie, największą stratą nie jest czas poświęcony na otwieranie stron, lecz brak porównywalnej historii. Jedna migawka pokazuje dzisiejszą liczbę obserwujących; dwie pozwalają obliczyć różnicę w wybranym okresie. Prosty monitoring profili można zautomatyzować: wysyłać zapytanie, zapisywać tylko potrzebne pola i tworzyć tabelę zmian.
Poniżej znajduje się minimalny działający przykład w Pythonie: pobiera informacje o profilu na podstawie nazwy użytkownika za pośrednictwem IG Scraper API i zapisuje wiersz JSONL ze znacznikiem czasu. Rezultatem jest niewielkie źródło danych historycznych, które można podłączyć do cron, n8n lub własnego magazynu danych. Oficjalny opis endpointu i parametrów znajduje się w dokumentacji IG API.
Na jakie pytanie odpowiada codzienna migawka
Załóżmy, że zespół śledzi publiczne konta marek lub partnerów i chce zauważyć zmiany liczby obserwujących, publikacji lub statusu weryfikacji. Obejrzenie strony pokazuje bieżące wartości, ale samo w sobie nie przechowuje danych z poprzedniego tygodnia. Dlatego najpierw trzeba określić, które pola są istotne, a następnie zapisywać je wraz z datą obserwacji.

Endpoint /v1/user/by/username przyjmuje wymagany parametr username. Odpowiedź zawiera między innymi pola follower_count, following_count, media_count, is_verified, is_private i biography. Ten zestaw nadaje się do tworzenia migawki profilu; nie zawiera historii publikacji i sam w sobie nie wyjaśnia przyczyn zmian wskaźników.
Skrypt ma celowo wąski zakres: pobrać zestaw obserwowalnych pól w określonym czasie i porównać go z wcześniejszymi zapisami. Dzięki temu analityk widzi na przykład, że między zapisanymi datami zmieniła się liczba obserwujących, a następnie może osobno przeprowadzić dalszą weryfikację.
Przygotuj klucz i listę kont
Zainstaluj bibliotekę do obsługi zapytań i ustaw klucz API w zmiennej środowiskowej. Nie umieszczaj sekretu w pliku źródłowym, repozytorium ani danych wyjściowych programu. API używa parametru zapytania license_key; poniższa biblioteka samodzielnie tworzy query string.
python -m pip install requests
export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="twój_klucz"
Listę profili można przechowywać w pliku konfiguracyjnym lub zmiennej projektu. Do pierwszego uruchomienia wystarczy jedna nazwa użytkownika, aby sprawdzić odpowiedź, dostęp i zapis danych. W przykładzie pole username jest ustawione jako parametr API, a klucz jest odczytywany wyłącznie ze środowiska.
Zapytanie i zapis migawki w Pythonie
Skrypt sprawdza odpowiedź HTTP, zewnętrzny status API i obecność obiektu ig. Następnie zapisuje tylko wartości, które rzeczywiście istnieją. Jeśli któregoś pola brakuje, w rekordzie pozostaje null: podstawienie zera mieszałoby nieznaną wartość z rzeczywistym zerem.

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" # zastąp profilem z własnej listy
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 zwróciło nieoczekiwany status lub strukturę")
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("Zapisano migawkę:", record["username"], record["observed_at"])
Pola i struktura przykładu odpowiadają informacjom o profilu opisanym dla tego endpointu. Pomyślne zapytanie zwraca obserwację z chwili jego wykonania; aby analizować dynamikę, trzeba uruchamiać skrypt ponownie i zapisywać każdą migawkę. Na stronie IG Scraper API pokazano podstawowe zapytanie i przykładową odpowiedź w formacie JSON.
Oblicz zmianę między migawkami
JSONL przechowuje po jednym rekordzie w wierszu, więc można go odczytać za pomocą standardowego modułu Pythona. Poniższy fragment wybiera dwa ostatnie rekordy dla profilu i oblicza różnicę w liczbie obserwujących. Wyświetla wynik tylko wtedy, gdy obie wartości są liczbami.
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,
})
Różnica dotyczy dokładnie dwóch wybranych obserwacji. Jeśli pominiesz uruchomienia, odstęp między nimi będzie dłuższy, dlatego raport powinien podawać obie daty, zamiast automatycznie określać zmianę jako „dzienną”. Aby regularnie wykonywać zadanie, skonfiguruj harmonogram w cron lub w planerze platformy chmurowej. W n8n można zbudować ten sam przepływ z węzłów harmonogramu, żądania HTTP i zapisu wyniku w bazie lub tabeli; nazwy węzłów i konfiguracja magazynu zależą od instalacji.
Rozszerzenie monitoringu na kilka profili
W przypadku listy kont umieść nazwy w osobnym pliku i przetwarzaj je w pętli. Zapisuj status każdego zapytania oddzielnie, aby awaria dotycząca jednego profilu nie usuwała poprawnie pobranych danych pozostałych. Dodaj limit czasu oczekiwania, dziennik błędów i ponawiaj zapytania tylko dla kont, w przypadku których zakończyły się niepowodzeniem.
Jako klucza rekordu można użyć pk, jeśli API go zwróciło, zachowując również nazwę użytkownika dla czytelności. Identyfikator pomaga odróżnić profil od tekstowej etykiety w raporcie; jeśli go brakuje, nie należy go wymyślać ani zastępować innym polem. W analizie warto przechowywać pierwotny czas zbierania danych w UTC i jawnie określać okres porównania.
Jeśli do danego zadania wystarczy pobieranie informacji z określoną częstotliwością, udokumentowany parametr cache_timeout pozwala ustawić czas cache’owania w sekundach; w przypadku IGa cache’owanie jest domyślnie wyłączone. Wybierz czas odpowiedni do interwału monitorowania i zapisuj go wraz z ustawieniami zbierania danych, aby przy interpretacji wyników uwzględniać parametry zapytania.
Co otrzymasz
Po kilku uruchomieniach będziesz mieć plik z migawkami publicznych wskaźników zapisanymi w czasie oraz prostą różnicę obliczoną między wybranymi datami. Można go wczytać do Google Sheets, PostgreSQL lub systemu analitycznego; osobna warstwa przetwarzania może generować powiadomienie, gdy zmiana przekroczy ustalony przez zespół próg. Próg jest regułą biznesową, a nie wbudowaną funkcją API.
Endpoint profilu udostępnia pola konta, dlatego do audytu nowych publikacji potrzebne jest odpowiednie pobieranie danych o mediach, a nie wnioski wyciągane z media_count. W dokumentacji IG API wymieniono osobny endpoint pobierania publikacji z paginacją za pomocą user_id i parametru end_cursor; skorzystaj z niego, jeśli zadanie wymaga analizy samych postów. Do opisanego tutaj celu — historycznej tabeli wskaźników profilu — wystarczy jedno zapytanie na użytkownika i powtarzalny zapis migawek.
Zacznij od jednego profilu i kilku uruchomień: upewnij się, że status odpowiedzi jest prawidłowy, daty są zapisywane, a brakujące dane pozostają jawnie nieznane. Następnie dodaj listę kont i harmonogram. W ten sposób uzyskasz powtarzalną obserwację z jasno określonym interwałem i wartościami źródłowymi, którą można weryfikować i przekazywać dalej do procesu analitycznego.