Serial dilution calculator
A 1 M stock diluted ten-fold over five steps ends at 0.00001 M. Enter the stock, the factor and the steps, and see each tube's concentration beside its cumulative fold, starting from the undiluted stock. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Stock
- 1
- Dilution factor
- 10
- Concentrations
- 1, 0.1, 0.01, 0.001, 0.0001, 0.00001
- Final concentration
- 0.00001
- Total fold
- 100,000
Serial dilution is the standard laboratory procedure for producing a geometric sequence of concentrations from a single stock: each step transfers a fixed fraction of the previous tube into fresh diluent so the concentration multiplies by one over the dilution factor. For a stock concentration C0, factor f, and n steps, the concentration after i transfers is C_i equals C0 divided by f to the power i, with step zero equal to the undiluted stock. This calculator accepts those three numbers, returns every concentration and cumulative fold, and rejects a dilution factor below one so a concentrating protocol is never mislabelled as a serial dilution.
How serial dilution maps stock to each tube
Begin with a stock solution of concentration C0 in any consistent unit such as molar, milligrams per millilitre, or colony-forming units per millilitre. Choose a dilution factor f that describes how much more dilute each successive tube is relative to the previous one: a one-to-ten series uses f equals ten, a two-fold series uses f equals two, and a one-to-hundred series uses f equals one hundred.
After i successive transfers with the same factor, the concentration is exactly C0 divided by f raised to i, assuming ideal mixing and negligible transfer volume errors. Step zero is the stock itself with fold dilution one; step one is C0 over f with fold f; step two is C0 over f squared with fold f squared; and so on through step n. The final concentration is therefore C0 over f to the n, and the total fold from stock to the last tube is f to the n.
This geometric structure is why serial dilutions dominate microbiology plate counts, immunoassay standard curves, and analytical chemistry working standards: each decade or binary step is easy to pipette and easy to plot on a log scale. Entries must be finite; NaN and Infinity are rejected. A dilution factor strictly less than one fails early with invalid input because that would increase concentration rather than dilute it.
Negative stock concentration is rejected for the same physical reason. Steps must be an integer between one and sixty-four so plate-scale series stay bounded on the free parse path.
Where serial dilution calculators show up in real work
Secondary-school and college chemistry and microbiology courses constantly assign serial dilution drills, CFU plate-count problems, and log-scale standard curves; a single trusted oracle that returns every tube concentration beside its fold speeds grading and demo setup. Clinical and research labs build immunoassay and ELISA calibrators as geometric series from a stock and need exact theoretical concentrations before they measure actual absorbances. Quality teams writing SOPs for analytical methods document working standards as successive dilutions of a certified reference and want machine-readable series that match the written protocol.
If you later need unit conversion between molarity and mass concentration, aliquot volumes for a target final volume, or pipetting error models, treat those as separate search intents and landings rather than overloading this serial dilution calculator page.
What you can do with it
Homework and exam answer keys
Generate every tube concentration and cumulative fold for textbook serial dilution sets so teachers and auto-graders share one ground truth.
ELISA and plate standard curves
Plan geometric calibrators from a stock concentration and factor before measuring absorbances on multi-well plates.
FAQ
What is a serial dilution?
A sequence of tubes where each step dilutes the previous concentration by a fixed factor f. With stock C0, the concentration after i steps is C_i = C0 / f^i (step 0 is the stock).
What happens if the dilution factor is below one?
A factor less than one would concentrate rather than dilute; this calculator only accepts factor ≥ 1.
Which units should I use?
Any consistent concentration unit (M, mg/mL, CFU/mL, …).
What does it cost?
The browser tool is free and runs locally.
How do I find the final concentration of a dilution series?
Divide the stock concentration by the dilution factor raised to the number of steps. A 1 M stock diluted ten-fold over five steps ends at 0.00001 M, which is a total fold of 100000.
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/serial-dilution \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"starting_concentration":1,"dilution_factor":10,"steps":5}'const res = await fetch("https://api.kit.forhosting.com/chem/serial-dilution", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"starting_concentration": 1,
"dilution_factor": 10,
"steps": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/chem/serial-dilution",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"starting_concentration": 1,
"dilution_factor": 10,
"steps": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/chem/serial-dilution", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"starting_concentration":1,"dilution_factor":10,"steps":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"starting_concentration":1,"dilution_factor":10,"steps":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/chem/serial-dilution", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"starting_concentration": 1,
"dilution_factor": 10,
"steps": 5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "chem.serial_dilution",
"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
How serial dilution maps stock to each tube
The calculator evaluates the closed power form for every index from zero through n in deterministic floating-point arithmetic with no random seeds, no wall-clock timestamps, and no network calls, so identical inputs always produce identical JSON.
What you send and what you get back
Send three required fields. The field steps is the number of dilution steps after the stock and must be an integer from one through sixty-four inclusive. Classic textbook checks include a one molar stock with ten-fold dilution over five steps yielding one, zero point one, zero point zero one, zero point zero zero one, zero point zero zero zero one, and zero point zero zero zero zero one, and a two-fold series from one hundred milligrams per millilitre over three steps. The field starting_concentration is the stock concentration C0 as a finite non-negative number in whatever unit your lab uses; the output concentrations are expressed in that same unit. The field dilution_factor is the per-step factor f and must be a finite number greater than or equal to one; classic examples are two, five, and ten. Missing fields, non-numeric strings, NaN, Infinity, negative stock, factor below one, non-integer steps, steps less than one, and steps above sixty-four fail with invalid_input and are not charged. On success the response echoes the cleaned starting concentration, dilution factor, and steps, plus a series array of objects each with step index, concentration, and fold_dilution, a flat concentrations array of the same values, final_concentration equal to the last entry, total_fold equal to factor to the steps, and the formula and method labels for audit trails. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where serial dilution calculators show up in real work
Biotech process development often sketches multi-step seed trains and media spiking as fold dilutions; matching hand arithmetic to API output matters more than asymptotic cost. Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Integration use cases
SOP and QC fixtures
Bulk-produce theoretical series for documented working standards and reject factor-below-one mistakes with hard invalid_input.
Technical questions
Does step 0 appear in the output?
Yes. The series always includes step 0 as the undiluted stock (fold_dilution = 1), then steps 1 through the requested number of steps.