> ## Documentation Index
> Fetch the complete documentation index at: https://usefulai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Best Real-Time Transcription Models in 2026

export const models = [{
  rank: 1,
  name: "ElevenLabs Scribe v2 Realtime",
  dev: "ElevenLabs",
  icon: "/images/icons/elevenlabs.io.png",
  url: "https://elevenlabs.io/realtime-speech-to-text",
  bestFor: "Highest-accuracy multilingual streaming",
  score: "100",
  price: "$0.39/hour",
  license: "Proprietary",
  custom: "0.141s",
  customLabel: "Time to final"
}, {
  rank: 2,
  name: "Cartesia Ink 2",
  dev: "Cartesia",
  icon: "/images/icons/cartesia.ai.png",
  url: "https://docs.cartesia.ai/build-with-cartesia/stt/latest",
  bestFor: "Accuracy-first voice agents",
  score: "100",
  price: "$0.40/hour",
  license: "Proprietary",
  custom: "0.211s",
  customLabel: "Time to final"
}, {
  rank: 3,
  name: "Qwen3 ASR Flash Realtime",
  dev: "Alibaba",
  icon: "/images/icons/qwen.ai.png",
  url: "https://www.alibabacloud.com/help/en/model-studio/real-time-speech-recognition-user-guide",
  bestFor: "Budget multilingual accuracy",
  score: "98",
  price: "$0.17/hour",
  license: "Proprietary",
  custom: "0.476s",
  customLabel: "Time to final"
}, {
  rank: 4,
  name: "Grok Speech-to-Text Streaming",
  dev: "SpaceXAI",
  icon: "/images/icons/x.ai.png",
  url: "https://docs.x.ai/developers/models/speech-to-text",
  bestFor: "Low-cost streaming with turn detection",
  score: "96",
  price: "$0.20/hour",
  license: "Proprietary",
  custom: "0.373s",
  customLabel: "Time to final"
}, {
  rank: 5,
  name: "AssemblyAI Universal-3.5 Pro Realtime",
  dev: "AssemblyAI",
  icon: "/images/icons/assemblyai.com.png",
  url: "https://www.assemblyai.com/blog/contextual-awareness-in-universal-3-5-pro-realtime",
  bestFor: "Tunable accuracy for voice agents",
  score: "93",
  price: "$0.45/hour",
  license: "Proprietary",
  custom: "0.445s",
  customLabel: "Time to final"
}, {
  rank: 6,
  name: "Soniox v5 Real-Time",
  dev: "Soniox",
  icon: "/images/icons/soniox.com.png",
  url: "https://soniox.com/docs/stt/models",
  bestFor: "Best price-to-performance streaming",
  score: "89",
  price: "$0.12/hour",
  license: "Proprietary",
  custom: "0.054s",
  customLabel: "Time to final"
}, {
  rank: 7,
  name: "Google Chirp 3 Streaming",
  dev: "Google",
  icon: "/images/icons/google.com.png",
  url: "https://docs.cloud.google.com/speech-to-text/docs/models/chirp-3",
  bestFor: "Broad multilingual coverage",
  score: "86",
  price: "$0.24/hour",
  license: "Proprietary",
  custom: "1.276s",
  customLabel: "Time to final"
}, {
  rank: 8,
  name: "OpenAI GPT Realtime Whisper",
  dev: "OpenAI",
  icon: "/images/icons/openai.com.png",
  url: "https://developers.openai.com/api/docs/models/gpt-realtime-whisper",
  bestFor: "Realtime voice-app transcription",
  score: "85",
  price: "$1.02/hour",
  license: "Proprietary",
  custom: "0.688s",
  customLabel: "Time to final"
}, {
  rank: 9,
  name: "Inworld STT 1 Realtime",
  dev: "Inworld",
  icon: "/images/icons/inworld.ai.png",
  url: "https://docs.inworld.ai/stt/overview",
  bestFor: "Cheapest low-latency streaming",
  score: "82",
  price: "$0.10/hour",
  license: "Proprietary",
  custom: "0.082s",
  customLabel: "Time to final"
}, {
  rank: 10,
  name: "Mistral Voxtral Mini Transcribe Realtime",
  dev: "Mistral",
  icon: "/images/icons/mistral.ai.png",
  url: "https://docs.mistral.ai/models/model-cards/voxtral-mini-transcribe-realtime-26-02",
  bestFor: "Self-hostable streaming accuracy",
  score: "80",
  price: "$0.36/hour",
  license: "Open weight",
  custom: "0.682s",
  customLabel: "Time to final"
}, {
  rank: 11,
  name: "Azure AI Speech Real-Time Transcription",
  dev: "Microsoft",
  icon: "/images/icons/microsoft.com.png",
  url: "https://learn.microsoft.com/en-us/azure/ai-services/speech-service/speech-to-text",
  bestFor: "Enterprise multilingual transcription",
  score: "80",
  price: "$0.40/hour",
  license: "Proprietary",
  custom: "0.625s",
  customLabel: "Time to final"
}, {
  rank: 12,
  name: "NVIDIA Nemotron 3.5 ASR Streaming 0.6B",
  dev: "NVIDIA",
  icon: "/images/icons/nvidia.com.png",
  url: "https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b",
  bestFor: "Self-hosted streaming ASR",
  score: "79",
  price: "n/a",
  license: "Open weight",
  custom: "0.418s",
  customLabel: "Time to final"
}, {
  rank: 13,
  name: "Amazon Transcribe Streaming",
  dev: "Amazon",
  icon: "/images/icons/aws.amazon.com.png",
  url: "https://docs.aws.amazon.com/transcribe/latest/dg/streaming.html",
  bestFor: "Managed enterprise streaming",
  score: "74",
  price: "$0.60/hour",
  license: "Proprietary",
  custom: "0.620s",
  customLabel: "Time to final"
}, {
  rank: 14,
  name: "Deepgram Nova-3",
  dev: "Deepgram",
  icon: "/images/icons/deepgram.com.png",
  url: "https://developers.deepgram.com/docs/models-languages-overview",
  bestFor: "Fast voice-agent default",
  score: "64",
  price: "$0.25/hour",
  license: "Proprietary",
  custom: "0.066s",
  customLabel: "Time to final"
}, {
  rank: 15,
  name: "Deepgram Flux General EN",
  dev: "Deepgram",
  icon: "/images/icons/deepgram.com.png",
  url: "https://developers.deepgram.com/docs/flux/quickstart",
  bestFor: "Fastest endpointing for agents",
  score: "55",
  price: "$0.34/hour",
  license: "Proprietary",
  custom: "0.021s",
  customLabel: "Time to final"
}];

