Wilks 2020 coefficient calculator
A man weighing 90 kg with a 700 kg total scores about 537 Wilks 2020 points. Enter your total, body weight and sex to compare your strength fairly with lifters in other weight classes. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Total
- 700
- Body weight
- 90
- Sex
- Male
- Total kg
- 700
- Body weight kg
- 90
- Coefficient
- 0.7669960625
- Score
- 536.8972437798
Comparing raw kilogram totals across weight classes is unfair: a lighter lifter can be relatively stronger than a heavier one who moved more absolute load. The Wilks coefficient family normalises total against body weight with a smooth polynomial so open and multi-class rankings stay meaningful. The 2020 update (often called Wilks 2) revises the classic 1990s constants and uses a 600 numerator so modern competition totals map cleanly to a single relative-strength score. This Wilks 2020 coefficient calculator accepts lifted total in kilograms, body weight in kilograms, and sex, evaluates the fifth-order sex-specific polynomial, multiplies total by the resulting coefficient, and returns both the coefficient and the score.
What the Wilks 2020 coefficient measures
Powerlifting rankings need a way to compare athletes who do not share the same body-mass class. Absolute total alone rewards heavier lifters; pure total-per-kilogram under-rewards them because strength does not scale linearly with mass. Robert Wilks fitted a fifth-order polynomial to elite results so that a coefficient can be applied to any legal total and produce a score that is roughly comparable across the continuous body-weight axis.
The 2020 revision keeps that polynomial shape but publishes new male and female constants and a numerator of six hundred instead of the classic five hundred. Formally, with body weight x in kilograms, the coefficient is six hundred divided by a plus b times x plus c times x squared plus d times x cubed plus e times x to the fourth plus f times x to the fifth. The score is simply total multiplied by that coefficient.
Male and female tables differ because population strength curves differ; the calculator selects constants from the sex field and never mixes tables mid-call. Interpreting the score is straightforward: higher is better for relative strength. Two lifters with the same Wilks 2020 score are treated as equally strong for ranking purposes even if their raw totals and body weights differ.
The formula is not a medical metric and does not replace IPF Good Lift points or other federation systems when a meet rulebook names a different standard; it is the updated Wilks polynomial used widely in gyms, spreadsheets, and open rankings that still cite Wilks 2020 by name.
What you enter and what you get back
Example: a ninety-kilogram male with a seven-hundred-kilogram total receives a coefficient near zero point seven six seven and a score near five hundred thirty-seven. Body weight outside the practical competition band is rejected because the published polynomial is not intended for extreme paediatric or pathological masses. Negative totals are rejected.
Validation failures are not billed. Pair the score with your own age factors or drug-tested flags if your federation requires them; this capability computes only the pure Wilks 2020 body-weight coefficient path.
Who uses Wilks 2020 scores
Gym apps and training logs show relative progress when body weight drifts between bulk and cut phases: the same raw total can rise or fall in Wilks points as mass changes, which is exactly the signal athletes want. Meet directors and open ranking sites need a deterministic oracle that every client can call without shipping a private coefficient table that drifts between languages. Coaching platforms bulk-score squads after a test day so podium predictions and team points use one shared formula.
Failed validation does not consume balance. Keep requests small, pin coefficient and score in tests, and you get reproducible relative-strength numbers for spreadsheets, LMS plugins, and edge workers without standing up a sports-science stack of your own.
What you can do with it
Gym and training-log relative strength
Score session or meet totals against body weight so progress stays visible when mass changes between bulk and cut phases.
Open rankings and meet software
Apply a single deterministic Wilks 2020 oracle across clients instead of shipping divergent coefficient tables per language.
Coaching squad comparison
Bulk-score a team after a test day so podium and team-point predictions share one formula for male and female lifters.
FAQ
What is the difference between classic Wilks and Wilks 2020?
Wilks 2020 revises the polynomial constants and uses a numerator of 600 instead of 500. This capability implements only the 2020 update (wilks2), not the 1990s classic tables.
Which units must I use?
Convert pounds to kilograms before calling if your scale or bar loads are in imperial units.
How is the Wilks 2020 score calculated?
Your body weight goes into a fifth-order polynomial with separate male and female constants, and 600 is divided by the result to give the coefficient. The score is your total multiplied by that coefficient.
Why compare lifters with Wilks instead of raw totals?
Raw totals favour heavier lifters, while total per kilogram favours lighter ones, because strength does not grow in a straight line with body mass. The Wilks curve evens that out across weight classes.
Can I use Wilks 2020 for any federation?
Not always. It does not replace IPF Good Lift points or another system when a meet rulebook names a different standard; it is the updated Wilks formula still used in gyms, spreadsheets and open rankings.
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/health/wilks2-coefficient \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total":700,"body_weight":90,"sex":"male"}'const res = await fetch("https://api.kit.forhosting.com/health/wilks2-coefficient", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total": 700,
"body_weight": 90,
"sex": "male"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/wilks2-coefficient",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total": 700,
"body_weight": 90,
"sex": "male"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/wilks2-coefficient", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total":700,"body_weight":90,"sex":"male"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total":700,"body_weight":90,"sex":"male"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/wilks2-coefficient", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"total": 700,
"body_weight": 90,
"sex": "male"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.wilks2_coefficient",
"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
Missing fields and non-numeric values fail with invalid_input instead of inventing a score.
Input contract, response shape, and errors
POST a JSON body with three required fields: total, the lifted total in kilograms as a finite non-negative number; body_weight, the weigh-in body mass in kilograms as a finite positive number between twenty and two hundred fifty; and sex, one of male, female, m, f, man, or woman. Numeric fields may arrive as JSON numbers or numeric strings; empty strings, booleans, NaN, and Infinity fail with invalid_input naming the field. Aliases such as total_kg, lifted_total, bodyweight, weight_kg, bw, and gender are accepted so existing meet scripts need less glue code. On success the response echoes total_kg, body_weight_kg, and the normalised sex string; coefficient is the unitless Wilks 2020 multiplier rounded to twelve decimal places for stable goldens; score is total times coefficient with the same rounding; formula restates the polynomial identity; and method is the fixed string wilks_2020 so clients can branch if they also call legacy Wilks or IPF GL endpoints.
Where a Wilks 2020 API earns its keep
When a federation switches fully to IPF GL or another system, keep this endpoint for historical datasets and gym culture that still speak in Wilks points.
Technical questions
How do I calculate a Wilks 2020 score?
Send total (kg), body_weight (kg), and sex (male or female). The API returns coefficient = 600 / polynomial(body_weight) and score = total × coefficient using the published 2020 sex-specific constants.
What inputs cause invalid_input?
Missing fields, non-numeric total or body_weight, negative total, non-positive body_weight, body_weight outside 20–250 kg, or sex values other than male/m/man or female/f/woman.
What does the Wilks 2020 coefficient calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.