Privacy policy

Tab Export – one sheet tab, for Google Sheets

Last updated: 2026-10-22

Google Sheets 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 open the toolbar popup on a Google Sheets document and choose CSV, Excel, or PDF, the extension reads the address and title of that tab and asks Chrome to download Google’s own export URL for the current sheet tab.

If that address is a multi-account editor URL (/spreadsheets/u/<n>/d/<id>/…) and <n> is a decimal account index from 0 through 99 with no leading zero, the download URL keeps that index:

https://docs.google.com/spreadsheets/u/<n>/d/<id>/export?format=<csv|xlsx|pdf>&gid=<gid>

Otherwise the download URL has no account segment:

https://docs.google.com/spreadsheets/d/<id>/export?format=<csv|xlsx|pdf>&gid=<gid>

The extension does not add an authuser parameter. An email address is never placed in the export URL. The account index in the path is the same selector the editor URL already used, so the download runs in that signed-in account rather than the browser’s default account.

The extension does not fetch the spreadsheet and does not parse cell values. It does not keep its own copy of the file, the URL, or the title.

Chrome’s download manager records the download the same way it records any other download. That record includes the export URL (the spreadsheet id, the gid, and the account index when the path has one) and the filename (derived from the spreadsheet title, or from a Pro filename pattern). The record stays in this browser’s download history, on this computer, under your control. The extension does not read that history and does not erase it. Clearing it is a browser setting (chrome://downloads, or the browser’s clear-browsing-data control), not something this extension does.

Pro can download several tabs of that same spreadsheet, one after another, still through Chrome’s download manager. The extension does not build a zip and does not read the file bytes. You type any extra tab ids yourself. The extension does not inject a script to read the sheet.

What is read, and when

Reading happens only after you open the popup (a user gesture), and only for the active tab.

  • The extension uses activeTab so chrome.tabs.query({ active: true, currentWindow: true }) can see that tab’s url and title.
  • The URL is checked in the popup. It must be https://docs.google.com with a /spreadsheets/d/<id> path, or /spreadsheets/u/<n>/d/<id> when <n> is an account index from 0 through 99 with no leading zero. Other hosts, http:, lookalike hosts, published /d/e/<id>/ links, and account indexes outside that range are rejected.
  • The tab title is used only to build a local download filename. On the free plan that title is the spreadsheet name shown by the browser, not the name of the sheet tab inside the workbook. A Pro filename pattern may also include a tab name you type, the gid, the date, and the format. Controls and Unicode format characters (including bidi overrides and zero-width characters) are removed, path segments are dropped, and the extension is forced to .csv, .xlsx, or .pdf.
  • The extension does not inject a content script, does not call chrome.scripting, does not read the page DOM, and does not read cell contents.

Purchase check

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.

That contact is made by the bundled ExtensionPay library, which is copied into the extension at build time. The extension does not load it from a CDN. The library is the only packaged code that calls fetch(. It does not receive the spreadsheet, the export URL, the filename, or the tab title. Our code does not pass those values into ExtensionPay.

Before a purchase, the id the library uses is an anonymous installation key. After you buy Pro, ExtensionPay stores your email. Stripe processes the payment on ExtensionPay’s page. Card numbers are not visible to this extension or to its developer.

ExtensionPay’s privacy policy: https://extensionpay.com/privacy

Stripe’s privacy policy: https://stripe.com/privacy

The paid flag (true or false) and the time it was checked are kept in chrome.storage.local for about five minutes so the popup does not ask on every click. That record is only { paid, at }. A filename pattern you type is also kept in chrome.storage.local until you change it. Gids you type are not stored. If the check fails or times out, Pro stays off and the free export still runs.

The bundled ExtensionPay library stores its extensionpay_user record in chrome.storage.sync when that area is available. After a purchase that record can include your email. The same calls store the library’s anonymous api key (extensionpay_api_key) and install time (extensionpay_installed_at) in that area. chrome.storage.sync is part of browser profile sync, so those values can be copied to other devices signed in to the same profile. If storage.sync is not available, the library stores them in chrome.storage.local instead, and that copy stays on this device. This extension does not read the email and does not copy it into the five-minute flag. The five-minute flag and the filename pattern are written only to chrome.storage.local.

A monthly subscription, if you start one from the ExtensionPay page, can be cancelled anytime from the ExtensionPay account page (open it with Restore purchase, which uses the library’s login page). Refunds are available on request within 14 days by contacting the support email listed on the store listing (rhaffele3@gmail.com). The upgrade button shows a $9.99 lifetime price. The price charged is the price configured for this extension at ExtensionPay. The registered production id is sheets-tab-export.

What leaves your computer

The developer does not receive spreadsheet contents, export URLs, filenames, or usage counts.

  • The bundled ExtensionPay library is the only packaged file that calls fetch(. Those calls go to https://extensionpay.com only.
  • Packaged code does not call XMLHttpRequest, WebSocket, or sendBeacon(.
  • Packaged code does not call console.log, console.debug, console.info, console.warn, console.error, console.trace, or console.dir.
  • It does not include remote code, remote fonts, a Google API client, OAuth, or API keys.
  • It does not add the ExtensionPay content script, and it does not run code inside the Google Sheets page.

When you choose a format, Chrome’s downloads API is given the Google export URL above. The browser then requests that URL as a normal download in your existing signed-in session, so Google receives the export request with your cookies the same way it would if you opened that export link yourself. That request is made by the browser’s download manager, not by an extension fetch( of the spreadsheet. The file lands where you normally save downloads. The same download manager writes the export URL and the filename into download history, as described above.

The extension does not use localStorage, sessionStorage, indexedDB, chrome.cookies, document.cookie, or chrome.history. It does not read or write sheet contents, URLs, or titles through those APIs, and it does not write them to the console. This extension’s own chrome.storage.local keys are the Pro flag described above and the filename pattern. The ExtensionPay extensionpay_user record is stored in chrome.storage.sync when that area is available, and in chrome.storage.local only when sync is not. After a purchase that record can include your email, and profile sync can copy it to other devices signed in to the same browser profile. Browser cookies are still attached to the download by Chrome, not by this extension.

Permissions

PermissionWhy it is there
activeTabAfter you click the toolbar icon, read the URL and title of that tab so the popup can tell whether it is a Google Sheets document and can name the file. The extension does not keep standing access to other tabs or to browsing history.
downloadsStart the Google export download with a sanitized filename, saveAs: false, and conflictAction: uniquify. Pro may start several of those downloads, one after another, for tabs you selected in the same spreadsheet. Chrome then stores each URL and filename in download history. The extension does not call downloads.search, downloads.open, or downloads.erase, and it does not read or delete that history.
storageKeep the five-minute Pro flag and the filename pattern in chrome.storage.local. The ExtensionPay library stores extensionpay_user in chrome.storage.sync when that area is available, along with its anonymous api key and install time. After a purchase extensionpay_user can include your email, and the browser can sync that record to other devices on the same profile. If sync is unavailable, the library uses chrome.storage.local instead. This extension does not read the email.
https://extensionpay.com/*Let the bundled library talk only to ExtensionPay. This is a host permission. It is not permission to read Google Sheets or any other site. Firefox reads this from the top-level host_permissions list.

The manifest does not request host access to Google. It does not request scripting, tabs, or management. It does not request access to your spreadsheet through Google’s APIs. There is no content script.

Firefox’s data_collection_permissions.required is personallyIdentifyingInfo because a purchaser’s email is stored by ExtensionPay. websiteContent is not declared. Spreadsheet contents are not collected or transmitted by this extension.

Free plan and Pro

The free extension downloads the current tab in CSV, Excel, or PDF. Pro, after isPro() reports that ExtensionPay’s user is paid, can export several tabs of the same spreadsheet as separate files and can apply a filename pattern ({sheet}, {tab}, {date}, {format}). A failed or slow Pro check leaves those features off and does not block the free download.

Data the developer receives

The developer does not receive spreadsheet contents, export URLs, filenames, usage counts, or crash reports. There is no product telemetry. ExtensionPay and Stripe receive the purchase data described above, under their own policies. Download history stays in your browser.

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. The extension does not phone home to announce that.

Contact

Questions about this policy can be opened as an issue on the project repository that hosts the extension. Refund requests within 14 days go to the support email on the store listing. The listing uses rhaffele3@gmail.com. The extension cannot send a message to the author.