export const Fav = ({icon, size = "h-4 w-4"}) => <img src={icon} alt="" noZoom className={"relative -top-px mr-1 inline rounded-sm object-contain " + size} />;

export const LicenseBadge = ({license}) => license === "Open weight" ? <span className="inline-flex items-center rounded bg-emerald-50 px-1.5 py-[2px] text-xs font-medium leading-4 text-emerald-700 dark:bg-emerald-500/10 dark:text-emerald-400">Open weight</span> : <span className="inline-flex items-center rounded bg-zinc-100 px-1.5 py-[2px] text-xs font-medium leading-4 text-zinc-600 dark:bg-white/10 dark:text-zinc-300">Proprietary</span>;

export const BestForChip = ({children}) => <span className="inline-flex min-w-0 max-w-full items-center rounded bg-sky-50 px-1.5 py-[2px] dark:bg-sky-500/10">
    <span className="truncate text-xs font-medium leading-4 text-sky-700 dark:text-sky-400">{children}</span>
  </span>;

export const HeaderTip = ({label, tip}) => <span className="inline-flex items-center gap-1.5">
    <span>{label}</span>
    <Tooltip tip={tip}>
      <span className="relative top-0.5 inline-flex cursor-pointer text-zinc-500 transition-opacity hover:opacity-70 dark:text-zinc-400">
        <Icon icon="circle-info" size={12} color="currentColor" />
        <span className="sr-only">About {label.toLowerCase()}</span>
      </span>
    </Tooltip>
  </span>;

