Score Above Mean Calculator
A score can look impressive or disappointing until it is placed beside the performance of the class.
Run — free
This calculator makes that comparison explicit in two complementary ways. It subtracts the class mean from the score to find the signed percentage-point gap, then divides that gap by the class standard deviation to express the same difference as a z-score. The result states whether the score is above, below, or exactly at the mean, giving students, teachers, tutors, and analysts a concise interpretation without changing the original grading scale.
Enter percentages that use the same grading scale
Provide the individual score, the class mean, and the class standard deviation, all expressed on a percentage scale from zero to one hundred. The score and mean must describe the same assessment and cohort. A score from one exam should not be compared with the mean from another exam unless the two were deliberately equated, because the resulting gap would mix different levels of difficulty. The standard deviation must be stated in percentage points, not as a percentage of the mean and not as a variance. For example, if scores typically differ from the mean by eight points, enter 8. The calculator accepts the names standard_deviation, std, or sd, but only one should be supplied. Every value must be finite, and the standard deviation must be greater than zero because a zero spread makes division undefined. Keeping the units aligned is the most important step: score 86, mean 74, and standard deviation 8 all refer to points on the same 0–100 score scale.
Read the percentage-point gap and z-score together
The signed percentage-point gap is score minus mean. A result of 12 means the score is twelve percentage points above the class mean; a result of −6 means it is six points below. This is an absolute difference on the grading scale, not a relative percent increase. The z-score then divides that signed gap by the class standard deviation. If the gap is 12 and the standard deviation is 8, the z-score is 1.5, so the score is one and a half standard deviations above the mean. A negative z-score indicates a score below the mean, while zero indicates an exact match. The output also includes the absolute number of standard deviations for display and a direction field so applications do not need to infer wording from the sign. Use the percentage-point result when explaining the raw grade difference, and use the z-score when comparing relative standing across assessments whose spreads differ. Neither number by itself says whether a grade meets a school policy or mastery threshold.
Interpret the comparison without overclaiming
A standard-deviation gap describes location within a distribution, but it does not automatically provide a percentile. Converting a z-score to a percentile assumes a distributional model, commonly a normal distribution, and this calculator intentionally makes no such assumption. Real classroom scores may be skewed, clustered near a ceiling, or shaped by a small class. The class mean and standard deviation may also be unstable when only a few students took the assessment. Treat the result as a descriptive comparison using the statistics you provide. It can help a teacher explain that two ten-point advantages are not equally unusual when one class has a spread of five points and another has a spread of fifteen. It can also help a student distinguish “points above average” from “percent better,” phrases that are often confused. For automated reporting, the deterministic JSON output supplies the inputs, signed gap, direction, signed z-score, absolute standard-deviation distance, and a readable summary. Browser use is free, while each successful API item uses the published base price of $0.002.
What you can do with it
Explain an exam result
Show a student both the point difference from the class average and how unusual that difference is relative to the class spread.
Compare standing across classes
Contrast scores from assessments with different averages and variability by using their standard-deviation gaps alongside raw percentage points.
Generate consistent grade reports
Add a deterministic direction, signed gap, z-score, and plain-English summary to an automated learner progress report.
FAQ
What is the percentage-point gap?
It is score minus class mean. A score of 82 and mean of 75 produce a gap of 7 percentage points, not a 7 percent relative increase.
How is the standard-deviation gap calculated?
The calculator divides the signed percentage-point gap by the supplied class standard deviation: z = (score − mean) / standard deviation.
Does the z-score equal a percentile?
No. A percentile conversion requires assumptions about the score distribution. This capability reports only the observed standard-deviation distance.
Why can the standard deviation not be zero?
A zero standard deviation means there is no spread. Dividing the score gap by zero is undefined, so the request is rejected as invalid input.
How much does the API request cost?
A successful API item costs $0.002. The same deterministic calculation is also available free 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/edu/percent-above-mean \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"score":86,"mean":74,"standard_deviation":8}'const res = await fetch("https://api.kit.forhosting.com/edu/percent-above-mean", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"score": 86,
"mean": 74,
"standard_deviation": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/percent-above-mean",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"score": 86,
"mean": 74,
"standard_deviation": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/percent-above-mean", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"score":86,"mean":74,"standard_deviation":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"score":86,"mean":74,"standard_deviation":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/percent-above-mean", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"score": 86,
"mean": 74,
"standard_deviation": 8
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.percent_above_mean",
"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. |