Instagramの運用をしている人にとって、フォロワーの推移は必須チェックですよね。
でも、Instagramの公式ではインサイトは1週間しかさかのぼって見られません。
SINISなどのInstagramの分析ツールはいくつかありますが、充実した機能のものは有料のものがほとんどです。
そこで、APIを使ってインサイトの情報を取得し、それをGoogle スプレッドシートに自動で更新する方法をご紹介します。
APIを活用する方法なので費用は一切かからず無料で分析ができます。
以前下記の記事で紹介したFacebookのAPIを今回も使用します。

プログラミングに詳しくなくてもできるように説明していくので、最後までぜひ読んでください。
- Instagram APIの取得の概要の紹介
- Google スプレッドシートの準備について
- Google App Script(GAS)の記述について
①Facebook for DevelopersでInstagramのAPIを取得する
1.アカウントをビジネスアカウントにする
以前の記事で紹介した方法と同じですが、まずはInstagramのアカウントをビジネスアカウントにします。
2.長期アクセストークンを取得する
そして、Facebook for DevelopersでAPIを取得します。
取得の方法は下記サイトがわかりやすいです!

アクセストークンを取得するときに、アクセス許可の項目は下記を選びます。

ステップとしては下記の部分になります。

実際にAPIを叩くと、このようなデータが出てきます。

フォロワー数や投稿数が取得できているのでOKです。
②自動でデータをためるGoogle スプレッドシートを用意する
APIのデータを自動でためるために、Googleスプレッドシートを用意します。
1つのスプレッドシートに、2枚のシート(「Follower」・「Contents」という名前のシートを)作成します。
「Follower」の方にはフォロワーの数の推移と投稿数を記録し、「Contents」の方にはリーチ数、インプレッション数、プロフィール閲覧数の推移を記録します。
1行目は見出しにしておきます。


次のステップでスクリプトを書いていく上で、スプレッドシートのIDが必要なのでメモしておきましょう。
スプレッドシートIDはURLのこの部分です。

※スプレッドシート自体の名前は何でもOKです。(上の例では「Photo」としています)
③Google Apps Script(GAS)でスクリプトを記述する
APIからのデータをGoogleスプレッドシートにデータを記述するため、Google Driveで使用するGoogle Apps Script (GAS)を使用します。
GASはGoogle Driveのここにあります。