export const ModelCard = ({model, children}) => <section className="not-prose my-5 rounded-lg border border-zinc-200 bg-white p-5 shadow-sm dark:border-white/10 dark:bg-white/[0.03]">
    <div className="mb-3"><BestForChip>{model.bestFor}</BestForChip></div>
    <div className="flex items-center gap-3">
      <img src={model.icon} alt={model.dev + " logo"} noZoom className="h-10 w-10 shrink-0 rounded-lg object-contain" />
      <div className="min-w-0 flex-1">
        <h2 className="m-0 max-w-full text-xl font-semibold leading-7 tracking-normal">
          <a href={model.url} target="_blank" rel="noreferrer" className="group inline-flex min-w-0 max-w-full items-center gap-1.5 no-underline text-zinc-950 dark:text-white">
            <span className="min-w-0 break-words"><span className="underline-offset-4 group-hover:underline group-focus-visible:underline">{model.name}</span> <span className="font-normal text-zinc-500 dark:text-zinc-400">({model.dev})</span></span>
            <span aria-hidden="true" className="flex shrink-0 text-zinc-400 transition-colors group-hover:text-zinc-900 group-focus-visible:text-zinc-900 dark:text-zinc-500 dark:group-hover:text-white dark:group-focus-visible:text-white"><Icon icon="arrow-up-right" size={12} color="currentColor" /></span>
          </a>
        </h2>
        <div className="mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-[13px] leading-5 uai-ink-muted">
          <LicenseBadge license={model.license} />
          <span aria-hidden="true">∙</span>
          <span>Score <span className="tabular-nums text-zinc-950 dark:text-white">{model.score}</span></span>
          <span aria-hidden="true">∙</span>
          <span>Price <span className="tabular-nums text-zinc-950 dark:text-white">{model.price}</span></span>
          {model.custom && <><span aria-hidden="true">∙</span><span>{model.customLabel} <span className="tabular-nums text-zinc-950 dark:text-white">{model.custom}</span></span></>}
        </div>
      </div>
    </div>
    {children}
  </section>;

export const Take = ({children}) => <div className="not-prose mt-4 text-sm leading-[22px] text-zinc-700 dark:text-zinc-300">{children}</div>;

export const ST = ({label, children}) => <div className="not-prose mt-4">
    <div className="text-sm font-semibold text-zinc-950 dark:text-white">{label}</div>
    <div className="mt-1 flex flex-col gap-2.5 text-sm leading-[22px] text-zinc-700 dark:text-zinc-300">{children}</div>
  </div>;

export const AccessBullets = ({rows}) => <div className="not-prose mt-4 text-sm leading-[22px] text-zinc-700 dark:text-zinc-300">
    <div className="font-semibold text-zinc-950 dark:text-white">How to access</div>
    <div className="mt-1.5 flex flex-col gap-1.5">
      {rows.map(([key, body]) => <span key={key} className="flex items-baseline gap-2.5"><span aria-hidden="true" className="relative -top-0.5 inline-block h-1.5 w-1.5 shrink-0 rounded-full bg-zinc-700 dark:bg-zinc-300" /><span><span className="font-semibold text-zinc-950 dark:text-white">{key}</span> — {body}</span></span>)}
    </div>
  </div>;

export const Alt = ({icon, name, dev, url, children}) => <span className="flex items-baseline gap-2.5">
    <span aria-hidden="true" className="relative -top-0.5 inline-block h-1.5 w-1.5 shrink-0 rounded-full bg-zinc-300 dark:bg-zinc-600" />
    <span><Fav icon={icon} /><a href={url} target="_blank" rel="noreferrer" className="font-medium text-zinc-950 underline underline-offset-2 dark:text-white">{name}</a> <span className="uai-ink-muted">({dev})</span> — {children}</span>
  </span>;

<div className="not-prose -mt-2 mb-8 flex flex-wrap items-center gap-x-2 text-sm text-zinc-800 dark:text-zinc-200 lg:-mt-5" style={{ paddingLeft: "2px" }}>
  <span className="inline-flex items-center gap-1.5"><Icon icon="clock-rotate-left" size={10} color="currentColor" /> Updated <time dateTime="2026-07-12">July 12, 2026</time></span>
</div>

Real-time transcription models turn speech into text as you talk, trading off accuracy, latency, price, and how fast they detect when a speaker finishes. Vendor latency claims rarely mean the same thing, so we ranked 15 streaming models on one independent benchmark.

Our primary score is final-transcript accuracy from the Artificial Analysis streaming speech-to-text benchmark, normalized to a 0-100 scale where higher is better. It covers English-language audio only, so treat it as a strong baseline, not the last word: telephony, accents, and other languages can shift the order.

## Best Real-Time Transcription Models

