Reading speed calculator
Read 2000 words in 10 minutes and your speed is 200 words per minute, so an 80000-word novel takes you 400 minutes. Time a chapter, enter the words and the minutes, and plan your reading with your own pace. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Word count
- 2,000
- Minutes
- 10
- Book words
- 80,000
- Reading speed
- 200
- Book minutes
- 400
- Book hours
- 6.6666666667
A reading-speed calculator turns a timed sample of text into words per minute and then estimates how long a full book would take at that same pace. You supply the number of words you just finished and the elapsed minutes on the clock; the solver divides word count by minutes to obtain reading speed in WPM, then divides a book-length word count by that speed to return estimated finishing time in minutes and hours. The default book length is eighty thousand words, a widely used novel target you may override when the title is shorter or longer. Elapsed minutes of exactly zero are rejected because the rate would be undefined. Negative word counts, negative durations, and non-finite values are also rejected.
What reading speed means and how WPM and book time are computed
Reading speed in words per minute is the number of words a person actually finished in a measured interval, not a guess from pages or a generic adult average. The definition used here is the same classroom conversion every literacy teacher already writes on a board: divide the sample word count by the elapsed minutes of that sample. Two thousand words in ten minutes is two hundred words per minute.
One thousand five hundred words in seven and a half minutes is also two hundred words per minute. Once that rate is known, estimated time for a book is the book word count divided by the same speed. At two hundred WPM an eighty-thousand-word novel is four hundred minutes, or six hours and forty minutes of continuous reading; a ninety-thousand-word hardcover at the same pace is four hundred fifty minutes.
The default book length is eighty thousand words because that figure is the common novel target used by writers and publishers; override it when you have a real count from the copyright page, an ebook file, or a word-count tool. A zero or negative sample word count cannot define a useful speed for a book projection and is also rejected.
Where a reading-speed calculator earns its keep
People reach for a reading-speed calculator whenever a word counter already stored a sample total and a stopwatch already stored elapsed minutes, and a human or a script still needs words per minute plus a book-length projection. Students time a chapter, convert the sample into WPM, and then ask how many hours a set novel will take at that pace before they plan a week of homework.
Literacy tutors and adult-education programs record timed passages so they can track measured speed instead of relying on a generic two-hundred-WPM average that does not describe the reader in front of them. Book clubs and personal reading logs convert a measured pace into an honest finish date for the next title once the club secretary has a word count.
Because the tool rejects a non-positive sample and a zero duration, it also doubles as a validator for intake forms that must not accept minus two hundred words or a blank timer. Pair this page with a word counter if you still need to turn prose into a count, or with a generic reading-time estimator if you already know WPM and only want duration for a short article.
What you can do with it
Timed chapter to personal WPM
Time a chapter, enter the word count and elapsed minutes, and store words per minute so later sessions are compared on the same scale.
Novel finish-time planning
Project how many hours an eighty-thousand-word novel, or any custom book length, will take at the pace you just measured.
Literacy and classroom logs
Tutors and programs convert timed passages into WPM and book-time estimates without relying on a generic adult reading-speed average.
FAQ
How is reading speed in words per minute calculated?
Reading speed equals the sample word count divided by elapsed minutes. Estimated book time equals the book word count divided by that speed.
What book length does the estimate use?
The default is 80000 words, a common novel target.
What happens if elapsed minutes are zero?
Dividing by zero minutes would make words per minute undefined.
Is the reading speed calculator free?
The browser tool is free and runs locally.
How do I enter a time that includes seconds?
Convert it to minutes with decimals before entering it: thirty seconds is half a minute and fifteen seconds a quarter. A clock-style time written with a colon is not accepted.
Related tools
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/life/reading-speed \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"word_count":2000,"minutes":10}'const res = await fetch("https://api.kit.forhosting.com/life/reading-speed", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"word_count": 2000,
"minutes": 10
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/reading-speed",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"word_count": 2000,
"minutes": 10
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/reading-speed", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"word_count":2000,"minutes":10}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"word_count":2000,"minutes":10}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/reading-speed", 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": 2000,
"minutes": 10
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.reading_speed",
"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.
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. |
Technical notes
Successful API requests cost $0.002.
What reading speed means and how WPM and book time are computed
Zero elapsed minutes would make the quotient infinite, so that case is rejected as invalid_input instead of returning Infinity.
How to call the API and what comes back
Word count and book length must be positive; minutes must be a non-zero duration. Embedded spaces, hex prefixes, and non-numeric tokens fail with a message that names the field. Example: two thousand words in ten minutes with the default book length yields two hundred WPM and four hundred book minutes. Elapsed minutes of zero is rejected because reading speed is undefined. Failed validation is never charged. Do not send clock strings such as one colon zero zero for minutes; convert to a decimal minute count first. Send a JSON body with two required finite numbers: word_count (aliases words, count, n, total_words) and minutes (aliases elapsed_minutes, time_minutes, duration_minutes, mins, t). Optionally send book_words (aliases book, book_word_count, novel_words, target_words) when the title is not an eighty-thousand-word novel; omit it to use that default. Each field may arrive as a JSON number or as a decimal numeric string, including an optional leading plus and scientific notation. Missing required fields, empty strings, Infinity, and NaN fail with invalid_input and are not billed. On success the body echoes rounded word_count, minutes, and book_words, returns reading_speed as words per minute, book_minutes as the projected finishing time, and book_hours as that time divided by sixty, plus a formula string restating word count over minutes and book words over speed. Successful API calls use the published $0.002 base price.
Where a reading-speed calculator earns its keep
Publishing and classroom dashboards store raw sample counts from any logger and call this tool once to fill a consistent reading_speed column and a book_minutes column for charts. That keeps latency at a handful of arithmetic operations and keeps the cost model honest at $0.002 per successful API request, while failed validation never consumes prepaid balance.
Technical questions
What inputs do I need?
Two finite numbers: word_count (positive words in the sample) and minutes (elapsed duration, not zero). Optionally send book_words; it defaults to 80000.