-
Star
(510)
You must be signed in to star a gist -
Fork
(93)
You must be signed in to fork a gist
-
-
Save abir-taheer/0d3f1313def5eec6b78399c0fb69e4b1 to your computer and use it in GitHub Desktop.
if (window.location.origin !== "https://www.instagram.com") { | |
window.alert( | |
"Hey! You need to be on the instagram site before you run the code. I'm taking you there now but you're going to have to run the code into the console again.", | |
); | |
window.location.href = "https://www.instagram.com"; | |
console.clear(); | |
} | |
const fetchOptions = { | |
credentials: "include", | |
headers: { | |
"X-IG-App-ID": "936619743392459", | |
}, | |
method: "GET", | |
}; | |
let username; | |
const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); | |
const random = (min, max) => Math.floor(Math.random() * (max - min)) + min; | |
// This function handles all of the pagination logic | |
// Calls the API recursively until there are no more pages to load | |
const concatFriendshipsApiResponse = async ( | |
list, | |
user_id, | |
count, | |
next_max_id = "", | |
) => { | |
let url = `https://www.instagram.com/api/v1/friendships/${user_id}/${list}/?count=${count}`; | |
if (next_max_id) { | |
url += `&max_id=${next_max_id}`; | |
} | |
const data = await fetch(url, fetchOptions).then((r) => r.json()); | |
if (data.next_max_id) { | |
const timeToSleep = random(800, 1500); | |
console.log( | |
`Loaded ${data.users.length} ${list}. Sleeping ${timeToSleep}ms to avoid rate limiting`, | |
); | |
await sleep(timeToSleep); | |
return data.users.concat( | |
await concatFriendshipsApiResponse( | |
list, | |
user_id, | |
count, | |
data.next_max_id, | |
), | |
); | |
} | |
return data.users; | |
}; | |
// helper methods to make the code a bit more readable | |
const getFollowers = (user_id, count = 50, next_max_id = "") => { | |
return concatFriendshipsApiResponse("followers", user_id, count, next_max_id); | |
}; | |
const getFollowing = (user_id, count = 50, next_max_id = "") => { | |
return concatFriendshipsApiResponse("following", user_id, count, next_max_id); | |
}; | |
const getUserId = async (username) => { | |
let user = username; | |
const lower = user.toLowerCase(); | |
const url = `https://www.instagram.com/api/v1/web/search/topsearch/?context=blended&query=${lower}&include_reel=false`; | |
const data = await fetch(url, fetchOptions).then((r) => r.json()); | |
const result = data.users?.find( | |
(result) => result.user.username.toLowerCase() === lower, | |
); | |
return result?.user?.pk || null; | |
}; | |
const getUserFriendshipStats = async (username) => { | |
const user_id = await getUserId(username); | |
if (!user_id) { | |
throw new Error(`Could not find user with username ${username}`); | |
} | |
const followers = await getFollowers(user_id); | |
const following = await getFollowing(user_id); | |
const followersUsernames = followers.map((follower) => | |
follower.username.toLowerCase(), | |
); | |
const followingUsernames = following.map((followed) => | |
followed.username.toLowerCase(), | |
); | |
const followerSet = new Set(followersUsernames); | |
const followingSet = new Set(followingUsernames); | |
console.log(Array(28).fill("-").join("")); | |
console.log( | |
`Fetched`, | |
followerSet.size, | |
"followers and ", | |
followingSet.size, | |
" following.", | |
); | |
console.log( | |
`If this doesn't seem right then some of the output might be inaccurate`, | |
); | |
const PeopleIDontFollowBack = Array.from(followerSet).filter( | |
(follower) => !followingSet.has(follower), | |
); | |
const PeopleNotFollowingMeBack = Array.from(followingSet).filter( | |
(following) => !followerSet.has(following), | |
); | |
return { | |
PeopleIDontFollowBack, | |
PeopleNotFollowingMeBack, | |
}; | |
}; | |
// Make sure you don't delete the quotes | |
// Replace "example_username" below with your instagram username | |
// | |
// Change this: | |
username = "example_username"; | |
// | |
// | |
// | |
getUserFriendshipStats(username).then(console.log); |
my account was suspended yesterday. I only followed one person.
It does not work anymore!
eh i think the code is faulty at this point if its causing suspensions or false outputs. for me, it doesn't give the correct output; it misses 20+ ppl in the following output but the follower output is correct.
did this stop working cuz ig changed their front end?
Hi, I don't think it's working again, the code stops loading followers halfway through and Instagram logs me out when I refresh to do it again, just letting you know
can you make one of these for tiktok please!! :)
as of right now doesn't work
Just worked for me—thank ya! Following/follower counts were 100% correct. Unfollowed ~30 people over the span of an hour or so after seeing the results of the script, so I don't suspect my account will get suspended as that's a fairly large time frame, but let's keep fingers crossed. This is the only solution I'd trust these days for getting these numbers, all the apps where you put in your credentials are a straight shot to getting suspended (happened to me in the past).
not working... stays at loaded 20 followers ish
plz help
it's still not working for me any updates anyone?
it suspended my insta account ??
it suspended my insta account ??
did it fr, for how long?
@abir-taheer are u going to gibe us any updates on your code?
it suspended my insta account ??
did it fr, for how long?
permenantly, but i appealed the suspension and got my account back really quickly
I got a warning from Instagram saying my account is linked to automation or something. Be careful and use this sparingly or else they may suspend your account!
It keeps logging me out when I'm doing it and when I try to log back in after I click send verification code to phone the site just crashes
any update if its safe to use now
Ive done it twice and everything has been fine for me
The code doesn't work again it says "could not find user with username "_" at getUs" and my user wasn't misspelled or at all
when i run the code it says that no user exists with my username
It keeps saying couldn't find username whenever I try. It used to work but now does not
Everything is still working, thank you. If it doesn't work for someone, please ensure you have replaced the username with the correct one...
Heads up if you are getting the username not found error, I believe it's because IG is no longer returning your user info in the query made on line 71.
What I did was logged out of IG and searched for myself on google by my IG handle. This should show your profile. Go into your profile with the inspect "Network" tab opened. Scroll down until you find a query that contains your user info. Copy your id
and pk
, seem to be the same. Then in the function getUserFriendshipStats
set const user_id = your_pk_here
and remove the if (!user_id)
conditional.
This worked for me, hope it helps!
why dont you parallelize requests?
const [followers, following] = await Promise.all([ getFollowers(user_id), getFollowing(user_id) ]);
instead of
const followers = await getFollowers(user_id); const following = await getFollowing(user_id);
2/26/2025 works fine
no i didn't it would be less than 5 but i didn't do it frequently but i did do it three days ago i wanna say so but hopefully i get it back they still havent given me a response so idk what i can do just wanted to give a heads up