Il problema
Che tu voglia rilanciare un brand, pulire un vecchio account o ripartire da zero, cancellare migliaia di tweet uno per uno non è un'opzione. X non offre nessuna funzione di eliminazione in massa. Servizi come TweetDelete funzionano — ma costano €6–15 al mese per qualcosa che dovrebbe essere gratuito.
La soluzione gratuita
Abbiamo costruito uno script JavaScript che gira direttamente nella console del browser. Scorre il tuo profilo in automatico, identifica i tuoi tweet e repost, e li elimina uno per uno. Nessuna installazione, nessuna API key, nessun servizio esterno — solo il tuo browser.
Lo abbiamo usato noi stessi per pulire un vecchio account X prima di rilanciare @Sublime_Arts_ — ha eliminato centinaia di post senza un singolo problema.
Come usarlo — 3 passaggi
Cosa fa
I progressi vengono registrati in tempo reale nella console. Si ferma automaticamente dopo 8 scroll vuoti. Riesegui se X carica altri post.
Lo script
const sleep = ms => new Promise(r => setTimeout(r, ms));
async function cleanupXProfile() {
let repostsRemoved = 0, tweetsDeleted = 0, emptyScrolls = 0;
const getCol = () =>
document.querySelector('[data-testid="primaryColumn"]') ||
document.querySelector('main') || document;
const closeMenu = async () => {
document.dispatchEvent(new KeyboardEvent('keydown',
{ key: 'Escape', keyCode: 27, bubbles: true }));
await sleep(250);
const h = getCol().querySelector('h1, h2');
if (h) h.click(); await sleep(200);
};
console.log('🧹 X Profile Cleanup started...');
while (emptyScrolls < 8) {
let actions = 0; const col = getCol();
for (const btn of [...col.querySelectorAll('button')]
.filter(b => b.innerHTML.includes('M4.75 3.79l4.603'))) {
try {
btn.click(); await sleep(700);
const c = document.querySelector('[data-testid="unretweetConfirm"]');
if (c) { c.click(); repostsRemoved++; actions++;
console.log(`↩️ Repost removed #${repostsRemoved}`); await sleep(900);
} else await closeMenu();
} catch { await closeMenu(); }
}
for (const btn of [...col.querySelectorAll('button')]
.filter(b => b.innerHTML.includes('M3 12c0-1.1.9-2 2-2s2'))) {
await closeMenu(); await sleep(300);
try {
btn.click(); await sleep(800);
const del = [...document.querySelectorAll('[role="menuitem"]')]
.find(i => i.textContent.trim()
.match(/^(Delete|Elimina|Supprimer|Löschen|Eliminar|Удалить|削除|삭제)$/));
if (del) {
del.click(); await sleep(700);
const ok = document.querySelector('[data-testid="confirmationSheetConfirm"]');
if (ok) { ok.click(); tweetsDeleted++; actions++;
console.log(`🗑️ Tweet deleted #${tweetsDeleted}`); await sleep(1200);
} else await closeMenu();
} else await closeMenu();
} catch { await closeMenu(); }
}
if (actions === 0) { emptyScrolls++;
console.log(`Scrolling... (${emptyScrolls}/8)`);
} else emptyScrolls = 0;
window.scrollBy(0, 900); await sleep(2000);
}
console.log(`\n✅ Done! Reposts: ${repostsRemoved} | Tweets: ${tweetsDeleted}`);
}
cleanupXProfile();About
Patrick Chen — sviluppatore indipendente dietro Sublimearts.io. Ho costruito questo mentre pulivo il mio stesso account X prima del rilancio.