Skip to content

Instantly share code, notes, and snippets.

@roshanmirajkar
Last active June 7, 2026 18:41
Show Gist options
  • Select an option

  • Save roshanmirajkar/c7924d7a2ad115b8b9c3462cfb90643b to your computer and use it in GitHub Desktop.

Select an option

Save roshanmirajkar/c7924d7a2ad115b8b9c3462cfb90643b to your computer and use it in GitHub Desktop.
Twitter Following List Exporter
var LANGUAGE = "EN";
var WORDS = { EN: { followsYouText: "Follows you" } };
var MS_PER_CYCLE = 10;
var PRINT_FOLLOW_INFORMATION = true;
var SKIP_FOLLOWERS = false;
var SKIP_NON_FOLLOWERS = false;
var SKIP_USERS = [];
SKIP_USERS = SKIP_USERS.map(function(value) { return value.toLowerCase(); });
var userData = [];
function printUserNames() {
var followsYouText = WORDS[LANGUAGE].followsYouText;
var userContainers = document.querySelectorAll('[data-testid=UserCell]');
userContainers.forEach(function(userContainer) {
var followsYou = userContainer.innerText.includes(followsYouText);
if ((followsYou && SKIP_FOLLOWERS) || (!followsYou && SKIP_NON_FOLLOWERS)) return;
var userNameElement = userContainer.querySelector('[href^="/"][role="link"]');
if (!userNameElement) return;
var userName = userNameElement.href.split('/').pop().toLowerCase();
if (SKIP_USERS.includes(userName)) return;
if (!userData.some(u => u.Username === userName)) {
userData.push({ Username: userName, FollowsYou: followsYou ? "Yes" : "No" });
console.log("* " + userName + " | Follows You: " + (followsYou ? "Yes" : "No"));
}
});
}
function scrollAndShowUsernames() {
window.scrollTo(0, document.body.scrollHeight);
printUserNames();
setTimeout(scrollAndShowUsernames, MS_PER_CYCLE);
}
function arrayToCSV(objArray) {
var csv = objArray.map(row => Object.values(row).join(',')).join('\n');
return 'Username,FollowsYou\n' + csv;
}
function downloadCSV() {
var csv = arrayToCSV(userData);
var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
var link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = 'twitter_following.csv';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
scrollAndShowUsernames();
setInterval(downloadCSV, 80000);
@roshanmirajkar

Copy link
Copy Markdown
Author

var LANGUAGE = "EN"; var WORDS = { EN: { followsYouText: "Follows you" } }; var MS_PER_CYCLE = 10; var PRINT_FOLLOW_INFORMATION = true; var SKIP_FOLLOWERS = false; var SKIP_NON_FOLLOWERS = false; var SKIP_USERS = []; SKIP_USERS = SKIP_USERS.map(function(value) { return value.toLowerCase(); }); var userData = []; function printUserNames() { var followsYouText = WORDS[LANGUAGE].followsYouText; var userContainers = document.querySelectorAll('[data-testid=UserCell]'); userContainers.forEach(function(userContainer) { var followsYou = userContainer.innerText.includes(followsYouText); if ((followsYou && SKIP_FOLLOWERS) || (!followsYou && SKIP_NON_FOLLOWERS)) return; var userNameElement = userContainer.querySelector('[href^="/"][role="link"]'); if (!userNameElement) return; var userName = userNameElement.href.split('/').pop().toLowerCase(); if (SKIP_USERS.includes(userName)) return; if (!userData.some(u => u.Username === userName)) { userData.push({ Username: userName, FollowsYou: followsYou ? "Yes" : "No" }); console.log("* " + userName + " | Follows You: " + (followsYou ? "Yes" : "No")); } }); } function scrollAndShowUsernames() { window.scrollTo(0, document.body.scrollHeight); printUserNames(); setTimeout(scrollAndShowUsernames, MS_PER_CYCLE); } function arrayToCSV(objArray) { var csv = objArray.map(row => Object.values(row).join(',')).join('\n'); return 'Username,FollowsYou\n' + csv; } function downloadCSV() { var csv = arrayToCSV(userData); var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); var link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = 'twitter_following.csv'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } scrollAndShowUsernames(); setInterval(downloadCSV, 80000);

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