Node.js Voice Note App: A Guide to Choosing a Speech-to-Text API

Compare free tiers, pricing, and Node.js integration of mainstream speech-to-text APIs, with phased selection advice.
The article addresses how developers should choose a speech-to-text API for a Node.js voice note app. It categorizes solutions into general-purpose cloud APIs, specialized STT services, and local open-source options, comparing free tiers and unit prices of AssemblyAI, Deepgram, Google Cloud, OpenAI Whisper, and local Whisper. It notes that AssemblyAI and Deepgram have the most concise official SDKs with streaming support, Whisper API requires no SDK but lacks streaming, and Google Cloud configuration is cumbersome. Selection advice is given for four scenarios: prototype validation, ready for launch, privacy-sensitive, and enterprise multilingual, along with hidden pitfalls like audio format transcoding, billing methods, and free tier validity. The core conclusion is to first get the pipeline working with free tiers, then migrate based on actual needs.
Title
Node.js Voice Note App: A Guide to Choosing a Speech-to-Text API
Meta Description
Choosing a speech-to-text API for a Node.js voice note app? Compare free tiers, pricing, and Node integration for AssemblyAI, Deepgram, Google Cloud, and Whisper, with phased selection advice.
Article Content
A developer asked on Reddit: they want to build a voice note app with Node.js, implementing a basic flow of recording on a phone, uploading, and transcribing to text, but with so many speech-to-text APIs available, they don't know which has a reasonable free tier or cheap pay-as-you-go pricing. This question hits a pain point for many indie developers—speech-to-text (STT) is one of the most common features in AI applications, but choosing the wrong API can turn a weekend project into a financial black hole.

