Rubric Weighted Score Calculator
Research at level 4 with a weight of 0.40, reasoning at 3 with 0.35 and writing at 5 with 0.25 add up to 3.9 on the same level scale. Weights need not total 1; you also see the total weight and the weighted average. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Precision
- 3
- Total weighted score
- 3.9
- Total weight
- 1
- Weighted average
- 3.9
- Criteria count
- 3
A weighted rubric turns several criterion results into one assignment score while preserving the importance assigned to each part of the work. This calculator multiplies every criterion level by its weight, adds those contributions, and shows the arithmetic behind the total. Enter decimal weights such as 0.40 for 40 percent when you want the final result to stay on the same scale as the criterion levels. The response also reports total weight and a weighted average, making incomplete or unusually scaled rubrics easier to identify before a grade is recorded.
Set up criterion levels and weights consistently
Begin with one row for every criterion in the assignment rubric. Give each row a clear name, enter the level or points earned, and enter the multiplier that represents its importance. If Research is worth 40 percent, use a weight of 0.40 rather than 40 when you want a result on the original level scale.
A common rubric might assign 0.40 to Research, 0.35 to Reasoning, and 0.25 to Writing; those weights total 1, so the weighted sum is directly comparable with the levels. The calculator also accepts weights that do not total 1 because some instructors use point multipliers or are scoring an incomplete section of a larger rubric. Levels and weights must be non-negative finite numbers, and at least one weight must be greater than zero.
Keeping all levels on the same scale is essential: mixing a four-point level with a percentage score produces valid arithmetic but usually does not express the intended grading policy.
Understand the weighted score calculation
For each row, the calculator applies the direct formula weighted score equals level multiplied by weight. For example, a level of 4 with a weight of 0.40 contributes 1.60, while a level of 3 with a weight of 0.35 contributes 1.05. The contributions array preserves these intermediate values so a student, instructor, or reviewer can reproduce the result without trusting an unexplained total.
When weights total 1, the weighted average and total weighted score are the same. When weights total 100, the average restores the criterion scale while the raw total retains the literal products requested. Rounding happens only for displayed output and uses the selected precision from zero through ten decimal places.
The calculation itself accumulates the original numeric inputs first, avoiding the drift that would occur if every displayed contribution were rounded before summation.
Check the result before assigning a grade
Use the output as an auditable calculation, not as a substitute for the rubric's grading rules. Then scan contributions to confirm that the most important criteria have the largest multipliers and that each level was entered on the intended scale. The calculator does not infer missing criteria, maximum levels, letter-grade thresholds, late penalties, extra credit, or pass requirements.
Apply those policies separately unless they are explicitly represented as criterion rows. This separation keeps the result deterministic and makes disagreements easier to resolve: every returned contribution corresponds to exactly one submitted row. For automated grading workflows, store the original rubric input beside the response so future reviewers can see both the policy values and the computed total.
What you can do with it
Calculate an assignment grade
Combine performance levels for research, reasoning, presentation, and mechanics according to the published rubric weights.
Audit a grading spreadsheet
Compare transparent per-criterion contributions with a spreadsheet total to find a mistyped weight or formula.
Preview rubric revisions
Test how changing criterion weights affects the total before publishing a new assessment rubric.
FAQ
What formula does the calculator use?
It multiplies each criterion level by its weight and sums all products. It also divides that sum by total weight to report a weighted average.
Should I enter 30 or 0.30 for a 30 percent weight?
Use 0.30 when you want the weighted total to remain on the criterion level scale.
Can criteria have different maximum levels?
The arithmetic accepts any non-negative levels, but it does not normalize different maximums. Convert levels to a common scale before calculating if the rubric requires that treatment.
Why does the result show the total weight?
So you can spot an incomplete or oddly scaled rubric before a grade is recorded. A total of 1 is typical for decimal weights and 100 for whole percentages; with 100, the weighted average brings the result back to the level scale.
How many decimal places does the result show?
You choose from zero to ten decimal places. Only the displayed contributions and totals are rounded; the sum is built from the original numbers first, so rounding each line never makes the total drift.
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/rubric-weighted-score \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"criteria":[{"name":"Research","level":4,"weight":0.4},{"name":"Reasoning","level":3,"weight":0.35},{"name":"Writing","level":5,"weight":0.25}]}'const res = await fetch("https://api.kit.forhosting.com/edu/rubric-weighted-score", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"criteria": [
{
"name": "Research",
"level": 4,
"weight": 0.4
},
{
"name": "Reasoning",
"level": 3,
"weight": 0.35
},
{
"name": "Writing",
"level": 5,
"weight": 0.25
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/rubric-weighted-score",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"criteria": [
{
"name": "Research",
"level": 4,
"weight": 0.4
},
{
"name": "Reasoning",
"level": 3,
"weight": 0.35
},
{
"name": "Writing",
"level": 5,
"weight": 0.25
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/rubric-weighted-score", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"criteria":[{"name":"Research","level":4,"weight":0.4},{"name":"Reasoning","level":3,"weight":0.35},{"name":"Writing","level":5,"weight":0.25}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"criteria":[{"name":"Research","level":4,"weight":0.4},{"name":"Reasoning","level":3,"weight":0.35},{"name":"Writing","level":5,"weight":0.25}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/rubric-weighted-score", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"criteria": [
{
"name": "Research",
"level": 4,
"weight": 0.4
},
{
"name": "Reasoning",
"level": 3,
"weight": 0.35
},
{
"name": "Writing",
"level": 5,
"weight": 0.25
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.rubric_weighted_score",
"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_items | 500 |
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
Set up criterion levels and weights consistently
In that case, review both total_weight and weighted_average instead of assuming the raw sum is already normalized.
Understand the weighted score calculation
It then adds every row's product to produce total_weighted_score. The reported weighted_average divides the unrounded sum of products by the unrounded sum of weights.
Check the result before assigning a grade
First compare criteria_count with the number of rows in the assignment rubric. Next inspect total_weight: a value of 1 is typical for decimal proportions, while 100 is typical when whole percentages were intentionally used. The API costs $0.002 per request, and the same pure calculation can run in the browser without sending rubric data to a third-party scoring service.
Technical questions
Do weights have to add up to 1?
No. The response reports total_weight so you can detect a partial or differently scaled rubric, and weighted_average normalizes any positive total weight.
How much does the API calculation cost?
Each API request costs $0.002. The browser version can perform the same deterministic calculation locally.