<div className="uai-overview-breakout not-prose my-5">
  <input type="checkbox" id="models-more" className="fy-more-toggle sr-only" aria-label={"Show all 15 realtime transcription models"} />

  <div className="fy-more-table overflow-x-auto rounded-lg border border-zinc-200 bg-white dark:border-white/10 dark:bg-white/[0.03]">
    <div className="table text-sm" style={{ width: "100%" }}>
      <div className="table-header-group bg-zinc-50/60 dark:bg-white/[0.02]">
        <div className="table-row">
          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">#</span>
          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">Model</span>
          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">Best for</span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-right text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label="Score" tip={"UsefulAI's 0-100 streaming score is normalized from Artificial Analysis final-transcript word error. Higher means more accurate."} />
          </span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-right text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label="Price" tip={"Current USD per hour of streaming audio for the represented route. Volume, plan, region, features, and self-hosting can change the price."} />
          </span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label="License" tip="Proprietary means no public model weights. Open weight means weights are available, though exact licenses and commercial-use terms vary." />
          </span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label={"Time to final"} tip={"Seconds from detected end of speech to the final transcript in Artificial Analysis testing. Lower is faster."} />
          </span>
        </div>
      </div>

      <div className="table-row-group">
        {models.map((model, index) => (
                        <a key={model.name} href={model.url} target="_blank" rel="noreferrer" className={"table-row no-underline transition-colors hover:bg-zinc-50/60 dark:hover:bg-white/[0.02]" + (models.length > 9 && index >= 7 ? " fy-more-row" : "")}>
                          <span className="table-cell w-8 whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle text-[13px] tabular-nums dark:border-white/5"><span className="sr-only">Rank </span><span className="uai-ink-muted">{model.rank}</span></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle dark:border-white/5"><span className="flex items-center gap-2.5"><Fav icon={model.icon} /><span className="text-sm font-semibold leading-5 text-zinc-950 dark:text-white">{model.name}</span></span></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle text-[13px] leading-5 text-zinc-950 dark:border-white/5 dark:text-white"><span className="sr-only">Best for: </span>{model.bestFor}</span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 text-right align-middle text-[13px] leading-5 tabular-nums text-zinc-950 dark:border-white/5 dark:text-white"><span className="sr-only">Score: </span>{model.score}</span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 text-right align-middle text-[13px] leading-5 tabular-nums dark:border-white/5"><span className="sr-only">Price: </span><span className="uai-ink-muted">{model.price}</span></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle dark:border-white/5"><span className="sr-only">License: </span><LicenseBadge license={model.license} /></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle text-[13px] leading-5 text-zinc-950 dark:border-white/5 dark:text-white"><span className="sr-only">Time to final: </span>{model.custom}</span>
                        </a>
                      ))}
      </div>
    </div>
  </div>

  {models.length > 9 && <div className="fy-more-pill mt-3 flex justify-center">
      <label htmlFor="models-more" className="inline-flex cursor-pointer items-center gap-1.5 rounded-full border border-zinc-200 px-4 py-1.5 text-[13px] font-medium text-zinc-600 transition-colors hover:text-zinc-900 dark:border-white/15 dark:text-zinc-300 dark:hover:text-white">
        <span className="fy-more-open inline-flex items-center gap-1.5">Show {models.length - 7} more <Icon icon="chevron-down" size={13} /></span>
        <span className="fy-more-close items-center gap-1.5">Show less <Icon icon="chevron-up" size={13} /></span>
      </label>
    </div>}
</div>

***

