Biomass yield coefficient calculator
Find how much biomass each gram of substrate made: biomass rising from 0.5 to 4.5 while substrate falls from 20 to 2 gives 4 grams of cells from 18 grams consumed, with an inverse yield of 4.5. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Initial biomass
- 0.5
- Final biomass
- 4.5
- Initial substrate
- 20
- Final substrate
- 2
- Biomass produced
- 4
- Substrate consumed
- 18
- Yield coefficient
- 0.2222222222
- Inverse yield
- 4.5
The biomass yield coefficient Y_X/S is the mass of cells produced per mass of substrate consumed in a fermentation or bioreactor run. Process engineers, fermentation scientists, and bioprocess students compute it from paired biomass and substrate measurements at the start and end of a batch, or between two samples on a fed-batch or chemostat log. This biomass yield coefficient calculator subtracts initial biomass from final biomass, subtracts final substrate from initial substrate, and divides the two differences to return Y_X/S in grams of cells per gram of substrate. The same ratio works for any consistent mass or concentration unit because volume cancels when both concentrations share the same working volume. Optional theoretical yield, when supplied, is compared as a percentage of the theoretical maximum.
What the biomass yield coefficient Y_X/S means
The observed biomass yield coefficient, written Y_X/S in bioprocess texts, is grams of cells produced per gram of limiting substrate consumed during a fermentation window. You measure biomass X and residual substrate S at the start of that window and again at the end. Produced cells equal final biomass minus initial biomass.
Consumed substrate equals initial substrate minus final substrate. Divide those two differences and you have the apparent yield. Apparent is the right adjective: the number absorbs growth, maintenance energy, overflow metabolism, product drains, and any unmeasured carbon losses, so it usually sits below a stoichiometric maximum computed from an elemental biomass formula and a fully respiring balance.
Aerobic growth on glucose often lands near one half gram of dry cells per gram of sugar when aeration, nitrogen, and pH are kind; anaerobic or strongly product-oriented runs sit much lower. Because numerator and denominator share a mass dimension, the ratio is unit-consistent: grams over grams, kilograms over kilograms, or grams per liter over grams per liter in a constant-volume vessel. If working volume changed between samples, convert each concentration to total mass before dividing, or the yield will be biased.
This calculator returns that two-point observed coefficient. It does not fit a Pirt maintenance term, a true yield from several dilution rates, or a dynamic unstructured model. It is the number you write beside dry-cell weight and residual sugar on a batch record, and the same number costing uses when it asks how many grams of sugar a campaign will burn per gram of cells.
Workflows, limits, and related search intent
Development groups use the biomass yield coefficient to judge whether a medium, aeration rate, or feeding policy is converting carbon into cells or wasting it on overflow acids and maintenance. Manufacturing costing uses the inverse yield to size how much sugar a campaign must purchase to hit a dry-cell or intracellular-product target. Teaching laboratories use a live calculator so students stop reversing the two subtractions when residual glucose is not zero.
Quality systems pin the same four field names in a LIMS so two plants cannot disagree on rounding. Search intent for this page includes biomass yield coefficient calculator, YXS fermentation calculator, grams of cells per gram of substrate, observed yield Y_X/S, and apparent biomass yield on glucose. This landing is not a chemistry percent-yield tool, not a PCR amplicon copy estimator, and not an OD600-to-CFU conversion; those queries mean different numbers.
Limits of the model are honest: it is two-point and algebraic. It will not reconstruct a chemostat balance from dilution rate and residual S, and it will not split consumed substrate into growth versus maintenance. If you measured biomass as optical density or wet pellet weight, convert to dry-cell mass first or your Y will not match literature dry-weight yields.
If vessel volume changed, convert concentrations to total mass before calling. If you already hold the two deltas rather than the four concentrations, send initial biomass zero, final biomass as produced cells, initial substrate as consumed substrate, and final substrate zero — the same formula applies.
What you can do with it
Batch fermentation records
Enter start and harvest dry-cell weight and residual sugar to log Y_X/S next to the batch, then compare campaigns when media or aeration change.
Media and feeding development
Compute observed yield after each shake-flask or fed-batch trial to see whether extra carbon became cells or overflow product.
Teaching and exam checks
Give students X0, Xf, S0, and Sf and let them verify grams of cells per gram of substrate against the two-point definition without flipping signs.
FAQ
How is the biomass yield coefficient Y_X/S calculated?
The result is grams of cells produced per gram of substrate consumed.
What units should I use for biomass and substrate?
Any consistent mass or concentration pair: grams with grams, or g/L with g/L in a constant-volume vessel. Volume cancels for concentrations at the same working volume. Convert optical density or wet weight to dry-cell mass first if you want a literature-style dry yield.
Why was my request rejected when residual substrate did not fall?
A biomass decrease (final below initial) is rejected the same way.
What is the difference between observed Y_X/S and theoretical yield?
Observed Y_X/S is the two-point ratio from your measurements. Observed yield is usually lower because of maintenance and side products.
What does the inverse yield tell me?
It is the grams of substrate consumed per gram of cells produced. With 4 g of cells from 18 g of substrate, the inverse yield is 4.5, so each gram of biomass cost 4.5 grams of substrate.
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/bio/biomass-yield-coefficient \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"initial_biomass":0.5,"final_biomass":4.5,"initial_substrate":20,"final_substrate":2}'const res = await fetch("https://api.kit.forhosting.com/bio/biomass-yield-coefficient", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"initial_biomass": 0.5,
"final_biomass": 4.5,
"initial_substrate": 20,
"final_substrate": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/bio/biomass-yield-coefficient",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"initial_biomass": 0.5,
"final_biomass": 4.5,
"initial_substrate": 20,
"final_substrate": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/bio/biomass-yield-coefficient", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"initial_biomass":0.5,"final_biomass":4.5,"initial_substrate":20,"final_substrate":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"initial_biomass":0.5,"final_biomass":4.5,"initial_substrate":20,"final_substrate":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/bio/biomass-yield-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
{
"initial_biomass": 0.5,
"final_biomass": 4.5,
"initial_substrate": 20,
"final_substrate": 2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "bio.biomass_yield_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
Invalid pairs — missing fields, a biomass decrease, or no substrate consumption — fail with invalid_input and are not billed.
Input contract, response fields, and validation
Both biomass values must be non-negative, and final biomass must be greater than or equal to initial biomass so the numerator is cells produced rather than net lysis. Both substrate values must be non-negative, and initial substrate must be strictly greater than final substrate so the denominator is a positive consumption. Theoretical keys are omitted when you did not send a theoretical yield. Inverse yield is omitted when observed yield is zero. Send a JSON object with four required finite numbers. Field initial_biomass is starting biomass X0; accepted aliases are x0, X0, biomass_initial, initial_x, and x_initial. Field final_biomass is ending biomass Xf; aliases xf, Xf, biomass_final, final_x, and x_final. Field initial_substrate is starting substrate S0; aliases s0, S0, substrate_initial, initial_s, and s_initial. Field final_substrate is residual substrate Sf; aliases sf, Sf, substrate_final, final_s, and s_final. Optional theoretical_yield, with aliases y_theoretical, yxs_max, max_yield, y_max, and theoretical, must be a finite positive number when present; the response then includes percent_of_theoretical equal to one hundred times the observed coefficient divided by that theoretical value. A worked example: initial biomass 0.5, final biomass 4.5, initial substrate 20, and final substrate 2 produce four mass units of cells from eighteen mass units of substrate, so yield_coefficient is four divided by eighteen, about 0.222222222222 grams per gram, and inverse_yield is 4.5 grams of substrate per gram of cells. Success also echoes the four inputs, biomass_produced, substrate_consumed, yield_unit as g/g, formula, and a short message. Missing fields, empty strings, booleans, non-finite values, negative stocks, a biomass decrease, and zero or negative substrate consumption fail with invalid_input and are not billed. Successful API calls use prepaid balance at $0.002 per item.
Workflows, limits, and related search intent
Failed validation does not consume prepaid balance. A round-trip check recomputes final biomass minus initial biomass over initial substrate minus final substrate and compares that ratio with yield_coefficient at twelve-decimal rounding.
Technical questions
What does the biomass yield 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.