How to check whether a dictation app is really offline
Every dictation app on the Mac says your voice stays private. It costs nothing to say. Here is how to find out for yourself — in about ten minutes, with tools already on your Mac, for any app, ours included.
Why the claim needs checking at all
Not because vendors lie, mostly. Because the claim goes stale, and because “private” and “local” are used to mean four different things.
Three examples, all measured on 21 August 2026, all still visible on the vendors’ own pages as of that date:
- A privacy policy can outlive the product it describes. One popular Mac dictation app publishes a privacy policy dated June 2024 saying it “transcribes all audio data locally” and that “there is no need for data transmission” — alongside terms of service dated June 2026 describing backend services that “we may route through our own infrastructure or third-party providers.” Both documents are current. Only one is accurate.
- A cloud app needs a list of apps it must refuse to work in. Another shipped “Banking App Privacy Protection” covering 50+ financial apps: it detects them and switches itself off, because “privacy in financial apps is non-negotiable.” That feature is only necessary if the audio leaves. An app that transcribes on your Mac can never need one.
- Open source does not mean no telemetry. Two free, open-source, local-transcription Mac dictation apps ship analytics enabled by default — one with the live analytics key committed to its own public repository, the other with a 102-event pipeline that reports which category of app you dictated into. The transcription really is local in both. The behavioural data is not.
None of that is discoverable by reading a landing page. All of it is discoverable in ten minutes.
1. Read the terms, and check the dates
Open the privacy policy and the terms of service side by side and look at
the date on each. Then search both for process,
server, third party, sub-processor
and retention. Marketing pages get rewritten for launches;
terms of service get rewritten by lawyers when the architecture changes.
When the two disagree, the terms are the accurate one.
2. Watch what the app connects to, live
nettop ships with macOS. Start the app, then run:
nettop -p Vocula
Replace Vocula with the app’s process name. Now dictate
something. A local app shows no new connections at all while it transcribes
— the row count does not change and no bytes move. A cloud app opens a
connection the moment you stop speaking, and you can watch the byte counter
climb by roughly the size of your audio.
3. Take a snapshot of its open sockets
lsof -i -a -p $(pgrep -x Vocula)
This prints every internet socket that one process currently holds. On a genuinely local app, immediately after a dictation, it prints nothing.
One honest caveat about both commands. They show you what is happening while you look. An app that phones home once a week, or only on launch, or only when it thinks it is idle, can pass a ten-minute inspection. That is what step 4 is for.
4. Record everything, including what happens when you are not watching
An outbound firewall logs every attempted connection and lets you deny it. Little Snitch is the well-known paid one; LuLu from Objective-See is free and open source and is enough for this. Install one, leave it running for a week of normal use, and then read the log for the app in question.
This is the check that finds analytics. Transcription traffic is obvious — it is large and it happens exactly when you stop speaking. Telemetry is small, irregular, and goes to a domain you have to look up.
5. Pull the plug
The simplest test, and the one that needs no tools: turn off Wi-Fi, unplug the Ethernet, and dictate.
A local app behaves identically. A cloud app stops working, silently degrades to a worse on-device model, or queues your audio to send later — and the third case is worth knowing about, because the app appears to work offline while accumulating recordings it intends to upload.
What this method does not prove
It is worth being precise, because a check that claims too much is no better than the claim it was meant to test.
- It proves what an app did while observed, not what it cannot do. Only reading the source proves that.
- It says nothing about what is written to your disk. An app can be perfectly offline and still keep every transcript, and every recording, in plain text. That is a separate question and worth asking separately: as of August 2026, of nine local Mac dictation apps measured, none encrypted its history, and one stored the raw audio of every dictation alongside it.
- It cannot distinguish an update check from a transcription upload without looking at the destination and the size. Both are network calls; only one carries your voice.
What happens when you run this on Vocula
Nothing moves. Vocula makes no network connection at all after the one-time model download — no account, no licence check, no analytics, no update ping unless you press the button that asks for one. Transcription happens on your Mac, in a process you can watch, using models sitting in your own Application Support folder.
We would rather you did not take that on trust either. The source is
published, so the strongest version of this check is not
nettop — it is reading the code and finding that there is no
networking in it to audit.