ForHosting KIT · Health & fitness

Protein-creatinine ratio calculator

Urine protein of 30 mg/dL with creatinine of 150 mg/dL gives a ratio of 0.2 mg/mg, or 200 mg/g, which falls in the mild proteinuria band. One spot sample stands in for a 24-hour collection. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Protein
30
Creatinine
150
You get
Protein unit
mg/dL
Creatinine unit
mg/dL
Protein mg dl
30
Creatinine mg dl
150

The urine protein-to-creatinine ratio, often written PCR or UPCR, estimates daily proteinuria from a single voided spot sample so you do not need a timed twenty-four-hour collection. This calculator converts the protein and creatinine concentrations you send into milligrams per deciliter, divides protein by creatinine, and returns the ratio in milligrams per milligram, milligrams per gram, and milligrams per millimole, together with a proteinuria category. Categories follow common clinical teaching: normal below 0.15 mg per mg, mild from 0.15 up to 0.50, moderate from 0.50 up to 3.5, and nephrotic-range at 3.5 and above.

What the protein-to-creatinine ratio means and how categories are assigned

A timed twenty-four-hour urine protein collection is still the historical reference for daily proteinuria, but incomplete voids, spilled bottles, and over-collection make the result noisy in ordinary clinics. The protein-to-creatinine ratio on a random spot sample is the practical substitute: creatinine excretion is relatively stable through the day, so the ratio of protein concentration to creatinine concentration tracks daily protein excretion without measuring volume. When both analytes are in milligrams per deciliter, PCR in milligrams per milligram equals protein divided by creatinine.

That number is numerically the same as grams of protein per gram of creatinine and is the conventional US reporting unit. Multiply by one thousand to obtain milligrams of protein per gram of creatinine, the milligram-per-gram figure many laboratory reports print. Multiply the milligram-per-milligram ratio by 113.12, the molecular weight of creatinine in grams per mole, to obtain milligrams of protein per millimole of creatinine, the SI reporting unit.

This calculator classifies the milligram-per-milligram ratio into four screening bands aligned with common KDIGO-style protein-excretion teaching: normal or physiologic below 0.15, mild proteinuria from 0.15 up to but not including 0.50, moderate proteinuria from 0.50 up to but not including 3.5, and nephrotic-range proteinuria at 3.5 and above. Those cut-offs echo the usual story that physiologic protein excretion is under about one hundred fifty milligrams per day and nephrotic-range excretion is three point five grams per day or more, assuming roughly one gram of creatinine excreted per day.

They are labels for a ratio, not a diagnosis of chronic kidney disease, nephrotic syndrome, or any named glomerulopathy. Hydration, muscle mass, assay method, and clinical context still belong to the clinician who reads the result.

Practical tips, limits, and related searches

Prefer numbers rather than pre-formatted strings when you control the client; string numbers are accepted only when they match a strict finite numeric pattern.

Classic checks you can recompute by hand include protein thirty milligrams per deciliter over creatinine one hundred fifty milligrams per deciliter, which is 0.2 milligrams per milligram (two hundred milligrams per gram) in the mild band; protein ten over one hundred, which is 0.1 and normal; protein eighty over one hundred, which is 0.8 and moderate; and protein four hundred over one hundred, which is 4.0 and nephrotic-range.

This landing targets people searching for a urine protein creatinine ratio calculator, PCR calculator, UPCR calculator, or proteinuria category from a spot sample. It is not a daily dietary protein intake tool, not a Bradford assay, not an eGFR kidney-filtration estimate, and not a twenty-four-hour volume calculator. Prefer this capability when you already have two concentrations and only need the ratio plus band; if your source is a timed collection with volume, convert to concentrations first or keep the timed total as a separate workflow.

Clinic screening without a 24-hour collection

Intake forms capture a spot urine protein and creatinine pair once, then store PCR and a proteinuria category next to the visit instead of waiting on a timed jug.

What is the urine protein-to-creatinine ratio?

PCR (or UPCR) is spot urine protein concentration divided by spot urine creatinine concentration after both are expressed in the same mass-per-volume unit. It estimates daily proteinuria without a timed collection.

Which proteinuria categories are used?

On the mg/mg scale: normal below 0.15, mild from 0.15, moderate from 0.50, and nephrotic-range at 3.5 and above. These are KDIGO-aligned screening labels, not a diagnosis.

What units can I send for protein and creatinine?

Protein defaults to mg/dL and also accepts g/L and mg/L. Creatinine defaults to mg/dL and also accepts g/L and mmol/L.

Is the protein-creatinine ratio calculator free?

The browser tool is free and runs locally.

Why can a single urine sample replace a 24-hour collection?

Because creatinine is excreted at a fairly steady rate through the day, so the ratio of protein to creatinine tracks daily protein loss without measuring volume. It also avoids the missed voids and spilled bottles that spoil timed collections.

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.

POSThttps://api.kit.forhosting.com/health/protein-cr-ratio

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.

curl -X POST https://api.kit.forhosting.com/health/protein-cr-ratio \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"protein":30,"creatinine":150}'
{
  "protein": 30,
  "creatinine": 150
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "health.protein_cr_ratio",
  "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.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

A creatinine concentration of zero makes the ratio undefined, so the task fails with invalid_input instead of inventing infinity.

How to call the API and what comes back

Both must be finite numbers; protein must be non-negative and creatinine must be strictly greater than zero. The engine converts protein in grams per liter by multiplying by one hundred and protein in milligrams per liter by multiplying by zero point one; creatinine in grams per liter uses the same hundred-fold factor, and creatinine in millimoles per liter is multiplied by 11.312 because one millimole per liter of creatinine equals 11.312 milligrams per deciliter. Send a JSON body with two required concentrations: protein (aliases urine_protein, protein_mg_dl, uprot) and creatinine (aliases urine_creatinine, creatinine_mg_dl, ucr). Optional protein_unit (aliases protein_units, p_unit) is one of mg_dl, g_l, or mg_l and defaults to mg_dl, meaning milligrams per deciliter. Optional creatinine_unit (aliases creatinine_units, cr_unit) is one of mg_dl, g_l, or mmol_l and also defaults to mg_dl. On success the response echoes the cleaned inputs and display units, reports protein_mg_dl and creatinine_mg_dl after conversion, and sets ratio and ratio_mg_mg to the milligram-per-milligram quotient, ratio_mg_g to the milligram-per-gram value, and ratio_mg_mmol to the milligram-per-millimole value. category is one of normal, mild, moderate, or nephrotic, with a matching category_label, plus formula, message, and an ordered steps array you can show next to the answer. Missing fields, non-numeric strings, negative protein, negative creatinine, unknown units, values that overflow the published milligram-per-deciliter ceilings, and a creatinine of zero all return invalid_input and are never charged. Successful API calls cost $0.002 per item.

Practical tips, limits, and related searches

Read the laboratory ticket before you call the API: protein and creatinine must each be tagged with the unit you send, because mixing milligrams per deciliter of protein with millimoles per liter of creatinine without setting creatinine_unit silently scales the ratio. Zero protein is a real laboratory result and yields PCR zero in the normal band; zero creatinine is never a real laboratory result for this ratio and is the hard invalid_input path. Keep converted protein at or below one hundred thousand milligrams per deciliter and converted creatinine at or below ten thousand milligrams per deciliter so intermediate products stay finite on the Worker and in the browser. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when you deliberately send creatinine zero to test client validation.

Lab middleware and EHR conversion

Interfaces that receive mixed mg/dL and mmol/L tickets call one deterministic endpoint so dashboards always show mg/mg, mg/g, and mg/mmol with the same band labels.

Research and QA fixtures

Generate known-good normal, mild, moderate, and nephrotic cases plus a creatinine-zero rejection for automated golden expected values and teaching worksheets.

Why does a creatinine concentration of zero fail?

Division by zero is undefined. This tool returns invalid_input when creatinine is zero or non-positive instead of inventing an infinite ratio.

Read the full KIT documentation →