マーケターが公開IGプロフィールを何十件も手作業で確認する場合、最も大きな損失はページを開く時間ではなく、比較可能な履歴が残らないことです。スナップショットが1つあれば今日のフォロワー数がわかります。2つあれば、選択した期間の差を計算できます。シンプルなプロフィール監視なら、リクエストを自動化し、必要なフィールドだけを保存して、変化の一覧を作成できます。
以下は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="あなたのキー"
プロフィール一覧は設定ファイルやプロジェクト変数に保存すると便利です。初回は、レスポンス、アクセス権、ストレージへの書き込みを確認するため、ユーザー名を1つだけ指定すれば十分です。この例では 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は1行に1件の記録を保存するため、Pythonの標準モジュールで読み込めます。次のコードは、プロフィールの直近2件の記録を選び、フォロワー数の差を計算します。両方の記録に数値がある場合のみ結果を出力します。
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,
})
差分が示すのは、選択した2つの観測結果の間の変化に限られます。実行を飛ばすと観測間隔が長くなるため、レポートには両方の日付を表示し、変化を自動的に「1日あたり」と表現しないでください。定期運用にはcronやクラウドプラットフォームのスケジューラーを設定します。n8nでは、スケジューラー、HTTPリクエスト、データベースまたは表への書き込みの各ノードを組み合わせて同じ処理を構成できます。ノード名やストレージへの接続方法は、利用環境によって異なります。
複数のプロフィールに拡張する
アカウント一覧を扱う場合は、ユーザー名を別ファイルに移し、ループで処理します。各リクエストのステータスを個別に保存すれば、1つのプロフィールで障害が起きても、ほかのプロフィールから正常に取得したデータは失われません。タイムアウト、エラーログを追加し、リクエストに失敗したアカウントだけを再実行します。
APIが返した場合、記録のキーには pk を使い、読みやすさのためユーザー名も保存できます。識別子があれば、レポート上のテキストラベルとプロフィールを区別しやすくなります。値がない場合は、作り出したり別のフィールドで代用したりしないでください。分析には収集時刻をUTCで保存し、比較期間を明示すると便利です。
一定の頻度で情報を取得できれば十分な場合、ドキュメントに記載されている cache_timeout パラメーターで秒単位のキャッシュ期間を指定できます。IGではキャッシュはデフォルトで無効です。監視間隔に合わせて期間を選び、収集設定とともに保存しておけば、結果を解釈する際にリクエストの条件を考慮できます。
最終的に得られるもの
数回実行すれば、公開指標の時系列スナップショットをまとめたファイルと、選択した日付間の単純な差分を得られます。Google Sheets、PostgreSQL、分析システムに取り込めます。別の処理レイヤーで、チームが設定したしきい値を変化が超えたときに通知を作成することもできます。このしきい値はAPIの組み込み機能ではなく、独自に定める業務ルールです。
プロフィールエンドポイントが返すのはアカウントのフィールドです。そのため、新しい投稿を監査するには、media_countから推測するのではなく、対応するメディア取得機能を使う必要があります。IG APIリファレンスには、user_idとend_cursorパラメーターによるページ単位の取得に対応した投稿取得エンドポイントも記載されています。投稿そのものを調べる必要がある場合は、そちらを利用してください。ここで説明したプロフィール指標の履歴表を作るだけなら、ユーザーごとに1回リクエストし、スナップショットを繰り返し保存すれば十分です。
まずはプロフィール1件で2回実行し、レスポンスのステータスが正しいこと、日付が保存されること、欠損データが明示的に不明のまま保持されることを確認してください。その後、アカウント一覧とスケジュールを追加します。これにより、期間と元の値が明確で、検証や後続の分析プロセスへの引き渡しが可能な、再現性のある観測データが得られます。