guides
How to Evaluate AI Speech-to-Text APIs Before You Integrate
A five-pillar pre-integrate checklist for speech-to-text APIs: spot-check the same 3-minute audio, verify diarization/timestamps, compare streaming vs batch latency and billing, map $/min add-ons, and read training/retention language before you ship.

Picking a speech-to-text (STT) API from a leaderboard screenshot is how products inherit the wrong bill and the wrong failure mode. Before you integrate, run a pre-commit evaluation on your audio—accents, product names, HVAC noise—not on a vendor’s clean demo reel.
This guide is a five-pillar checklist for STT APIs. Concrete examples use Deepgram, AssemblyAI, OpenAI Platform transcription models, and Azure Speech. Meeting-note products such as Otter.ai and editors like Descript appear only as productized alternatives when you do not need an API. ElevenLabs is adjacent for TTS, not STT. This is not a meeting-bot comparison.
Bottom line: Freeze 3–5 real clips (~3 minutes each), spot-check proper nouns and numbers, then decide streaming vs batch by product latency—not by homepage FPS GIFs. Map base $/min or $/hr plus add-ons (diarization, redaction, medical). Read training / retention / region language your counsel can live with. Prefer Deepgram or AssemblyAI when you want speech-native APIs with clear add-on menus; OpenAI when you already standardize on that platform; Azure when you are committed to Microsoft cloud + regional controls.
Findings: public docs + limited hands-on framing (verification 2026-11-04, Asia/Shanghai). No invented WER leaderboards. Re-check official pricing calculators before you forecast COGS.
Who this is for
- Product/engineering leads adding captions, call notes, or voice agents
- Platforms choosing between batch post-processing and real-time captions
- Teams comparing “buy Otter/Descript” vs “build on an STT API”
Out of scope: courtroom stenography certification, and offline-only embedded DSP chips.
The five evaluation pillars
| # | Pillar | Pass signal |
|---|---|---|
| 1 | Same ~3 min audio → transcript spot-check | Proper nouns, digits, and disfluencies acceptable for your bar |
| 2 | Diarization & timestamps | Speaker labels / word timings match your UI needs |
| 3 | Streaming vs batch latency | p50/p95 fit the product; idle WebSocket billing understood |
| 4 | Pricing units & hidden fees | Base model + add-ons + multichannel math for your minutes |
| 5 | Data: training, retention, region | Written defaults you can show security/legal |
Pillar 1 — Same 3-minute audio, WER-style spot-check
Protocol: Freeze three clips: (A) quiet native speaker reading product names, (B) two-speaker overlap, (C) noisy / accented. Transcribe with each vendor’s default recommended pre-recorded model. Do not publish a fake overall WER—spot-check 20 critical tokens (SKUs, amounts, names).
Pass if critical tokens survive or are systematically fixable with keyterm boosting. Fail if the model invents confident wrong drug/finance terms.
| Vendor | Public model shape (check live docs) | Eval tip |
|---|---|---|
| Deepgram | Nova-3 / Flux STT families; multilingual SKUs | Try keyterm prompting add-on on hard nouns |
| AssemblyAI | Universal-3.5 Pro / Universal-2 pre-recorded; set speech_models explicitly | Free vs paid defaults can differ—pin the model |
| OpenAI Platform | gpt-transcribe (~$0.0045/min) replacing deprecated whisper-1 paths | 25 MB file limits; plan splitting carefully |
| Azure Speech | Batch vs fast vs real-time SKUs | Batch is usually the COGS winner for files |
Meeting apps (Otter.ai, Descript) can win if you need a UI tomorrow and not an API—still run the same clips before you standardize.
Pillar 2 — Diarization and timestamps
Protocol: On clip B, require speaker labels and word-level or turn-level timestamps sufficient for your player. Count speaker swap errors qualitatively.
Public pricing reminders (snapshot 2026-11-04):
- Deepgram: Speaker diarization included on pre-recorded; streaming diarization listed about $0.0020/min pay-as-you-go (Growth lower).
- AssemblyAI: Async diarization about +$0.02/hr standard (+$0.065 experimental); streaming diarization about +$0.12/hr.
- OpenAI: Prefer current diarize-capable transcription SKUs on the pricing page; older
whisper-1/ GPT-4o-transcribe paths are on deprecation clocks—read the migration notes. - Azure: Diarization often appears as an enhanced add-on (commonly cited near $0.30/hr on retail mirrors—confirm Azure price sheet for your region).
Pass: Labels are stable enough for your UX. Fail: You need courtroom-grade diarization and the API is “best effort” only—budget human review.
Pillar 3 — Streaming vs batch latency
Protocol: Define the product need first: live captions / voice agent (streaming) vs post-call summary (batch). Measure end-to-end seconds on a 30s utterance for streaming, and queue→result time for batch.
Billing traps to document in the design doc:
- AssemblyAI streaming bills WebSocket open time, including idle—close sockets when calls end.
- Deepgram markets per-second audio billing without block rounding for normal requests—still watch multichannel (stereo can double).
- Azure real-time vs batch vs “fast transcription” are different meters (see Pillar 4).
- OpenAI live transcription SKUs are priced far above file transcription per minute—don’t stream “because we can.”
Pillar 4 — Pricing units and hidden fees (snapshot 2026-11-04, Asia/Shanghai)
Figures are public list hints, not quotes. Regions and commits change numbers.
Deepgram (deepgram.com/pricing)
| Item | Pay-as-you-go (public) | Notes |
|---|---|---|
| Free credit | $200 (no card) | FAQ: roughly 700+ hours Nova-3 ballpark—confirm live |
| Nova-3 pre-recorded monolingual | $0.0043/min | Growth $0.0036/min |
| Nova-3 streaming monolingual | $0.0077/min | Growth $0.0065/min |
| Streaming diarization add-on | $0.0020/min | Pre-recorded diarization included |
| Growth commit | From $4,000/yr prepaid | Up to ~20% lower rates |
AssemblyAI (assemblyai.com/pricing)
| Item | Public | Notes |
|---|---|---|
| Free credits | $50, no card | Lower streaming concurrency on free |
| Universal-3.5 Pro pre-recorded | $0.21/hr | Add-ons stack |
| Universal-2 pre-recorded | $0.15/hr | |
| Universal-3.6 Pro Realtime | $0.45/hr base | Session-duration billing |
| Universal-Streaming | $0.15/hr | Cheaper; validate quality for agents |
| EU region | Same $ as US | api.eu.assemblyai.com |
OpenAI Platform (developers.openai.com pricing)
| Model (public) | Approx. | Notes |
|---|---|---|
gpt-transcribe | $0.0045/min | Current file transcription direction |
whisper-1 | $0.006/min | Deprecated—migration deadline on docs |
| Live / realtime whisper-class | about $0.017/min | For true streaming needs |
Azure Speech (azure.microsoft.com pricing/details/speech)
East US retail mirrors commonly list (confirm calculator for your subscription):
| SKU | Approx. public | Notes |
|---|---|---|
| Standard batch | about $0.18/audio hour | REST v3.2+ for current batch price |
| Fast transcription | about $0.36/hour | Synchronous file path |
| Real-time standard | about $1.00/audio hour | Live |
| Free F0 | 5 audio hours/mo real-time | Batch not on F0 |
Hidden fee checklist: multichannel × channels, diarization/PII add-ons, medical domain packs, idle sockets, endpoint hosting for custom models, data-residency uplifts.
Pillar 5 — Data training, retention, region
Protocol: Paste vendor answers into your security questionnaire: default training on customer audio? Retention TTL? Zero-data-retention options? EU/US endpoints? BAA/HIPAA?
Public posture examples (always re-read DPAs):
- Deepgram: SOC2, GDPR, EU endpoint (
api.eu.deepgram.com), HIPAA BAA on Enterprise messaging. - AssemblyAI: SOC2/ISO/GDPR called out; HIPAA BAA positioned as signable without sales premium.
- OpenAI Platform: enterprise data controls differ from consumer ChatGPT—use the API/enterprise docs, not ChatGPT Free assumptions.
- Azure: Microsoft Products and Services DPA + regional deployment are often the buying reason.
Pass: Legal can quote a URL and a date. Fail: “We’ll anonymize later.”
Build vs buy (Otter / Descript)
If your users only need meeting notes with a UI, evaluate Otter.ai or Descript as products first. Integrate raw STT when you need embedded captions, telephony, or a voice agent. Pair TTS separately via ElevenLabs or Azure/Deepgram TTS if you are closing a talk-loop.
Decision cheat sheet
| Situation | Lean toward |
|---|---|
| Real-time voice agent, speech-native features | Deepgram Flux/Nova streaming or AssemblyAI realtime—bake-off on your audio |
| Batch captions, lowest file $/hr | Deepgram pre-recorded, AssemblyAI Universal-2, or Azure batch |
| Already all-in on OpenAI stack | gpt-transcribe + watch deprecations |
| Need Microsoft compliance/regions | Azure Speech |
| Need a meeting UI next week | Otter / Descript, not a raw API |
Method notes
- Limited hands-on: your three clips beat any marketing WER chart.
- Pricing dated 2026-11-04, Asia/Shanghai from official pricing pages / docs.
- Pin model IDs in code; “default” is not a contract.
List your AI tool
Shipping speech or voice AI? List your AI tool on AINav.