フォロワー数の取得用のスクリプトと、インサイトの推移のスクリプトをそれぞれ別に記述していきます。
「Follower」用のスクリプト
function reporting(){
var today = new Date();
//instagram数値記録用のスプレットシートID
var SSId = '【スプレッドシートID】';
//instagram Graph API 必要情報
var instragramID = '【ビジネスID(数字)】';
var username = '【インスタのID】;
var ACCESS_TOKEN = "【アクセストークン】";
getFollower(today,SSId,instragramID,username,ACCESS_TOKEN);
}
//instagramの数値を引っ張り記録する関数
function getFollower(date,SSId,instragramID,username,ACCESS_TOKEN) {
var mySS = SpreadsheetApp.openById(SSId); //IDでスプレッドシートを開く
var sheetName = 'Follower';
var sheet = mySS.getSheetByName(sheetName);
//日付フォーマット
var today = Utilities.formatDate(date, 'Tokyo/Asia', 'yyyy/MM/dd');
//Graph API followers_count(フォロワー数),follows_count(フォロー数),media_count(投稿数)を取りに行く
var facebook_url = 'https://graph.facebook.com/v8.0/'+ instragramID +'?fields=business_discovery.username('+ username +'){followers_count,follows_count,media_count}&access_token='+ ACCESS_TOKEN;;
var encodedURI = encodeURI(facebook_url);
var response = UrlFetchApp.fetch(encodedURI); //URLから情報を取得
var jsonData = JSON.parse(response);//JSONデータをパース
var followers = jsonData['business_discovery']['followers_count'];
var follows = jsonData['business_discovery']['follows_count'];
var media_count = jsonData['business_discovery']['media_count'];
//シートにデータを追加またはアップデート
var newData =[today,followers,follows,media_count];
insertOrUpdate(sheet, newData);
}
//行の存在に応じて追加もしくは更新を行う関数
function insertOrUpdate(sheet, data) {
var row = findRow(sheet, data[0]);//日付比較の関数、行番号を受け取る
if (row) { // 行が見つかったら更新
sheet.getRange(row, 1, 1, data.length).setValues([data]);
} else { // 行が見つからなかったら新しくデータを挿入
sheet.appendRow(data);
}
}
// 日付比較を行い、データがあれば行番号を返す関数
function findRow(sheet, date) {
var searchDate = Utilities.formatDate(new Date(date), 'Asia/Tokyo','yyyy/MM/dd');
var values = sheet.getDataRange().getValues();
Logger.log(values + "findRow");
for (var i = values.length - 1; i > 0; i--) {
var dataDate = Utilities.formatDate(new Date(values[i][0]), 'Asia/Tokyo','yyyy/MM/dd');
if (dataDate == searchDate) {
return i + 1;
}
}
return false;
}
「Contens」用のスクリプト
function insight_reporting(){
var date = new Date();
//instagram数値記録用のスプレットシートID
var SSId = '【スプレッドシートのURL】';
//instagram Graph API 必要情報
var instragramID = '【ビジネスID(数字)】';
var username = '【インスタのID】';
var ACCESS_TOKEN = "【アクセストークン】";
getInsight(date,SSId,instragramID,username,ACCESS_TOKEN);
}
//instagramの数値を引っ張り記録する関数
function getInsight(date,SSId,instragramID,username,ACCESS_TOKEN) {
var mySS = SpreadsheetApp.openById(SSId); //IDでスプレッドシートを開く
var sheetName = 'Contents'; //スプレッドシートのContentsのシートを参照
var sheet = mySS.getSheetByName(sheetName);
//日付を取得して1日前に戻す
var today = Utilities.formatDate(date, 'Tokyo/Asia', 'yyyy/MM/dd');
//現在の「日」を取得
var day = date.getDate();
//前日日付にしたいので-1する
date.setDate(day-1);
//日付の表示形式を整形する
var yesterday = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd');
var facebook_url = 'https://graph.facebook.com/v8.0/'+ instragramID +'/insights?metric=reach,impressions,profile_views&period=day&access_token='+ ACCESS_TOKEN;;
var encodedURI = encodeURI(facebook_url);
var response = UrlFetchApp.fetch(encodedURI); //URLから情報を取得
var jsonData = JSON.parse(response);//JSONデータをパース
var reach = jsonData.data[0].values[1].value;
var impressions = jsonData.data[1].values[1].value;
var profile_views = jsonData.data[2].values[1].value;
//シートにデータを追加またはアップデート
var newData =[yesterday,reach,impressions,profile_views];
insertOrUpdate2(sheet, newData);
}
//行の存在に応じて追加もしくは更新を行う関数
function insertOrUpdate2(sheet, data) {
var row = findRow2(sheet, data[0]);//日付比較の関数、行番号を受け取る
if (row) { // 行が見つかったら更新
sheet.getRange(row, 1, 1, data.length).setValues([data]);
} else { // 行が見つからなかったら新しくデータを挿入
sheet.appendRow(data);
}
}
// 日付比較を行い、データがあれば行番号を返す関数
function findRow2(sheet, date) {
var searchDate = Utilities.formatDate(new Date(date), 'Asia/Tokyo','yyyy/MM/dd');
var values = sheet.getDataRange().getValues();
Logger.log(values + "findRow");
for (var i = values.length - 1; i > 0; i--) {
var dataDate = Utilities.formatDate(new Date(values[i][0]), 'Asia/Tokyo','yyyy/MM/dd');
if (dataDate == searchDate) {
return i + 1;
}
}
return false;
}
スクリプトの記述が完成したら、実際に実行してみてGoogle スプレッドシートに記載されているか確認しましょう。
実行するときに、それぞれFollowerの方は「reporting」を、「Insight」の方は「insight_reporting」を実行してください。
スクリプトはこちらの記事を参考させていただきました。

トリガーを設定する
毎日1回このスクリプトを自動で実行させたいので、その設定をします。
左の時計のマークの「トリガー」を選択します。
右下より「トリガーを追加」を選択して設定を行います。

「Follower」と「Contents」のそれぞれのスクリプトを実行する必要があるので、トリガーは2つ作成します。


それぞれのスクリプトを実行する時間を決めます。僕は午前8時〜9時を指定しています。
④Google スプレッドシートを調整する
上記の設定が完了すると、「Follower」「Contents」がそれぞれ自動更新されるようになります。
このままでもいいのですが、デイリーの進捗を追っていくのは少し見づらいですよね。
そこで、このシートを生かしたまま、2枚のシートをまとめたシートを作成しておきましょう。
- まとめ用のシートを作成する
- それぞれのシートのデータを引用する
- 投稿した日付に色を付ける
①まとめ用のシートを作成する
③で作成した「Follower」と「Contents」をまとめるシートを作成します。
このシートのタイトルは何でもOKです。
今回は「まとめ」とします。
②それぞれのシートのデータを引用する
「まとめ」のシートにそれぞれ下記のような項目を作成します。

そして、シートのデータを引用する関数を記述します。
エクセルと同様、「=シート名!セル番号」で引用ができます。

③投稿した日付に色をつける
投稿のタイミングでフォロワーがどう動いたかは把握しておきたいですよね。
今回は投稿数の差分をもとに、投稿した日付を色付けします。

投稿数の横に差分の列を追加します。「前日-今日」の数を出す例(例:=D3-D2)を入れます。
そして、日付のところに条件付き書式設定を上記のように行います。 (差分(E列)が1以上のときに色を付ける設定です)
こうすることで、投稿日もすぐに分かるようになります。
早めに自動化の設定を!
Instagramが保持しているデイリーデータは毎日更新されてしまうので過去にさかのぼって取得することは難しそうです。
ですので、上記の自動化の設定は早めに行っておくとよいでしょう。
最後まで読んでいただきありがとうございました。