Privacy Policy for ContextTranslate
This document describes the current version of ContextTranslate (1.x), where translations go directly from your browser to Google Gemini with your own API key. It will be updated before version 2.0 introduces the free plan and Pro.
Last Updated: November 20, 2025
Introduction
ContextTranslate is a Chrome extension developed by an individual developer. This Privacy Policy explains how your information is handled when you use the extension.
The extension is built with a local‑first, Bring Your Own Key (BYOK) model. By default, your settings and translation history stay on your device, and only the text you choose to translate is sent directly to Google’s Gemini API. You can optionally share anonymous usage analytics to help improve the extension; these analytics never include page text or URLs and can be turned off at any time.
Information You Configure (Stored Locally)
If you choose to configure settings, they are stored locally in your browser and are not sent to the developer except for the optional anonymous analytics described below.
API Key (BYOK)
- What: Your Google Gemini API key that you optionally enter in the extension settings
- Storage: Stored locally using Chrome's secure storage API (
chrome.storage.sync) and never sent to the developer - Use: Used only by your browser to authenticate direct requests to Google's Gemini API for translations
- Sharing: Not shared with the developer; transmitted only to Google to fulfill your translation request
Translation Data
- What: Original text, translation result, surrounding context snippet, page URL, and timestamp
- Storage: Stored locally in your browser (
chrome.storage.local) - Use: Enables you to review and export your translation history as CSV
- Sharing: Never shared with the developer or any third party
Settings and Preferences
- What: Target language selection, UI preferences, and your preference for anonymous usage analytics
- Storage: Stored locally using Chrome's storage APIs
- Use: Used by the extension to remember your preferences and whether analytics are allowed
- Sharing: The analytics toggle state is only used locally to decide whether to send anonymous usage events as described below
Optional Anonymous Usage Analytics
You can choose to share anonymous usage statistics to help improve ContextTranslate. This is controlled by the “Anonymous Usage Analytics” toggle in the options page. For new installs, analytics are enabled by default; for users who installed earlier versions, analytics start off and can be turned on. In all cases, you can turn analytics off or back on at any time.
When analytics are enabled, the extension sends small, event‑style payloads to a backend hosted on Supabase that is controlled by the developer.
What Analytics Data Is Collected
When analytics are enabled, we may collect the following for each analytics event:
- Anonymous client ID
- A random identifier generated on first use and stored in
chrome.storage.local - Not tied to your Google account, email address, or Chrome profile
- Event name
- A small, whitelisted set of events such as:
installoptions_openedapi_key_submittedtarget_language_selectedtranslation_performedfirst_translationanalytics_enabled/analytics_disabled
- Extension version
- The extension version (for example,
1.2.0) to understand which release generated the event - Technical parameters (optional)
- Simple, non‑content metadata (for example, which feature triggered the event)
- Never includes page text, page URLs, or API keys
In addition, the Supabase Edge Function that receives analytics events:
- Reads your IP address from standard HTTP headers and immediately hashes it using SHA‑256
- Stores only the hashed IP in a separate table for rate limiting and abuse prevention
- Does not store the raw IP address together with your analytics events
We do not send or store:
- Selected page text, translation results, or surrounding context
- Page URLs or browsing history
- Your Google Gemini API key
- Your Google account, email address, or other personal identifiers
Legal Basis and Control
- Analytics are processed based on your consent and our legitimate interest in understanding how the extension is used and improving it over time.
- You can disable analytics at any time by turning the toggle off in the options page; this stops future analytics events from being sent.
- If you turn analytics off immediately after installing, no further usage events are sent to the developer. Previously collected events remain only in aggregate, anonymous form.
Data We DO NOT Collect
Regardless of your settings, ContextTranslate is designed to avoid collecting sensitive content and personal identifiers.
We do not:
- Collect or store the text you translate or the surrounding page content on our servers
- Collect or store page URLs or your browsing history for analytics
- Receive or store your Google Gemini API key
- Sell your data or share it with advertisers or data brokers
- Use third‑party advertising networks or cross‑site tracking scripts
Third-Party Services
Google Gemini API
When you translate text, your selected text and surrounding context are sent to Google's Gemini API using your own API key. This communication is: - Direct between your browser and Google's servers - Subject to Google's Privacy Policy - Not visible to or accessible by the developer
Data your browser sends to Google solely to perform the translation: - Selected text to translate - Limited surrounding context (to improve accuracy) - Your API key (for authentication)
Please review Google's privacy policy and API terms of service.
International Data Transfers
Google may process data on servers located outside of your country of residence. When you initiate a translation, the selected text and limited context may be processed in other jurisdictions subject to Google's policies.
Bring Your Own Key (BYOK) Model
This extension uses a BYOK (Bring Your Own Key) model: - You create and own your Google Gemini API key - You control usage and costs through your Google account - The developer never receives, collects, or has access to your API key or translation content - If you enable analytics, the developer receives only anonymous usage events as described above (no page text, URLs, or API keys) - You can revoke or change your API key at any time
Data Storage and Security
All core data is stored locally on your device using Chrome's storage APIs:
- API keys are stored in chrome.storage.sync (encrypted by Chrome and, if enabled, synced with your Chrome profile)
- Translation history is stored in chrome.storage.local (device-only storage)
When analytics are enabled: - Anonymous usage events are sent over HTTPS to a Supabase backend controlled by the developer - Events are stored in a Postgres database managed by Supabase and encrypted at rest by Supabase - A separate table stores only hashed IP addresses for rate limiting and abuse prevention - No translation text, page URLs, or API keys are stored in Supabase
Sensitive Data
Avoid translating sensitive personal information (for example: passwords, financial information, health data, or government IDs). If you choose to translate such information, the selected text and limited context you provide will be sent to Google solely to perform the translation.
Your Data Rights
You have complete control over your locally stored data: - Export: Export all saved translations as CSV from the settings page - Delete: Clear all saved translations with one click - API Key: View, change, or remove your API key at any time - Uninstall: Uninstalling the extension removes all locally stored data
Children's Privacy
This extension is not directed at children under 13. No information is knowingly collected from children.
Changes to Privacy Policy
This Privacy Policy may be updated occasionally. Changes will be reflected in the "Last Updated" date above. Continued use after changes constitutes acceptance of the updated policy.
Data Retention
- Translation data remains on your device until you clear it or uninstall the extension
- API keys remain in Chrome sync storage until you remove them or uninstall
- Anonymous analytics events (if you enable them) are retained in Supabase for as long as needed to measure usage and improve the extension. Because these events are anonymous and do not contain text or URLs, they generally cannot be linked back to you individually.
- Hashed IP entries used for rate limiting may be retained separately for security and abuse prevention.
Permissions Explained
This extension requests these Chrome permissions:
- activeTab: Access the current page content to read selected text you choose to translate
- contextMenus: Add a Translate option to the right‑click menu
- storage: Store your API key and translation history locally
- scripting: Inject scripts and styles to render the translation UI
- host_permissions for https://generativelanguage.googleapis.com/*: Allow direct API calls to Google Gemini
- Content script on <all_urls>: Runs on pages you visit to detect text selection and render the translation UI. No data leaves your device unless you initiate a translation.
Contact
If you have questions about this Privacy Policy or data handling, or wish to make a privacy request: - Email: [email protected]
Compliance
This extension is designed to align with: - Chrome Web Store Developer Program Policies - GDPR and CCPA privacy principles Because the extension relies primarily on local storage and optional anonymous analytics, many data subject rights requests may not apply or may not be technically feasible (for example, we generally cannot identify which anonymous analytics events belong to you). For any questions about your privacy rights in relation to the extension, contact [email protected].
Your Consent
By using ContextTranslate, you consent to this Privacy Policy.
Note: This extension operates on a BYOK model. The developer never receives, stores, or has access to your API key or translation content. All processing happens on your device or directly with Google's API using your credentials. When analytics are enabled, only anonymous usage events (no text, URLs, or API keys) are sent to the developer’s Supabase backend.