Effective reading rate with comprehension
Fold comprehension into reading speed: 250 words per minute with 80% of the quiz right counts as 200 effective words per minute, so racing without understanding no longer looks like progress. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Words per minute
- 250
- Comprehension percent
- 80
- Comprehension factor
- 0.8
- Effective wpm
- 200
- Lost wpm
- 50
- Efficiency percent
- 80
Raw words-per-minute scores reward skimming as much as understanding. Students, tutors, literacy coaches, and reading-app designers need a single number that folds comprehension into speed so progress charts reward accurate reading rather than empty haste. Zero or negative WPM and comprehension outside zero through one hundred are rejected so form glitches never invent a negative pace.
What effective reading rate means and why it beats raw WPM
Effective reading rate answers a practical classroom question: if a learner races through a passage at three hundred words per minute but only answers eighty percent of the comprehension items correctly, how much of that speed should count as useful intake? At full comprehension the effective rate equals the raw rate; at fifty percent the effective rate is half the stopwatch score, which makes skimming without understanding look appropriately expensive on a progress chart. Efficiency_percent echoes the comprehension input so dashboards can label a bar chart without recomputing the scale.
This is not a psychometric model of reading skill and it does not estimate comprehension from text; it takes a measured or self-reported accuracy score you already collected from a quiz, cloze test, or teacher rubric and combines it with a measured WPM from a timed passage. Because both inputs are explicit numbers, two tutors grading the same session always get the same effective rate, which matters for LMS plugins and research logs that cannot tolerate non-deterministic scoring.
Where effective reading speed helps
Speed-reading courses and literacy apps use an effective reading rate calculator so leaderboards cannot be gamed by racing without understanding: a learner at two hundred WPM and full accuracy outranks a three-hundred-WPM skimmer at sixty percent on the effective scale. Classroom reading logs need a single KPI that parents and students both understand when raw WPM and quiz percent are reported separately and never combined. Research notebooks and tutoring platforms store the same product formula across cohorts so longitudinal charts stay comparable when the quiz bank changes.
Failed validation does not consume balance. Keep requests small, pin the rounded fields in tests, and you get reproducible effective WPM for homework, LMS plugins, and edge workers without standing up a full assessment engine of your own.
What you can do with it
Classroom reading logs and progress charts
Combine timed WPM with a short quiz percent so student dashboards show effective words per minute instead of raw speed alone.
FAQ
How is effective reading rate calculated?
For example, 250 WPM at 80% comprehension yields 200 effective WPM.
Why can a slower reader end up with a higher effective rate?
Because speed is multiplied by the share understood. A reader at 200 words per minute with full comprehension outranks a 300-word-per-minute skimmer at 60%, whose speed shrinks once the missed answers are counted.
What does the lost words per minute figure mean?
It is the gap between raw and effective speed. At 250 words per minute and 80% comprehension, 50 words per minute are lost, the pace you would recover by slowing down and rereading for full credit.
Where does the comprehension score come from?
From you. Use the percentage from a quiz, a cloze test or a teacher rubric for the same timed passage. The tool does not estimate understanding from the text itself.
What values can I enter?
Any reading speed above zero and a comprehension score from 0 to 100. A zero or negative speed, or a comprehension outside that range, is refused so a form glitch never invents a pace.
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/edu/effective-reading-rate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"words_per_minute":250,"comprehension_percent":80}'const res = await fetch("https://api.kit.forhosting.com/edu/effective-reading-rate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"words_per_minute": 250,
"comprehension_percent": 80
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/effective-reading-rate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"words_per_minute": 250,
"comprehension_percent": 80
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/effective-reading-rate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"words_per_minute":250,"comprehension_percent":80}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"words_per_minute":250,"comprehension_percent":80}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/effective-reading-rate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"words_per_minute": 250,
"comprehension_percent": 80
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.effective_reading_rate",
"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
This effective reading rate calculator multiplies your measured WPM by a comprehension percentage from zero to one hundred and returns a stable effective_wpm figure plus the comprehension factor, words lost to incomplete understanding, and a transparent formula string. Enter words_per_minute and comprehension_percent (or common aliases such as wpm and accuracy) to get deterministic JSON you can pin in LMS plugins, homework check-ins, and speed-reading dashboards.
What effective reading rate means and why it beats raw WPM
The standard product model multiplies raw speed by the fraction of material that was actually understood: effective_wpm equals words_per_minute times comprehension_percent divided by one hundred. The comprehension_factor field is simply that percentage expressed on a zero-to-one scale for clients that prefer fractions. The lost_wpm field is the difference between raw and effective speed—the words-per-minute you would need to recover by slowing down and rereading if you want full credit.
Input contract, response shape, and error behaviour
POST a JSON body with two required finite numbers: words_per_minute (strictly positive raw reading speed) and comprehension_percent (inclusive range from zero through one hundred). Each field may arrive as a JSON number or as a numeric string; aliases such as wpm, reading_speed, raw_wpm, and speed_wpm map to the first field, while comprehension, accuracy, accuracy_percent, and comprehension_pct map to the second. Missing fields, empty strings, non-finite values, non-positive WPM, and comprehension outside zero through one hundred fail with invalid_input naming the problem—those failures are not billed. On success the body echoes the normalized inputs, returns comprehension_factor as a unit interval, effective_wpm as the product, lost_wpm as the shortfall from raw speed, efficiency_percent matching the comprehension score, a formula string restating the product identity, and method equal to wpm_times_comprehension_factor for client routing. Example: two hundred fifty WPM at eighty percent comprehension yields effective_wpm of two hundred, comprehension_factor of zero point eight, and lost_wpm of fifty. Pair the response with your own passage timer and quiz scorer if you need a full reading lab; this endpoint only multiplies the two numbers you already trust and does not fetch documents or invent comprehension from prose.
Integration use cases
Speed-reading course leaderboards
Rank learners by effective_wpm so skimming without comprehension cannot dominate a class ranking or certificate threshold.
LMS and tutoring automation
Call the prepaid API from homework check-ins and research notebooks that need a deterministic WPM × accuracy product.
Technical questions
What range is allowed for comprehension_percent?
Zero through one hundred inclusive. Values outside that range fail with invalid_input and are not billed.
Can words_per_minute be zero or negative?
No. Raw WPM must be a finite number strictly greater than zero; zero or negative speed is rejected as invalid_input.
Does this estimate comprehension from the text?
No. You supply a measured or self-reported comprehension percentage from a quiz, cloze test, or rubric; the API only multiplies it by WPM.
What does the effective reading rate calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.