Concrete mix ratio calculator
For 1 m³ of concrete at the classic 1:2:3 mix, batch a sixth of a cubic metre of cement, a third of sand and half of gravel. Enter any total volume and ratio, and each material gets its proportional share. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Volume
- 1 m3
- Cement parts
- 1
- Sand parts
- 2
- Gravel parts
- 3
- Parts total
- 6 m3
- Ratio
- 1:2:3
- Cement amount
- 0.1666666667
- Sand amount
- 0.3333333333
Site crews, DIY builders and estimating spreadsheets all need the same answer before the mixer starts: given a target volume of wet concrete and a nominal mix ratio such as one-two-three, how much cement, sand and gravel should you batch? This concrete mix ratio calculator takes a positive total volume and a cement-to-sand-to-gravel ratio, then returns each component amount as a proportional share of that volume. You can send the classic three parts separately or pass a compact ratio string like 1:2:3 or 1:1.5:3. Use it to turn a pour schedule into material tickets without a full structural design package.
What a mix ratio means on site
A concrete mix ratio expresses the relative bulk volumes of cement, fine aggregate (sand) and coarse aggregate (gravel or crushed stone) that make up a batch. The familiar one-two-three mix means one part cement, two parts sand and three parts gravel by volume; the three numbers are pure proportions, not absolute bags or tonnes.
To convert a ratio into quantities you first add the parts to obtain a parts total—for one-two-three that total is six—then allocate the planned wet concrete volume in the same proportions: cement volume equals total volume times one over six, sand equals total times two over six, and gravel equals total times three over six. Nominal grades used in many handbooks follow the same pattern: leaner mixes use more aggregate relative to cement, richer structural mixes tighten the cement share.
This calculator does not invent compressive strength grades or water-cement ratios; it only performs the proportional split so estimators can size stockpiles, order bulk sand and gravel, and plan bagged cement against a pour volume. Keep units consistent: if volume is in cubic metres, the component amounts are in cubic metres of bulk material share; if you work in cubic yards, the same arithmetic applies without conversion. Optional unit labels such as m3 or yd3 are echoed for display only.
Always allow for waste, bulking of damp sand, and the fact that dry materials compact when mixed with water—site practice often adds a contingency on top of the pure ratio split this tool returns.
Who saves time with a mix split
Home renovation planners use a concrete mix ratio calculator when a patio slab or fence post pour is already sized in cubic metres and the next question is how many barrows of sand and gravel and how many cement bags to stage. Small contractors embed the same split in quoting tools so material lines update when the pour volume or the chosen grade ratio changes.
Educational content and trade-school worksheets need a deterministic oracle that returns the same cement-sand-gravel breakdown for a given 1:2:4 or 1:1:2 mix every time a student reloads the page. Failed validation is free.
What you can do with it
Patio and slab pour planning
After you know the slab volume, split it by 1:2:3 or another site mix so sand, gravel and cement orders match the pour day.
Contractor quotes and material tickets
Feed pour volume and grade ratio from an estimate sheet; return cement, sand and gravel quantities for supplier tickets.
Trade training and homework checks
Let apprentices verify that a one-cubic-metre 1:2:4 mix yields the textbook cement, sand and gravel shares every time.
FAQ
How do I calculate cement, sand and gravel from a mix ratio?
Each material amount equals volume times its part divided by the sum of all three parts.
What does a 1:2:3 concrete mix mean?
One part cement, two parts sand and three parts gravel by volume. For six total parts, cement is 1/6 of the volume, sand 2/6 and gravel 3/6.
Can I use ratios other than 1:2:3?
Yes. Any three strictly positive parts work, including decimal grades like 1:1.5:3. Pass them as fields or as a ratio string.
Does this include water or bag counts?
No. The calculator splits volume among cement, sand and gravel only. Water-cement ratio and bag packing factors are site-specific and left to your own conversion.
Should I order extra on top of the ratio split?
Yes. The split is the pure proportion of the volume. Damp sand bulks up, dry materials shrink when water is added and some material is always lost, so site practice adds a contingency on top.
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/home/concrete-mix-ratio \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"volume":1,"cement_parts":1,"sand_parts":2,"gravel_parts":3}'const res = await fetch("https://api.kit.forhosting.com/home/concrete-mix-ratio", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"volume": 1,
"cement_parts": 1,
"sand_parts": 2,
"gravel_parts": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/concrete-mix-ratio",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"volume": 1,
"cement_parts": 1,
"sand_parts": 2,
"gravel_parts": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/concrete-mix-ratio", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"volume":1,"cement_parts":1,"sand_parts":2,"gravel_parts":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"volume":1,"cement_parts":1,"sand_parts":2,"gravel_parts":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/concrete-mix-ratio", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"volume": 1,
"cement_parts": 1,
"sand_parts": 2,
"gravel_parts": 3
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.concrete_mix_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.
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 inputs—zero volume, missing parts, or non-positive ratio sides—fail with invalid_input and are not billed.
Input contract, response fields, and validation errors
Explicit numeric parts override the corresponding side of a ratio string when both are present. An optional unit string up to twenty-four characters is returned unchanged so UIs can print m3, ft3 or L next to the amounts. Fractions and percentages of the total are included for dashboards, along with a short summary sentence and a formula string restating the split. Example: volume one cubic metre with ratio 1:2:3 yields cement one sixth, sand one third and gravel one half of a cubic metre. POST a JSON body with volume set to a finite positive number for the total wet concrete you intend to produce. Supply the mix either as cement_parts, sand_parts and gravel_parts (each strictly greater than zero) or as a single ratio string such as 1:2:3 or 1:1.5:3 using colons or slashes. On success the response echoes volume and the three parts, reports parts_total and a normalized ratio label, and returns cement_amount, sand_amount and gravel_amount as the proportional volumes. Missing volume, any non-positive part, a two-part ratio string, or non-numeric values fail with invalid_input naming the problem; those failures do not consume prepaid balance. Optional fields that were not provided are omitted from the payload rather than returned as null, matching the KIT output contract for clean client binding.
Where a concrete mix ratio API pays for itself
Inventory systems can call the API from a nightly job to convert a backlog of scheduled pours into aggregate purchase orders without standing up a full construction ERP.
Technical questions
What does the concrete mix ratio calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.