Gravel calculator
Covering 50 m² with gravel 0.1 m deep takes 5 m³, which at a bulk density of 1,600 kg/m³ weighs 8,000 kg. Enter area, depth and your supplier's density in matching units to know what to order for a driveway base, path or bed. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Area
- 50
- Thickness
- 0.1
- Density
- 1,600
- Volume
- 5
- Weight
- 8,000
- Mass
- 8,000
A gravel calculator turns three job-site numbers into the cubic volume and bulk weight of aggregate you need to order.
How gravel volume and weight are computed
A flat gravel layer over a known footprint is modelled as a right prism of plan area times thickness. Volume is therefore area multiplied by depth, provided the depth uses the same length unit that underlies the area—square metres with metres, square feet with feet, square yards with yards. Weight (mass of stone required) multiplies that volume by the bulk density of the gravel as sold or as placed: kilograms per cubic metre with cubic metres, pounds per cubic foot with cubic feet.
Bulk density already folds voids between particles for the product you buy; it is not the solid mineral density of a single rock fragment unless your supplier quotes that figure for the same packing. The product is the net geometric volume and the corresponding bulk mass; it does not add waste for compaction, spillage, or uneven subgrade, and it does not convert cubic metres to cubic yards or kilograms to short tons, because those adjustments are project-specific factors applied after the geometric take-off.
All three inputs must be strictly positive: a zero or negative area cannot cover ground, a non-positive depth is not a layer, and a non-positive density is not a physical material. The calculator never converts units for you, so mixing square feet of area with inches of depth silently produces a meaningless cubic product; convert everything first, then call.
Practical tips, limits, and related searches
Measure plan area from drawings or by length times width of the rectangle you will cover, and depth as the finished gravel thickness you want after placement, using one consistent unit set. Keep inputs inside the published absolute range so products cannot overflow into non-finite results the solver must reject. Prefer this capability when you already know the area and layer thickness and only need volume and bulk weight; if your source is a triangular or irregular bed, compute plan area first then call.
Round-trip checks are easy: recompute area times depth by hand, multiply by density, and confirm the published volume and weight match within the same twelve-decimal rounding used for all numeric fields.
What you can do with it
Order gravel for a driveway base
Homeowners enter driveway plan area, base course depth, and supplier bulk density to get volume and weight before calling a quarry or landscape yard.
FAQ
How is gravel volume and weight calculated?
Volume = area × depth; weight = volume × density. Area and depth must use consistent length units; density must match the volume unit (e.g. kg/m³ with m³).
What happens if area, depth, or density is zero or negative?
Non-positive inputs cannot define a physical gravel layer or material, so the tool never invents a volume or weight.
Does this convert cubic metres to tons or yards?
No. It returns pure geometric volume and bulk weight in whatever unit system you used for the inputs.
Does this add compaction or waste?
No. It returns pure geometric volume and weight only.
Is the gravel calculator free?
The browser tool is free and runs locally.
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/gravel \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"area":50,"depth":0.1,"density":1600}'const res = await fetch("https://api.kit.forhosting.com/home/gravel", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"area": 50,
"depth": 0.1,
"density": 1600
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/gravel",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"area": 50,
"depth": 0.1,
"density": 1600
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/gravel", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"area":50,"depth":0.1,"density":1600}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"area":50,"depth":0.1,"density":1600}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/gravel", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"area": 50,
"depth": 0.1,
"density": 1600
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.gravel",
"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_dim | 1000000000000 |
min_dim | 1e-15 |
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
Zero or negative area, depth, or density are rejected with a clear invalid_input error instead of inventing a delivery ticket from impossible sizes.
How gravel volume and weight are computed
On success the response echoes the rounded inputs, publishes volume and weight (with mass as an alias of weight), formula as the string V equals area times depth and W equals V times density, message as a short English summary, and steps as an ordered array of substitution lines you can assert in tests or show to a client.
How to call the API and what comes back
String forms of numbers are accepted when they match a strict finite numeric pattern. On success the response sets volume to the rounded area times depth product, weight and mass to the product times density, formula and message as described above, and steps as the substitution log. Prefer sending numbers rather than pre-formatted strings when you control the client; when you must send strings, avoid currency symbols, unit suffixes, or thousand separators that would fail the finite-number pattern. Typical landscaping densities for crushed stone fall roughly between one thousand and two thousand kilograms per cubic metre depending on rock type and moisture; always use the supplier figure for the product you will actually receive. Send a JSON body with three required fields: area (aliases surface, plan_area, A, sq), depth (aliases thickness, height, D, d, thick), and density (aliases rho, gravel_density, bulk_density, mass_density). All three must be finite positive numbers within the published absolute range so intermediate products remain finite in IEEE double precision on the Worker and in the browser. Failed validation—missing fields, non-finite numbers, zero or negative values, or values outside absolute limits—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
If the contractor specifies a compaction or waste factor (for example five or ten percent extra), multiply volume and weight yourself after the call; this tool intentionally returns the pure geometric product so quotes stay transparent. When teaching or writing tests, pair a simple driveway case with a second density to show weight scales linearly, and include a deliberate zero depth or zero density to prove the invalid_input path. This landing targets people searching for a gravel calculator, gravel volume and weight, driveway aggregate tonnage, or area depth density online; it is not a concrete bag estimator, not a footing volume tool for structural pads, not a soil fill calculator with swell factors, and not a drainage design check for pipe bedding. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when you deliberately send a zero area to verify error handling.
Integration use cases
Landscape quote for decorative rock beds
Landscapers feed bed area, mulch-style gravel depth, and density into the API and attach volume, weight, and steps to a transparent material quote.
Golden fixtures for construction apps
Developers generate known-good volume and weight cases plus deliberate non-positive input rejections for unit tests and CI.