<ModelCard model={models[0]}>
  <Take>The most accurate streaming model in the benchmark, with clean live partials and wide language support - the default pick when transcript quality matters most.</Take>

  <ST label="Strengths:">
    <div>Top-tier final accuracy paired with unusually clean, stable partial transcripts, so words hold their place as you speak instead of rewriting themselves.</div>
    <div>Language coverage is broad and detection is automatic, which makes it the safest choice when accuracy across many languages is the priority.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It is proprietary and API-only, with no self-host route, and sits at the pricier end of the field.</div>
    <div>Diarization is comparatively weak, so for clean multi-speaker separation you may prefer AssemblyAI or a dedicated diarization step.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://elevenlabs.io/docs/eleven-api/guides/how-to/speech-to-text/realtime" target="_blank" rel="noreferrer" className="underline underline-offset-2">ElevenLabs Realtime Speech-to-Text API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[1]}>
  <Take>Ties for the top accuracy spot and adds genuine semantic endpointing, making it one of the strongest picks built specifically for voice agents.</Take>

  <ST label="Strengths:">
    <div>Final-transcript accuracy is at the very top of the field, and its semantic endpointing judges when you have actually finished a thought rather than just paused.</div>
    <div>That combination makes it one of the most convincing streaming models for building responsive voice agents.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It is English-only, which rules it out for multilingual products, and it is proprietary and API-only.</div>
    <div>If you need broad language coverage, ElevenLabs Scribe v2 or a multilingual model like Qwen3 or Nemotron will serve you better.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.cartesia.ai/build-with-cartesia/stt/latest" target="_blank" rel="noreferrer" className="underline underline-offset-2">Cartesia Speech-to-Text API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[2]}>
  <Take>One of the cheapest ways to get near-top final accuracy, as long as you can live with rough, unstable live partials.</Take>

  <ST label="Strengths:">
    <div>You get final accuracy close to the best models here at one of the lowest prices in the field, plus strong multilingual and dialect coverage.</div>
    <div>For high-volume, cost-sensitive transcription where the finished transcript matters more than the live feed, it is hard to beat on value.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Its live partials are rough and unstable - fine if you only consume the final transcript, but a poor fit for interfaces where users watch words appear as they talk.</div>
    <div>For steady live captions, Soniox v5, Cartesia Ink 2, or ElevenLabs are better.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.alibabacloud.com/help/en/model-studio/real-time-speech-recognition-user-guide" target="_blank" rel="noreferrer" className="underline underline-offset-2">Alibaba Cloud Model Studio</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[3]}>
  <Take>A cheap newcomer with accurate final transcripts and built-in turn detection, though its live partials lag well behind the accuracy leaders.</Take>

  <ST label="Strengths:">
    <div>Accurate final transcripts and built-in turn detection at a low price, from a newcomer clearly aiming at the voice-agent market.</div>
    <div>If you want inexpensive streaming and mostly care about the committed transcript, it is a credible option worth testing.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Like Qwen3, its live partials trail the accuracy leaders, so it is weaker for interfaces that display text as you talk.</div>
    <div>It is also very new, so integrations and tooling are thinner than Deepgram's or AssemblyAI's. Proprietary and API-only.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.x.ai/developers/models/speech-to-text" target="_blank" rel="noreferrer" className="underline underline-offset-2">xAI API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[4]}>
  <Take>A top-accuracy incumbent with a rare accuracy-versus-latency switch, though diarization is a paid, slower add-on rather than a core strength.</Take>

  <ST label="Strengths:">
    <div>Among the most accurate streaming models, with an explicit switch between maximum accuracy and minimum latency that few rivals offer, so you can tune the same model to the job.</div>
    <div>Stable, immutable transcripts make it dependable for live captioning.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Speaker diarization is a paid add-on and has historically been slower than the core transcription, so multi-speaker work costs more and lags.</div>
    <div>If diarization is central, test it carefully; if raw value matters more, Soniox v5 undercuts it heavily.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.assemblyai.com/docs/streaming/getting-started/transcribe-streaming-audio" target="_blank" rel="noreferrer" className="underline underline-offset-2">AssemblyAI Streaming API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[5]}>
  <Take>The value outlier here - near-top accuracy and among the fastest finals at the lowest price, and still oddly absent from most roundups.</Take>

  <ST label="Strengths:">
    <div>It combines near-top accuracy, among the fastest finals in the field, and the lowest price of any highlighted model, which is a genuinely rare mix.</div>
    <div>There is also a first-party mobile app, so it is one of the few here you can try without writing code.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The main hesitation is maturity: it is a smaller, newer vendor than the incumbents, which matters for risk-averse enterprise buyers.</div>
    <div>Feature depth like advanced diarization is still catching up to AssemblyAI and the larger clouds. Proprietary and API-first.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in <a href="https://app.soniox.com/help-center/mobile-app/usage/getting-started" target="_blank" rel="noreferrer" className="underline underline-offset-2">Soniox Mobile App</a>.</span>],