Three Types of Speech-to-Text APIs
STT APIs on the market generally fall into three categories. Before choosing, clarify which category your needs belong to.
General-purpose cloud APIs: Such as Google Cloud Speech-to-Text, AWS Transcribe, Azure Speech. Advantages include stability, multilingual support, and free tiers (usually 60 minutes to 5 hours per month), but beyond that, billing is per second, and long-term costs are not low. Suitable for scenarios requiring high accuracy and multilingual support.
Specialized STT services: Such as Deepgram, AssemblyAI, Speechmatics. These services focus on speech recognition, bill per minute, are typically 30%-50% cheaper than cloud providers, and offer advanced features like real-time streaming recognition and speaker diarization. Deepgram's prepaid plans cost about $0.0043 per minute, and AssemblyAI offers 100 free minutes per month.
Local/open-source solutions: Such as OpenAI's Whisper (can be deployed locally), Vosk, Coqui. Completely free, but require self-deployment and maintenance, with server resource requirements. Whisper's accuracy is already close to commercial APIs, suitable for privacy-sensitive or very low-budget projects.
Difference between streaming and asynchronous recognition: Streaming (real-time) recognition returns text as audio is transmitted, typically maintaining a long connection via WebSocket, suitable for interactive scenarios like voice input methods and real-time subtitles, but requires stable network and server concurrency; asynchronous recognition uploads a complete audio file first, and the server processes it and returns results via polling or webhook, more suitable for offline scenarios like voice notes and meeting minutes, and often has lower unit prices. When selecting, first clarify whether your app needs "text as you speak" or "transcribe after recording," which directly determines whether to use Deepgram's streaming API or AssemblyAI/Whisper's asynchronous interfaces.
Free Tier and Pricing Comparison
For weekend projects, the free tier is the primary consideration. Based on public pricing information:
- AssemblyAI: 100 free minutes per month, then $0.00025 per minute (asynchronous) or $0.00015 per minute (streaming). Free tier is enough for personal testing.
- Deepgram: New users get $200 credit (about 46,000 minutes), then pay-as-you-go. Suitable for projects needing extensive testing.
- Google Cloud STT: 60 free minutes per month, then $0.006 per minute (standard model).
- OpenAI Whisper API: $0.006 per minute, no free tier, but the API is simple and easy to use.
- Local Whisper: Completely free, but requires a GPU or strong CPU; inference speed depends on hardware.
If just validating an idea, AssemblyAI's 100 free minutes is the most friendly; if high usage is expected, Deepgram's $200 credit is more cost-effective.
Conversion between per-second and per-minute billing: Cloud providers often bill per second (e.g., Google Cloud STT at $0.006 per minute is $0.0001 per second), while specialized STT services mostly quote per minute, and local solutions only consume compute. When comparing prices, convert to the same unit and note the minimum billing duration—some services still charge for 15 seconds even for shorter audio, so frequent short audio uploads can cost more than the listed price. Additionally, asynchronous interfaces are typically 30%-50% cheaper than streaming ones; if your business allows latency, choosing asynchronous can significantly reduce costs.
Node.js Integration Experience
From developer feedback, the maturity of Node.js SDKs varies significantly across APIs.
AssemblyAI provides an official Node SDK; a few lines of code can upload an audio file and get the transcription text, supports webhook callbacks, suitable for asynchronous processing. Deepgram's Node SDK is equally concise and supports real-time streaming transcription—a key advantage if you want users to see text as they speak. Google Cloud's Node client is comprehensive but complex to configure, requiring service account keys and project setup, somewhat cumbersome for weekend projects.
OpenAI's Whisper API is the simplest: one HTTP request, pass in the audio file, return text. No SDK dependency, suitable for rapid prototyping. But note it does not support streaming, and file size is limited to 25MB.
whisper.cpp and subprocess invocation: whisper.cpp is a C/C++ port of OpenAI's Whisper model, can run on ordinary CPUs with low memory usage, and the community provides Node.js bindings (e.g., nodejs-whisper). There are two common ways to call local Whisper in Node: first, use child_process to launch the executable compiled from whisper.cpp and pass the audio path, then parse its output text file; second, use a Python subprocess to run the openai-whisper package. The former requires no Python environment and starts faster; the latter offers more flexible model choices. Either way, you need to handle audio sample rate conversion yourself (Whisper requires 16kHz mono), and note that concurrent requests will compete for CPU and slow down responses.
Selection Advice: Based on Project Stage
Prototype validation stage: Directly use OpenAI Whisper API or AssemblyAI's free tier. Minimal code; you can get the full pipeline of recording upload and transcription working within an hour.
Ready for launch with controllable usage: Evaluate Deepgram or AssemblyAI's pay-as-you-go. Both offer free tiers for transition and transparent pricing. If the app needs real-time transcription (e.g., voice input method), Deepgram's streaming API is the better choice.
Privacy-sensitive or long-term free: Deploy Whisper locally. Use Node to call whisper.cpp or run via Python subprocess; although it adds operational complexity, API cost is zero. Suitable for personal note-taking apps where data stays local.
Multilingual or enterprise-level needs: Google Cloud STT or Azure Speech. Accuracy is guaranteed, but costs are higher; it's advisable to test recognition of target languages with the free tier first.
Commonly Overlooked Pitfalls
Audio format compatibility: Most APIs support WAV, MP3, M4A, but default phone recording formats may be AAC or AMR, requiring transcoding before upload. Using fluent-ffmpeg to transcode in Node is a common practice.
Duration billing method: Some APIs bill by audio duration, others by processing time. For long recordings, asynchronous APIs are usually cheaper but require polling or webhooks to get results.
Free tier traps: Some services' free tiers are only for the first month, after which they automatically convert to paid. Read the terms carefully when signing up and set budget alerts.
Many developers shared experiences under the original Reddit post, with consensus: don't obsess over the perfect solution for your first project; pick an API with sufficient free tier and clear documentation to get started, then migrate based on actual usage and feature needs. The technical barrier to speech-to-text is lowering, and switching costs are not high.
Phone recording formats and transcoding: iOS default recording format is M4A (AAC encoding), some Android models default to AMR-NB or 3GP, with sample rates mostly ranging from 8kHz to 44.1kHz, while most STT APIs require formats like WAV/MP3/FLAC and recommend sample rates above 16kHz. Uploading raw files directly may cause recognition failure or reduced accuracy. In Node.js, you can use fluent-ffmpeg to wrap the ffmpeg command line for transcoding: first probe the input format, then uniformly convert to 16kHz mono WAV or MP3. Note that ffmpeg needs to be installed separately in the deployment environment; serverless platforms usually require precompiled packages like ffmpeg-static, and transcoding consumes extra CPU time, so long recordings should be queued for asynchronous processing.
One-line Summary
Compare free tiers, pricing, and Node.js integration of mainstream speech-to-text APIs, with phased selection advice.
Paragraph Summary
The article addresses the question of how developers should choose a speech-to-text API when building a voice note app with Node.js. It categorizes market solutions into three types: general-purpose cloud APIs, specialized STT services, and local open-source solutions, and compares free tiers and unit prices of AssemblyAI, Deepgram, Google Cloud, OpenAI Whisper, and local Whisper. In terms of Node.js integration, it points out that AssemblyAI and Deepgram have the most concise official SDKs with streaming support, Whisper API requires no SDK but lacks streaming, and Google Cloud configuration is cumbersome. The article provides selection advice for four scenarios: prototype validation, ready for launch, privacy-sensitive, and enterprise multilingual, and reminds of hidden pitfalls like phone recording format transcoding, billing methods, and free tier validity. The core conclusion is to first get the pipeline working with free tiers, then migrate based on actual needs.
Related articles

Mistral Large 4 Open-Sources a Trillion Parameters, Microsoft Offers Voluntary Severance to 60,000 Employees
Mistral Large 4 open-sources a trillion-parameter multimodal model with a coding agent score of 48; SanDisk earnings show AI inference reshaping NAND demand; Google Gemini adds in-app file editing, OpenAI raises Codex quotas, and Microsoft offers voluntary severance to 60,000 employees.

Mistral Large 4 Opens Its Weights: AI Morning Brief Roundup of Models and Ecosystem Trends
Mistral Large 4 opens its weights, a 1-trillion-parameter MoE architecture that can run locally on MacStudio; Meta's test-generation technology enters production; top tax benchmark pass rate only 10.8%; Canadian government takes a stake in Cohere; Doubao Work opens third-party model calls. This AI Morning Brief rounds up model, ecosystem, capital, and policy developments.

Mistral Large 4 Goes Open Source: A 1T-Parameter European Qwen Challenging DeepSeek
Mistral Large 4 is now open source: 1T total parameters, 52B activated, focused on coding and cybersecurity, with ~610G NVFP4 weights. We analyze its comparison with DeepSeek V4 Flash, API pricing, demo realism, and local deployment value.