Yesterday I made a mistake: I accepted an invitation to the organization on GitHub, which had thousands of active repositories. And because my Notification Settings had “Automatically watch repositories” checked, I started receiving hundreds of emails.

Obviously, it was a tedious task to go to the Watching page and manually unwatch those thousands of repositories. I decided to write a simple script in Node.js — in the hope that someone might find it helpful.
First, go to GitHub’s Developer Settings and generate an access token. I granted my token the notifications and repo permissions; probably notifications alone would be enough, but I didn’t check.
Then, you will need to create a project and install the dependencies (only one):
npm init -y npm i @octokit/core
Here goes the script:
const { Octokit } = require("@octokit/core");
const octokit = new Octokit({ auth: 'the generated access token goes here' });
(async () => {
let page = 1;
let subs;
let repos = [];
do {
subs = await octokit.request('GET /user/subscriptions', {
per_page: 100,
page,
});
repos = repos.concat(
subs.data
.filter((sub) => sub.owner.login === 'orgname')
.map((sub) => [sub.owner.login, sub.name]))
;
++page;
} while (subs.data.length > 0);
for (const [owner, repo] of repos) {
console.log(owner + '/' + repo);
await octokit.request('DELETE /repos/{owner}/{repo}/subscription', { owner, repo });
}
})();
The logic is pretty straightforward: in the do/while loop, we collect the repositories we want to unsubscribe from, and in the for loop, we unsubscribe from them.
On line 17 (.filter((sub) => sub.owner.login === 'orgname')), we implement the logic to determine whether we need to unsubscribe from the repository. In this example, we unsubscribe from all repositories in the orgname organization. The organization name will be in the sub.owner.login property; the repository name will be in the sub.name property, and the full name (organization plus repository) will be in sub.full_name.
Run the script: node index.js and enjoy!