Reaction quotient Q calculator
With reactants at 0.5 and 0.3 (coefficients 1 and 3) and a product at 0.2 (coefficient 2), Q is 0.04 divided by 0.0135, or 2.962962962963. Enter the current concentrations and coefficients to see each step. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Current concentrations
- 0.5, 0.3
- Reactant coefficients
- 1, 3
- Current concentrations
- 0.2
- Product coefficients
- 2
- Q
- 2.962962963
- Reaction quotient
- 2.962962963
- Qc
- 2.962962963
- Numerator
- 0.04
A reaction quotient calculator turns the current concentrations of reactants and products into the single mass-action number Q that tells you which way a reversible reaction must shift to reach equilibrium. Enter the stoichiometric coefficients from the balanced equation and the concentrations (or partial pressures in consistent units) you measure or assume right now; the tool returns Q equals the product of product concentrations each raised to its coefficient, divided by the same product over the reactants, plus the numerator, denominator, a readable expression string, and ordered substitution steps.
What the reaction quotient Q means
For a general reversible reaction written a A plus b B reverse arrows c C plus d D, the reaction quotient is defined by the mass-action expression Q equals C to the c times D to the d in the numerator, divided by A to the a times B to the b in the denominator, using current concentrations of each species rather than the special equilibrium values.
When the system sits at equilibrium that same algebraic form is called K or Kc (or Kp when partial pressures are used); the only difference between Q and K is whether the numbers you plug in are instantaneous snapshot values or true equilibrium values.
Comparing Q to K is the standard direction test in general chemistry: if Q is less than K the forward reaction is favored until product concentrations rise; if Q is greater than K the reverse reaction is favored; if they match the system is already at equilibrium. Teachers care about the zero-reactant rejection as much as the arithmetic: a student who reports Q after setting a reactant concentration to zero has left the domain of the formula, and returning infinity would hide that modeling error.
Units must be consistent on every species—typically moles per liter for aqueous Qc, or bars or atmospheres for gas-phase Qp—because the numerical value of Q inherits those units raised to a net reaction order; the calculator does not convert units for you, it only multiplies and divides the numbers you supply after validating finiteness and sign.
Practical tips, limits, and related searches
Keep every concentration and coefficient inside the published absolute range so powers and products cannot overflow into a non-finite Q that the solver must reject. Solids and pure liquids are conventionally omitted from Qc expressions—do not include them as concentration one unless your course explicitly wants activity one shown as a factor.
This landing targets people searching for a reaction quotient calculator, Qc from concentrations, or mass-action Q online; it is not a full equilibrium solver that iterates to find equilibrium mole fractions, not a free-energy minimizer, and not a kinetics rate-law fitter. Prefer this capability when you already have concentrations and the balanced coefficients and only need Q (or a Q versus K comparison you will finish offline); if your source is a word problem, extract the stoichiometric numbers and the snapshot concentrations first.
Round-trip checks are easy: recompute the product of each product concentration raised to its coefficient by hand, divide by the same product over reactants, and confirm it equals the published Q within the same twelve-decimal rounding, and confirm that expression and steps strings match that arithmetic.
What you can do with it
Homework checks for mass-action Q
Students enter coefficients from a balanced equation and current concentrations, then compare hand-written Q, numerator, and denominator against a deterministic result before submitting.
Direction of shift before equilibrium
Labs and process monitors compute Q from live concentrations and compare it to a known K to decide whether the forward or reverse reaction is favored.
FAQ
What is the reaction quotient Q?
Q is the mass-action expression using current concentrations: product of product concentrations each raised to its stoichiometric coefficient, divided by the same product over the reactants. At equilibrium the same form is called K or Kc.
What happens when a reactant concentration is zero?
The denominator of Q is zero, so Q is undefined.
Does this solve for equilibrium concentrations?
No. It only computes Q from the concentrations and coefficients you supply. Use an equilibrium solver if you need final mole fractions from K and initial amounts.
Is the reaction quotient calculator free?
The browser tool is free and runs locally.
Should I include solids and pure liquids?
Usually not. By convention solids and pure liquids are left out of the concentration expression; enter them as a factor of one only if your course explicitly wants that activity shown.
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/reaction-quotient \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"reactant_concentrations":[0.5,0.3],"reactant_coefficients":[1,3],"product_concentrations":[0.2],"product_coefficients":[2]}'const res = await fetch("https://api.kit.forhosting.com/chem/reaction-quotient", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"reactant_concentrations": [
0.5,
0.3
],
"reactant_coefficients": [
1,
3
],
"product_concentrations": [
0.2
],
"product_coefficients": [
2
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/chem/reaction-quotient",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"reactant_concentrations": [
0.5,
0.3
],
"reactant_coefficients": [
1,
3
],
"product_concentrations": [
0.2
],
"product_coefficients": [
2
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/chem/reaction-quotient", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"reactant_concentrations":[0.5,0.3],"reactant_coefficients":[1,3],"product_concentrations":[0.2],"product_coefficients":[2]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"reactant_concentrations":[0.5,0.3],"reactant_coefficients":[1,3],"product_concentrations":[0.2],"product_coefficients":[2]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/chem/reaction-quotient", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"reactant_concentrations": [
0.5,
0.3
],
"reactant_coefficients": [
1,
3
],
"product_concentrations": [
0.2
],
"product_coefficients": [
2
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "chem.reaction_quotient",
"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.
Limits
max_abs | 1000000000000 |
max_species | 32 |
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
When any reactant concentration is zero the denominator vanishes, so the API returns a clear invalid_input error instead of infinity or a silent NaN.
How to call the API and what comes back
Reactant concentrations must be strictly positive—zero or near-zero values at or below one times ten to the minus fifteen are rejected because they make the denominator zero. Product concentrations may be zero, which correctly yields Q equals zero when every product term vanishes under a positive coefficient. Coefficients on both sides must be strictly positive stoichiometric numbers. Send a JSON body with four required non-empty arrays of finite numbers: reactant_concentrations (aliases reactants, reactant_conc, reactant_c, left_concentrations), reactant_coefficients (aliases reactant_nu, reactant_stoich, left_coefficients, reactant_coeff), product_concentrations (aliases products, product_conc, product_c, right_concentrations), and product_coefficients (aliases product_nu, product_stoich, right_coefficients, product_coeff). Each concentration array length must match its parallel coefficient array; absolute values must stay within the published limit of one trillion so intermediate powers remain finite in IEEE double precision on the Worker and in the browser; each side is capped at thirty-two species. On success the response echoes rounded arrays, sets Q, reaction_quotient, and Qc to the same rounded value, numerator and denominator to the separate mass-action products, formula to the symbolic string Q equals product of products to the nu over product of reactants to the nu, expression to a fully substituted parenthesized product string, message to a short English summary, and steps to an ordered array of substitution lines you can assert in tests or worksheets. Failed validation—missing fields, empty arrays, length mismatches, non-finite numbers, negative concentrations, non-positive coefficients, values outside absolute limits, or a zero reactant concentration—returns invalid_input and is never charged. Pricing is a flat $0.002 per successful request with unit item and zero marginal unit price.
Practical tips, limits, and related searches
Prefer sending JSON number arrays rather than pre-formatted strings when you control the client; string numbers are accepted only when they match a strict finite numeric pattern. When teaching, pair classic examples: for N2 plus three H2 reverse arrows two NH3 with nitrogen zero point five, hydrogen zero point three, and ammonia zero point two, Q equals zero point two squared over zero point five times zero point three cubed; a one-to-one isomerization with equal concentrations yields Q equals one; and a deliberate zero reactant demonstrates the hard invalid_input path. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when learners deliberately set a reactant concentration to zero.
Integration use cases
Unit tests for chemistry solvers
Generate known-good multi-species Q cases plus deliberate zero-reactant rejections for coding kata expected values and CI golden fixtures.
Technical questions
Can product concentrations be zero?
Yes. Zero product concentration makes the numerator zero and yields Q = 0 when coefficients are positive, which is a valid snapshot (no products yet).