Now open source · Learn more

Speech-to-text latency, measured

Every transcription we run times the provider that answered it. These are those timings — 42,720 provider attempts over the last 90 days, grouped by the region that made the call.

Metric
Clip length
Detail
Row order
Pick the region closest to you
Provider
264234307328295218377342521305139501322292260134296
76078990945645757174838410013605245083908352941244393
52136239169364649896740690584540188977610376171269636
8208507192395468258245351861686569—368863545825449
777694773585551728143937091844573808257152518344751498563
58585072410681242636150958924641065516122010138893531577845
10571072972458541101614964852498399929128541919404371118435
12719271296156796810301174149113701522103916937308391262926877
27332678259415061951245727811354370020282620425920604352231654061966
26512849277221631823260623741869391621563053301416832736207131811665
34992802280017212423344032262372574629282665286025634889272942352583

Milliseconds, provider call only. A cell needs at least 3 attempts to show a number. Click a region to sort by it, or a provider to pin its row.

How this is measured

What the number is
The time one provider took to answer one call, measured at the edge machine that made it — everything that attempt spent, including handing the audio to the provider and waiting on a long-running job. Your upload to us, authentication, and our own credit checks are excluded. So is the network between you and us — this is the provider's time, not your round trip.
Failed attempts count
A provider that times out still spent your time, so its attempt is in the latency numbers. When one provider fails we fall back to another, and both attempts are recorded separately. The error-rate metric shows how often that happens. What is never counted is a request we turn away ourselves before calling anyone — audio past a provider's size cap, or in a format it does not accept: that provider never received the call, so it is not charged for it here.
A row is a provider, until you open it
Most of these providers offer several models, and HyperWhisper lets you pin the one you want. A provider row covers whichever model of that provider actually ran — its default for most people, plus whatever anyone else picked — so read it as “how fast this provider answers us”. Break down by model splits each one into its models. Those rows count only the attempts that ran on that model, so they fill in more slowly and a young model may show nothing but dashes for a while.
The names match the app
Provider and model names here are the same ones the app's Provider and Model menus show, read from the same shared catalog. Google covers both Chirp and Gemini in one row, exactly as the app does — the model you pick under it is what decides which of the two runs.
Why clip length matters
Longer audio takes longer to transcribe, so comparing a provider handed 5-second clips against one handed 5-minute files would say nothing. Every cell compares clips of similar length, grouped by an estimate taken from the audio's size and format — the same estimate for every provider, so no cell is flattered by a provider that measures its own audio differently.
What it covers
The batch transcription endpoint. Live streaming transcription is not measured here.
What we store
A timing row carries the provider, the model, the region, which clip-length group the audio fell in, which attempt in the chain it was, and whether the call worked. It carries no account, no key, no request id, and no audio or text. The clip's own length is not kept, and the timestamp is stored only to the hour, so nothing ties a row to a person or reassembles one transcription.
Who is counted
Only the HyperWhisper apps, from the versions that carry the setting below — macOS 2.43.0 and Windows 1.10.0 onward. Sharing is on by default, and a default is only fair if you could have changed it, so builds that shipped before the setting existed are not measured at all. Neither is anything calling the API directly.
How to opt out
In the HyperWhisper app, turn off Share anonymous speed data under Settings → General. Your transcriptions work exactly the same — the same providers, the same speed, the same result — we just stop keeping the timing. Local models never send a timing at all.