Back to WhisperBubble

Privacy policy.

You don’t need a WhisperBubble account. We do not sell personal or sensitive user data, and we do not collect your audio or transcripts on WhisperBubble-operated servers.

Last updated November 1, 2026

This policy explains how WhisperBubble accesses, uses, stores, and shares data.

No account required Personal data is not sold The app sends no usage data

Audio and transcription

WhisperBubble records microphone audio when you start a dictation.

Local transcription processes that audio on your device. Local real-time models also keep audio and preview text on device. Cloud transcription sends audio directly to the provider you configure. OpenRouter can forward it to the selected upstream provider. Provider terms, retention policies, and usage charges apply.

Live transcription

With Cloud First and a supported Real-Time or Hybrid model, microphone audio streams to the provider while you speak. Supported providers include OpenAI, Google, Deepgram, AssemblyAI, Mistral, Soniox, xAI, ElevenLabs, Meta, and Gladia.

Floating Preview words can change and are not inserted or saved. Real-Time models use the completed stream as the final transcript. Hybrid models separately transcribe the completed recording for the final result. Buffered audio remains available for fallback.

Selecting a Real-Time or Hybrid model enables streaming automatically. Hybrid also transcribes the completed recording after Stop. Local First and protected recordings do not start cloud streams. Optional, experimental Live Insertion uses the WhisperBubble Live Dictation keyboard to write into the focused field; surrounding field text stays on the device and is not added to cloud requests. See Live Dictation keyboard below.

Enabled Cleanup processes the tracked original Live Insertion passage in its edited order, following your selected local or cloud Cleanup route. Preexisting text outside that passage is excluded from the request. Changes elsewhere in the field can remain in place while Cleanup updates its own passage. If that passage can no longer be located, Cleanup is skipped and live insertion can continue through a still-tracked fragment.

If you move into older text during a turn, Live Insertion tracks the separate dictated ranges. Only the original passage, including edits within it, is sent to app-side automatic Cleanup; outside updates and preexisting text are excluded from that request. A replacement crossing the original passage’s boundary disables automatic Cleanup for the remainder of the recording. History’s delivered transcript includes the separate dictated ranges and excludes preexisting text between them. A transcription provider’s own processing may already have run upstream.

If an older dictated range loses its mapping while new speech continues elsewhere, History can retain its last verified words alongside the later dictation. Those words are not automatically inserted again, and may no longer match the edited field. Preexisting field text remains excluded.

If Live Insertion verifies that its entire dictated passage has been removed, it stops capture and pending processing without another insertion. When History is enabled, it retains the last verified dictated text and the removal outcome. It discards the buffered recording and its Recovery item; other text from the field is not saved.

Locking the phone ends a cloud stream and hides the preview. With Multitasking Dictation on, or during a Quick Memo, it also stops recording and processes the captured audio without insertion; clipboard copying waits until unlock. Local real-time processing can continue without a visible preview.

In ordinary dictation, entering a protected field cancels cloud transcription or cleanup, keeps transcription local, and suppresses History. With cross-app recording enabled, protection follows the original field; visiting another app’s secure field does not change it.

Provider-specific handling

  • Soniox Batch uploads audio for asynchronous transcription. WhisperBubble requests deletion of both the uploaded audio and the transcription after completion, error, or cancellation. A transcription still processing can’t be deleted and remains subject to Soniox’s retention policy.
  • Gladia Batch uploads the completed audio, language guidance, and eligible dictionary items, then starts a transcription job. WhisperBubble requests deletion of known batch jobs after completion, failure, or cancellation. Uploads without a returned job ID and unsuccessful deletion requests remain subject to Gladia’s retention policy. Gladia Real-Time receives 16 kHz audio as you speak; its HTTPS initialization returns a temporary token in the encrypted WebSocket URL. The API key is not sent on the WebSocket connection. Live-session retention follows Gladia’s terms.
  • AssemblyAI Batch, and the fallback for recordings too long for Fast Sync or the Dictation API, uploads audio for asynchronous transcription. WhisperBubble requests deletion of the transcript, which also removes its uploaded audio, after completion, error, or cancellation. A transcript still processing, an upload that never became a transcript, or an unsuccessful deletion request remains subject to AssemblyAI’s retention policy.
  • Google Gemini Transcribe receives language guidance and supported dictionary items. Batch sends WAV audio inline or uploads larger recordings through the Files API; WhisperBubble requests deletion of uploaded files when the request finishes or fails, and asks Google not to store the request (store: false). Google may still keep abuse-monitoring logs under its terms. Real-Time exchanges the configured key in an encrypted HTTPS header for a one-use token, then sends the token in an encrypted WebSocket authorization header. Neither credential is placed in the WebSocket URL. Hybrid uses both transcription paths.
  • Meta Muse Batch receives WAV audio, language guidance, and up to 100 validated dictionary items. Real-Time receives 16 kHz audio and optional language and dictionary context. Its API key is sent in the first encrypted WebSocket frame, not the URL. Meta’s terms govern retention; WhisperBubble does not request or promise a special zero-retention mode.
  • Custom transcription and cleanup endpoints can use HTTP or HTTPS. HTTP does not encrypt submitted audio, text, dictionary items, feedback, summary inputs, or API keys in transit.

Provider connections reject HTTP redirects so a redirect cannot forward credentials, audio, or text to another address. Custom connections must use the server’s final URL.

Long recordings

Use Cloud for Long Recordings can send qualifying Local First recordings to your cloud transcription provider. You choose the duration threshold, and a short notice appears when transcription switches. Local real-time sessions are exempt from this duration override.

The same threshold can independently send enabled Transcript Cleanup to a cloud model. With S1-mini selected, this requires an explicit cloud cleanup model and style on the More tab. That choice is separate from Existing Text Cleanup. Protected recordings never use either override.

Custom Dictionary

Dictionary items are stored in the app’s private Room database. The app name is the only item added on first use. You can add, edit, search, delete, import, and export items.

Supported direct transcription models from OpenAI, Groq, Google, Deepgram, AssemblyAI, Mistral, Soniox, ElevenLabs, xAI, Meta, and Gladia receive a limited set of items as spelling or vocabulary hints. Limits vary by model and Batch, Real-Time, or Hybrid mode. Hybrid sends items to each supported pass. Some providers receive terms in encrypted WebSocket query parameters.

Supported OpenRouter transcription models also receive items, which OpenRouter forwards to the upstream provider serving the request. Other OpenRouter models, custom OpenAI-compatible transcription, and current local models do not receive items. If a completed-recording provider rejects its vocabulary fields, WhisperBubble retries once without them.

Cloud cleanup receives up to 200 active items. Items may be sent even when they aren’t spoken or present in the submitted text. S1-mini never receives dictionary items. Sensitive Field Protection prevents cloud dictionary transmission for protected recordings.

Without an eligible cloud request, items stay on device. Import and export files are ordinary UTF-8 text files in the location you choose through Android’s document picker. The database is excluded from Android cloud backup and device transfer.

Cleanup and AI summaries

Automatic Transcript Cleanup

When enabled, Transcript Cleanup processes eligible completed transcripts with your selected model. The optional local model, “S1-mini” by “Superwhisper”, keeps its text and writing controls on device.

Cloud cleanup sends text and active dictionary items directly to your configured Groq, OpenAI, Google, OpenRouter, or custom OpenAI-compatible endpoint. OpenRouter may forward them to its selected upstream provider. This is a separate cloud request even when audio transcription was local. WhisperBubble does not proxy these requests through its own servers. OpenAI and Google cleanup requests ask the provider not to store them; abuse-monitoring retention under the provider’s terms still applies.

The app preserves original text if cleanup fails rather than switching cleanup engines. Sensitive fields never use cloud cleanup; selected S1-mini may run locally.

AssemblyAI Dictation includes a provider-side rewrite in the audio transcription request. WhisperBubble skips its separate automatic AI cleanup for that result and uses the provider’s original transcript if the rewrite fails. Languages unsupported by Dictation use AssemblyAI asynchronous transcription and the user’s normal cleanup setting. This can include a separate request to the configured cleanup provider.

In Cloud First mode, AssemblyAI Dictation uploads microphone audio while recording, without a live text preview. The selected cloud cleanup style’s instructions and eligible dictionary terms accompany the request. Local First and protected recordings do not start this upload. Interruptions can cause the complete buffered recording to be submitted again. Screen lock, recording cancellation, and relevant route or processing-mode changes close the ongoing upload.

Gladia + Cleanup routes send the selected style, WhisperBubble’s editing instructions, and eligible dictionary items with the audio job. Gladia runs the selected Audio-to-LLM model on the resulting transcript through its OpenRouter integration. Transcript text and cleanup instructions can therefore reach OpenRouter and the chosen upstream model provider. No separate OpenRouter key is needed. WhisperBubble skips its own automatic AI cleanup for these results, including when Gladia returns the original transcript after a cleanup failure.

Existing Text Cleanup

Dragging the bubble to Clean up text asks WhisperBubble to read and send your selected text or, with no selection, the full focused editable field to its configured cleanup provider. The limit is 12,000 characters. Active dictionary items accompany the request.

When recognizable quoted email history is in the field, the app finds the boundary on device and sends only the reply above it. If a likely email thread has no reliable boundary, it requires an explicit selection before sending text.

Existing Text Cleanup can run while automatic Transcript Cleanup is off. With S1-mini selected, a separate choice configures a cloud model for this tool or disables it. The drop point is hidden when disabled and for fields identified as passwords or otherwise sensitive.

When Dictation API or Gladia + Cleanup is active in Cloud First, Existing Text Cleanup also has a separate cloud-model choice. It initially preserves your existing manual setup and is then remembered independently. This text is sent to that selected text-cleanup provider, not to the audio transcription-and-cleanup endpoint.

Refine sends the original text, current draft, feedback, and active dictionary items. Cleanup Summary sends the original and current draft in a separate request. Summaries can be requested manually or generated automatically when Summarize Changes Automatically is on under Cleanup > Existing Text Cleanup.

Review drafts are kept only in memory until the review closes. The review hides while Android’s lock screen is showing and resumes after unlock if the session remains in memory.

History change summaries

Tapping Summarize changes with AI in History sends retained transcript versions and their stage names to your configured cleanup provider. It never runs automatically and does not include dictionary items. The returned summary and generation time are stored with that History item until its processing details or the entire item are removed.

Accessibility and clipboard access

WhisperBubble uses Android’s Accessibility Service to find editable fields, identify protected fields, manage bubble visibility, and insert text. It may read nearby text, text length, and cursor position on device to format and verify insertion. Preview placement uses the cursor or field location without sending field text. When you use Live Insertion, the Accessibility Service also switches to the Live Dictation keyboard and back. You turn that keyboard on yourself in Android’s keyboard settings. When you tap the Quick Memo tile, it closes Quick Settings so the bubble is in view.

WhisperBubble does not continuously read or transmit screen contents. Editable-text access is limited to an insertion, recovery flow, or Existing Text Cleanup review you initiate.

Dictation insertion

Before insertion, the app checks that the intended field is still editable, visible, focused, and non-sensitive. It puts the transcript on the clipboard and requests accessibility paste. This can replace your previous clipboard contents.

For cross-app dictation, WhisperBubble temporarily tracks the foreground app’s package to determine whether you have left the app where recording started. This routing check does not read conversation titles, recipients, subjects, or message bodies. Keyboard and accessibility overlay windows do not count as switching apps.

Retries are allowed only if no paste was sent or Android rejected it, and require the same safe target. Once Android accepts paste, WhisperBubble does not paste again automatically. An accepted action with reasonable same-field evidence or incomplete editor metadata can count as delivered. Missing metadata alone does not create a Recovery item.

If the field stays unchanged or focus becomes uncertain, the non-sensitive transcript remains on the clipboard for manual paste. If History can save the valid final text, its delivery result is stored there without a duplicate Recovery item. Otherwise, encrypted Recovery keeps a copy for up to one hour.

With Multitasking Dictation on, leaving the starting app keeps the microphone recording but switches delivery to clipboard-only, even if you return. This also applies during processing. Staying in the app allows insertion into its focused eligible field. Clipboard-only text is copied when permitted and saved in History when enabled; see Recovery storage below for temporary retention. Shortly afterward, tapping the bubble’s paste button inserts the text into the non-sensitive field you have selected. Other apps can read the clipboard under Android’s rules.

A Quick Memo, started from its Quick Settings tile or app icon shortcut, records without a target field and is always clipboard-only, whether or not Multitasking Dictation is on. It uses your global settings rather than per-app overrides. Its text is copied when permitted and saved in History when enabled, and the bubble’s paste button can offer it in a non-sensitive field you select for up to one hour.

If Live Insertion fails after writing text, the complete final transcript is automatically copied for manual paste while the phone is unlocked. This includes failures during Cleanup. Its encrypted Recovery item remains available for review. Sensitive recordings are excluded from this automatic copy.

Live Insertion may offer explicit Replace passage and Remove partial actions for one verified dictated passage. To validate these actions, WhisperBubble can retain an editor snapshot in memory for up to one minute after the interruption. This snapshot is never saved, logged, or sent to a provider. Editing, changing fields or apps, locking the phone, dismissing the offer, or starting another recording discards the offer. Both actions require a new keyboard connection and an unchanged field; they cannot be resumed after the app process restarts. Removing the partial text keeps the completed transcript in Recovery.

If the keyboard handoff fails before Live Insertion writes any text, recording continues with Floating Preview in the original app. The finished non-sensitive transcript is copied when permitted and kept Ready to insert in Recovery for manual use. Returning to the field after the startup wait expires does not trigger automatic insertion.

After verified delivery with History off or paused, or in an app excluded from History, the app clears its clipboard item asynchronously, but only while it still owns it. On Android 10 and later, where apps can’t read the clipboard in the background, it clears only its own latest clipboard item within two seconds of writing it, so something another app copies in that short window could be cleared too. On Android 13 and later, these transcripts are also hidden from Android’s clipboard preview. A newer clipboard item is otherwise left untouched and is never used for automatic paste. Other non-sensitive delivery outcomes retain the clipboard fallback. Some devices keep clipboard history outside WhisperBubble’s control.

Reviewed text replacement

Existing Text Cleanup restores the selected or reply range and uses Android’s set-text action to apply an approved replacement. It verifies the complete field without using the clipboard for automatic replacement. If safe replacement isn’t supported, the review stays available and you can explicitly choose Copy Result.

Connecting AssemblyAI

Connect AssemblyAI opens AssemblyAI’s website in your browser, shown as a sheet below the setup screen. WhisperBubble can’t see that page, your sign-in, or your password. It reads the clipboard only when you tap paste, and accepts only text shaped like an API key. Before saving the key with your other provider keys, it sends AssemblyAI a short silent test recording to check it.

Live Dictation keyboard

Live Insertion is optional, experimental, and off by default. It requires Android 11 or newer and your agreement to an in-app explanation. WhisperBubble then opens Android’s keyboard settings, where you turn on its input method (keyboard), WhisperBubble Live Dictation. Android warns there that a keyboard can collect the text you type.

The Live Dictation keyboard has no typing keys and does not record keystrokes or text you type. It is selected only while a Live Insertion recording writes into the field where you started, and your previous keyboard returns afterward. Selecting it manually only shows a reminder to use Android’s keyboard switcher.

While selected, it reads the focused field’s text, selection, and cursor position through Android’s input connection on your device. It uses that information to place dictated words, apply context-aware formatting, and confirm each write without disturbing your other text. Field text is not saved, logged, or sent to transcription or cleanup providers; the short-lived in-memory check for Replace passage is described under Dictation insertion. Enabled Cleanup receives only the dictated passage, as described under Live transcription above. Password and other protected fields are not used.

Turning Live Insertion off stops WhisperBubble from selecting the keyboard. You can also turn the keyboard off in Android’s keyboard settings.

Sensitive fields

When Sensitive Field Protection is enabled, recognized password and secure fields force local transcription, suppress History, and block cloud cleanup and dictionary transmission. Selected S1-mini can run locally; otherwise the original transcript is used.

Sensitive recordings and their Recovery attempts never automatically copy transcript text to the system clipboard. Re-transcription remains local-only and is not saved to History.

History storage and sharing

Optional History is stored in a private Room database on your device. You can search it, delete individual entries or all entries, and pause new saves for one hour. A local search copy of each transcript is stored with its entry and removed when that entry is deleted.

Per-app overrides can exclude recordings started in selected apps from History. The exclusion follows their Recovery items through re-transcription and never enables History when it is globally disabled or paused. Existing saved entries are retained. Temporary Recovery follows its separate retention settings. In development builds, Diagnostics Capture keeps no audio, session trace, or transcript log for recordings from an excluded app.

New entries may include distinct transcript stages, provider and model identifiers, attempts, timing, cleanup and formatting status, delivery outcome, language information, an app-generated session identifier, and a requested AI change summary. These details aren’t created while History is disabled, paused, or suppressed for sensitive fields.

History can also mark Live Insertion start or write failures, with a fixed reason, phase, timestamp, and whether a write was attempted. This metadata can be included in a shared diagnostic report when you choose to include processing metadata. Development builds also keep a separate app-private failure journal with only those structural fields, even when History is off; it keeps up to 256 events and removes events older than 14 days when a new failure is logged. Neither record contains the receiving field’s text or audio, and sensitive-field sessions are excluded.

AssemblyAI entries can also retain its request identifier and reported processing times. These are local diagnostics, not usage analytics. Provider request identifiers appear in shared diagnostic reports only when Technical identifiers is included. Opt-in development session logs can also contain this metadata.

Your retention setting controls automatic age-based deletion. A separate 256 MB budget for transcript text and processing details removes the oldest processing details first, then the oldest final transcripts if needed. The local search data and database files take additional device storage. Never delete removes the age limit, not the content budget.

WhisperBubble does not automatically sync History to the cloud. A transcript-card Share action shares only that version. Share diagnostic report creates a text attachment; all categories start enabled, and you can exclude final text, intermediate text, an AI summary, processing metadata, app/device information, or technical identifiers before Android’s share sheet opens.

Recovery storage

WhisperBubble temporarily stores an encrypted Recovery item on device while delivering each completed transcript. It normally clears the item after delivery, but keeps it when a transcription or cleanup failure still needs recovery. Delivery failures or unresolved delivery evidence also retain an item if History cannot save the final text. Insertion failures already saved in History do not get duplicate Recovery items.

With Multitasking Dictation, for a Quick Memo, or after a Live Insertion handoff fails before writing, clipboard-only results stay Ready to insert even when saved in History. Automatic copying leaves the item available; manual copying or successful insertion removes it.

Recovery may contain audio, transcript text, source app package name, and timestamps in private app files and database storage. Items become unavailable after one hour unless deleted sooner. Files and rows are physically removed during active maintenance, the next app start, or the next recording. Deleting or successfully copying an item removes it immediately.

Re-transcribing an ordinary item uses your current transcription settings and may send audio to a cloud provider. Sensitive items stay local, may use selected S1-mini cleanup, skip History and cloud cleanup, and never write their transcript to the system clipboard.

Statistics

The Home tab’s Statistics are stored in a private database on your device, separate from History. They are counts only. For each day they hold the number of dictations and words, recording time, whether each transcript was made on device or in the cloud, whether Transcript Cleanup changed it, how many Spoken Corrections were applied, and which transcription and cleanup models ran. They never include transcript text, audio, dictionary items, or the apps you dictated in.

Statistics count dictations while History is off, paused, or excluded for an app, and keep their totals when you clear History. Dictations in fields covered by Sensitive Field Protection are never counted. After an update, existing History entries are counted once so the totals include them.

WhisperBubble also measures how long each model takes on this device, with the recording length, outcome, and network type (such as Wi-Fi or mobile data) for each run, to compare model speeds. These measurements stay on the device. They are excluded from Android backup and device transfer, and the oldest are removed after 90 days.

Statistics are never sent to WhisperBubble or your providers. Reset Statistics in More > About & Privacy deletes all of them.

Settings, deletion, and Android backup

Provider connections, custom cleanup model definitions, and app settings are stored locally. Transcription history, dictionary items, Recovery, provider connections, local model downloads, custom cleanup models, model speed measurements, and development diagnostics are excluded from Android cloud backup and device-to-device transfer. Statistics’ daily totals are included, so they move to a new phone with your settings.

The bubble usually stays running, so WhisperBubble lets Android back it up anyway. During the nightly backup, while your phone is idle, Android briefly stops WhisperBubble.

The per-app settings picker reads launchable app names and icons on your device. Your selected package names and overrides are stored privately on device and excluded from Android cloud backup and device transfer. The installed-app list and per-app configuration are not sent to transcription providers. An app-specific cloud model sends audio or transcript text under the same processing rules described above.

Uninstalling normally removes the app’s private storage. Exported or shared files and device-specific backup tools are outside WhisperBubble’s control. Deletion of data held by a cloud provider follows that provider’s terms and processes.

Usage data and diagnostics

WhisperBubble contains no analytics, crash-reporting, or advertising services. The app sends no usage data, crash reports, or advertising identifiers to us or to anyone else, and advertising-identifier permissions are removed from the app.

If you allow your device to share usage and diagnostics data with Google, Android can send Google a report when an app crashes or stops responding. Google shows developers these reports in Google Play Console, with details such as the stack trace, device model, and Android version, but not who you are. Google’s privacy policy covers that sharing, and you control it in your device’s Google settings.

Diagnostic details reach us only when you send them yourself with Share diagnostic report in History, as described above.

Development builds

Debug or branch builds may offer a transcript log. It stores full transcript stages and local diagnostics covering provider output, cleanup, final formatting, delivery, models and routes, prompt version, attempts, status, and timing. Logs rotate within a 64 MB limit and can be manually exported. Release builds do not expose this setting.

These local logs include sensitive-field transcript stages even though Sensitive Field Protection still blocks cloud processing and History. Logs exclude API keys, authorization credentials, provider response bodies, and dictionary values.

In development builds, one Diagnostics Capture setting, on by default there, controls this log and also keeps each recording’s audio, encrypted at rest, with a session trace of raw Real-Time provider events, network changes, live transcript revisions, Live Insertion writes, and delivered text. Sensitive-field recordings are not kept, and nothing is kept for apps excluded from History by a per-app override. Storage is limited to 2 GB, removing the oldest unflagged sessions first. Flagging a transcription for review keeps its audio, trace, logs, and a copy of its History entry until it is marked reviewed or deleted. Sessions with an automatically detected problem are kept longer than others but can still be removed by the storage limit. These files stay on the device, are excluded from backups, and leave only through a manual export. Release builds do not include this setting.

On-device formatting, dictated punctuation, hallucination filtering, and spoken corrections do not send additional data anywhere by themselves.

Permissions

MicrophoneRecords your voice.
AccessibilitySupports field detection, protected-field checks, insertion, reviewed replacement, bubble visibility, and Live Insertion keyboard switching.
Live Dictation input methodOptional. Writes dictated words directly into the field during Live Insertion.
Display over other appsDisplays the bubble and its windows.
NotificationsShows background-service status and controls.
Boot completedLets the service restart when Start on Boot is enabled, setup is finished, and its permissions are still granted.

The app’s Permissions help page has setup guidance.

Provider privacy policies

Data sent to a cloud service is governed by its terms and privacy policy.

Purchases and support email

You buy WhisperBubble through Google Play, which handles your payment under Google’s privacy policy. Google shares limited order details with us, such as the order number, price, and country or region of purchase. We use them to complete the sale, process refunds, and meet our tax and accounting obligations, and we keep them as long as those laws require.

If you email us, we keep your message and email address to answer you and to keep a record of support requests, because we have a legitimate interest in answering you and remembering what you asked. We keep them until you ask us to delete them, which you can do at any time.

Your rights

The only personal data we hold is occasional order details and support emails. Depending on where you live, you can ask to see, correct, or delete it, object to how we use it, and complain to your local data protection authority.

Because that processing is occasional and low-risk, we have not appointed a representative in the EU or the UK (Article 27(2) of the GDPR and the UK GDPR). Requests from anywhere go to the address below.

We’re based in the United States, so the order details and support emails we hold are stored there, including with our email provider.

This website

Our website, whisperbubble.app, sets no cookies. Our host, Cloudflare, processes standard request data such as IP addresses to deliver and protect the site, and its Web Analytics counts page views without cookies or tracking you across sites, under Cloudflare’s privacy policy.

Children

WhisperBubble isn’t directed at children, and we don’t knowingly hold personal data about them. If a child has emailed us, ask us and we’ll delete the message.

Changes to this policy

When this policy changes, we update the date at the top and publish the new version in the app and on this page. If a change affects how we handle your data, we’ll also say so in What’s New.

Contact

WhisperBubble is made by Dave Otero, who is responsible for this policy. For questions or privacy requests, email us.

[email protected]
Return to WhisperBubble