["API", <span>Accessible via <a href="https://soniox.com/docs/stt/rt/real-time-transcription" target="_blank" rel="noreferrer" className="underline underline-offset-2">Soniox Realtime Speech-to-Text API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[6]}>
  <Take>Broad language coverage from a major cloud ASR, but slow finalization and steep list pricing make it hard to recommend for latency-sensitive work.</Take>

  <ST label="Strengths:">
    <div>Very broad language coverage plus the enterprise controls - data residency, regional endpoints, compliance - that regulated products often require.</div>
    <div>As a pure recognition model it is accurate across a wide multilingual range, which is its real reason to exist.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Finalization is the slowest of any model here, which disqualifies it for latency-sensitive voice agents, and its list pricing is steep until you reach very high volume.</div>
    <div>For real-time work, Soniox v5 or Deepgram are far better fits.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.cloud.google.com/speech-to-text/docs/streaming-recognize" target="_blank" rel="noreferrer" className="underline underline-offset-2">Google Cloud Speech-to-Text API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[7]}>
  <Take>Solid, general-purpose realtime transcription that you pay a heavy premium for - most teams should downshift to a cheaper OpenAI transcribe model.</Take>

  <ST label="Strengths:">
    <div>General-purpose accuracy that holds up well across everyday speech, delivered through a mature, well-documented realtime interface built for conversational voice apps.</div>
    <div>For products that want transcription which just works without configuration, it is a dependable default.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It is by far the most expensive option here, and it does not lead on accuracy or latency to justify that premium.</div>
    <div>Most teams should drop to a cheaper transcribe model such as GPT-4o Transcribe, or move to Soniox v5 for value.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://developers.openai.com/api/docs/models/gpt-realtime-whisper" target="_blank" rel="noreferrer" className="underline underline-offset-2">OpenAI Realtime API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[8]}>
  <Take>The cheapest option on this list pairs low latency with built-in turn detection, a strong budget pick for real-time voice work.</Take>

  <ST label="Strengths:">
    <div>The lowest price on the list combined with very low latency is a strong pairing, and built-in turn detection means you get endpointing without bolting on a separate voice-activity step.</div>
    <div>For cost-conscious real-time voice work, it punches above its price.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Accuracy is mid-pack rather than class-leading, so for demanding transcription you will want ElevenLabs, Cartesia, or AssemblyAI.</div>
    <div>It is proprietary and API-only, and as a newer entrant its ecosystem is thinner than the incumbents'.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.inworld.ai/stt/overview" target="_blank" rel="noreferrer" className="underline underline-offset-2">Inworld Speech-to-Text API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[9]}>
  <Take>The standout open-weight pick - it reaches hosted-grade accuracy at low latency and can run on your own GPU, minus diarization and turn detection.</Take>

  <ST label="Strengths:">
    <div>The strongest open-weight option here: it reaches hosted-grade accuracy at low, configurable latency and is genuinely multilingual.</div>
    <div>You can call the hosted API or run the weights yourself, which gives you privacy and data control while shifting cost to your own hardware.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>There is no diarization or turn detection in the realtime model, so voice agents need extra components around it. Self-hosting needs a capable GPU, not a laptop, so "open" does not mean effortless.</div>
    <div>Cartesia or Deepgram Flux handle turn-taking natively.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.mistral.ai/studio-api/audio/speech_to_text" target="_blank" rel="noreferrer" className="underline underline-offset-2">Mistral Audio Transcription API</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://huggingface.co/mistralai/Voxtral-Mini-4B-Realtime-2602" target="_blank" rel="noreferrer" className="underline underline-offset-2">vLLM</a> after downloading weights from <a href="https://huggingface.co/mistralai/Voxtral-Mini-4B-Realtime-2602" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[10]}>
  <Take>A mature enterprise ASR with deep customization and compliance features, but it trails the newer wave on latency and real-time value.</Take>

  <ST label="Strengths:">
    <div>Deep customization - custom vocabulary, pronunciation, and tuned models - plus broad language support and the compliance and data-handling controls enterprises need.</div>
    <div>For regulated, large-scale deployments that value configurability over raw speed, it remains a serious option.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It trails the newer wave on latency and, at standard real-time rates, on price, so it is a weak value pick for greenfield projects.</div>
    <div>For faster or cheaper streaming, Soniox v5, Deepgram, or Inworld are stronger. Proprietary and API-based.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in <a href="https://learn.microsoft.com/en-us/azure/ai-services/speech-service/speech-studio-overview" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Speech Studio</a>.</span>],
