benchmarks/voice agent latency/How voice agent latency is measured
voice AI latency · method and instrument

How voice agent latency is measured, and tested

Almost every latency figure published about a voice agent comes from the platform reporting on itself, and a platform measures from where it stands — which is not where the caller is standing. This board starts somewhere else: a real phone call, recorded on both sides, with both ends of every measurement found in that recording. 5 platforms, 2078 usable turns, and not one number taken from a vendor dashboard. The gap between the two approaches is not small and it is not a bug: a platform's own reported latency runs roughly 490 ms belowwhat we read off the same call's audio. Both describe something real. Only one of them is what a caller sits through.

open data + codeThe caller harness, the offline audio analyzer, and every run's per-turn timings are public in openbenchmarks-labs/voice-agent-latency.github →

Two numbers per platform, and they can disagree

TTFAB is reported twice for every platform. A platform can lead one reading without leading the other, so the table below carries both.

ReadingThe question it answersWhat it means
Median (p50)How long is the pause on a normal turn?Half of all turns are faster than this. It is the wait a caller gets most of the time, and the number to compare if the calls you care about are ordinary ones.
Tail (p95)How bad is it when it is bad?One turn in twenty is at least this slow. It matters more than it looks on a phone call: past roughly two seconds of silence a caller assumes the line dropped and starts talking again, which collides with the agent's reply and derails the turn. A platform can win the median and still do this to callers twice a conversation.

TTFAB data, lowest median first

Every figure read off the call's own audio, pooled over usable turns. Discarded turns are counted, not hidden — a platform that fails to answer is worse than one slightly slower.

#PlatformMedian TTFABp95Tail ratioUsable turnsDiscarded
1Telnyx1,296 ms1,856 ms1.43×419 / 43213
2ElevenLabs1,424 ms1,768 ms1.24×429 / 4323
3Bland AI1,520 ms2,248 ms1.48×429 / 4323
4Vapi1,558 ms2,008 ms1.29×382 / 43250
5Retell AI1,740 ms2,259 ms1.30×419 / 43011

Tail ratio is the two readings divided — p95 ÷ median — and it is the one number a vendor cannot usefully publish about itself, because it only means anything when a single instrument produced both figures on the same calls. At 1.2× a platform's bad turns feel close to its normal ones. At 3× a caller regularly waits three times what the median promised. On a phone call that is where the damage is: past roughly two seconds of silence a caller assumes the line dropped and starts talking over the agent, which collides with the reply and derails the turn. So a platform can win the median and still do that to callers twice a conversation — read the tail ratio before the median, not after it.

Every turn we refused to time, and why

A benchmark that quietly drops the turns it finds inconvenient can report any number it likes. These are published per platform and per reason so the denominator is auditable.

PlatformDiscardedOf attemptedReasons
Telnyx13432vad_disagree ×9, no_response ×4
ElevenLabs3432vad_disagree ×3
Bland AI3432vad_disagree ×2, no_response ×1
Vapi50432vad_disagree ×49, no_response ×1
Retell AI11430vad_disagree ×10, double_talk ×1

What a discard is, and what it means here. The dominant reason is vad_disagree: our two independent speech detectors did not agree on where speech began, so we decline to time the turn rather than average a guess. On most platforms that is instrument noise, and the counts are correspondingly small — two or three turns in four hundred. Vapi is the exception, and the reason is in the audio rather than in our detectors. Its agent frequently begins a reply, stops itself within a few hundred milliseconds, and resumes about a second later. Our analyzer flags that as vad_onset_late — one detector locking onto the false start, the other onto the real reply — and it fires on 18 Vapi turns against 1 across all four other platforms combined, a median of 359 ms apart. A restart is a property of the agent, not of the recording, so Vapi's discard count belongs to Vapi.

route by workflow

There is no single fastest voice agent platform — which one wins depends on which pause your callers actually notice. Pick the workflow that matches yours:

Full ranking, both readings, and the discard counts: the voice agent latency benchmark →

Read off the call's audio, never from a platform's timestamp

A platform measures from where it stands, and the caller is not standing there. We checked that two ways on this bench. A platform's own recording of a call reads roughly 550 ms earlier than our recording of the same call. The latency a platform reports for itself runs roughly 490 ms below what we measure from that call's audio. The two figures agree, and that agreement is the finding: both describe the moment a reply was produced, not the moment a caller heard it. Neither is dishonest — they answer a different question than the one a caller is asking. This board answers the caller's.

1. A caller robot dials the platform's agent over a real phone call and reads a fixed script — a greeting, several scripted questions, and a goodbye — one measured turn each.

