Skip to content

Instantly share code, notes, and snippets.

@chaodonghu
Last active October 15, 2025 14:54
Show Gist options
  • Save chaodonghu/c942b6ca8f8c247ccacd3b0123ff3580 to your computer and use it in GitHub Desktop.
Save chaodonghu/c942b6ca8f8c247ccacd3b0123ff3580 to your computer and use it in GitHub Desktop.
Google Chrome script that allows user to mass unfollow instagram users on user's profile
// Run GOOGLE CHROME - WORKING AS OF MARCH 23 2025
// Please @ me in the comments if this stops working, I will try to get it working again within the month
// INSTRUCTIONS
// 1. Open Instagram in Chrome
// 2. Click on "FOLLOWING" on your Instagram profile
// 3. Open developer tools by right clicking on the page and clicking "INSPECT"
// 4. Copy the code below and paste in the developer tools console and press enter to run
// 5. Script will not run if tab is navigated away from, minimized of unfocused (It is recommended to open a new chrome window or push tab to the side and let script run in background)
const unfollowEveryone = (async () => {
// Modify these variables to your liking
// UNFOLLOW_LIMIT is the number of users to unfollow (this is set to 1000)
const UNFOLLOW_LIMIT = 1000;
const BREAK_DURATION = 5 * 60 * 1000; // 5 minutes break
const TOTAL_DURATION = 10 * 60 * 1000; // 10 minutes duration - Timeout after 10 minutes
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
// Find target button
const findButtonByText = (text) =>
Array.from(document.querySelectorAll("button")).find(
(button) => button.innerText === text
);
console.log("Start unfollowing script...");
let startTime = new Date().getTime();
// Track the number of unfollows
let unfollowCount = 0;
while (new Date().getTime() - startTime < TOTAL_DURATION) {
for (let i = 0; i < UNFOLLOW_LIMIT; i++) {
// UNFOLLOW_INTERVAL is the interval between unfollows
// Increase UNFOLLOW_INTERVAL if you are getting rate limited
// Set this to 0 unfollow as quickly as possible - not recommended
// Random unfollow interval for each follow to avoid rate limiting minimum 5 seconds
// This gets reset to a random number every loop
const UNFOLLOW_INTERVAL = Math.floor(Math.random() * 10 + 1) * 5000;
const followingButton = findButtonByText("Following");
if (!followingButton) {
console.log("No more users to unfollow or unable to find button.");
break;
}
followingButton.scrollIntoViewIfNeeded();
await followingButton.click();
await delay(100); // Short delay to ensure button is clicked
const confirmUnfollowButton = findButtonByText("Unfollow");
if (confirmUnfollowButton) {
await confirmUnfollowButton.click(); // Wait for the unfollow to complete
unfollowCount++;
console.log(`Unfollowed #${unfollowCount}`);
} else {
console.log("No unfollow confirmation button found.");
}
console.log(`Wait ${UNFOLLOW_INTERVAL} milliseconds`);
await delay(UNFOLLOW_INTERVAL);
}
console.log(`Taking a break for ${BREAK_DURATION / 1000 / 60} minutes...`);
await delay(BREAK_DURATION); // Take a break to avoid rate limiting
startTime = new Date().getTime(); // Reset start time for the next cycle
}
console.log("Unfollow script complete!");
})();
@akilamin
Copy link

akilamin commented Oct 3, 2025

My full fix to the script . 500+ unfollowed so far I guess it's good ...

const unfollowEveryone = (async function () {
    const UNFOLLOW_LIMIT = 100; // Reduced to stay under potential rate limits
    const UNFOLLOW_INTERVAL = 5000; // Increased interval to be more respectful of rate limits
	const UNFOLLOW_INTERVAL_TWO = 2500;  // You can increase this to 5000
    const BREAK_DURATION = 3 * 60 * 1000; // 3 minutes break
    const TOTAL_DURATION = 10 * 60 * 1000; // 10 minutes duration

    const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

    const findButtonByText = (text) => 
        Array.from(document.querySelectorAll("button"))
        .find((button) => button.innerText === text);

    console.log("Start");

    let startTime = Date.now();
    let unfollowCount = 0;

    while (Date.now() - startTime < TOTAL_DURATION) {
        for (let i = 0; i < UNFOLLOW_LIMIT; i++) {
            const followButton = findButtonByText("Following");
            if (!followButton) {
                console.log("No more users to unfollow or unable to find button.");
                break;
            }
            followButton.scrollIntoViewIfNeeded();
            await followButton.click();
            await delay(100); // Short delay to wait for modal

            const confirmButton = findButtonByText("Unfollow");
            if (confirmButton) {
				await delay(UNFOLLOW_INTERVAL_TWO);
                await confirmButton.click(); // Confirm unfollow
                unfollowCount++;
                console.log(`Unfollowed #${unfollowCount}`);
            } else {
                console.log("Confirmation button not found.");
            }

            await delay(UNFOLLOW_INTERVAL);
        }

        console.log(`Taking a break for ${(BREAK_DURATION / 1000) / 60} minutes...`);
        await delay(BREAK_DURATION);
        startTime = Date.now(); // Reset start time for the next cycle
    }

    console.log("The end");
})();

800+ unfollowed so far without restrictions .. best mod for 2025 👌

Awesome man you rock!!!!!!!!!!!!!!!

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