Calculate speaking rate in words per minute
This speaking rate calculator converts a transcript word count and an audio duration into words per minute.
Run — free
It also compares the result with a practical typical range of 110 to 160 WPM and clearly flags a pace below or above that range. Use it to review a podcast, presentation, voice-over, lesson, interview, or recorded script without uploading audio or sharing transcript text. The calculation is deterministic, requires only two numbers, and costs $0.002 per API request when automated.
Measure speaking rate from the two facts that matter
Speaking rate is a ratio between the number of spoken words and elapsed time. Enter the transcript's total word count and the full audio duration in seconds. The calculator multiplies the word count by sixty, divides by the duration, and rounds the result to two decimal places. For example, a recording with 450 words over 180 seconds contains two and a half words per second, which is 150 words per minute. Count the words in the final spoken transcript whenever possible, including repeated or improvised words that remain in the recording. Use the duration of the same segment represented by that count. If the transcript covers only one chapter but the duration covers the entire program, the arithmetic will be correct while the conclusion will be misleading. Silence, music, applause, and long pauses remain part of elapsed audio time when they fall inside the measured segment, so decide whether those elements belong to the communication experience you are evaluating before choosing the start and end points.
Interpret the typical, unusually slow, and unusually fast flags
The result is compared with a practical reference range of 110 through 160 words per minute, inclusive. A value below 110 is labeled unusually slow, a value above 160 is labeled unusually fast, and a value within the boundaries is labeled typical. These flags are screening signals, not judgments about quality. A deliberate meditation, dramatic narration, accessibility recording, or technical demonstration may work best below the reference range. An energetic advertisement, sports segment, or familiar internal update may remain understandable above it. Audience, language, vocabulary, emotion, pauses, and production style all affect an appropriate pace. Treat the classification as an invitation to listen again at the relevant moments. If a result is surprising, check that the transcript count and duration describe exactly the same material, then compare several representative segments rather than assuming one average explains the whole recording. A single overall WPM value can hide a rushed middle and a slow introduction even when the final average appears typical.
Use consistent measurements when comparing recordings
Consistency matters more than false precision when you compare speakers, drafts, or episodes. Choose one word-counting method and keep it for every sample, especially for contractions, hyphenated expressions, numbers, acronyms, and verbal fillers. Measure duration in seconds from reliable editing software or player metadata, and avoid rounding a short clip to the nearest minute because a small timing change can substantially alter its WPM. For production review, calculate the whole recording and then repeat the calculation for sections such as the opening, main explanation, call to action, or closing. Section-level results reveal pace changes that an overall average conceals. The calculator rejects zero and negative durations because division by such values cannot describe a speaking rate. It also rejects malformed, fractional, negative, or excessively large word counts and non-finite durations. The returned object includes the original inputs, calculated WPM, classification, two Boolean warning flags, and the reference boundaries, making the result easy to display, store, compare, or use in a quality-control rule.
What you can do with it
Review a voice-over draft
Estimate whether a finished script was delivered at a comfortable pace and identify recordings that deserve a closer listen.
Compare podcast segments
Calculate WPM for an introduction, interview, and closing separately to reveal pacing changes hidden by the episode average.
Check presentation rehearsal timing
Use the rehearsal transcript and recorded duration to see whether a speaker may be rushing or leaving unusually long pauses.
FAQ
How is speaking rate calculated?
The transcript word count is multiplied by 60 and divided by the audio duration in seconds. The returned WPM is rounded to two decimal places.
What range is treated as typical?
The calculator uses 110 to 160 WPM, inclusive, as its practical reference range. Values outside it receive unusually slow or unusually fast flags.
Does an unusual flag mean the recording is poor?
No. It is a screening signal. The best pace depends on the audience, subject, format, language, and intended emotional effect.
Should pauses and music count toward duration?
Include them when they are part of the segment listeners experience. Exclude them only if your word count and analysis intentionally cover a narrower spoken section.
What happens if duration is zero or negative?
The request returns an invalid input error because a non-positive duration cannot produce a meaningful speaking rate.
What does an automated calculation cost?
Each API request costs $0.002. The same deterministic calculation can also run in the browser.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/audio/speech-rate-wpm-calculate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"word_count":450,"duration_seconds":180}'const res = await fetch("https://api.kit.forhosting.com/audio/speech-rate-wpm-calculate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"word_count": 450,
"duration_seconds": 180
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/speech-rate-wpm-calculate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"word_count": 450,
"duration_seconds": 180
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/speech-rate-wpm-calculate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"word_count":450,"duration_seconds":180}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"word_count":450,"duration_seconds":180}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/speech-rate-wpm-calculate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"word_count": 450,
"duration_seconds": 180
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.speech_rate_wpm_calculate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_mb | 200 |
max_minutes | 180 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |