The best voice to text apps for a Mac

By

Handy is the free open source dictation app I use. Compare the other Mac voice to text apps and speech APIs, then dictate a prompt.

~~~

The useful voice to text setup on a Mac depends on the job.

If you want spoken words to land in the app in front of you, use a dictation app. The one I use is Handy. It is free, open source, and the audio stays on the Mac. macOS Dictation is already installed if you want to try the idea before adding anything.

If you are building a product that transcribes audio from other people, skip the desktop apps and call a speech-to-text API. You pay for minutes or hours, and the audio goes to that vendor.

Prices and plan limits below were checked on October 30, 2026, on each company’s own site.

What to look for

Start with where the audio goes. A local model transcribes on your Mac. A cloud app or an API uploads the recording. Local is the right default when the prompt mentions private code, customer names, or keys. Cloud is what you use when you want that vendor’s model, or when the audio comes from your users.

Dictation handles ordinary sentences well and file paths badly. Package names and flags get mangled too. A custom vocabulary, sometimes called a dictionary, teaches the app the names you repeat. You still read the line before you send it to an agent.

For your own prompts, latency is the pause after you release the key. For a product, the split is finished files versus audio that is still coming in. Push to talk means you hold a key while you speak and release it to stop. A toggle starts on one press and stops on the next. Pick a key your editor and your agent are not already using.

Some apps return the words you said. Others run a second pass that adds punctuation or rewrites the tone. That pass can also change a path, so read the result. A free local app can cover your own prompts. A cloud dictation app often meters words per week until you subscribe. An API bills the audio you send.

Where dictated audio goesLocal dictation stays on the Mac. A cloud app or a speech API sends the recording to the vendor. Either way you read the text before sending it to an agent.Local appCloud app or APIYou speakWhere does the audiogo?Transcript on thisMacVendor transcribesitRead and fix namesSend the prompt

Dictation is a capture tool. It gets words onto the screen quickly. Shaping an idea still goes better on the keyboard, which is the point of why typing slows a thought down in a useful way.

The Mac apps, side by side

ToolPlatformsAudioPrice on Oct 30, 2026Fits when
HandyMac, Windows, LinuxOn your machineFree, open sourceYou dictate prompts all day
macOS DictationMacOn device when Keyboard settings say soIncluded with macOSYou want no extra app
Superwhisper FreeMac, Windows, iPhone, AndroidOn device with local Whisper$0, unlimited local dictationYou also want a phone app
Superwhisper ProSame devices, one licenseLocal or cloud$8.49/month, $84.99/year, or $249.99 onceYou want AI cleanup or cloud models
MacWhisperMac. iPhone and iPad use a different appLocal models. Cloud only if you add a key€0, or €64 once for ProYou also transcribe files and meetings
Wispr Flow FreeMac, Windows, iOS, AndroidWispr’s cloud$0, with weekly word capsYou want to try cloud cleanup
Wispr Flow ProSameWispr’s cloud$15/user/month, or $144/user/yearYou want that cleanup without the cap
Raycast DictationMac, iPhone, iPadSent to a speech partnerIncluded with Pro, $10/month or $96/yearYou already use Raycast and want cleanup
whisper.cppMac, Linux, WindowsOn your machineFree, open sourceYou transcribe a file from the terminal

Handy

Handy is the dictation app I use. It is free. The code is MIT licensed. There is no word cap and no subscription. Press a shortcut, speak, and it pastes the transcript into the text field that has focus.

The transcription runs on your computer. Handy’s FAQ says the only network requests are for downloading a model and checking for updates. A cloud provider receives the text only if you turn post-processing on.

It runs on Mac, Windows, and Linux. On a Mac the shortcut starts as Option-Space. Push to talk is the default: hold the keys, speak, release. You can switch to a toggle, where one press starts and the next press stops. Escape cancels the take. Option-Space is also Superwhisper’s toggle, so change one of them if both apps are open.

