Results on a phone line# #
| Stork test, November 11, 2026. Word error rate (each digit counted as a word, see How we tested) and entity accuracy on the G.711 phone-line version of 16.6 minutes of audio (155 utterances, 245 scored entities). Broken = a 50-second recording with more than 50% of words wrong, counted across all three audio conditions. Reply time = 12 short caller turns, one at a time, from California. Prices from vendor pages, November 11, 2026. | ||||||
|---|---|---|---|---|---|---|
| Model (vendor) | Word error rate, phone line | With background noise | Names, digits, addresses right | Broken transcripts (of 60) | Reply time p50 / p90 | List price per hour of audio |
| --- | --- | --- | --- | --- | --- | --- |
| gpt-transcribe (OpenAI) | 5.5% | 6.4% | 97.5% | 0 | 0.61 s / 0.69 s | $0.27 |
| gpt-4o-mini-transcribe (OpenAI) | 5.5% | 7.3% | 96.3% | 0 | 0.71 s / 0.87 s | $0.18 |
| Scribe v2 (ElevenLabs, via fal) | 5.9% | 11.1% | 95.9% | 1 | 1.61 s / 1.81 s | $0.48 on fal ($0.20 direct) |
| Gemini 3.5 Transcribe (Google) | 5.9% | 6.9% | 95.9% | 0 | 1.56 s / 1.95 s | about $0.30 |
| Gemini 3.8 Flash (Google) | 6.0% | 6.4% | 95.9% | 1 | 2.00 s / 2.47 s | about $0.11 (our estimate) |
| Whisper large-v3 (fal Wizper) | 6.1% | 8.1% | 95.1% | 1 | 3.48 s / 24.5 s | not published |
| Cohere Transcribe (via fal) | 6.3% | 6.8% | 93.1% | 0 | 1.15 s / 1.42 s | $0.25 on fal |
| whisper-1 (OpenAI) | 10.8% | 11.1% | 88.2% | 3 | 1.27 s / 1.60 s | $0.36 |
| Gemini 3.5 Flash-Lite (Google) | 13.2% | 8.6% | 86.5% | 3 | 1.16 s / 1.28 s | about $0.06 (our estimate) |
| gpt-4o-transcribe (OpenAI) | 15.0% | 9.3% | 83.7% | 6 | 0.75 s / 0.96 s | $0.36 |
## What we found[#](#what-we-found)
### 1. The top five are statistically tied on accuracy[#](#1-the-top-five-are-statistically-tied-on-accuracy)
Word error rates from 5.5% to 6.3% for seven models look like a ranking, but they are not one. Our 95% confidence interval for gpt-transcribe runs from 3.9% to 7.4%, and every model down to Cohere Transcribe overlaps it. With 16.6 minutes of audio, a one-point difference is noise. If you are choosing between these models, choose on reliability, latency, price and features (streaming, keyword boosting, data retention), not on a half-point of WER.
2. Reliability is where models differ#
Each model transcribed 60 recordings of about 50 seconds (20 recordings, three audio conditions). gpt-4o-transcribe returned a badly incomplete transcript on 6 of them: for one recording of 8 caller turns it returned only "12:15 p.m.", and for one of 17 turns only "The amount of the bill is $61." whisper-1 and Gemini 3.5 Flash-Lite each did it 3 times. Gemini 3.8 Flash once prefixed its transcript with an invented heading and repeated text, and Scribe v2 once returned a short string of nonsense characters for a noisy recording. gpt-transcribe, gpt-4o-mini-transcribe, Gemini 3.5 Transcribe and Cohere Transcribe returned no broken transcripts.
Our recordings join short, unrelated turns with one-second s, which is harsher than one continuous call, so treat these counts as a stress test. But a phone agent cannot afford a transcript that silently drops most of what the caller said, and an average WER hides exactly that.
3. Names, digits and addresses#
| Phone-line condition. Share of entities transcribed exactly (after normalising formats, so 332-910-9693 and 3329109693 count as the same). Small samples: one miss moves a 15-item column by about 7 points. gpt-4o-transcribe's 0% and 33% come from the broken transcripts above, not from mishearing. | | | | | | | |
|---|---|---|---|---|---|---|---|
| Model | Names (45) | Digit strings (29) | Street addresses (16) | Dollar amounts (15) | Clock times (16) | Places (19) | Dates and numbers (97) |
|---|---|---|---|---|---|---|---|
| gpt-transcribe | 93% | 100% | 94% | 100% | 100% | 95% | 99% | | gpt-4o-mini-transcribe | 91% | 100% | 100% | 87% | 100% | 95% | 98% | | Scribe v2 (fal) | 89% | 100% | 100% | 100% | 100% | 95% | 97% | | Gemini 3.5 Transcribe | 93% | 100% | 100% | 100% | 88% | 89% | 97% | | Gemini 3.8 Flash | 91% | 97% | 100% | 100% | 88% | 95% | 98% | | Whisper large-v3 (Wizper) | 87% | 100% | 100% | 100% | 100% | 89% | 96% | | Cohere Transcribe (fal) | 84% | 86% | 94% | 100% | 100% | 95% | 97% | | whisper-1 | 82% | 100% | 75% | 100% | 100% | 74% | 89% | | Gemini 3.5 Flash-Lite | 84% | 100% | 100% | 100% | 81% | 63% | 84% | | gpt-4o-transcribe | 87% | 97% | 100% | 33% | 0% | 95% | 95% |
Names were the hardest class for every model: unusual surnames from the European Parliament set (Siwiec, Mates, Machiavelli) and common caller names misheard on a phone line ("James" as "Jane"). Spoken digit strings, the thing phone agents need most, were near perfect for most models once formatting is ignored. In practice that formatting matters: Whisper large-v3 wrote times as "1.45 pm" where most models wrote "1:45 PM", and models differ on dashes and spaces in phone numbers. Your agent's parser has to accept all of them.
### 4. Reply time[#](#4-reply-time)
For 12 short caller turns (2.8 seconds of speech on average), sent one at a time as a finished file, OpenAI's three newer models answered fastest: gpt-transcribe at 0.61 s median and 0.69 s at the 90th percentile. Gemini models took 1.2 to 2.0 s at the median. The fal-hosted models include fal's own routing. Wizper's first five requests took 5 to 30 seconds and the next seven about 2.5 s each, which looks like fal bringing capacity online; we report it as measured. None of this is streaming latency. A production phone agent streams audio and gets partial words back while the caller is still talking, which these batch endpoints do not do; we will test streaming models when we have keys for them.
## Text-to-speech: time to first audio[#](#text-to-speech-time-to-first-audio)
A phone agent cannot speak until the voice model sends its first audio, so time to first audio (TTFA) is the number that matters for reply delay. We sent the same three receptionist sentences ("Thanks for calling Riverside Dental, this is Ava. How can I help you today?", an appointment offer with a date and time, and a confirmation with a phone-number ending) one sentence per request, 21 requests per model, round-robin across models over a warm connection from California.
| Stork test, November 11, 2026. 21 requests per model, 0 errors. Price per hour = list price for the characters (or audio tokens) we sent, divided by the seconds of audio returned. ElevenLabs at its API list price of $0.04 per 1,000 characters; Google prices valid to December 31, 2026, then double. | |||
|---|---|---|---|
| Voice model (vendor) | First audio p50 / p90 | Full sentence p50 / p90 | List price per hour of audio |
| --- | --- | --- | --- |
| Flash v2.5 (ElevenLabs) | 0.22 s / 0.28 s | 0.43 s / 0.54 s | $2.37 |
| v4 Turbo (ElevenLabs) | 0.29 s / 0.45 s | 1.05 s / 1.39 s | $2.01 |
| Gemini 3.8 Flash Lite TTS (Google) | 0.47 s / 0.51 s | 1.27 s / 1.44 s | $0.54 |
| gpt-4o-mini-tts (OpenAI) | 0.64 s / 0.77 s | 1.37 s / 1.55 s | $12 per 1M audio tokens; no hourly figure published |
| Gemini 3.8 Flash TTS (Google) | 0.68 s / 0.79 s | 1.95 s / 2.27 s | $0.81 |
| tts-1 (OpenAI) | 1.20 s / 1.64 s | 1.69 s / 2.46 s | $0.80 |
| Inworld TTS-1.5 Max (via fal) | not streamed | 4.12 s / 8.86 s | $0.45 on fal |
| MiniMax Speech 2.8 Turbo (via fal) | not streamed | 4.67 s / 6.78 s | $2.58 on fal |
| xAI TTS v1 (via fal) | not streamed | 3.19 s / 3.57 s | $0.77 on fal |
ElevenLabs Flash v2.5 was the clear latency leader: first audio in 0.22 s at the median and under 0.3 s at the 90th percentile, about twice as fast as the quickest non-ElevenLabs voice (Gemini 3.8 Flash Lite TTS at 0.47 s). It is also the most expensive streaming voice here, about $2.37 per hour of audio at list price, three to four times Google's and OpenAI's. ElevenLabs' newer v4 Turbo started almost as fast (0.29 s) but took longer to finish each sentence. Google's Gemini 3.8 Flash Lite TTS was the cheapest streaming option at about $0.54 per hour with a steady 0.47 s first audio. OpenAI's older tts-1 was the slowest to start at 1.2 s; its newer gpt-4o-mini-tts started in 0.64 s.
The three models we reached only through fal.ai (Inworld TTS-1.5 Max, MiniMax and xAI) return a finished file, not a stream, so we can only report the time to the whole file, 3 to 5 seconds at the median including fal's queue. That says nothing about their streaming latency on their own APIs, which we did not test. Inworld was the cheapest voice we measured at about $0.45 per hour through fal. We did not judge voice quality in this test.
Enjoying this? Get one like it in your inbox each morning.
one email a day · unsubscribe in two clicks · no third-party tracking
How we tested# #
- Audio, real people: 105 caller turns from theHarper Valley Bank corpus (Gridspace and Stanford, CC BY 4.0, as packaged inSLUE phase 2 ): people role-playing calls to a bank, giving their names, phone and account numbers, zip codes, street addresses, amounts and appointment times. Plus 50 utterances from the SLUE VoxPopuli named-entity set (European Parliament speeches, audio CC0, labels CC BY 4.0) for accented speech with labelled people, places, organisations, dates and numbers. 155 utterances, 16.6 minutes, chosen with a fixed random seed.
- Three conditions: the original 16 kHz audio; a phone line (300 to 3,400 Hz band-pass, 8 kHz, G.711 mu-law, the codec of most US phone calls); and the phone line with pink background noise at 15 dB signal-to-noise. This simulates a phone line in software. It is not a real carrier path, which can add packet loss and echo.
- Requests: utterances were joined into 20 recordings of about 50 seconds with one-second s, one request per recording per model (600 requests for accuracy). English was set where the API allows it. No prompts, keyword lists or custom vocabulary. Gemini Flash models got a one-line "transcribe verbatim" instruction; Gemini 3.5 Transcribe takes no prompt.
- Scoring: OpenAI'sWhisper English text normaliser on both sides, plus four fixes so formatting never counts as an error: brackets kept, leading zeros kept, "1.45 pm" read as 1:45 pm, and each digit counted as its own word (so a wrong digit in a phone number is one error, and "332-910-9693" equals "three three two nine one zero nine six nine three"). Word error rate is total errors divided by total reference words, with a bootstrap 95% interval over recordings. An entity counts as right only if it appears exactly in the words aligned to its own utterance. 14 entities that no model got right in any condition were dropped as reference errors (mostly names whose accents were stripped in the reference, such as "Pöttering" written as "pttering").
- Reply time: 12 caller turns on the phone line, sent one at a time, wall-clock time from sending the request to receiving the full transcript, from one computer on a home connection in California. Upload time is included. Your numbers will differ by location; compare models within this table, not with numbers from elsewhere.
- Hosted models: ElevenLabs Scribe v2, Cohere Transcribe and Whisper large-v3 were called throughfal.ai , because our ElevenLabs key lacks speech-to-text permission and we have no Cohere key. fal adds its own routing time and charges its own prices ($0.008 per minute for Scribe v2 against ElevenLabs' direct $0.20 per hour).
- Prices: list prices from each vendor's own page on November 11, 2026:OpenAI ,ElevenLabs ,Google ,Cohere and fal's model pages. Gemini 3.8 Flash and Flash-Lite bill by tokens; we estimated their hourly cost from 25 audio tokens per second plus the text they returned. Google's page says Gemini 3.8 Flash prices double on January 1, 2027. fal shows no usable per-minute price for Wizper. Cohere sells production Transcribe through dedicated instances "from $3.75 / hour / instance", not per minute.
- Voice models: one sentence per request, 7 rounds of the 3 sentences (21 requests per model), models interleaved so a network blip hits all of them. One unscored warm-up request per vendor first, so connection setup is not counted. First audio = sending the request to receiving the first non-empty audio bytes. ElevenLabs used its premade "Adam" voice, OpenAI "alloy", Google "Kore", and fal's default voices.
- Cost of this test: about $3.30 in API calls at list prices (our per-call estimates, logged), plus about 600 ElevenLabs plan credits. The harness, test-set builder and scorer are in the Stork repository under scripts/bench, and the raw transcripts are kept so every number here can be checked.
What this test does not tell you# #
- Streaming accuracy and latency. Every model here was called with a finished file. Phone agents use streaming recognition with end-of-turn detection, which is a different and usually less accurate mode.
- Models we could not reach. Not tested this round: Deepgram (Nova-3, Flux), AssemblyAI (Universal), Speechmatics, Soniox, Gladia, Cartesia Ink, Rime, Azure, Amazon Transcribe, Google Cloud Chirp, ElevenLabs Scribe v3 direct, and Groq-hosted Whisper. A missing model is not a worse model.
- Real callers on real lines. Harper Valley callers are real people but role-playing, recorded on a web app, and our phone line is simulated. Accents, speakerphones and cheap Bluetooth headsets will be harder.
- Sample size. 245 scored entities and 16.6 minutes per condition is enough to separate good models from weak ones, not to rank the top five. Some entity classes have 15 or 16 items.
- One run. The broken-transcript counts come from one pass. Some may not repeat; we will report whether they do next month.
Next: a full phone-agent test# #
Component numbers do not tell you what a caller hears. Our next test builds the same receptionist on Vapi, Retell, ElevenLabs Agents, Telnyx, Bland and a self-hosted LiveKit or Pipecat stack, calls each one over the real phone network from a real number, and measures answer time, reply delay, interruptions, whether the agent wrote down the caller's name, number and address correctly, and the true cost per minute. If you run one of those platforms and want to be included, nothing changes: we pay for our own accounts and do not accept placement fees.
## Frequently asked questions[#](#frequently-asked-questions)
### Which speech-to-text model is most accurate on phone calls?[#](#which-speech-to-text-model-is-most-accurate-on-phone-calls)
In Stork's November 2026 test on simulated G.711 phone audio, OpenAI gpt-transcribe and gpt-4o-mini-transcribe (5.5% word error rate), ElevenLabs Scribe v2 and Gemini 3.5 Transcribe (5.9%) and Gemini 3.8 Flash (6.0%) were tied within the margin of error. gpt-transcribe got the most names, digits and addresses right (97.5%) and replied fastest.
Does 8 kHz phone audio make transcription much worse?#
Not for the better current models in our test. Moving from 16 kHz audio to 8 kHz G.711 changed the word error rate of gpt-transcribe, gpt-4o-mini-transcribe, Gemini 3.5 Transcribe and ElevenLabs Scribe v2 by 0.3 points or less. Adding background noise at 15 dB signal-to-noise cost most of them 0.4 to 2.0 points.
Is gpt-4o-transcribe good for phone agents?#
It was the least reliable model in our test: on 6 of 60 recordings it returned only part of what was said, which pushed its error rate to 15% on the phone line. OpenAI's newer gpt-transcribe and gpt-4o-mini-transcribe had no such failures and cost less.
How much does speech-to-text cost per hour?#
List prices on November 11, 2026: OpenAI gpt-4o-mini-transcribe $0.18, gpt-transcribe $0.27, whisper-1 and gpt-4o-transcribe $0.36 per hour; ElevenLabs Scribe v2 $0.20 per hour direct ($0.48 through fal); Gemini 3.5 Transcribe about $0.30 per hour by Google's estimate.
Which text-to-speech model has the lowest latency?#
In our November 2026 test, ElevenLabs Flash v2.5 sent its first audio in 0.22 seconds at the median and 0.28 seconds at the 90th percentile, about twice as fast as the quickest non-ElevenLabs voice. Google's Gemini 3.8 Flash Lite TTS was the cheapest streaming voice at about $0.54 per hour of audio, with first audio in 0.47 seconds.
Why are Deepgram and AssemblyAI missing?#
We only test with API keys Stork already has, and we had none for Deepgram, AssemblyAI, Speechmatics, Soniox, Gladia, Cartesia or Rime this month. They are first on the list for the next monthly run.