Short answer: Bluesky doesn't have a "delete all posts" button. You can delete posts one at a time in the app, or delete them in bulk with a short script that uses your own account and an app password. This guide shows the safe way to do both. Back up your account before you start – deletion can't be undone.

Before You Delete Anything: Back Up

Deleted Bluesky posts are gone for good. There's no trash folder and no undo. Even if you're sure, download a copy first:

  • Built-in export: Settings → Account → Export my data downloads your whole repository (a .car file) with every post, like, follow and list.
  • Readable archive: our Bluesky backup guide covers how to turn your data into something you can actually browse.

Option 1: Delete Posts One at a Time

For a handful of posts: open the post, tap the ··· menu, choose Delete post, and confirm. Fine for ten posts, painful for a thousand.

Option 2: Bulk Delete With a Script (Recommended)

Every Bluesky post is a record in your personal data repository, and the AT Protocol lets you list and delete those records. A short Python script can delete everything, or just posts older than a certain date, in a few minutes. It runs on your own computer, so your password never goes to a third-party service.

Step 1: Create an app password

Don't use your main password. Go to Settings → Privacy and security → App passwords, create one called "bulk delete", and revoke it when you're done. Details: how to create and revoke Bluesky app passwords.

Step 2: Install the SDK

python3 -m venv .venv
source .venv/bin/activate
pip install atproto

Step 3: The script

This script defaults to a dry run: it lists what it would delete and deletes nothing until you set DRY_RUN = False. It can also keep recent posts by deleting only posts older than a cutoff date.

import os
import time
from datetime import datetime, timezone
from atproto import Client

DRY_RUN = True                      # set to False to actually delete
COLLECTION = "app.bsky.feed.post"   # or app.bsky.feed.like / app.bsky.feed.repost
OLDER_THAN = None                   # e.g. datetime(2026, 1, 1, tzinfo=timezone.utc)

client = Client()
client.login(os.environ["BSKY_HANDLE"], os.environ["BSKY_APP_PASSWORD"])
did = client.me.did

def created_at(record):
    value = record.value
    raw = getattr(value, "created_at", None) or value["createdAt"]
    return datetime.fromisoformat(raw.replace("Z", "+00:00"))

# 1. Collect every record in the collection
to_delete, cursor = [], None
while True:
    page = client.com.atproto.repo.list_records(
        {"repo": did, "collection": COLLECTION, "limit": 100, "cursor": cursor}
    )
    for rec in page.records:
        if OLDER_THAN is None or created_at(rec) < OLDER_THAN:
            to_delete.append(rec.uri)
    cursor = page.cursor
    if not cursor:
        break

print(f"{len(to_delete)} records match in {COLLECTION}")
if DRY_RUN:
    print("Dry run: nothing deleted. Set DRY_RUN = False to delete.")
    raise SystemExit

# 2. Delete them, gently
for i, uri in enumerate(to_delete, 1):
    rkey = uri.split("/")[-1]
    client.com.atproto.repo.delete_record(
        {"repo": did, "collection": COLLECTION, "rkey": rkey}
    )
    if i % 100 == 0:
        print(f"Deleted {i}/{len(to_delete)}")
    time.sleep(0.2)

print("Done.")

Step 4: Run it

export BSKY_HANDLE="yourname.bsky.social"
export BSKY_APP_PASSWORD="xxxx-xxxx-xxxx-xxxx"
python3 bulk_delete.py

Check the dry-run count. If it looks right, set DRY_RUN = False and run it again.

Deleting likes and reposts too

Likes and reposts are separate record types. Change COLLECTION and run the script again:

  • app.bsky.feed.post – posts and replies
  • app.bsky.feed.like – likes (unliking everything)
  • app.bsky.feed.repost – reposts

Deleting a like or repost record is the same as tapping unlike or un-repost. It doesn't affect the original post.

How long it takes: rate limits

Bluesky limits writes with a points system: each delete costs 1 point, with a budget of 5,000 points per hour and 35,000 per day. So you can delete up to about 5,000 records an hour. The script's short pause keeps it well under that. If you have more than 35,000 records, run it again the next day. If you hit a 429 error, wait and re-run; the script only deletes what's left. More in our Bluesky rate limits guide.

Option 3: Third-Party Bulk Delete Tools

Some web tools offer one-click bulk deletion or auto-delete posts after a set time. If you use one:

  • Only ever give it an app password, never your main password.
  • Revoke the app password as soon as you're done, unless it's an ongoing auto-delete service you trust.
  • Back up first, because a buggy tool can delete more than you meant to.

Option 4: Delete the Whole Account

If your goal is to leave entirely, deleting your account removes everything at once and is simpler than bulk-deleting first. If you only want a break, deactivating hides your account without deleting anything. See delete vs. deactivate your Bluesky account.

What Deletion Does and Doesn't Do

  • Removed: the post from your profile, from feeds and search, and from the Bluesky app for everyone.
  • Quote posts of your deleted post remain, but the quoted section shows that the post was deleted.
  • Replies other people wrote to your post stay on their profiles.
  • Copies elsewhere: Bluesky is an open network. Services that archived posts while they were public may still have copies. Deletion is strong, but it isn't a guarantee that nothing survives.

Frequently Asked Questions

Can you delete all your posts on Bluesky at once?

Not with a built-in button. You can bulk delete with a script that uses the AT Protocol API and an app password, use a third-party tool, or delete your whole account.

How many Bluesky posts can I delete per hour?

Each delete costs 1 rate-limit point, and accounts get 5,000 points per hour and 35,000 per day, so roughly 5,000 deletions an hour.

Can I delete only old Bluesky posts?

Yes. A script can filter by each post's creation date and delete only posts older than a cutoff, keeping recent ones.

Can I recover deleted Bluesky posts?

No. Bluesky has no undo for deleted posts. Export your data first if you might want them later.

Does deleting a post delete replies to it?

No. Replies belong to the people who wrote them and stay on their profiles.

Keep Your Account in Shape with Skyscraper

Download Skyscraper for iOS →

Related Reading