You pick a model the first time you launch it. Every model stays local. Their docs recommend Parakeet V3 for most English dictation. It is fast, and it writes numbers out as words. I use Whisper Medium. Whisper writes numbers as digits, and you can pin the language. On a Mac, Whisper uses the GPU through Metal. Parakeet runs on the CPU.

Custom words are how you teach it a name it keeps missing. I added flaviocopes.com. The models do not turn “new line” or “period” into a break or a mark. You type those, or you send the transcript through a second pass.

That second pass is post-processing. It sits under Settings, then Advanced, then Experimental Features. The normal shortcut always pastes the words you said. A different shortcut, Option-Shift-Space at the start, runs the transcript through a model first. That text goes to a cloud provider, or to a local server such as LM Studio if you point Handy at one. I leave post-processing off.

The Mac download is on handy.computer, with one build for Apple silicon and one for Intel. Homebrew has a community cask, and it can sit a release behind the file on the site:

brew install --cask handy

On Linux, a global shortcut does not always work under Wayland. The CLI docs show how to bind handy --toggle-transcription in the window manager instead.

Superwhisper

Superwhisper is free for unlimited dictation with local Whisper models. The free plan includes custom vocabulary, text replacements, and up to two modes. Those modes do not run AI processing. The company says nothing you dictate on that plan leaves your device.

Pro adds cloud voice models, file transcription, realtime transcription, and AI modes that can rewrite what you said. It also adds the local Parakeet and Cohere Transcribe models, and the option to bring your own API keys. New accounts get 3,000 words of Pro features, then the app falls back to Free.

On the website, Pro is $8.49 a month, $84.99 a year, or $249.99 once. One license covers your Macs, Windows PCs, iPhone, and Android phone, with no device limit on Mac and Windows. The iOS App Store and Google Play charge more. Students, educators, and non-profits can ask for 40% off website purchases.

The Mac app needs macOS 14 or later. Windows is 10 or 11. During setup you grant the microphone and Accessibility, so the app can type into other apps. The hold key starts as Right Command. Option-Space toggles recording. Push to talk records while the key is down and stops when you release it. The same key can do both. Holding it is push to talk, and a quick tap toggles.

Setup creates a Message mode that uses cloud models. Those recordings leave the Mac, and they draw on the 3,000-word Pro trial. Switch the mode to a local Whisper model if the audio should stay on the machine. After the trial words run out, cloud features stop and the free local plan remains.

If the shortcut does nothing, another app probably owns that key. Superwhisper’s docs say system and app shortcuts win. Try a combination nothing else uses.

MacWhisper

MacWhisper, from Good Snooze, is a Mac app for transcribing files, meetings, and dictation. The site lists Free at €0 and Pro at €64 once, with lifetime updates. Buy through their Gumroad page or the App Store. The site warns that other domains pretend to be MacWhisper.

The direct download can dictate into any text field, detect meetings, and includes a command-line tool. The Mac App Store app is named Whisper Transcription. It has fewer AI providers, and it sells subscriptions instead of that €64 license. License keys from Gumroad do not transfer to the App Store app. iPhone and iPad use Whisper Transcription too.

Local models are the privacy path. The site says private files can be transcribed on the Mac so the audio does not leave it. Cloud transcription is optional, through providers you connect with your own keys, including OpenAI, Groq, Deepgram, and ElevenLabs. Students, journalists, and non-profits can email them for 25% off.

The €64 price is the one printed on macwhisper.com. Read the Free versus Pro table on that page before you pay, because a feature can sit on one column only.

Wispr Flow

Wispr Flow dictates into other apps on Mac, Windows, iOS, and Android. Transcription happens in Wispr’s cloud, and the app needs a network connection. Their data controls page says this stays true if you opt out of model training. Turning off Dictation cloud storage stops them keeping the audio after transcription. It does not move transcription onto your Mac.