2. Both sides of the call are recorded on one clock (a dual-channel recording).

3. Both endpoints are then found in that recording: our speech-end (t1) and the agent's reply start (t2), each by a speech detector (Silero VAD) with an energy refinement and an independent cross-check. No timestamp reported by any platform is used.

4. TTFAB = t2 − t1, per turn. Turns failing quality gates (the two sides talking over each other, detectors disagreeing, no reply) are discarded and the discard counts are published.

Recording-path overhead sits inside every figure here. We have not characterised the current path against a known-delay reference, so we quote no overhead figure and subtract none.

We always call from Plivo, which is not a platform under test, but the leg that answers belongs to whoever ships the number: Telnyx on its own network, Retell's and Bland's Twilio-backed inside their own accounts, Vapi's upstream undisclosed, and ElevenLabs — which sells no numbers — on a Twilio number we bought for it. Twilio was a deliberate choice there: a Telnyx number would have worked, but Telnyx is itself on this board, and one platform's network should not carry another platform's row.

A discarded turn is one we could not time to our own standard: the two sides talked over each other, our two speech detectors disagreed on where speech began, or no reply came. Discards are published per reason and per platform, because the count is sometimes a fact about the platform rather than about us — an agent that starts a reply, stops, and resumes a second later will split our detectors, and that is the agent's behaviour, not our recording's.

Our speech-end is found by a detector, not by matching a known waveform. It carries a few milliseconds of error. Differences smaller than that are not resolvable, and we do not claim them.

Cost/min is measured the same way the latency is: from what actually happened, not from a rate card. After a run we ask each platform's own billing API what every call cost, sum those charges, sum the seconds each platform says it invoiced for, and divide — total cost ÷ total billed minutes, pooled across the run rather than averaged per call, so a long call weighs more than a short one. Two consequences worth knowing. Where a platform bills a minimum, the figure is lower than the cost of a minute of conversation: Telnyx charges 60 seconds for a ~44-second call, so its invoiced $0.0500 sits against $0.0722 per minute actually spent talking, and both are published. And the carrier leg is excluded throughout — that is our cost for dialling, identical for every platform, and folding it in would tax each row for our own plumbing. Anything that qualifies a figure — a free or discounted tier, a unit conversion, an excluded component — travels with it in cost_notes rather than being silently absorbed.

Endpointing — how long a platform waits after you stop talking before it decides you are finished — is pinned to 0.1 s on Telnyx, Vapi and Retell. It is the one setting we do not leave at the default, and the reason is that it is a timer sitting inside the number being measured: a platform that ships a 1.5 s wait posts a slower TTFAB without its stack being any slower, and the board would be comparing configuration choices rather than engineering. Vapi shipped 0.4 s (1.5 s after speech ending without punctuation) and Retell 1000 ms; both now run 0.1 s. Bland and ElevenLabs expose no equivalent fixed-wait knob, so they run whatever they ship and their figures still contain a wait we could not equalise.

Full method, the per-turn latency curve, and the instrument's own limits are on the voice agent latency benchmark.

How voice agent latency is measured — common questions

How do I test voice agent latency myself?

The whole apparatus is public, so the short answer is: run ours. A caller robot dials the platform's agent over a real phone call and reads a fixed script — a greeting, several scripted questions, and a goodbye — one measured turn each. Both sides of the call are recorded on one clock (a dual-channel recording). Both endpoints are then found in that recording: our speech-end (t1) and the agent's reply start (t2), each by a speech detector (Silero VAD) with an energy refinement and an independent cross-check. No timestamp reported by any platform is used. TTFAB = t2 − t1, per turn. Turns failing quality gates (the two sides talking over each other, detectors disagreeing, no reply) are discarded and the discard counts are published. The caller harness and the offline analyzer are in openbenchmarks-labs/voice-agent-latency, along with every run's per-turn timings, so you can either re-derive our published figures from the saved audio or point the same harness at a platform we have not measured. If you would rather build your own, the two decisions that matter most are these: record both sides of the call on one clock, and find both endpoints in that recording rather than accepting any timestamp the platform hands you.

Can I trust vendor reported voice agent latency numbers?

Trust them for what they measure, which is not what you are asking. A platform measures from where it stands, and the caller is not standing there. We checked that two ways on this bench. A platform's own recording of a call reads roughly 550 ms earlier than our recording of the same call. The latency a platform reports for itself runs roughly 490 ms below what we measure from that call's audio. The two figures agree, and that agreement is the finding: both describe the moment a reply was produced, not the moment a caller heard it. Neither is dishonest — they answer a different question than the one a caller is asking. This board answers the caller's.