["API", <span>Accessible via <a href="https://learn.microsoft.com/en-us/azure/ai-services/speech-service/speech-to-text" target="_blank" rel="noreferrer" className="underline underline-offset-2">Azure AI Speech API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[11]}>
  <Take>The most flexible self-hosted pick - open weights, tunable latency, and multilingual coverage in a compact 0.6B model.</Take>

  <ST label="Strengths:">
    <div>Open weights with runtime-selectable latency let you dial the accuracy-speed trade without swapping models, and it is multilingual and light enough to self-host at high concurrency.</div>
    <div>Running it yourself keeps audio on your infrastructure and makes cost depend on your hardware rather than an API meter.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>You own the deployment: serving, scaling, and updates are on you, which is real work versus a managed API. Peak accuracy trails the top hosted models.</div>
    <div>If you want open weights without the ops, Voxtral Mini offers a hosted API too.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://build.nvidia.com/nvidia/nemotron-asr-streaming/api" target="_blank" rel="noreferrer" className="underline underline-offset-2">NVIDIA Build API trial</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/nemotron-asr-streaming.html" target="_blank" rel="noreferrer" className="underline underline-offset-2">NVIDIA NeMo or Speech NIM</a> after downloading weights from <a href="https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[12]}>
  <Take>A dependable managed streaming service that now trails newer models on accuracy, latency, and price, with little to pull you toward it.</Take>

  <ST label="Strengths:">
    <div>A mature, heavily operated managed service with predictable behavior, custom vocabulary, and the scale and reliability large deployments count on.</div>
    <div>It handles high-volume streaming transcription dependably across a wide set of languages.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It now trails newer models on accuracy and latency while costing more than most, so there is little reason to start here on the merits.</div>
    <div>For better accuracy, latency, or price, Soniox v5, Deepgram, or ElevenLabs all lead it.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.aws.amazon.com/transcribe/latest/APIReference/API_streaming_StartStreamTranscription.html" target="_blank" rel="noreferrer" className="underline underline-offset-2">Amazon Transcribe Streaming API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[13]}>
  <Take>The long-standing voice-agent default: very fast and reliable on clean audio, though newer models have caught and passed it on accuracy.</Take>

  <ST label="Strengths:">
    <div>Fast, reliable streaming that made it the long-time default for voice agents, with strong tooling, mature SDKs, and consistent low-latency behavior on clean audio.</div>
    <div>For straightforward English voice pipelines, it is still a safe, well-supported workhorse.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>On noisy, accented, or telephony audio its accuracy slips more than the newer leaders, and several models now beat it on final quality.</div>
    <div>If accuracy is the priority, Soniox v5, ElevenLabs, or Cartesia are stronger; for turn-taking, look at Flux.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://developers.deepgram.com/docs/live-streaming-audio" target="_blank" rel="noreferrer" className="underline underline-offset-2">Deepgram Live Streaming API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[14]}>
  <Take>Built for turn-taking rather than raw accuracy - it delivers the fastest finals and fused end-of-turn detection, a deliberate voice-agent trade.</Take>

  <ST label="Strengths:">
    <div>Purpose-built for conversational turn-taking: it fuses transcription with end-of-turn detection and delivers the fastest finals in the field, so agents can respond the moment you actually stop talking.</div>
    <div>For latency-critical voice agents, that focus is the whole point.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It is English-only in this model, and on final-transcript accuracy it sits at the back of this list, so transcription-quality work is better served elsewhere.</div>
    <div>For higher accuracy, look at Soniox v5 or ElevenLabs; for multilingual, choose a different model entirely.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://developers.deepgram.com/docs/flux/quickstart" target="_blank" rel="noreferrer" className="underline underline-offset-2">Deepgram Flux API</a>.</span>],
]}
  />
</ModelCard>

***

## How to Choose

When choosing between these models, consider:

* **Access:** Decide first whether you need a managed API, a first-party app, or a self-hosted model, because that choice drives cost, privacy, latency, and setup work. Most models here are API-only. Only Voxtral Mini and Nemotron 3.5 offer a real self-host route, and Soniox and Azure add a first-party app or portal for trying the model without code.
* **Quality:** We use final-transcript accuracy from the Artificial Analysis streaming benchmark, scored 0-100 where higher is better. Watch the partial-versus-final split: a few models (Qwen3, Grok) produce excellent final transcripts but rough live partials, which is invisible in a single accuracy number and matters if users watch text appear as they speak.
* **Price:** We compare on price per hour of streaming audio. Streaming costs more than batch, committed and volume tiers swing prices widely, and features like diarization are often billed on top - so confirm the tier and add-ons before you budget.
* **Time to final transcript:** This is seconds from the end of speech to the final transcript; lower matters most for voice agents, where the practical target is a sub-500ms end-to-end response. Raw latency is only half of it - how well a model detects that a speaker has finished (its endpointing) shapes the felt responsiveness just as much.

For most teams building voice agents, start with Soniox v5 for value, Cartesia Ink 2 or Deepgram Flux when turn-taking is the hard part, and ElevenLabs Scribe v2 when transcript quality outweighs everything. For private or offline deployments, Voxtral Mini and Nemotron 3.5 are the two open-weight picks worth real testing.

***

## Other Models We Considered