The free plan is $0. On Mac and Windows the weekly limit is a 2,000-word allowance and a 5,000-word maximum, resetting Sunday at 12 a.m. Pacific. iOS is a 550-word allowance and a 750-word maximum. Android is a 2,500-word allowance and a 3,000-word maximum. Those mobile caps reset Sunday at 23:45 UTC. At the allowance, dictation slows. At the maximum, it stops until the reset or an upgrade. Your own phone’s numbers can differ from the help-center figures.

Pro is $15 per user per month, or $144 per user per year, which is the $12 a month equivalent. That removes the dictation cap. These are US card prices. Other currencies have their own amounts.

Teams have two Growth prices. Dictation only is $23 per user per month, or $216 a year. Dictation plus Notetaker is $33 per user per month, or $312 a year. Enterprise is custom. On Growth and Enterprise, sharing data for training is off for the whole team.

Flow can clean up a transcript, and it can add a word to your dictionary when you correct a spelling. That cleanup is the feature you are paying for. A prompt about a private repo is uploaded to produce it.

Raycast Dictation

Raycast Dictation types into the focused app from a hotkey, on a Mac and, through the Raycast Keyboard, on iPhone and iPad. It is part of the paid plans. Pro is $10 a month or $96 a year on the billing page, checked October 30, 2026. A new account can start a 7-day Pro trial. The free plan does not include it.

Press the hotkey to start. Press it again to paste, or Escape to cancel. Hold the hotkey if you want push to talk. A session stops at 20 minutes, and the recording you have so far is still transcribed. On a Mac, the fn key works as a hotkey only after you set System Settings, then Keyboard, then Press fn key, to Do Nothing. Otherwise macOS takes the press.

The transcript is cleaned on the way in. Filler words, punctuation, capitalization, and grammar are part of the product, so you do not get the raw words the way Handy pastes them. Styles can rewrite further, into an email or a short message, and Auto Styling picks one from the app in front. For a coding prompt, leave Auto Styling off. The baseline cleanup still runs. Read names and paths before you send.

Privacy says the audio goes to their speech-to-text partner for that request, is not kept on Raycast’s servers, and is not used to train models. The transcript is stored on your Mac, in Dictation History, until you delete it. App Context also sends the frontmost app and nearby text, and it needs Screen Recording. That context is dropped when the request finishes. Leave it off if the editor has a private repo on screen.

Vocabulary holds 50 words, each up to 20 characters. flaviocopes.com fits. A file path is longer than that, so type the path yourself. Auto Submit can press Enter after the paste. Leave that off when the cursor is in an agent prompt, or the sentence sends itself.

If Handy, Superwhisper, Wispr Flow, MacWhisper, Aqua Voice, or VoiceInk is installed, Raycast can import that app’s vocabulary and hotkey. It asks first. I would leave Handy where it is.

On iPhone and iPad the keyboard cannot open the microphone itself, so a session starts in the Raycast app and the text comes back to the field. As of iOS 26.4 you swipe back to the previous app yourself.

macOS Dictation

Apple’s Dictation types into any text field. Turn it on in System Settings, then Keyboard, then Dictation. Start it with the microphone key, the shortcut you pick in that panel, or Edit, then Start Dictation. Press and release the microphone key to dictate. Holding it calls Siri, if Siri is on.

Stop with Escape, the microphone key, or the shortcut. It also stops after 30 seconds without speech. You can speak for as long as you want apart from that pause. In supported languages it inserts commas and periods. Turn Auto-punctuation off in the same Keyboard panel if you want to say the punctuation yourself. “New line” and “new paragraph” insert breaks when you finish the dictation.

The privacy line is on that settings screen, under Dictation, once Dictation is enabled. Read it. Apple’s guide says that note tells you whether general text dictation stays on the device or goes to Siri servers. Search fields are separate: dictated text there may be sent to the search provider.

