Ghost notifications on GitHub can be frustrating. These are notifications that continue to show up in your notification count, even though they appear dismissed or no longer exist. This step-by-step guide will help you completely clear them from your GitHub notifications panel.
Ghost notifications are lingering alerts in your GitHub notification count that won't go away — often caused by:
- Archived or hidden notifications that are still marked as unread
- Notifications from deleted repositories or issues
- Incomplete dismissal due to GitHub UI bugs or sync issues
Important
There are several types of GitHub ghost notifications, and each may require a different solution.
This guide builds on this GitHub comment, which I’ve expanded with additional details and clearer explanations. The method described here helped me successfully remove ghost notifications.
The Optional/Advanced method draws from the official GitHub documentation. You can use:
- cURL
- JavaScript
- GitHub CLI
The Community section includes additional solutions shared by other GitHub users, which may also work for you.
Visit https://github.com/notifications and log in if you haven’t already.
If you see any visible notifications, make sure to read and dismiss them before continuing.
- In the left sidebar, click Done.
- Click Select all — this selects up to 25 notifications.
- Click → Move to Inbox.
- Refresh the page using F5 and/or Ctrl+R, then repeat steps 2 and 3 until you've moved at least 50 notifications to your Inbox.
- In the left sidebar, click Inbox.
- Click Select all.
- If prompted with options like Done, Unsubscribe, and Selected all 50 notifications, click Select all 50 notifications to ensure everything is selected.
- Click Done to dismiss all selected notifications.
By following these steps, you can remove persistent or "ghost" GitHub notifications that won’t disappear on their own. This method forces hidden or archived notifications into view so they can be manually dismissed — without needing the GitHub CLI or other advanced tools.
If the ghost notification count remains:
- Repeat steps 2 and 3 under "Move Archived Notifications to the Inbox" until you’ve moved 100 or more notifications. This ensures all hidden or ghost notifications are surfaced and can be removed.
- As a last resort, move all remaining notifications to your Inbox and dismiss them from there.
If none of these work, continue with the advanced options below.
If the manual steps didn’t fully clear your ghost notifications, or if you prefer a programmatic approach, you can use the GitHub REST API to manage your notifications directly.
- 📚 GitHub REST API documentation
- 🚀 Quickstart for GitHub REST API
- 🔄 Manage notifications via REST API
- 🔐 Generate a GitHub Personal Access Token (classic)
Important
🔐 Your token must include the notifications
scope
When creating a new Personal Access Token (Classic), scroll down to the Notifications section and check the Access notifications option.

For security purposes, always set an expiration date for the token.
⏳ By default, the expiration is set to 30 days.
curl -L \
-X PUT \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/notifications \
-d '{"last_read_at":"2022-06-10T00:00:00Z","read":true}'
Note
Be sure to replace <YOUR-TOKEN>
with a valid
Personal Access Token that includes the
notifications
scope.
The last_read_at
field sets the timestamp GitHub will treat as your most
recent "read" point for notifications. This allows you to control which
notifications are marked as read.
For complete reference, see the Mark notifications as read documentation.
curl -L \
-X PUT \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/OWNER/REPO/notifications \
-d '{"last_read_at":"2019-01-01T00:00:00Z"}'
Note
Be sure to replace <YOUR-TOKEN>
with a valid
Personal Access Token that includes the
notifications
scope.
Replace OWNER
and REPO
with the GitHub username (owner) and repository
name. These values are not case-sensitive. Example:
https://api.github.com/repos/homelab-alpha/docker/notifications \
The last_read_at
field sets the timestamp GitHub will treat as your most
recent "read" point for notifications. This allows you to control which
notifications are marked as read from that specific repository.
For complete reference, see the Mark repository notifications as read documentation.
The following are alternative solutions proposed by members of the GitHub community. In addition to the REST API, you may consider using the official GitHub CLI or other community-driven methods.
Hi @shaunlebron, I did some further research. The method I described above in the guide still seems to work after reviewing a large number of issues and discussions.
That’s why I added an Optional/Advanced section for myself. In the GitHub documentation of REST API endpoints for notifications, you can see that there are several ways to do this, such as:
I personally chose cURL, simply because the terminal is available on almost every PC. In addition, I don’t have GitHub CLI installed on every device I use, and it’s not always possible to do so.
Conclusion: I’m not going to change this page just because someone disagrees with the solutions I provide.