Is there a voice agent latency benchmark measured on real phone calls?

This one. Every figure comes from an actual phone call placed over a real carrier to the platform's own agent, and is read out of the saved audio of that call. No simulated transport, no loopback, no dashboard export. The caller is a robot reading a fixed script, which is the only simulated part — and it is simulated on our side of the call, never on the platform's.

How accurate is the measurement itself?

Bounded, and stated rather than assumed. Our speech-end is located by a detector rather than by matching a known waveform, so it carries a few milliseconds of error, and differences smaller than that are not resolvable and are not claimed. Recording-path overhead sits inside every figure on this board; we have not characterised the current path against a known-delay reference, so we quote no overhead figure and subtract none. That makes these numbers comparable to each other — same path, same caller, same carrier — and only approximately comparable to figures produced by a different instrument.

Why not just use each platform's own latency dashboard?

So no platform timestamp is used anywhere on this board. No dashboard figure is copied. Both ends of every measurement are found in the call's own recording. A speech detector locates the moment our caller stops talking and the moment the agent's audio starts. An energy pass refines each to the sample. A second, independent detector has to agree — where the two disagree beyond tolerance, the turn is discarded rather than averaged. The analyzer runs offline on the saved audio, with no credentials and no network. Anyone who does not trust us can re-derive every figure from the recording.

What is TTFAB (Time To First Audio Byte)?

Time from the moment the caller stops speaking to the moment the agent's audio starts — the silence a real caller sits through on every turn. Measured from a saved recording of the actual phone call, not from any API timestamp. Lower is better. Also written time to first audio byte, and closely related to what other boards call time to first byte (TTFB) or time to first audio (TTFA).

Is TTFAB the same as time to first byte (TTFB) or time to first audio (TTFA)?

Close, and the difference is worth knowing. Time to first byte (TTFB) is borrowed from HTTP, where it means the first byte of a response leaving a server; applied to a voice stack it usually means the first byte of synthesised audio leaving the platform. Time to first audio (TTFA) is used loosely for much the same thing. TTFAB as measured here starts and ends somewhere else: it starts when the caller stops speaking, not when the platform decides they have, and it ends when the agent's audio is present in the recording of the call, not when the platform emitted it. So it contains the endpointing wait and both network legs, which a server-side first-byte figure does not. Expect it to read higher than a vendor's TTFB for the same call, and expect the gap to be the part of the wait the caller experiences and the server never sees.

How is this different from vendor-reported latency?

A platform measures from where it stands, and the caller is not standing there. We checked that two ways on this bench. A platform's own recording of a call reads roughly 550 ms earlier than our recording of the same call. The latency a platform reports for itself runs roughly 490 ms below what we measure from that call's audio. The two figures agree, and that agreement is the finding: both describe the moment a reply was produced, not the moment a caller heard it. Neither is dishonest — they answer a different question than the one a caller is asking. This board answers the caller's.

How is the latency actually measured?

A caller robot dials the platform's agent over a real phone call and reads a fixed script — a greeting, several scripted questions, and a goodbye — one measured turn each. Both sides of the call are recorded on one clock (a dual-channel recording). Both endpoints are then found in that recording: our speech-end (t1) and the agent's reply start (t2), each by a speech detector (Silero VAD) with an energy refinement and an independent cross-check. No timestamp reported by any platform is used. TTFAB = t2 − t1, per turn. Turns failing quality gates (the two sides talking over each other, detectors disagreeing, no reply) are discarded and the discard counts are published.

Why not pin the same model, speech recognition and voice on every platform?

The stack is not pinned. Each agent runs the model, speech recognition and voice the platform gives a new signup, and we record what it chose. Endpointing is the single exception — it is a timer inside the number we report, so where a platform exposes it we set it to 0.1 s. That one override is stated in full below. Pinning a stack measures a platform you would have to configure to match, not the one you would buy — and it excludes the vertically integrated platforms outright, since you cannot drop a third-party speech recogniser into a platform that owns its own.

What does this benchmark NOT measure?

Not measured: answer quality, voice quality, platform features, and published pricing plans — this board measures response latency, with the cost each platform actually invoiced for the same run reported beside it. Nor is it every platform. LiveKit Agents and Pipecat are frameworks you host yourself, so what a benchmark would time there is somebody's deployment rather than a product. The raw speech-to-speech APIs — OpenAI's Realtime API, Gemini Live — answer a socket, not a phone, and would need a telephony layer built around them first, which would then be inside the measurement. Twilio's own agent product simply has not been dialled yet. Until any of them is measured on the same script over the same carrier, this board has no number for it, and neither does anyone quoting one. Treat those as vendor claims until measured.