On Apple silicon you can type while dictation is still listening, which helps when you need to drop in a path by hand. With Apple Intelligence in macOS 27, Apple says dictation uses an on-device model to improve spelling, punctuation, and capitalization, in English, on M3 Macs and later with at least 12GB of unified memory.

Voice Control is a different feature. When it is on, standard Dictation is not available, and you dictate through Voice Control instead.

There is no subscription. There is also no custom vocabulary list in the settings described above. Unusual project names are yours to fix after the fact.

whisper.cpp, when you have a file

whisper.cpp is a C and C++ port of OpenAI’s Whisper model. It runs locally, with Apple silicon support through Metal and Core ML, and it also builds on Linux and Windows. It is a transcription engine, not a push-to-talk app. You point it at an audio file.

The project’s quick start clones the repo, downloads the English base model, builds the command, and transcribes the sample file:

git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
sh ./models/download-ggml-model.sh base.en
cmake -B build
cmake --build build -j --config Release
./build/bin/whisper-cli -f samples/jfk.wav

Use that when you already have a recording and you want it offline. For live dictation into Cursor or a shell prompt, use Handy. It listens on a hotkey and pastes the transcript where the cursor is.

Speech-to-text APIs

Use an API when your product transcribes audio, not when you want to dictate a sentence into an editor. A desktop app will not scale to your users’ uploads, and an API will not press a hotkey on your Mac.

APIModelPrice on Oct 30, 2026How it bills
OpenAIgpt-transcribe$0.0045 / minuteFinished audio
OpenAIgpt-live-transcribe$0.017 / minuteLive audio
OpenAIWhisper$0.006 / minuteFinished audio. Leaves the API on Feb 26, 2027
DeepgramNova-3 monolingual, pre-recorded$0.0043 / minutePer second of audio
DeepgramNova-3 monolingual, streaming$0.0077 / minutePer second of audio
AssemblyAIUniversal-2$0.15 / hourPre-recorded audio
AssemblyAIUniversal-3.5 Pro$0.21 / hourPre-recorded audio
AssemblyAIUniversal-Streaming English$0.15 / hourTime the WebSocket stays open
AssemblyAIUniversal-3.6 Pro Realtime$0.45 / hourTime the WebSocket stays open
ElevenLabsScribe v2$0.22 / hourAudio duration
ElevenLabsScribe v2 Realtime$0.39 / hourAudio duration
Groqwhisper-large-v3-turbo$0.04 / hour10 second minimum per request
Groqwhisper-large-v3$0.111 / hour10 second minimum. Can translate to English

OpenAI’s current file model is gpt-transcribe. gpt-live-transcribe is the live one. On August 26, 2026 OpenAI said whisper-1, gpt-4o-transcribe, gpt-4o-mini-transcribe, and gpt-4o-transcribe-diarize leave the API on February 26, 2027. New work should call gpt-transcribe or gpt-live-transcribe. The pricing page still lists Whisper at $0.006 a minute until then.

A short file transcription looks like this. The key stays in the environment, not in the command you paste into a chat:

curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F model=gpt-transcribe \
  -F file="@/Users/flavio/notes/prompt.m4a"

Deepgram’s pay-as-you-go plan starts with a $200 credit and no card. They describe that credit as roughly 43,000 minutes of Nova-3. Nova-3 multilingual is $0.0052 a minute pre-recorded and $0.0092 a minute streaming. Billing is per second, with no minimum length. Growth is prepaid credit from $4,000 a year, and the monolingual streaming rate there is $0.0065 a minute. Self-hosted containers exist on Enterprise and need NVIDIA GPUs.

AssemblyAI’s streaming price is easy to misread. You pay for how long the WebSocket stays open, including silence. Two sessions open at once both count. If you never close a session, it auto-closes after 3 hours and you pay for those 3 hours. Send the termination message when the utterance ends. Their docs recommend Universal-3.6 Pro Realtime for voice agents and quote sub-300ms latency for it. Universal-Streaming English is the cheaper live option, at $0.15 an hour of session time. Pre-recorded Universal-2 is $0.15 an hour of audio, and Universal-3.5 Pro is $0.21.

ElevenLabs prices Scribe v2 and Scribe v2 Medical at $0.22 an hour, and Scribe v2 Realtime at $0.39 an hour. The pricing page lists keyterm prompting as an extra $0.05 an hour on Scribe v2 and $0.08 an hour on realtime. Taxes are extra. The page also quotes about 150ms latency for the realtime model.

Groq hosts Whisper behind an OpenAI-compatible transcription endpoint. whisper-large-v3-turbo is $0.04 an hour and does not translate. whisper-large-v3 is $0.111 an hour and can translate speech into English text. Every request bills at least 10 seconds, so a two-second clip still costs 10 seconds. That matters if you send one tiny chunk per sentence.

For a batch feature, gpt-transcribe, Groq’s turbo model, and Deepgram’s pre-recorded Nova-3 are the three to try on the same file. For a live agent, compare gpt-live-transcribe, Deepgram streaming, and AssemblyAI’s session-priced models, and include the idle time in the AssemblyAI estimate. Building that agent is a different job from dictation. The LiveKit Agents guide is about the voice-agent stack, with speech-to-text as one stage, not about typing into your editor.

How to pick

Use Handy if you dictate many times a day and you want the audio to stay on the machine. It is free and open source. The transcript is the words you said. You punctuate, and you fix names.

Use macOS Dictation if you want to try this in the next minute and the Keyboard settings line says the audio stays on the device.

Use Superwhisper if you also want an iPhone or Android app, or their paid AI modes. The free plan keeps local Whisper audio on the device.

Use Wispr Flow, Superwhisper Pro, or Raycast Dictation if you want the app to clean the transcript before it pastes, and you have read where the audio goes. Stay on Wispr’s free caps until a week of real use hits the limit. Raycast Dictation needs a paid Raycast plan, and it always does that cleanup.

Use MacWhisper’s direct download if the work is files, meetings, and subtitles, and dictation is a bonus. Read the Free versus Pro table on the site before paying €64.

Use whisper.cpp if you want a local command in a script. Use an API if the audio belongs to your users.

Set it up on a Mac

This path is Handy. It types into the focused app, keeps the audio on the machine, and does not meter words.

  1. Download the Mac app from handy.computer. Pick the Apple silicon build or the Intel one. Or run brew install --cask handy. That cask can lag the file on the site.
  2. Allow the microphone and Accessibility when asked. Accessibility is what lets it paste into the editor, the terminal, and the agent input.
  3. Download a model when it asks. Parakeet V3 is the one they recommend for English. I use Whisper Medium.
  4. Click a text field, hold Option-Space, and say one sentence. Release. The words should land at the cursor. If they don’t, check Accessibility, then try another shortcut. A key owned by macOS or by Cursor will not reach Handy. Push to talk is the default. Switch to a toggle in settings if you would rather tap once to start and once to stop.
  5. Add names you will say often, under custom words. I added flaviocopes.com.
  6. Leave post-processing off. Option-Space then pastes the raw transcript. Option-Shift-Space is the shortcut that can send that text to a model.

The no-install version of the same idea is macOS Dictation. Turn it on under Keyboard, set a shortcut that does not collide with Option-Space, and read the on-device line before you dictate anything private.

LM Studio Bionic has its own voice input, transcribed locally with Voxtral, inside that app. A system-wide tool is what you want when the cursor is in some other window. Local transcription still does not make the agent local. If the session uses a cloud model, the text you just dictated is sent to that model.

Dictate a prompt to a coding agent

Click the place where the prompt goes. Hold the dictation key. Speak the task in sentences. Release. Read the text. Fix paths and names. Then send.

Here is the kind of prompt worth speaking. The first block is what you say. The second is what should be on screen before you press Enter.

