Last updated: August 2026
transcribr is a Chrome extension that captures audio from browser tabs and displays real-time transcriptions as a caption overlay, powered by Deepgram.
| Data | Where | Purpose |
|---|---|---|
| Deepgram API Key | chrome.storage.local | Authenticates requests to Deepgram's transcription and management APIs |
| UI Theme preference | chrome.storage.local | Remembers your light/dark mode choice |
Peak credit balance (deepgramPeakBalance) | chrome.storage.local | Stores the highest credit balance ever observed to calibrate the credits remaining progress bar in Settings; never transmitted anywhere |
Transcription model (deepgramModel) | chrome.storage.local | Remembers your selected model (Nova 2 or Nova 3); sent to Deepgram as a query parameter when starting a transcription session |
Transcription language (deepgramLanguage) | chrome.storage.local | Remembers your selected language for Nova 3; sent to Deepgram as a query parameter when starting a session with Nova 3 |
Your API key and theme preference are stored only on your device. They are never transmitted to any server operated by transcribr or rj labs.
| Data | Recipient | Purpose |
|---|---|---|
| Tab audio stream (live, 16 kHz PCM) | Deepgram | Real-time speech-to-text transcription |
| Deepgram API key | Deepgram | Authenticates the WebSocket connection (via Sec-WebSocket-Protocol header) |
| Deepgram API key | Deepgram Management API | Fetches your project ID (GET /v1/projects) when you open the Settings page |
| Deepgram API key + project ID | Deepgram Management API | Fetches monthly usage stats (GET /v1/projects/{id}/usage) when you open Settings or click Refresh |
| Deepgram API key + project ID | Deepgram Management API | Fetches credit balance (GET /v1/projects/{id}/balances) when you open Settings or click Refresh |
Audio is streamed directly from your browser to Deepgram's servers in real time while a transcription session is active. transcribr does not receive, log, or store this audio. However, Deepgram may retain audio and transcription data on their end by default for model improvement purposes. You can disable this in your Deepgram console under project settings (data logging toggle). Deepgram's own Privacy Policy governs how they handle your data.
The Management API calls (usage stats and credits) are triggered only when you open the Settings page or click the Refresh button — they are never made silently in the background. All three calls go directly from your browser to Deepgram's servers using your own API key.
tabCaptureRequired to obtain a media stream ID for the active tab's audio. Without this permission, the extension cannot capture any audio for transcription.
offscreenChrome Manifest V3 Service Workers cannot use Web Audio APIs. An Offscreen Document is the only supported way to run an AudioContext and maintain a persistent WebSocket connection in an MV3 extension. This document handles audio resampling and the Deepgram WebSocket connection.
storageUsed exclusively to persist three values in chrome.storage.local on the user's own device: the Deepgram API key, the UI theme preference (light/dark), and a peak credit balance high-water mark (deepgramPeakBalance) used to calibrate the credits remaining progress bar in Settings. No data is synced to external servers by transcribr.
activeTabRequired to obtain the ID and URL of the currently active tab so that (a) the correct tab's audio stream can be targeted for capture, and (b) restricted pages (chrome://, about:) can be identified and blocked.
scriptingRequired to inject the caption overlay (content.js) into the active tab. The overlay renders transcription text inside a Shadow DOM and does not read or transmit any page content.
https://api.deepgram.com/*)transcribr requests access to exactly one host: Deepgram's API. This is required to open the transcription WebSocket and to read your usage statistics on the Settings page. It grants no access to any website you visit.
Caption injection relies on activeTab, which Chrome grants for the current tab only when you open the extension popup, and which lapses on navigation. The injected script only renders captions - it does not access, read, or exfiltrate any page content.
Earlier versions requested <all_urls>, access to every site you visit. That is no longer requested.
None. All JavaScript is bundled inside the extension package (background.js, offscreen.js, content.js, worklet-processor.js, popup.js, options.js). No external scripts are fetched or evaluated at runtime.
transcribr does not sell, rent, or transfer user data to any third party.
transcribr has no backend. Your API key and your audio go directly from your browser to Deepgram over a TLS WebSocket. No server operated by transcribr or rj labs receives, relays, or observes any of it, because no such server exists.
Browsers cannot set an Authorization header on a WebSocket upgrade, which normally forces extensions to route audio through a proxy they control. Deepgram avoids this by accepting credentials through the Sec-WebSocket-Protocol header instead, so no proxy is needed.
All external data transmissions go exclusively to Deepgram using your own API key:
Your Deepgram API key is:
chrome.storage.localwss://api.deepgram.com) to authenticate your transcription sessionhttps://api.deepgram.com/v1/projects/…) only when you open the Settings page or click Refresh, to fetch usage stats and credit balancetranscribr is not directed at children under 13 and does not knowingly collect data from them.
If this policy changes materially, the "Last updated" date at the top will be revised. Continued use of the extension after changes constitutes acceptance of the updated policy.
Questions about this privacy policy?