Skip to content

Instantly share code, notes, and snippets.

@JulienDev
Last active April 18, 2025 10:52
Show Gist options
  • Save JulienDev/df5a3b66e899c224fa1b2dc90acfa2ae to your computer and use it in GitHub Desktop.
Save JulienDev/df5a3b66e899c224fa1b2dc90acfa2ae to your computer and use it in GitHub Desktop.
Track your Instagram followers over time with Google Sheets Scripts
// Your sheet name in the document
var sheetName = "Data";
// Your instagram user id
var user_id = "CHANGE-ME"; //find your id here : https://codeofaninja.com/tools/find-instagram-user-id
var instagram_base_url = "https://www.instagram.com/graphql/query/";
var following = "?query_hash=58712303d941c6855d4e888c5f0cd22f&variables=%7B%22id%22%3A%22" + user_id + "%22%2C%22first%22%3A24%7D"
var followers = "?query_hash=37479f2b8209594dde7facb0d904896a&variables=%7B%22id%22%3A%22" + user_id + "%22%2C%22first%22%3A24%7D"
var medias = "?query_hash=f2405b236d85e8296cf30347c9f08c2a&variables=%7B%22id%22%3A%22" + user_id + "%22%2C%22first%22%3A12%7D"
function insertFollowerCount() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(this.sheetName);
var followers = getFollowers();
var folloging = getFollowing();
var medias = getMedias();
var engagement = getEngagement(medias, followers);
sheet.appendRow([Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd"), followers, folloging, medias.count, engagement.totalLikes, engagement.totalComments, engagement.EngagementRatio]);
};
function getFollowers() {
return parseInt(fetch(instagram_base_url + followers)['data']['user']['edge_followed_by']['count']);
}
function getFollowing() {
return parseInt(fetch(instagram_base_url + following)['data']['user']['edge_follow']['count']);
}
function getMedias() {
return fetch(instagram_base_url + medias)['data']['user']['edge_owner_to_timeline_media'];
}
function getEngagement(medias, followers) {
var totalComments = 0,
totalLikes = 0;
for (var i = 0; i < 12; i++) {
totalComments += parseInt(medias.edges[i].node.edge_media_to_comment.count);
};
for (var l = 0; l < 12; l++) {
totalLikes += parseInt(medias.edges[l].node.edge_media_preview_like.count);
};
var engagementRatio = (((totalLikes + totalComments)) / followers) / 12;
return {
mediaCount: parseInt(medias.count),
totalComments: totalComments,
totalLikes: totalLikes,
EngagementRatio: engagementRatio
}
}
function fetch(url) {
var ignoreError = {
"validateHttpsCertificates":false,
"muteHttpExcecptions": true
};
var source = UrlFetchApp.fetch(url, ignoreError).getContentText();
var data = JSON.parse(source);
return data;
}
@syrinx32123
Copy link

Any luck on getting this working?

@bbakalov
Copy link

bbakalov commented Jan 4, 2021

Any luck on getting this working?

man, while you waiting, my script works everyday without any problems

@rancilyo
Copy link

rancilyo commented Jan 4, 2021

Any luck on getting this working?

man, while you waiting, my script works everyday without any problems

Yeah, but your script only works if you are logged in. Let's suppose that you want to track a competitor, how would it be?

@syrinx32123
Copy link

Any luck on getting this working?

man, while you waiting, my script works everyday without any problems

It worked for a few days and then I guess the cookies changed so it stopped working. I track 50+ accounts so it is not easy to update the cookie for all of them.

@syrinx32123
Copy link

Can someone please fix this 😭

@zorayaghanem
Copy link

hello! any luck finding a solution for this :) ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment