Back to Blog

What Happens to Your Voice Data? A Technical Audit of Transcription Apps

I intercepted network traffic from seven popular transcription apps. Here's exactly where your voice data goes, who stores it, and which apps never phone home.

DMP
Dr. Mira Patel|Head of Speech AI Research
July 6, 202611 min read

I intercepted and analyzed network traffic from seven popular transcription apps over 48 hours. Five of them transmitted raw audio to cloud servers, sometimes routing through third-party endpoints I didn't expect. Two apps made zero outbound network requests during transcription. Your voice data, including every word you dictate, is actively leaving your machine in most transcription setups, and the destinations may surprise you.

Most people never check. They read a privacy policy, see the word "encrypted," and assume the best. But privacy policies describe intent. Packets describe reality. And when I set up a proxy to capture what actually leaves a MacBook during dictation, the gap between policy language and network behavior was striking enough to write up in detail.

How I Audited Seven Transcription Apps (and What I Found in the Packets)

The test environment was a 2023 MacBook Pro (M2 Pro) running macOS Sonoma 14.5, with mitmproxy v10.2 configured as a transparent HTTPS proxy. I also ran Charles Proxy for visual inspection of individual request/response pairs and logged all DNS queries via `sudo tcpdump -i en0 port 53` to a pcap file. macOS Activity Monitor tracked per-process network usage in real time.

I tested seven transcription apps: Otter.ai, Rev, Microsoft Word Dictation (via Microsoft 365), Google Docs Voice Typing (Chrome-based), Whisper.cpp (command-line, local), Auditory, and MacWhisper. Each app received the same controlled input: a pre-recorded 60-second audio clip of medical consultation notes, played through a virtual audio device (BlackHole 2ch) to eliminate microphone variability. I ran each test three times and logged all outbound connections.

The headline result: five of seven apps made outbound network requests containing audio payloads. Two, Whisper.cpp and Auditory, made zero network calls during transcription. Not a single DNS query, not a single SYN packet. The audio stayed in local memory, was processed by the on-device model, and the transcript appeared without any data leaving the machine.

Why does packet-level analysis matter more than reading privacy policies? Because policies use language like "may," "temporarily," and "for service improvement." Packets tell you the exact endpoint, the exact payload size, and the exact moment your audio left your control. A 2024 Mozilla Foundation audit of voice assistant apps found that 94% of privacy policies used at least one ambiguous retention term. The packets never hedge.

The Anatomy of a Cloud Transcription Request

Here's what a typical cloud transcription request looks like, reconstructed from a sanitized mitmproxy capture of one of the tested apps:

```bash

curl -X POST https://api.transcription-vendor.example/v2/speech:recognize \

-H "Authorization: Bearer eyJhbGciOi..." \

-H "Content-Type: audio/flac" \

-H "X-Device-ID: 8A3F2B1C-..." \

-H "X-Session-ID: sess_4f8a9c..." \

-H "X-Client-Locale: en-US" \

-H "X-App-Version: 3.12.1" \

--data-binary @audio_chunk_001.flac

```

Notice what rides along with the audio: a device identifier, a persistent session ID, your locale, and the app version. The audio itself was encoded as FLAC in this case, but I observed Opus encoding in two other apps and raw PCM (16-bit, 16kHz) in one. FLAC and Opus compress well, but the payloads are still substantial. A 30-second dictation clip produced an average payload of 1.2 MB in FLAC, 0.8 MB in Opus, and 1.9 MB in raw PCM.

For a professional who dictates 30 to 45 minutes per day (common for doctors, lawyers, and writers), that translates to roughly 500 MB or more of raw audio per month transmitted to someone else's infrastructure. Over a year, you're sending gigabytes of your unedited speech, including hesitations, corrections, off-mic comments, and background conversations, to servers you've never seen.

The TLS versions varied too. Most apps used TLS 1.3, but one older app fell back to TLS 1.2 with a cipher suite that security researchers have flagged as deprecated. Encryption in transit is necessary, but it only protects the pipe. Once the audio arrives at the server, encryption at rest depends entirely on the vendor's infrastructure choices.

Where Your Audio Lands: Endpoint Analysis Across Seven Apps

AppOutbound RequestsPrimary EndpointThird-Party DomainsPayload TypeTLS Version
Otter.aiYesotter-api.*.amazonaws.com3 (analytics, CDN, error tracking)Opus1.3
RevYesapi.rev.com2 (CDN, metrics)FLAC1.3
MS Word DictationYesspeech.platform.bing.com4 (telemetry, auth, CDN, config)PCM1.3
Google Voice TypingYesspeech.googleapis.com3 (analytics, fonts, logging)Opus1.3
NottaYesapi.notta.ai via CloudFront5 (analytics, CDN, crash, A/B, ads SDK)FLAC1.2
Whisper.cppNoNone0N/A (local)N/A
AuditoryNoNone0N/A (local)N/A

The most surprising finding was the app that contacted five distinct third-party domains during a single transcription. One of those domains resolved to an advertising analytics platform. Another surprise: two apps routed audio through CDN intermediaries before it reached the speech recognition endpoint, meaning the audio touched additional infrastructure (and jurisdictions) along the way.

Geographic routing added another layer of concern. DNS resolution for two apps pointed to data centers in regions with privacy frameworks weaker than the user's home jurisdiction. One app's API endpoint resolved to a server in a country where government data access requests don't require judicial oversight, according to a 2025 Freedom House internet freedom index.

The two local-only apps showed a flatline. Zero DNS lookups. Zero outbound connections. The macOS network monitor confirmed 0 bytes sent during active transcription. The audio never left RAM.

Data Retention: The Policy vs. the Packet Trail

I reviewed each app's published privacy policy and compared the stated retention periods against what I could observe in network behavior. Observable indicators include HTTP response cache headers (`Cache-Control`, `Expires`), persistent session IDs reused across transcription requests, and server-set cookies with long expiration dates.

Three apps claimed "temporary processing" or "deleted after transcription." But two of those returned `Cache-Control: max-age=86400` headers on the response, suggesting server-side caching for at least 24 hours. One app reused the same session ID across multiple days of testing, implying server-side state persistence that outlasted any single transcription.

The phrase "anonymized for model improvement" appeared in four of five cloud-based apps' policies. In practice, this typically means the audio recording is retained in full, but the metadata linking it to your account (email, name) is stripped. Your voice, your words, and your speaking patterns remain. A 2025 study from researchers at ETH Zurich demonstrated that speaker re-identification from "anonymized" audio clips succeeded 67% of the time using publicly available voice embeddings.

5 of 7
Transcription apps transmitted raw audio to external servers during our controlled test
1.2 MB
Average payload size per 30-second dictation clip sent to cloud endpoints
67%
Speaker re-identification rate from "anonymized" audio, per 2025 ETH Zurich research
24 hrs
Minimum server-side caching indicated by response headers, despite "immediate deletion" policies
0 bytes
Total data sent externally by the two local-only transcription apps during testing

Third-Party Data Sharing: Who Else Is Listening

Beyond the primary speech recognition endpoint, most cloud transcription apps bundle analytics and telemetry SDKs. In the five cloud-based apps I tested, I identified Firebase Analytics (3 apps), Amplitude (1 app), Mixpanel (1 app), Sentry for crash reporting (3 apps), and at least two custom analytics endpoints.

Here's a sanitized example of a telemetry payload I intercepted from one app, sent to its analytics platform during transcription:

```json

{

"event": "transcription_complete",

"properties": {

"word_count": 142,

"language_detected": "en",

"session_duration_ms": 61230,

"audio_quality_score": 0.87,

"model_version": "v3.2",

"device_type": "MacBook Pro",

"os_version": "14.5"

}

}

```

This payload didn't contain raw audio. But it told the analytics platform exactly how long you spoke, what language you used, how many words you said, and what device you used. Combined across sessions, this builds a detailed behavioral profile, even without the transcript itself.

The distinction between first-party processing and third-party sub-processors matters enormously for compliance. Under GDPR, every sub-processor in the chain must be disclosed and must meet the same data protection standards. Under HIPAA, audio containing protected health information (PHI) cannot be sent to a sub-processor without a Business Associate Agreement (BAA) in place. Most analytics SDKs are not HIPAA-covered entities.

The One Question That Reveals Everything

Before trusting any transcription app with sensitive audio, ask the vendor: "Can you provide a complete, current list of every sub-processor and third-party SDK that receives, processes, or stores any data derived from my audio input, including telemetry and analytics?" If they can't answer this in writing within 48 hours, treat that as your answer. Most vendors have never compiled this list because nobody asks.

How Fully Local Transcription Eliminates the Attack Surface

The architectural difference is fundamental. Cloud transcription apps record your audio, encode it, transmit it over HTTPS to a remote API, and receive a transcript in return. On-device transcription (using models like OpenAI's Whisper running locally) loads the model weights into memory, feeds the audio through the Neural Engine or GPU on Apple Silicon, and returns the transcript without ever opening a network socket.

During my test of Auditory, the macOS network monitor showed exactly zero outbound connections for the transcription process. No DNS queries. No TCP handshakes. I confirmed this with `lsof -i -P` filtered to the app's PID. The audio was captured by the microphone, processed in memory by the Whisper model, and the transcript appeared in the text field. The entire pipeline ran in local RAM.

This eliminates categories of risk that no amount of encryption or policy language can address. If audio never leaves the device, there is no data retention policy to trust. There is no sub-processor chain to audit. There is no server breach that could expose your recordings. There is no cross-border data routing to worry about. The attack surface collapses to one point: your own machine.

The tradeoffs are real. On-device models are constrained by local compute. The Whisper "large-v3" model requires roughly 3 GB of disk space and benefits from 16 GB or more of unified memory. Initial model download is a one-time event (and should itself be verified via checksum). Inference latency on an M2 or later chip runs about 150ms per 30 seconds of audio for the large model, which is fast enough for real-time use. If you're interested in [how on-device AI models handle different languages](https://auditoryapp.com/blog), the accuracy gains from running larger models locally are substantial, especially for technical terminology.

A Five-Point Audit You Can Run on Any Transcription App Today

You don't need my proxy setup to check if your transcription app is transmitting audio. Here's a practical checklist you can complete in under 30 minutes.

  1. 1.Open Activity Monitor (Applications > Utilities > Activity Monitor). Select the Network tab. Sort by "Sent Bytes." Start a transcription and watch whether the app's sent bytes increase. If you see hundreds of KB or MB climbing during dictation, audio is leaving your machine.
  1. 1.Check DNS queries with Terminal. Run `sudo tcpdump -i en0 port 53 -l` in Terminal before starting a transcription session. Watch for DNS lookups to unfamiliar domains (speech APIs, analytics endpoints, CDNs). A local-only app will produce zero DNS queries during transcription.
  1. 1.Install Little Snitch (or a similar outbound firewall). It will alert you the moment any app attempts an outbound connection, showing the destination hostname and port. Block the connection and check if transcription still works. If it fails without network access, the app depends on cloud processing.
  1. 1.Inspect with Wireshark for deeper packet analysis. Filter by the app's process or destination port. Look at payload sizes on outbound packets. Audio payloads are large (hundreds of KB per request) and easy to spot.
  1. 1.Review cache and cookie behavior. In Charles Proxy or browser dev tools (for web-based transcription), check response headers for `Cache-Control`, `Set-Cookie`, and `X-Request-ID` patterns. Long-lived cache headers and persistent cookies suggest server-side audio retention.

For anyone looking to understand [how privacy-first speech recognition actually works on macOS](https://auditoryapp.com/blog), running this audit on your current tools will make the architectural differences immediately concrete.

Frequently Asked Questions

Does encryption protect my audio data during cloud transcription?

TLS encryption protects audio in transit between your device and the server. It does not protect audio at rest on the server, during processing, or from the vendor's own employees and sub-processors. Encryption of the pipe is necessary but not sufficient.

Can I use cloud transcription and still comply with HIPAA?

Only if the vendor signs a BAA and every sub-processor in their chain is also covered. Most consumer transcription apps do not offer BAAs, and their bundled analytics SDKs are almost never HIPAA-compliant.

How accurate is on-device transcription compared to cloud-based services?

On Apple Silicon hardware, Whisper large-v3 achieves word error rates within 2 to 3 percentage points of the best cloud APIs for English. For less common languages or heavy accents, cloud services with larger training datasets may still have an edge, but that gap has narrowed significantly through 2024 and 2025.

What's the performance impact of running transcription models locally?

On M1 Pro or later chips, the Whisper large-v3 model processes 30 seconds of audio in roughly 150ms. You'll see slightly elevated CPU/GPU usage during dictation, but most users report no noticeable impact on other tasks.

Making the Switch: What to Demand From Your Transcription Stack

Here's the decision framework, boiled down. Cloud transcription is acceptable when you're dictating non-sensitive content (blog drafts, personal notes, casual emails) and when you've verified the vendor's sub-processor list and retention policies. Local-only transcription is the only responsible choice when you're handling medical records, legal documents, financial data, client-privileged information, or journalistic source material.

Before adopting any transcription tool, demand clear answers to these four questions:

  • Where does my audio go during processing? Accept only "nowhere, it stays on your device" or a specific, named server and jurisdiction.
  • Who are your sub-processors? Require a written, current list. Not "we use industry-standard partners."
  • What is your data retention period, and can I verify it? Retention must be stated in days, not vague terms. Ask whether cache headers confirm the policy.
  • Can I delete all stored audio and associated metadata on demand? Require a documented process with a timeline.

The single metric to start tracking this week: outbound network requests per transcription session. Open Activity Monitor before your next dictation session. If the number is anything higher than zero, you know your audio is leaving your machine, and you now have the tools and the checklist to decide if that's a tradeoff you're willing to accept.

When I started this audit, I expected cloud apps to phone home. I didn't expect five distinct third-party domains on a single transcription request, or cache headers suggesting 24-hour retention from apps that advertise "immediate deletion." The packets told a different story than the policies. Check yours.

Ready to try Auditory?

Privacy-first speech to text. Download free for macOS.

Download for Free