Fix the empty heading on the reading list page.
Only that bug.
Add a test for an article with no title.
Run the tests and show me the changed files.
Fix the empty heading on the reading list page.
Change only that behavior.
Add a test for an article with no title.
Run the tests and show the changed files.

Say the task, the boundary, and how you will check it. Type the path if the transcript mangled it. src/pages/reading-list.astro is safer from the keyboard than from your mouth. The same rule shows up when you drive an agent from a phone: a wrong word sends the agent looking in the wrong place.

A few habits keep the transcript usable.

Speak one task. A dictated prompt that wanders will wander in the transcript too.

Say “new line” if you are on macOS Dictation and you want a break. Handy does not treat that phrase as a command. With Handy, or with Superwhisper’s free mode, pause between sentences and add the line breaks yourself if they didn’t land.

Don’t dictate a token, a password, or the contents of .env. A cloud dictation app uploads that audio. A local app pastes it into the prompt, and the agent may still send the prompt out.

If the app offers a cleanup mode, run it only after you know the raw words were right. A rewrite that “fixes grammar” can also rename a function.

From speech to a coding promptFocus the agent input, hold the dictation key, speak one task, release, correct file names, then send.Focus the prompt boxHold the dictationkeySpeak one taskRelease the keyFix paths and namesSend

The agents also have their own voice controls. Use those when you are already in their input. Use the system app when you are in the editor or the terminal.

Cursor

The prompting docs say to click the microphone in the chat input, speak, and review the transcription before sending. The keyboard shortcut list includes Command-Shift-Space as Toggle Voice Mode. In the Agents Window, the Cursor 3.1 changelog says you press and hold Control-M. The app records the whole clip, then batch speech-to-text transcribes it. Those shortcuts leave Handy’s Option-Space alone. If you also run Superwhisper, its Option-Space toggle is Handy’s key, so change one of them.

Claude Code

The voice dictation docs use /voice. Hold mode is the default. You hold Space to record and release it to stop. /voice tap starts on one press and sends on the next. /voice off disables it.

Anthropic transcribes the audio on their servers. You need a Claude.ai account. An API key, Bedrock, Google Cloud’s Agent Platform, or Microsoft Foundry does not include this speech service. It needs the microphone on the machine in front of you, so a cloud session or an SSH session cannot use it. The docs say this transcription does not consume Claude messages or tokens.

The terminal has to be focused, and the cursor has to be in the prompt, or the keypress does something else. In the transcript viewer, Space pages through the conversation. The first moments of a hold can type a few characters. Claude Code removes those when recording starts.

Codex

In the ChatGPT desktop app, the composer has Dictate. Speech becomes text in the box, and you edit it before you send. Use that for a Codex prompt when you want text, not a spoken conversation.

ChatGPT Voice is the live conversation, in Chat, Work, and Codex. It is on Plus, Pro, Business, Edu, and Enterprise. Desktop Voice uses the Codex usage budget at $0.05 a minute, and the model that does the task is billed on top. Credit-billed Business, Edu, and Enterprise workspaces pay 1.25 credits a minute. The voice-chat shortcut is under Settings, then Voice, then Voice chat hotkey.

Voice inside an existing Codex task is still rolling out. If that control is missing, Dictate still fills the composer. The longer walkthrough of the app is the Codex guide.

What to do next

Install Handy and leave post-processing off. Dictate one prompt you were about to type. Read every path and product name, then send it.

If the names survive and you are happy fixing punctuation yourself, stay there. If you want the app to rewrite the sentence, try Wispr Flow’s free tier, Superwhisper’s Pro trial, or Raycast Dictation when you already pay for Raycast, after you decide the audio can leave the Mac.

If the audio is for a product, record one minute of your own voice, send that file to gpt-transcribe and to one other API from the table, and compare the transcript to what you said before you wire it into the app.

Tagged: AI · All topics

Want me to talk about your product? You can sponsor this site.

~~~

Related posts about ai: