eGFR CKD-EPI 2009 calculator
Get the estimated glomerular filtration rate from the 2009 CKD-EPI equation: a creatinine of 1 mg/dL in a 50-year-old woman gives 65.6 mL/min/1.73 m², stage G2. Made for reproducing older charts, studies and lab reports that cite this exact formula. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Creatinine
- 1
- Age
- 50
- Sex
- Female
- Egfr
- 65.6
- Equation
- CKD-EPI 2009
- Stage
- G2
- Stage label
- Mildly decreased
Estimated glomerular filtration rate is the screening number clinicians, researchers, and product teams use when they need a quick read on how well the kidneys clear waste from blood. This calculator implements the original CKD-EPI 2009 creatinine equation published by Levey and colleagues: enter serum creatinine in mg/dL, age in whole years, and sex, and receive eGFR in mL/min/1.73 m² plus a KDIGO-style GFR category label. The 2009 coefficients (141, sex-specific kappa and alpha, power −1.209, and 0.993 raised to age) differ from the race-free 2021 refit used in many modern labs, so this tool is ideal when you must reproduce historical charts, compare study arms coded with the older formula, or document what a legacy EHR would have reported.
What the CKD-EPI 2009 creatinine equation is and when to use it
Glomerular filtration rate is the volume of blood filtered by the kidney glomeruli per unit time, normalized to body surface area. Direct measurement with inulin clearance or radionuclide methods is accurate but impractical for routine care, so laboratories report an estimate derived from serum creatinine and demographic factors. The Chronic Kidney Disease Epidemiology Collaboration published the 2009 creatinine equation in the Annals of Internal Medicine after pooling large cohorts, improving accuracy over the older MDRD study equation especially at higher filtration rates.
The published form multiplies a base of one hundred forty-one by a min term and a max term of the serum creatinine over kappa ratio, then by zero point nine nine three raised to age, and by a female factor of one point zero one eight when sex is female.
Kappa is zero point seven for females and zero point nine for males; alpha is negative zero point three two nine for females and negative zero point four one one for males; the high-creatinine power is negative one point two zero nine. Those constants are exactly what this capability applies, rounded to one decimal place for display.
Use this landing when your protocol, paper, or dataset explicitly cites CKD-EPI 2009, when you are auditing a legacy system that still prints 2009 values, or when you need a side-by-side comparison against newer race-free equations. For new clinical screening workflows, many guidelines now prefer the 2021 race-free refit; keep both tools available so engineering and research teams can choose the equation the context demands without guessing coefficients by hand.
What to enter and what you get back
Send creatinine as a finite positive number in milligrams per deciliter (mg/dL)—the unit assumed by the CKD-EPI 2009 coefficients. Sex must be male or female; single-letter m or f is accepted and normalized. Non-positive or zero creatinine is rejected because a non-positive serum value is not clinically meaningful and would break the power terms.
Missing required fields, non-numeric types, and ages outside range likewise fail with a clear message naming the field. The original 2009 paper also described an optional race coefficient; this tool never applies that multiplier and never asks for race, so two adults with the same creatinine, age, and sex always receive the same eGFR.
How to interpret results, limits, and integration patterns
eGFR is a screening estimate, not a standalone diagnosis of chronic kidney disease, and this tool does not provide medical advice or clinical interpretation. KDIGO stages G1 through G5 classify filtration level only; full CKD staging also considers albuminuria, clinical context, and whether reduced filtration is chronic or acute. Values can be temporarily lowered by acute illness, high meat intake, certain drugs, muscle mass extremes, or lab assay differences, and creatinine-only equations are known to be less accurate at the extremes of muscle mass.
Do not use the output alone to dose nephrotoxic drugs, clear patients for procedures, or make a diagnosis—any of those decisions needs a licensed clinician working from the full clinical picture, and cystatin-C-based or measured clearance methods are preferred when creatinine alone is unreliable.
What you can do with it
Historical study coding and paper replication
Attach a reproducible CKD-EPI 2009 eGFR and KDIGO category to research rows when protocols or publications still cite the 2009 creatinine equation.
Legacy EHR and report audit
Cross-check what an older laboratory or hospital system would have reported for the same creatinine, age, and sex using the classic coefficients.
Education and equation comparison demos
Teach the difference between 2009 and newer race-free formulas with transparent, deterministic outputs students and product teams can verify by hand.
FAQ
Which eGFR equation does this calculator use?
The CKD-EPI 2009 creatinine equation (Levey et al., Annals of Internal Medicine 2009). Results are in mL/min/1.73 m² and rounded to one decimal place. The race coefficient from the original paper is not applied.
How does this differ from the CKD-EPI 2021 calculator?
Coefficients differ: 2009 uses base 141, power −1.209, age factor 0.993, and female factor 1.018 with older kappa/alpha pairs. The 2021 race-free equation uses base 142, power −1.200, age factor 0.9938, and female factor 1.012. Use 2009 for historical replication; prefer 2021 for new clinical screening.
What units should I use for serum creatinine?
Milligrams per deciliter (mg/dL). If your lab reports µmol/L, divide by 88.4 to convert to mg/dL before calling the tool.
What happens if creatinine, age, or sex is missing?
Required inputs are positive creatinine in mg/dL, whole-year age 18–120, and sex male or female.
Can I use this result to make a clinical decision?
No. This is a screening estimate for education, research coding, and product prototypes. Diagnosis, drug dosing, and care decisions require a licensed clinician and the full clinical picture.
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/egfr-ckd-epi-2009 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"creatinine":1,"age":50,"sex":"female"}'const res = await fetch("https://api.kit.forhosting.com/health/egfr-ckd-epi-2009", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"creatinine": 1,
"age": 50,
"sex": "female"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/egfr-ckd-epi-2009",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"creatinine": 1,
"age": 50,
"sex": "female"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/egfr-ckd-epi-2009", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"creatinine":1,"age":50,"sex":"female"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"creatinine":1,"age":50,"sex":"female"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/egfr-ckd-epi-2009", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"creatinine": 1,
"age": 50,
"sex": "female"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.egfr_ckd_epi_2009",
"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
The math is fully deterministic and runs locally—no models, labs, or network calls—so the same inputs always produce the same result and patient-like values never leave the request path. This is a screening estimate, not a diagnosis: use it for education, research coding, and product prototypes that need a transparent, auditable eGFR step, and always pair the output with clinician judgment before any care decision.
Inputs, units, validation rules, and response shape
If your lab reports micromoles per liter, convert first by dividing micromoles per liter by eighty-eight point four before calling the API. Age must be a whole number of years from eighteen through one hundred twenty; the adult equation is not validated for children, so pediatric ages fail with invalid_input rather than returning a misleading adult-stage label. On success the response returns egfr rounded to one decimal place, the unit string milliliters per minute per one point seven three square meters, equation name CKD-EPI 2009, a KDIGO GFR stage code G1 through G5 with a short stage_label, and echoes of the normalized inputs so callers can audit what was computed without re-parsing the request. Failed validation does not consume prepaid balance; successful calls are billed at the published item price.
How to interpret results, limits, and integration patterns
The free browser page runs the same lib as the API; programmatic calls cost $0.002 per request from prepaid KIT balance with unit item. Pair the JSON fields with your own UI—traffic-light bands, trend charts, research export columns, or EHR notes—while keeping clinical interpretation outside this calculator. When you need the modern race-free clinical default, switch to the CKD-EPI 2021 sibling capability; when you need the classic 2009 numbers for replication or audit, stay on this endpoint and pin the equation name in your logs.