<div className="not-prose my-4 flex flex-col gap-1.5 text-sm text-zinc-700 dark:text-zinc-300">
  <Alt icon={"/images/icons/openai.com.png"} name={"OpenAI GPT-4o Transcribe"} dev={"OpenAI"} url={"https://developers.openai.com/api/docs/models/gpt-4o-transcribe"}>Cheaper OpenAI transcription than the realtime model, capable but not latency-first.</Alt>
  <Alt icon={"/images/icons/speechmatics.com.png"} name={"Speechmatics Realtime Enhanced"} dev={"Speechmatics"} url={"https://docs.speechmatics.com/speech-to-text/models"}>Strong multilingual and enterprise specialist, but final accuracy trails the leaders.</Alt>
  <Alt icon={"/images/icons/smallest.ai.png"} name={"Smallest Pulse"} dev={"Smallest.ai"} url={"https://docs.smallest.ai/waves/v-4-0-0/model-cards/speech-to-text/pulse"}>Very fast finalization, but accuracy and pricing trail the top value picks.</Alt>
  <Alt icon={"/images/icons/openai.com.png"} name={"OpenAI Whisper Large v3"} dev={"OpenAI"} url={"https://huggingface.co/openai/whisper-large-v3"}>A great open local baseline, but not truly streaming without wrappers.</Alt>
  <Alt icon={"/images/icons/nvidia.com.png"} name={"NVIDIA Parakeet Unified EN 0.6B"} dev={"NVIDIA"} url={"https://huggingface.co/nvidia/parakeet-unified-en-0.6b"}>Local favorite for accuracy and speed, but English-only and GPU-bound.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"Kyutai STT"} dev={"Kyutai"} url={"https://kyutai.org/stt/"}>Open streaming that runs on a typical machine, but no managed API.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"Moonshine v2 Streaming"} dev={"Moonshine AI"} url={"https://github.com/moonshine-ai/moonshine"}>On-device streaming for CPU and phones, but off-benchmark with no managed API.</Alt>
  <Alt icon={"/images/icons/gladia.io.png"} name={"Gladia Solaria 1 Realtime"} dev={"Gladia"} url={"https://docs.gladia.io/api-reference/v2/live/init"}>A recognizable API option, but the slowest finalization in the benchmark.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"Rev AI Streaming"} dev={"Rev AI"} url={"https://docs.rev.ai/api/streaming"}>An established, affordable baseline, but the weakest accuracy among current models.</Alt>
</div>

***

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title={"What is the best real-time transcription model right now?"}>
    For pure transcript quality, ElevenLabs Scribe v2 Realtime and Cartesia Ink 2 lead on accuracy. But the model most teams should try first is Soniox v5, which pairs near-top accuracy with among the fastest finals at the lowest price on this list.
  </Accordion>

  <Accordion title={"What is the best real-time transcription model for most people?"}>
    Soniox v5 Real-Time. It is the rare model that is accurate, fast, and cheap at the same time, and there is a first-party app if you want to try it before writing any code. Move to ElevenLabs or Cartesia only when transcript quality has to be the best available.
  </Accordion>

  <Accordion title={"Is Whisper a real-time transcription model?"}>
    Not really. OpenAI's original Whisper is batch-native - it processes fixed audio chunks, so "streaming" wrappers repeatedly recompute overlapping windows, which is slow and jittery. If you want real streaming, use a streaming-native model such as Voxtral Mini Transcribe Realtime, Nemotron 3.5 ASR Streaming, or Kyutai STT.
  </Accordion>

  <Accordion title={"What is the best real-time transcription model you can run locally?"}>
    Voxtral Mini Transcribe Realtime is the strongest open-weight pick, though it needs a capable GPU. Nemotron 3.5 ASR Streaming is smaller but still needs the supported high-end NVIDIA stack. For ordinary-machine or phone deployments, Kyutai STT and Moonshine v2 are the more practical options.
  </Accordion>

  <Accordion title={"What is the best model for voice agents?"}>
    It depends on the hard part. If turn-taking and endpointing are what break your agent, Deepgram Flux fuses transcription with end-of-turn detection and delivers the fastest finals. If you want accuracy plus native endpointing, Cartesia Ink 2 is excellent. For the best overall value, Soniox v5.
  </Accordion>

  <Accordion title={"Is Deepgram Flux better than Nova-3?"}>
    They are built for different jobs. Flux is tuned for conversational turn-taking and the fastest possible finals, which is what voice agents need. Nova-3 is the general-purpose streaming workhorse and scores higher on final-transcript accuracy in our benchmark. Choose Flux for responsiveness, Nova-3 for broader transcription.
  </Accordion>

  <Accordion title={"Do these benchmark scores match real-world use?"}>
    Treat them as a strong starting point, not a guarantee. The benchmark covers English-language audio and does not directly measure 8kHz telephony, multilingual quality, diarization, or full voice-agent latency, so your own workload can reorder the results. Always test the shortlist on your own audio before committing.
  </Accordion>
</AccordionGroup>
