A Chrome extension that removes your old likes, reposts, and replies from X.com (formerly Twitter) before a date you choose, and adds one-click follower removal on your followers pages. It uses DOM-based interactions with human-like timing to minimize the risk of automated-behavior detection.
- Likes removal — unlike tweets on your likes page that were posted before the cutoff date
- Reposts removal — undo reposts on your profile timeline that were posted before the cutoff
- Replies removal — delete your reply tweets from the Replies tab that were posted before the cutoff
- Multi-select — choose any combination of the above; the extension processes them sequentially
- Date presets — 1 month, 3 months, 6 months, 1 year, 2 years, or 3 years
- One-click follower removal — on the Followers and Verified Followers pages, a "Remove" button is injected next to every follower, reducing the normal 3-click flow to 1 click
- Bot-evasion by design — gaussian-distributed random delays, periodic idle breaks, full realistic mouse-event sequences, and randomized scroll distances
- Survives page navigation — task state is persisted to
chrome.storage.localso the script resumes automatically after X.com's SPA routing or full page reloads - Progress tracking — live status and removal count displayed in the popup
TweetManager injects a content script into X.com pages. When you start a removal task the script:
- Navigates to the appropriate page (likes page, profile timeline, or replies tab)
- Scans visible tweet articles and reads the
<time datetime="...">attribute on each one - Compares the tweet's posting date against your chosen cutoff
- Clicks the appropriate button:
- Likes: clicks the unlike (heart) button
- Reposts: clicks the unretweet button, then confirms "Undo repost"
- Replies: opens the caret "..." menu, clicks "Delete", then confirms deletion
- Waits a random 3-8 seconds between actions (gaussian-distributed), with longer 45-120 second breaks every 12-25 actions
- Scrolls smoothly with random distances to load more content
- Detects error states and automatically cools down for 5-10 minutes before retrying
When multiple modes are selected (e.g., Likes + Replies), the extension processes them sequentially — completing all likes removal before moving to replies.
When you visit your Followers or Verified Followers page (x.com/{you}/followers or x.com/{you}/verified_followers), the extension automatically injects a red Remove button next to each follower's Follow/Following button.
The removal uses a queue-and-execute workflow:
- Queue — click "Remove" on any follower to add them to the queue. The button toggles to "Queued" (click again to dequeue). A floating badge in the bottom-right corner shows the current queue count.
- Execute — when you're done selecting, open the TweetManager popup and click Remove All Now. The extension scrolls through the followers page and automates the three-click removal flow (open "..." menu, click "Remove this follower", confirm) for each queued entry.
- Progress — the popup shows live progress. You can stop at any time; only unprocessed entries remain in the queue.
The queue is persisted in chrome.storage.local, so it survives page navigations and popup open/close cycles. No API tokens or external requests are used — the extension automates the same DOM clicks you would perform manually.
Remove buttons are re-injected automatically as you scroll and new follower cells load.
| Strategy | Detail |
|---|---|
| Gaussian delays | Action intervals follow a normal distribution (mean ~5.5 s) rather than fixed timing |
| Periodic breaks | Every 12-25 actions the script idles for 45-120 seconds |
| Realistic events | Full pointerover -> mouseover -> pointermove -> mousemove -> pointerdown -> mousedown -> pointerup -> mouseup -> click -> pointerout -> mouseout sequence |
| Random offsets | Click coordinates jitter +/-3 px from center |
| Smooth scrolling | behavior: 'smooth' with random 300-700 px distances |
| Error cooldown | On rate-limit or error detection, waits 5-10 minutes then reloads |
- Clone or download this repository:
git clone https://github.com/<your-username>/TweetManager.git- Open Chrome and navigate to
chrome://extensions/ - Enable Developer mode (toggle in the top-right corner)
- Click Load unpacked and select the
TweetManagerdirectory - The TweetManager icon appears in your extensions toolbar
- Navigate to x.com in Chrome and make sure you are logged in
- Click the TweetManager extension icon in the toolbar
- Toggle which types to remove: Likes, Reposts, Replies (any combination)
- Choose a date preset from the dropdown
- Check the confirmation box acknowledging the action is permanent
- Click Start Removal
- The extension navigates to the appropriate page and begins processing
Progress is shown in the popup. You can close and reopen the popup at any time — progress persists in storage.
To stop, reopen the popup and click Stop.
- Navigate to your Followers page on x.com (
x.com/{your-username}/followersor the Verified Followers tab) - The extension automatically injects a red Remove button next to each follower
- Scroll through the list and click Remove on each follower you want to get rid of — the button toggles to Queued
- A floating badge in the bottom-right shows how many are queued (click x on the badge to clear the queue)
- When you're done selecting, open the TweetManager popup and click Remove All Now
- The extension processes each queued follower one by one, showing progress in the popup
- Click Stop at any time — only unprocessed entries remain in the queue for next time
- Permanent action — unliked tweets, undone reposts, deleted replies, and removed followers cannot be automatically restored. Make sure you're ready before starting.
- Replies are deleted — unlike likes and reposts (which are reversible actions), removing a reply permanently deletes the tweet. This cannot be undone.
- Date filtering — the extension filters by the original tweet's posting date (the
datetimeattribute visible on each tweet), not the date you liked, reposted, or replied. - Long-running — depending on how many items qualify, likes/reposts/replies removal can take hours. The extension is intentionally slow to avoid detection. Keep the X.com tab open while it runs.
- DOM selectors may break — X.com can change its markup at any time. If the extension stops working after an X.com update, the
data-testidselectors incontent/content.jsmay need updating. - No data collection — this extension does not send any data anywhere. All processing happens locally in your browser.
TweetManager/
├── manifest.json # Chrome extension manifest (Manifest V3)
├── popup/
│ ├── popup.html # Extension popup markup
│ ├── popup.css # Popup styles (dark theme matching X.com)
│ └── popup.js # Popup controller and progress display
├── content/
│ └── content.js # Content script: removal logic, bot evasion,
│ # and follower-page Remove button injection
└── README.md
Timing constants are defined at the top of content/content.js. Adjust them to trade speed for stealth:
| Constant | Default | Description |
|---|---|---|
ACTION_DELAY_MIN_MS |
3000 | Minimum wait between actions (ms) |
ACTION_DELAY_MAX_MS |
8000 | Maximum wait between actions (ms) |
ACTIONS_BEFORE_BREAK_MIN |
12 | Minimum actions before a break |
ACTIONS_BEFORE_BREAK_MAX |
25 | Maximum actions before a break |
BREAK_DURATION_MIN_MS |
45000 | Minimum break duration (ms) |
BREAK_DURATION_MAX_MS |
120000 | Maximum break duration (ms) |
MAX_EMPTY_SCROLLS_LIKES |
6 | Scrolls with no likes found before stopping |
MAX_EMPTY_SCROLLS_REPOSTS |
20 | Scrolls with no reposts found before stopping |
MAX_EMPTY_SCROLLS_REPLIES |
12 | Scrolls with no replies found before stopping |
| Problem | Solution |
|---|---|
| Popup says "Navigate to x.com" | Make sure the active tab is on x.com or twitter.com |
| "Could not detect your username" | Ensure you are logged in and the sidebar has fully loaded, then try again |
| Extension stops finding tweets | X.com may have changed its DOM structure. Check data-testid selectors in content/content.js |
| Removal seems stuck | The extension may be in a break period (shown in status). Wait for it to resume, or stop and restart |
| Remove button not appearing on followers | Make sure you're on your own Followers or Verified Followers page. Try scrolling to trigger re-injection |
| Remove button shows "Error" | The dropdown menu selectors may have changed, or the page didn't respond in time. Try again or refresh the page |
MIT