Delete your whole Reddit comment history, only your latest comments, or only those in some subreddits. Free, in your browser, with no app to give your password to.
Runs on old.reddit.com (same account, simpler pages). Sign in, open your comments, then run the script.
// Responsive Muse · Delete All Reddit Comments · v1.0 · 2026-10-22
// Deletes your Reddit comments, newest first: all of them, the latest LIMIT, or only those in
// some subreddits. Runs only on your comments page on old.reddit.com, whose pages stay the same
// for years. It asks before changing anything, then clicks the same "delete" and "yes" links you
// would, at a human pace, in a hidden frame of the same site. It makes no network requests of
// its own and never reads cookies, passwords or tokens.
(async () => {
const TOOL = 'Delete Reddit comments';
const LIMIT = 0; // only the latest this many comments (0 = all)
const SUBREDDITS = []; // only in these subreddits, e.g. ['pics', 'AskReddit'] (empty = everywhere)
const DELAY = 2000; // pause between deletions, in milliseconds. Reddit limits fast actions.
if (location.hostname !== 'old.reddit.com' || !/^\/user\/[^/]+\/comments/.test(location.pathname)) {
alert('Open your comments on old Reddit first (signed in):\nhttps://old.reddit.com/user/me/comments/');
return;
}
// Must be your own list: old Reddit shows the signed-in user in the header
const me = (document.querySelector('#header .user a[href*="/user/"]')?.textContent || '').trim();
const owner = (location.pathname.split('/')[2] || '').toLowerCase();
if (owner !== me.toLowerCase()) {
alert(me
? `This isn't your own list. Open:\nhttps://old.reddit.com/user/${me}/comments/`
: 'Sign in on old.reddit.com first, then open your own comments list.');
return;
}
// A small box on the page shows progress and asks before changing anything,
// so you never need to read or edit the console.
const many = (n, word) => `${n} ${word}${n === 1 ? '' : 's'}`; // 1 video, 2 videos
const panel = (() => {
const box = document.createElement('div');
box.style.cssText = 'position:fixed;right:16px;bottom:16px;z-index:2147483647;width:340px;max-width:calc(100vw - 32px);' +
'background:#111318;color:#e6e8ee;font:14px/1.5 system-ui,sans-serif;border-radius:12px;padding:16px;' +
'box-shadow:0 8px 30px rgba(0,0,0,.4);text-align:left';
const head = document.createElement('strong');
head.textContent = TOOL;
const msg = document.createElement('p');
msg.style.cssText = 'margin:8px 0 12px;white-space:pre-line';
const row = document.createElement('div');
row.style.cssText = 'display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end';
box.append(head, msg, row);
document.body.append(box);
const button = (label, primary, onClick) => {
const b = document.createElement('button');
b.textContent = label;
b.style.cssText = 'font:600 14px system-ui,sans-serif;padding:8px 14px;border-radius:8px;cursor:pointer;' +
(primary ? 'background:#0f766e;color:#fff;border:1px solid #0f766e' : 'background:none;color:#e6e8ee;border:1px solid #3a3f4b');
b.onclick = onClick;
row.append(b);
};
return {
text(t) { msg.textContent = t; },
ask(t, yes) {
msg.textContent = t;
row.replaceChildren();
return new Promise(r => {
button('Cancel', false, () => { row.replaceChildren(); r(false); });
button(yes, true, () => { row.replaceChildren(); r(true); });
});
},
stoppable(onStop) { row.replaceChildren(); button('Stop', false, onStop); },
actions(t, list) {
msg.textContent = t;
row.replaceChildren();
list.forEach(([label, primary, run]) => button(label, primary, run));
},
finish(t) { this.actions(t, [['Close', true, () => box.remove()]]); },
close() { box.remove(); },
};
})();
const sleep = ms => new Promise(r => setTimeout(r, ms));
const only = new Set(SUBREDDITS.map(s => s.replace(/^\/?r\//i, '').toLowerCase()));
if (!document.querySelector('.thing.comment form.del-button')) {
alert('This doesn\'t look like your own comments page (there are no "delete" links). Sign in and open:\nhttps://old.reddit.com/user/me/comments/');
return;
}
// 1. Ask (the total isn't known until the end: Reddit shows 25 per page)
const where = only.size ? ` in ${[...only].map(s => 'r/' + s).join(', ')}` : '';
const scope = LIMIT ? `your latest ${LIMIT} comments${where}` : `all your comments${where}, newest first`;
if (!await panel.ask(`Delete ${scope}?\nThis can't be undone. You can stop at any time.`, LIMIT ? `Delete ${LIMIT}` : 'Delete all')) {
panel.finish('Cancelled. Nothing was changed.');
return 0;
}
// Each page of comments opens in a hidden frame of the same site; it stays open while we click
let frame = null;
const openPage = path => new Promise(resolve => {
frame?.remove();
frame = document.createElement('iframe');
frame.style.cssText = 'position:absolute;left:-9999px;width:1000px;height:800px';
const timer = setTimeout(() => resolve(null), 30000);
frame.onload = () => { clearTimeout(timer); resolve(frame.contentDocument); };
frame.src = new URL(path, location.origin).href;
document.body.appendChild(frame);
});
// 2. Delete page by page. Deleted comments leave the list, so the first page is reloaded
// until nothing on it is left to delete; then the script moves on to the next page.
let stop = false;
panel.stoppable(() => { stop = true; });
const done = new Set();
const start = location.pathname + location.search;
let path = start, count = 0, skipped = 0;
while (!stop && !(LIMIT && count >= LIMIT)) {
const doc = await openPage(path);
if (!doc) break;
let deletedHere = 0;
for (const t of doc.querySelectorAll('#siteTable > .thing.comment[data-fullname]')) {
if (stop || (LIMIT && count >= LIMIT)) break;
const id = t.dataset.fullname;
if (done.has(id)) continue;
done.add(id);
if (only.size && !only.has((t.dataset.subreddit || '').toLowerCase())) { skipped++; continue; }
const form = t.querySelector('form.del-button');
if (!form) continue;
form.querySelector('a.togglebutton').click(); // "delete"
await sleep(300);
form.querySelector('a.yes').click(); // "are you sure? yes"
count++;
deletedHere++;
panel.text(`Deleting… ${count}${LIMIT ? ` of ${LIMIT}` : ''}${skipped ? ` (${skipped} kept in other subreddits)` : ''}`);
await sleep(DELAY);
}
if (deletedHere) { path = start; continue; } // fresh look at the first page
const next = doc.querySelector('.next-button a')?.getAttribute('href');
if (!next) break;
path = next;
await sleep(1000);
}
frame?.remove();
if (!count && !stop) {
panel.finish(only.size ? 'No comments to delete in those subreddits.' : 'You have no comments to delete.');
return 0;
}
panel.finish(`${stop ? 'Stopped' : 'Done'}: deleted ${many(count, 'comment')}.\nReload the page to see the result.`);
return count;
})();
Bookmarklet: drag the middle button to your bookmarks bar, open old.reddit.com and click the bookmark. It runs the same script with the options above.
- Sends nothing anywhere. No fetch, XHR or external scripts. The only network activity is old.reddit.com itself loading your list.
- Never touches your login. It doesn't read cookies, passwords, tokens or browser storage.
- Only runs on old.reddit.com. Anywhere else it stops before doing anything.
- Short and readable. 138 commented lines, not minified or obfuscated.
- Asks before it changes anything. A box on the page shows what it found and waits for your OK. You can stop it at any time.
- Same code for everyone. SHA-256 of the default version:
e6b25f3c7929bf86…
Verify it yourself in 30 seconds
- Read it: every line is above, with comments.
- Search the code for
fetch,XMLHttpRequest,cookie,localStorageoreval. None of them appear. - Open the Network tab before running it: you'll only see requests to old.reddit.com.
Good to know: this can't be undone in bulk. The script always shows the count and asks before it starts. Leave the tab open until the box says "Done".
How to use it
- Open old.reddit.com/user/me/comments while signed in.
- Open the console: F12 or Ctrl+Shift+J (Cmd+Option+J on Mac). If Chrome asks, type
allow pastingand press Enter. - Set a limit or some subreddits if you want, copy the script, paste it in the console and press Enter. A box asks for confirmation, then deletes your comments one by one. Click Stop at any time.
Before you start
Want a copy first? Your comments are in Reddit’s data request (Settings > Privacy > Request your data). Deleting is slow on purpose, about one comment every two seconds, because Reddit temporarily blocks accounts that act faster.
FAQ
Can I undo it?
No. Deleted comments can't be restored. Replies from other people stay, under a "[deleted]" placeholder.
How long does it take?
About two seconds per comment, so Reddit doesn't limit your account: around 30 comments a minute. Keep the tab open; you can stop it at any time.
Can I keep some comments?
Use the subreddit option to delete only in the subreddits you choose, or the limit to delete only your latest ones.
