Product mass from limiting reactant calculator
Find how many grams of product two reactant charges can make: 10 g of oxygen and 5 g of hydrogen forming water give 11.25 g of water, because the oxygen, at 0.3125 mol, runs out first. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Reactant1 mass
- 10
- Reactant1 molar mass
- 32
- Reactant1 coeff
- 1
- Reactant2 mass
- 5
- Reactant2 molar mass
- 2
- Reactant2 coeff
- 2
- Moles reactant1
- 0.3125 g
- Moles reactant2
- 2.5
- Equivalents1
- 0.3125
- Equivalents2
- 1.25
When a balanced chemical equation involves two reactants, the amount of product you can form is fixed by the limiting reactant—not by whichever reagent you happen to have more grams of. This product mass from limiting reactant calculator accepts both reactant masses, both molar masses, both stoichiometric coefficients, the product molar mass, and the product coefficient. It converts each mass into moles, divides by the balanced coefficient to obtain reaction equivalents, takes the smaller extent as limiting, and multiplies by the product coefficient and product molar mass to report how many grams of product form. The response also names which reactant is limiting (or both if they are stoichiometric) and echoes intermediate moles so students, tutors, and automated graders can audit every step. Zero coefficients are rejected as invalid input because they make the equivalent ratio undefined.
Inputs, units, and the two-reactant limiting path
Provide the mass of reactant one and reactant two in grams, each reactant molar mass in grams per mole, the balanced stoichiometric coefficients for both reactants and for the product, and the product molar mass in grams per mole. Masses must be finite and non-negative; molar masses and every coefficient must be finite and strictly greater than zero. The engine first converts each reactant mass into moles by dividing by its molar mass, then computes reaction equivalents as moles divided by that reactant's coefficient.
The reaction extent is the minimum of those two equivalent values: the reactant with fewer equivalents is limiting, and when the values match the response reports both as limiting. Product moles equal that extent multiplied by the product coefficient; product mass equals product moles multiplied by the product molar mass. That chain is algebraically identical to scaling min(n1/ν1, n2/ν2) by ν_product and M_product in a single expression.
Magnitudes are capped for isolate safety while still covering every ordinary classroom and pilot-plant worksheet.
What you can do with it
Homework limiting-reactant drills
Students enter two reactant masses, molar masses, and balanced coefficients, then compare the returned limiting label and product mass against their paper solution.
Lab prep and batch estimates
Technicians estimate how many grams of product two known reagent charges can form under a fixed balanced equation before running the experiment.
FAQ
What happens if a stoichiometric coefficient is zero?
A zero balanced-equation coefficient would make reaction equivalents undefined, so those values are rejected and not charged.
How is the limiting reactant chosen?
Each reactant is converted to moles and divided by its coefficient. The smaller ratio is the reaction extent; that reactant is limiting.
Is the product mass from limiting reactant calculator free?
The browser tool runs free on your device.
Which units should I use?
Coefficients are unitless balanced-equation numbers greater than zero.
Why is the reactant with more grams sometimes the limiting one?
Because what counts is moles divided by the coefficient, not grams. In the water example there are 10 g of oxygen against 5 g of hydrogen, yet oxygen gives fewer reaction units and runs out first.
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/chem/limiting-reactant-product-mass \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"reactant1_mass":10,"reactant1_molar_mass":32,"reactant1_coeff":1,"reactant2_mass":5,"reactant2_molar_mass":2,"reactant2_coeff":2,"product_molar_mass":18,"product_coeff":2}'const res = await fetch("https://api.kit.forhosting.com/chem/limiting-reactant-product-mass", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"reactant1_mass": 10,
"reactant1_molar_mass": 32,
"reactant1_coeff": 1,
"reactant2_mass": 5,
"reactant2_molar_mass": 2,
"reactant2_coeff": 2,
"product_molar_mass": 18,
"product_coeff": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/chem/limiting-reactant-product-mass",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"reactant1_mass": 10,
"reactant1_molar_mass": 32,
"reactant1_coeff": 1,
"reactant2_mass": 5,
"reactant2_molar_mass": 2,
"reactant2_coeff": 2,
"product_molar_mass": 18,
"product_coeff": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/chem/limiting-reactant-product-mass", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"reactant1_mass":10,"reactant1_molar_mass":32,"reactant1_coeff":1,"reactant2_mass":5,"reactant2_molar_mass":2,"reactant2_coeff":2,"product_molar_mass":18,"product_coeff":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"reactant1_mass":10,"reactant1_molar_mass":32,"reactant1_coeff":1,"reactant2_mass":5,"reactant2_molar_mass":2,"reactant2_coeff":2,"product_molar_mass":18,"product_coeff":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/chem/limiting-reactant-product-mass", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"reactant1_mass": 10,
"reactant1_molar_mass": 32,
"reactant1_coeff": 1,
"reactant2_mass": 5,
"reactant2_molar_mass": 2,
"reactant2_coeff": 2,
"product_molar_mass": 18,
"product_coeff": 2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "chem.limiting_reactant_product_mass",
"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
Inputs, units, and the two-reactant limiting path
Zero molar mass or zero coefficient fails with invalid_input so callers never see infinity or NaN disguised as a result. Documented aliases such as mass_a, mm_b, nu1, and nu_product are accepted when the parameter contract lists them. Identical inputs always produce identical JSON because the path is pure arithmetic with no network, no random seed, and no wall clock.
Reading product_mass, limiting labels, and error cases
On success the response echoes all eight numeric inputs with stable rounding, lists moles_reactant1 and moles_reactant2, reports equivalents1 and equivalents2 as the n over ν ratios, and sets reaction_extent to the smaller of those equivalents. The primary answer is product_mass in grams with unit set to g, together with moles_product, a formula string for the combined expression, and method label limiting_reactant_product_mass for downstream branching. The field limiting_reactant is reactant1, reactant2, or both when the reagents are present in exact stoichiometric ratio; excess_reactant names the non-limiting partner or none when there is no excess. Use product_mass alone when a UI needs a single headline number; use limiting_reactant and the equivalent fields when a worked-solution panel must show which reagent runs out first; use moles_product when a mole table is required before converting to mass. Missing any required field, non-finite values, negative mass, zero or negative molar mass, and zero or negative coefficients all fail with invalid_input and are not charged after the engine rejects the request. This calculator does not assume a single known-limiting mass without comparing two reagents—pair it with mass-of-product-from-reactant when only one reactant amount is given. It also does not look up molar masses from chemical formulas; feed tabulated or previously computed grams per mole so the arithmetic stays fully determined.
API usage, pricing, classroom workflows, and practical limits
Call the free in-browser product mass from limiting reactant calculator for homework checks, lecture demos, and quick lab prep without installing a spreadsheet or a chemistry package. Classic classroom examples include ten grams of oxygen with five grams of hydrogen forming water under a one-to-two reactant ratio, or combustion problems where fuel and oxygen compete as limiting reagents. Source inputs follow the same retention rules as other KIT parse items. Send a JSON body with reactant1_mass, reactant1_molar_mass, reactant1_coeff, reactant2_mass, reactant2_molar_mass, reactant2_coeff, product_molar_mass, and product_coeff as finite numbers or numeric strings. Use the prepaid API when a tutoring platform, learning-management plug-in, curriculum generator, or process-engineering notebook needs a stable contract under KIT balance at $0.002 per successful item; validation failures never consume balance after rejection. Authors shipping SDKs can map limiting_reactant, reaction_extent, and product_mass directly into a results table with the same columns students fill when they apply limiting-reactant mass stoichiometry by hand.
Integration use cases
Tutoring and LMS auto-graders
Lesson builders and quiz engines generate two-reagent stoichiometry items with a stable JSON contract without embedding a full chemistry CAS.
Technical questions
How do I calculate product mass from the limiting reactant?
Send both reactant masses in grams, both molar masses in g/mol, both reactant coefficients, product_molar_mass, and product_coeff. The response includes product_mass, limiting_reactant, and intermediate moles and equivalents.