Privacy policy
Mail Export to CSV – private, for Gmail
Last updated: 2026-10-22
Gmail is a trademark of Google LLC. This extension is not affiliated with, endorsed by, or sponsored by Google.
This document is the privacy policy for the extension. It is ordinary Markdown with a title, so GitHub Pages (Jekyll) can publish it as a page. Host the repository with Pages on the branch that contains this file. The policy URL is the Pages URL for this file.
What the extension does
When you click Export visible rows, the extension reads the conversation rows already loaded in the Gmail tab you are viewing and downloads a CSV file to your computer. A paid Pro purchase can include every loaded row, the columns you pick, and an Excel workbook generated on this device.
The file can contain, for each exported row:
- sender name and sender email address
- subject
- the date text Gmail shows for that row
- the list snippet
- email addresses and phone numbers found in that snippet
Your emails and spreadsheet data never leave your device. The extension contacts extensionpay.com only to check whether you have bought Pro (an anonymous ID before purchase). If you buy Pro, ExtensionPay stores your email and Stripe processes payment; we never see your card.
ExtensionPay’s privacy policy: https://extensionpay.com/privacy
Stripe’s privacy policy: https://stripe.com/privacy
What is read, and when
Reading the mailbox happens only after you click Export, and only in the active tab.
- The tab must be
https://mail.google.com/.... Other sites are not injected. - The extension uses the
activeTabandscriptingpermissions to run a local script in that tab. The script copies the HTML of the loaded conversation rows in the top document. It does not read other frames, other sites, other tabs, or your Google password. - Parsing and file creation run inside the extension popup. The collector does not query the open conversation body. Rows that Gmail has not loaded into the page are not collected.
- Pro status is a separate check. It does not include the rows, the file, or the column values.
What leaves your computer
Mailbox fields and the spreadsheet file stay on the device. They are not sent to the developer, sold, or used for advertising.
The only network calls are made by the bundled ExtensionPay library to extensionpay.com:
- Before a purchase, that library uses an anonymous id stored by ExtensionPay. The extension does not send your Gmail address for that check.
- If you buy Pro, you enter your email on ExtensionPay’s page. ExtensionPay stores that email. Stripe processes the card payment. This extension never sees the card number.
- The library then stores the user record it receives under the key
extensionpay_user. That record can include the purchaser email. It writesextensionpay_usertochrome.storage.syncwhen sync storage is available, so the browser can copy it to other devices signed into the same browser profile. The Gmail list, the CSV, and the workbook are not in that record. Details are in “What is stored on the device.” - The library’s requests are not the Gmail list, the CSV, or the workbook.
The extension does not include remote code, remote fonts, or a Google API client. The ExtensionPay script is copied into the package at build time (vendor/ExtPay.js from extpay 3.1.2). It is not loaded from a CDN.
The export file is written on your device through Chrome’s downloads API (or a local download link if that API is unavailable). Chrome’s own download manager then stores the file where you normally save downloads. That is the browser’s download feature, not an upload.
The file stays in memory only long enough to hand it to the download, and for at most sixty seconds after that. The extension passes Chrome a blob: URL. When chrome.downloads.download accepts the file, that URL is revoked when the download completes, is interrupted, or sixty seconds have passed. If that API is unavailable, a local download link is used instead and the URL is revoked after sixty seconds. The extension does not use a data: URL, so the mailbox text is not copied into the download history entry. It does not use localStorage, sessionStorage, IndexedDB, cookies, or the history API, and it does not write mailbox contents to the console.
What is stored on the device
chrome.storage.local holds this extension’s own settings. That area stays on this device:
- a Pro flag and the time it was checked (about five minutes), not the mailbox and not your email address
- the column keys and file type you pick for Pro (CSV or Excel)
The bundled ExtensionPay library (vendor/ExtPay.js) stores its own keys with chrome.storage.sync when that area is available. If the sync call fails, it stores the same keys in chrome.storage.local. The keys are:
extensionpay_user, the user record ExtensionPay returns. After a purchase, this record can include the email you entered on ExtensionPay’s page, and the payment status they return. It is not a copy of your inbox.extensionpay_api_key, the anonymous id ExtensionPay assigned to this installextensionpay_installed_at, the install time
chrome.storage.sync is the browser’s synced extension storage. When it is available, the browser syncs those keys, including extensionpay_user and the purchaser email inside it, across devices signed into the same browser profile. The extension does not operate that sync and does not send the record to the developer. The Pro flag, the column keys, and the file type stay in chrome.storage.local. Mailbox text is not written to either area.
Permissions
| Permission | Why it is there |
|---|---|
activeTab | Read the Gmail tab you invoked the extension on, and only that tab. |
scripting | Run the local row reader in that tab. |
downloads | Save the file on your computer. When chrome.downloads.download accepts the file, the extension listens to downloads.onChanged and reacts only when that download id completes or is interrupted, so it can revoke the blob URL. It does not call downloads.search, downloads.open, or downloads.erase. |
storage | Remember the Pro check and, for Pro, the columns and file type you chose, in chrome.storage.local. The bundled ExtensionPay library uses the same permission to store extensionpay_user in chrome.storage.sync when that area is available. That record can include the purchaser email, and the browser can sync it across devices on the same profile. If sync storage is unavailable, the library keeps the same keys in chrome.storage.local. |
https://extensionpay.com/* | Let the bundled payment library talk to ExtensionPay. The extension does not request host access to Gmail. activeTab covers the tab you invoked. There is no content script on ExtensionPay or on any other site. |
Firefox’s data-collection declaration is personallyIdentifyingInfo because a purchaser’s email is stored by ExtensionPay and, in extensionpay_user, in chrome.storage.sync when that area is available. The extension does not declare website content or personal communications: the Gmail list is not transmitted.
Free plan and Pro
Each free export includes at most 100 loaded rows, the fixed column list, and a CSV file. That limit is a local rule. Hitting it does not send a count anywhere.
Pro removes the 100-row cap, lets you choose columns, and can write an Excel file on this device. If the Pro check errors or times out, the extension stays on the free plan and the export still runs.
Monthly subscriptions can be cancelled anytime from the ExtensionPay account page (via Restore purchase / login). Refunds are available on request within 14 days by contacting the support email listed on the store listing (rhaffele3@gmail.com).
Data the developer receives
The developer does not receive mailbox contents, the CSV, the workbook, or your card. ExtensionPay and Stripe receive what you submit on their pages, as described in their privacy policies. There is no separate analytics channel in this extension.
Children
The extension is a general productivity tool. It does not ask the user’s age and it is not directed at children.
Changes
If this policy changes, the date at the top of this file changes with it.
Contact
Questions about this policy go to the support email on the store listing: rhaffele3@gmail.com.