transcribr ← Home

Privacy Policy - transcribr

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.


What Data Is Collected

Data stored on your device

DataWherePurpose
Deepgram API Keychrome.storage.localAuthenticates requests to Deepgram's transcription and management APIs
UI Theme preferencechrome.storage.localRemembers your light/dark mode choice
Peak credit balance (deepgramPeakBalance)chrome.storage.localStores the highest credit balance ever observed to calibrate the credits remaining progress bar in Settings; never transmitted anywhere
Transcription model (deepgramModel)chrome.storage.localRemembers 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.localRemembers 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 sent to third parties

DataRecipientPurpose
Tab audio stream (live, 16 kHz PCM)DeepgramReal-time speech-to-text transcription
Deepgram API keyDeepgramAuthenticates the WebSocket connection (via Sec-WebSocket-Protocol header)
Deepgram API keyDeepgram Management APIFetches your project ID (GET /v1/projects) when you open the Settings page
Deepgram API key + project IDDeepgram Management APIFetches monthly usage stats (GET /v1/projects/{id}/usage) when you open Settings or click Refresh
Deepgram API key + project IDDeepgram Management APIFetches 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.


What Data Is NOT Collected


Permission Justifications

tabCapture

Required to obtain a media stream ID for the active tab's audio. Without this permission, the extension cannot capture any audio for transcription.

offscreen

Chrome 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.

storage

Used 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.

activeTab

Required 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.

scripting

Required 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.

Host permission (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.


Remote Code

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.


Data Sharing

transcribr does not sell, rent, or transfer user data to any third party.

No intermediary server

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 API Key

Your Deepgram API key is:


Children's Privacy

transcribr is not directed at children under 13 and does not knowingly collect data from them.


Changes to This Policy

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.


Contact

Questions about this privacy policy?