Privacy Policy — Bulk Delete Emails for Gmail™
Last updated: 9 November 2026
Extension: Bulk Delete Emails for Gmail™ — Mass Unsubscribe & Cleanup
Contact: [email protected]
The short version
Bulk Delete Emails for Gmail™ runs entirely inside your browser.
- The text of your emails is never transmitted anywhere. It is never even requested from Google.
- Scanning reads message metadata only — sender, subject line, date, size and unsubscribe headers — processes it on your own machine, and caches it in your browser's local extension storage.
- Attachments are the one exception, and only on your explicit instruction. If you use the attachment export, the extension downloads the specific files you tick, packs them into a ZIP and hands it to your browser. It still never receives the message text they were attached to. Section 2 below sets out exactly how.
- There is no Bulk Delete Emails for Gmail™ server. We do not operate a backend that receives your data, because there is nothing to receive.
- The only outbound network requests are to Google's Gmail API (your own mailbox, with your own token), to Google's token revoke endpoint when you disconnect, and to a sender's own unsubscribe URL — and only when you explicitly ask to unsubscribe from that sender.
What the extension accesses
1. Gmail message metadata
Scanning your mailbox — the step that groups it by sender — uses Gmail's format=metadata mode with an explicit allowlist of headers, and nothing else:
| Header | Why it is needed |
|---|---|
From | Group your mail by sender — the core of the product |
Subject | Shown as a one-line example so you can recognise a sender |
Date | Power the "oldest / newest" columns and "older than N months" |
List-Unsubscribe | Find the unsubscribe endpoint for a mailing list |
List-Unsubscribe-Post | Detect RFC 8058 one-click support |
Gmail also returns sizeEstimate and internalDate with every message; those drive the "space used" figures.
format=metadata means Google does not send us the message body. No email text, no inline images. Not "we choose not to look" — the API response does not contain it.
2. Attachments, only when you export them
Listing and exporting attachments is the one feature that looks at more than headers, so here is exactly what it does and does not read.
Finding attachments. To know a message has a budget.xlsx in it, the extension has to see the message's MIME structure, and Gmail exposes that only through format=full — which would normally return the decoded message body as well. Every such request therefore carries a fields mask naming only the four things needed: each part's filename, mimeType, body/size and body/attachmentId.
fields is applied by Google before the response is built, so this is the same guarantee as format=metadata: the message text is not sent and then discarded, it is never transmitted. The mask never names body/data and never names headers, so message text and recipient lists stay on Google's side of the connection. You can check this claim yourself: open src/attachments.js and read the two constants PART_FIELDS and STRUCTURE_FIELDS. They are the complete set of fields any request in that file asks for, and neither names body/data or headers.
Downloading attachments. The bytes of an attachment are fetched only for the specific files you tick, and only when you click Export. They are held in your browser's memory just long enough to build a ZIP, which your browser then saves like any other download. Nothing is uploaded, and the extension has no server to upload it to.
A dry run resolves names and sizes without downloading anything, so you can see what an export would contain before any attachment leaves Google.
3. Your email address
Read once, from users.getProfile, to display which account is connected in the dashboard header. It is not stored anywhere outside your browser and is not sent to us or anyone else.
4. Labels
The extension adds and removes the TRASH and INBOX labels on messages you select. That is what "move to Trash" and "undo" mean technically.
What is stored, and where
All of it lives in chrome.storage.local — a private, per-extension area on your own computer. Nothing is written to chrome.storage.sync, so none of this travels through your Google account to your other devices.
| Stored | Contents | Why |
|---|---|---|
| Scan cache | Per-sender name, address, message count, total size, newest/oldest dates, unsubscribe URLs, message ids | So reopening the dashboard is instant instead of re-scanning |
| Run history | Up to 10 cleanup summaries; the newest safety journal includes pending/in-flight/succeeded message IDs and original Inbox state | Powers Resume and Undo. If Chrome storage is tight, older ID arrays may be dropped while their non-actionable summary remains |
| Unsubscribe ledger | Sender address → status and timestamp | So you are not asked to unsubscribe from the same list twice |
| Protection rules | Sender addresses or domains you enter | To exclude important mail from cleanup and unsubscribe at the final action boundary |
| Unsubscribe reports | The last 10 local runs: sender, method, result and error text | To explain failures and retry only failed attempts |
| Settings | Your query, scan depth and dry-run preference | Convenience |
You can erase all of it at any time by removing the extension, or from chrome://extensions → Bulk Delete Emails for Gmail™ → Details → Site settings. Uninstalling deletes it permanently and immediately.
Network requests, in full
This is the complete list. There are no others.
https://www.googleapis.com/gmail/v1/...and.../batch/gmail/v1
Your own mailbox, authorised by a token Chrome issues to you. Requests go directly from your browser to Google.https://oauth2.googleapis.com/revoke
Only when you click "Reconnect Google account", to revoke the old token.A sender's public HTTPS unsubscribe URL, and only when you explicitly ask to unsubscribe from that sender. This is an RFC 8058 one-click POST containing the fixed body
List-Unsubscribe=One-Click. It is sent withcredentials: 'omit', so your cookies for that domain are not included. Permission for that domain is requested at that moment and released afterwards. Plain HTTP, URLs containing embedded credentials, localhost,.local, loopback, link-local and private-network destinations are blocked.
What we do NOT do
- We do not have a server of any kind. There is no account to create, no licence to check and nothing to log in to.
- We do not read, transmit, sell, rent or share message bodies. We never receive them.
- We do not use analytics, telemetry, crash reporting or advertising SDKs.
- We do not track your browsing. The extension has no content scripts and cannot see any web page you visit.
- We do not send email on your behalf. The extension does not hold the
gmail.sendscope, which is why mailto-only unsubscribes are handed to you rather than automated. - We do not transfer data to third parties for any purpose unrelated to the single purpose stated above.
- We do not use your data to train any AI or machine-learning model.
- Cleanup recommendations are deterministic rules evaluated on your device from sender, date, count and size metadata. No mailbox data is sent to an AI service.
Google API Services User Data Policy
Bulk Delete Emails for Gmail™'s use of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements.
Specifically:
- Google user data is used only to provide the user-facing features described in this policy — grouping mail by sender, deleting it, unsubscribing, and saving out the attachments you choose to keep before the mail holding them is deleted.
- Google user data is not transferred to any third party, except as necessary to provide those features, to comply with applicable law, or as part of a merger or acquisition with prior notice.
- Google user data is not used for serving advertisements.
- No humans read your Google user data. Message metadata never leaves your device, so there is nothing for anyone to read.
- Google user data is not used to develop, improve or train generalised AI/ML models.
Revoking access
At any time: https://myaccount.google.com/permissions → Bulk Delete Emails for Gmail™ → Remove access. The extension also has a "Reconnect Google account" button that revokes its current token.
Retention
Because nothing is transmitted to us, we retain nothing. Data in your browser persists until you clear it or uninstall the extension. The scan cache keeps at most 8 recent scans and history keeps up to 10 summaries; older entries are evicted automatically. Under storage pressure, older message-ID arrays can be removed sooner, which disables Undo for those older summaries.
Children
Bulk Delete Emails for Gmail™ is not directed at children under 13 and does not knowingly collect data from them.
Changes to this policy
Material changes will be reflected here with an updated date and noted in the Chrome Web Store listing's changelog.