Privacy Policy
Last updated: September 8, 2026
Overview
SpeakScribe is a Chrome extension that converts speech to text directly in your browser. Your privacy is important to us. This policy explains what data the extension accesses, how it is used, and what is stored.
Data Collection
SpeakScribe does not include analytics, advertising, or tracking SDKs. The extension stores preferences, transcript session state, and the minimum license state needed to provide and validate Pro access in Chrome extension storage.
To provide insertion and spoken editing commands, SpeakScribe locally reads the value and selection of the editable field you choose. Dictated transcript text may contain personal communications or other text you intentionally speak. This content is used only for the requested dictation feature and is not sent to SpeakScribe servers. The in-page widget is rendered in the active webpage's document, so scripts on that page may be able to observe interim or final transcript text displayed in the widget. After you direct SpeakScribe to insert text into a webpage, the page receives the text and input events. That webpage and its operator can then process the text under their own terms and privacy policy; SpeakScribe does not control that later handling.
SpeakScribe does not sell personal data, request Chrome's browsing-history permission, or build a browsing-history list. It uses page addresses and hostnames locally for protected-page checks, user-created per-site rules, and adapting widget placement on supported assistant sites. Its content script is present on regular webpages so the widget can appear and place dictated text into the editable field you select.
Speech Processing
When using Standard, Chrome's server-based Web Speech recognition service receives microphone audio and the selected recognition language and returns interim and final transcript results. Google may also receive ordinary network, browser, and device information. Audio and transcript text are not routed through or stored on SpeakScribe servers, and SpeakScribe does not control Google's processing or retention. Google's handling is described in the Google Privacy Policy.
When using Local Whisper, the packaged Transformers.js/ONNX runtime performs final transcription on the device. Local microphone samples are held temporarily in extension memory during capture and are not intentionally written to persistent extension storage; their references are released after segment processing or when capture stops. If the selected model is not cached, the extension downloads its artifacts from Hugging Face/Xenova delivery infrastructure and caches them in Chrome. The download reveals the requested model URL or identifier and ordinary request metadata, including the IP address, but does not include microphone audio, transcript text, page content, or license data. If you enable Local live preview, the extension also starts Chrome's server-based Web Speech recognition service, which receives microphone audio and the selected recognition language and returns interim preview words under the Google handling described above.
Enhanced and Meeting cloud transcription are disabled in the current release, and this build cannot connect to the SpeakScribe proxy or Deepgram. If cloud transcription launches later as a separately metered feature, this policy and the Chrome Web Store disclosures will be updated before it is enabled.
Local Storage
Chrome local storage can contain language, engine, model, display, export, and theme preferences; custom vocabulary and commands; user-entered hostname rules; widget position; trial start time; and license state. If live activation is enabled, SpeakScribe stores an AES-256-GCM encrypted activation-recovery envelope before sending the activation request. The encrypted envelope can contain the full license key, a random internal record identifier, a unique operation/recovery code, the unique Lemon Squeezy instance label derived from that code, the attempt state, the creation time, and, if Lemon Squeezy returned them, its license-instance and catalog identifiers. While an activation is unresolved, the extension can show the recovery code and only the last four license-key characters so the user can identify the attempt without displaying the full key.
After a completed activation, SpeakScribe encrypts the recoverable full license key and the minimum entitlement metadata with AES-256-GCM before placing ciphertext records in Chrome local storage. That metadata can include the Lemon Squeezy license-instance identifier, a four-character key hint, product or variant display name, catalog identifiers, activation time, and last-validation time. During deactivation or incomplete cleanup, Chrome local storage can also contain a temporary unencrypted safety marker with a random record identifier, reason, remote-confirmation flag, and update timestamp; it does not contain the license key, customer identity, or order details. When a signed activation-recovery receipt is applied, Chrome local storage also stores a bounded unencrypted replay-protection entry containing only the receipt's random nonce and expiration time. The complete receipt is not retained. Expired replay entries are removed during later recovery attempts. The non-extractable encryption key used for the encrypted records is stored separately in extension-owned IndexedDB. SpeakScribe does not persist the customer name, checkout email, or order and customer identifiers returned by Lemon Squeezy.
This encryption is defense in depth: it prevents the full key and entitlement metadata from appearing as readable Chrome-storage values, but it is not an operating-system keychain and cannot protect data on a compromised browser, browser profile, extension, or device. Device-level protection still depends on Chrome, the browser profile, and the operating system.
Per-tab widget visibility, recent transcript text, line timestamps, and active capture state may be held in Chrome session storage so extension views remain synchronized. Local Whisper model files are cached separately in the browser. When you select Copy, the requested transcript is written to the system clipboard. When you select Export, the browser writes the requested transcript file to its configured download location. Neither action occurs unless you request it.
Permissions
The extension requests the following permissions, each used solely for the stated purpose:
Content scripts on webpages: To show the user-controlled dictation widget and insert or edit transcribed text in the editable field you choose. The script is declared for all webpage origins because the widget is designed to work across the web; Chrome blocks it on protected browser pages. SpeakScribe locally observes the focused editable control, limited page layout, and site-specific DOM markers needed to place the widget and find supported composers. It does not retain or transmit page content to SpeakScribe servers.
activeTab: To identify the active tab after user interaction, read its address locally to explain protected-page limits, route start or stop controls to the existing SpeakScribe content script, and account for the tab's zoom when sizing the widget. The address and zoom are not retained or transmitted by SpeakScribe.
storage: To save your preferences, current-session transcript state, trial state, encrypted activation-recovery and license records, short-lived recovery-replay entries, and temporary deactivation status in Chrome storage. The separate encryption key is kept through the extension's IndexedDB storage.
offscreen: To run user-initiated microphone capture and the packaged Transformers.js/ONNX Local Whisper engine in an extension-owned background document. Local final audio and transcript processing remain on the device; only static model artifacts are downloaded from Hugging Face.
License Validation
SpeakScribe uses Lemon Squeezy for paid checkout and license management. Checkout opens on Lemon Squeezy, which processes the billing and payment information you provide under its privacy policy. SpeakScribe 2.13.0 and newer use Lemon Squeezy's license API over HTTPS. Activation sends the full license key and a unique instance label in the form “SpeakScribe Chrome / <recovery-code>”. The recovery code is generated locally for that operation and included in the label so an interrupted or otherwise ambiguous activation can be located and reconciled by authorized support tooling. Later validation or deactivation sends the full key and Lemon Squeezy-generated license-instance identifier. Lemon Squeezy and network infrastructure can therefore receive the recovery code as part of the instance label, as well as ordinary request metadata.
The extension opens encrypted activation-recovery or license records transiently in its background service worker when checking or managing access; it sends the full key only when a Lemon Squeezy request requires it. Lemon Squeezy may return license status plus product, variant, order, and customer metadata, including the customer name and checkout email. SpeakScribe will not display or persist the returned name, email, or order and customer identifiers. It retains only the encrypted recovery, license, and entitlement records and temporary deactivation status described above. Microphone audio, transcript text, and page content are not included in these requests.
If an activation response is interrupted, temporarily unavailable, unreadable, or otherwise ambiguous, SpeakScribe keeps the encrypted recovery envelope, blocks another activation, and shows the same recovery code. If Lemon Squeezy returned an instance identifier, the extension can use the saved encrypted key and exact instance identifier to retry deactivation. If no instance identifier was returned, the extension cannot safely assume that no remote instance was created; authorized support must reconcile the exact recovery-code instance label before the local journal is cleared or another activation is attempted.
For an authenticated recovery case, authorized support can use restricted operator tooling to compare the recovery code with the exact order, checkout email, masked Lemon Squeezy key representation, live catalog tuple, and license instances. The administrative credential and full key remain in the controlled operator process and are not sent to the extension or included in the recovery receipt. A signed receipt contains the recovery operation and instance binding, catalog and live/test mode, issue and expiration times, and a random nonce, but no license key, name, email, transcript, or audio. The extension verifies it against a built-in public key and the retained encrypted journal before clearing or adopting anything.
Third-Party Services
SpeakScribe integrates with Google/Chrome speech recognition for Standard and optional Local preview, Hugging Face/Xenova for Local Whisper model downloads, and Lemon Squeezy for license validation. Their processing and retention are governed by the Google Privacy Policy, Hugging Face Privacy Policy, and Lemon Squeezy Privacy Policy. Dormant cloud code is designed to integrate with Deepgram only if Enhanced or Meeting launches later; those modes are disabled today. SpeakScribe does not include analytics, advertising, or tracking integrations.
Chrome Web Store Limited Use
SpeakScribe's use of information received from Google APIs adheres to the Chrome Web Store User Data Policy, including its Limited Use requirements. Data is used only to provide or improve the user-facing transcription features described in this policy. Transfers occur only when necessary to provide those features, comply with law, protect against abuse, or complete a merger, acquisition, or sale of assets after obtaining the user's explicit prior consent. SpeakScribe does not sell user data, use it for advertising, profiling, or lending decisions, or allow humans to read it except after obtaining the user's separate, explicit consent to read the specific data for support, when necessary for security, when legally required, or after aggregation and anonymization for permitted internal operations.
Data Retention
Your local preferences, transcript session state, license state, and cached Local Whisper model can be removed by uninstalling the extension or clearing its Chrome extension data and cache. An activation-recovery envelope is normally removed after a safely prepared request is cancelled, Lemon Squeezy definitively rejects the request, a successful entitlement is stored and verified, or a remote rollback is confirmed. If the request outcome, rollback, or local cleanup cannot be confirmed, the encrypted recovery envelope can remain across service-worker, browser, and device restarts and access stays blocked. It can also remain temporarily after a successful activation if final local journal cleanup fails. A recovery-replay entry stops authorizing any action at its signed expiration time and is pruned during a later recovery attempt; if no later attempt occurs, the expired nonce and time can remain until extension data is cleared. The list is capped at 128 entries.
After Lemon Squeezy confirms deactivation, SpeakScribe attempts to remove the encrypted activation-recovery and license records, temporary status marker, and their IndexedDB encryption key. If remote deactivation or local cleanup cannot be confirmed, the encrypted records or key can remain, access stays denied behind the temporary safety marker, and SpeakScribe asks you to retry or contact support with the recovery code. Uninstalling the extension or clearing its local data removes the local recovery material but does not by itself prove that an ambiguous Lemon Squeezy activation failed or deactivate an instance already created there; use SpeakScribe's recovery or deactivation flow first when possible. Restricted operator working data such as a recovery code, instance identifier, receipt, or nonce is deleted after confirmation and receipt expiry, no later than 24 hours; a sanitized internal recovery record may retain only the case identifier, outcome, operator, and timestamp for up to 30 days. Email addresses, names, full or masked keys, receipts, raw provider responses, and administrative credentials are not retained in that audit record. Files you explicitly export and text you explicitly copy are controlled through your browser, operating system, and the destination where you place them. No SpeakScribe proxy connection is permitted by the current extension release. Third-party processing and retention are governed by the provider policies linked above.
Children's Privacy
SpeakScribe does not knowingly collect any information from children under 13 years of age.
Changes to This Policy
We may update this privacy policy from time to time. Any changes will be posted on this page with an updated revision date.
Contact
For privacy questions only, use the CaeliCode contact page. Review CaeliCode's website privacy notice before submitting the form. Do not use that form for billing or activation recovery, and do not include a license key, order number, receipt, checkout email, recovery code, or transcript.
Retrieve private purchase details from Lemon Squeezy My Orders. For billing or activation recovery, email hello@caelicode.com with only a brief request. Do not include a license key, order number, receipt, checkout email, recovery code, or transcript in the initial email; support will provide an authenticated one-time channel. For a general reproducible bug, use the public issue tracker. Never include a license key, order number, receipt, checkout email, recovery code, or transcript in a public issue.