Speedtype Lab / Scoring

9 min read

Gross WPM, Net WPM, and Accuracy: Four Worked Results

Follow four calculations from attempted keystrokes to gross WPM, net WPM, accuracy, and unresolved errors using Speedtype formulas.

Written and reviewed by SaurabhLast reviewed August 18, 2026

Evidence checked: Published formulas and metric regression cases. Product behavior and limitations are described for the current release.

Start with the four fields

A Speedtype result separates typing activity from unresolved accuracy:

  • Attempted keystrokes are accepted character attempts during the timed run.
  • Gross WPM converts those attempts into five-character units per minute.
  • Unresolved errors describe characters that remain wrong in the compared text.
  • Net WPM converts correct attempted characters into five-character units per minute.

Accuracy uses the same correct-attempted-character value as net WPM. These definitions are specific enough to reproduce with a calculator. They are also why two runs with the same gross WPM can have different net WPM.

The formulas used by Speedtype

Let K be attempted keystrokes, E be unresolved errors, and T be elapsed minutes.

Gross WPM = (K / 5) / T
Correct attempted characters = max(0, K - E)
Net WPM = ((K - E) / 5) / T
Accuracy = ((K - E) / K) * 100

The app prevents division by zero before the timer has meaningfully started. WPM values are displayed to one decimal place, and accuracy is displayed as a whole percentage.

The five-character unit includes spaces and punctuation when they are part of the attempted input. It is a scoring unit, not a claim that every written word has five letters. See the full methodology reference for the implementation boundaries.

Result 1: a clean short sample

Assume a 60-second run with 70 attempted keystrokes and no unresolved errors.

Gross WPM = 70 / 5 / 1 = 14.0
Correct attempted characters = 70 - 0 = 70
Net WPM = 70 / 5 / 1 = 14.0
Accuracy = 70 / 70 * 100 = 100%

Gross and net are equal because nothing remains wrong. This does not establish a personal baseline by itself; 70 characters may be too short to represent normal variation. It only demonstrates the clean arithmetic.

Result 2: one unresolved character

Keep the same 70 attempts and 60 seconds, but leave one character wrong.

Gross WPM = 70 / 5 / 1 = 14.0
Correct attempted characters = 70 - 1 = 69
Net WPM = 69 / 5 / 1 = 13.8
Accuracy = 69 / 70 * 100 = 98.57%, displayed as 99%

Gross WPM is unchanged because the same amount of input was attempted. Net WPM and accuracy change because one attempt remains unresolved.

The displayed 99% is rounded. It does not mean the underlying ratio was exactly 99 out of 100.

Result 3: a case-only mismatch

Use the seven-character input enhancE against the target enhance for 60 seconds. This artificial duration makes the arithmetic obvious.

Gross WPM = 7 / 5 / 1 = 1.4
Correct attempted characters = 7 - 1 = 6
Net WPM = 6 / 5 / 1 = 1.2
Accuracy = 6 / 7 * 100 = 85.71%, displayed as 86%

The final E is an error because grading is case-sensitive. The case-sensitive grading note documents the exact comparison and a manual reproduction procedure.

Result 4: many unresolved errors

A regression case uses 95 attempts, 76 unresolved errors, and 60 seconds.

Gross WPM = 95 / 5 / 1 = 19.0
Correct attempted characters = 95 - 76 = 19
Net WPM = 19 / 5 / 1 = 3.8
Accuracy = 19 / 95 * 100 = 20%

This is the important counterexample to reading gross WPM alone. The typist generated input at 19 five-character units per minute, but only one fifth of the attempts were correct in the compared result. Speedtype therefore reports 3.8 net WPM and 20% accuracy.

The interface may round a very small nonzero net result to a displayed value with one decimal place. A result reaches 0.0 net WPM only when the rounded correct-character rate is sufficiently small or no correct attempts remain.

A compact comparison table

RunTimeAttemptsErrorsGross WPMNet WPMAccuracy
Clean sample60 s70014.014.0100%
One error60 s70114.013.899%
Case mismatch60 s711.41.286%
Error-heavy sample60 s957619.03.820%

These examples are calculator checks, not typing benchmarks. They say nothing about what a user of a particular age, profession, language, keyboard, or input method should achieve.

Why attempts can exceed the visible text

The input box shows the text that remains after editing. The attempt counter can also include characters that were typed and then removed. That is intentional: deleting a wrong character does not mean the keystroke never happened.

The final Errors field focuses on unresolved text. As a result, a run with correction activity can have more attempted keystrokes than the length of the final visible input while still ending at high accuracy. This product choice should be kept in mind when comparing Speedtype with a tool that uses a different correction policy. Read what Backspace changes before treating two sites' WPM values as interchangeable.

How to compare your own runs

Use the same conditions before drawing a conclusion:

  1. Keep the language and passage difficulty the same.
  2. Keep the test duration the same.
  3. Use the same keyboard, layout, and input method.
  4. Record gross WPM, net WPM, accuracy, errors, and time together.
  5. Compare several runs rather than selecting only the highest score.
  6. Note interruptions, paste events, or input-method changes.

A practical baseline can use the middle result from a controlled set instead of the single maximum. The seven-session baseline provides a blank recording protocol.

What the result does not measure

Speedtype does not measure finger placement, posture, reading comprehension, keyboard latency, or physical effort. Net WPM is not a medical, educational, or employment assessment. The score is a description of one browser session under the displayed settings.

That limitation is why the result card shows several fields rather than one ranking. Read how to interpret the result card, then use Practice to reproduce one of the clean examples with a normal passage and duration.

Reproduce it, then report the mismatch

Product documentation is useful only while it matches the app. Keep the settings and smallest input sequence that expose a difference, and include those facts in a correction report.