Excavation volume calculator
A 1,200 square foot dig at an average depth of 4 feet moves 4,800 cubic feet of soil, also shown in cubic yards for truck quotes and in cubic metres for metric plans. Works for cuts and fills alike. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Area
- 1,200
- Depth
- 4
- Calculation mode
- Cut
- Area unit
- Sq ft
- Depth unit
- Ft
- Area sq ft
- 1,200
Pricing a basement dig, swimming-pool hole, driveway cut, or pad fill starts with a trustworthy soil volume, not a rough guess from pacing the lot. This excavation volume calculator multiplies the plan area of the cut or fill zone by the average depth after converting both into consistent units, then reports the earthwork volume primarily in cubic yards for US truck and excavator quotes, with cubic feet and cubic metres for audit trails and metric drawings. Defaults match common construction take-offs: area in square feet, depth in feet, and mode set to cut so a typical site measurement becomes cubic yards without extra unit fields. Use the result for bank-volume cut take-offs, fill import orders, multi-zone earthwork schedules, and estimator worksheets where every zone has its own footprint and average depth.
How excavation cut and fill volume is computed
Start from the rectangular prism identity used on every earthwork take-off when average depth is already known: soil volume equals plan area times average depth, with both quantities converted into one coherent system before multiplying. Write volume in cubic yards as volume in cubic feet divided by twenty-seven, where cubic feet is area in square feet times depth in feet. Write volume in cubic metres as area in square metres times depth in metres.
When you leave the optional unit fields blank, the calculator assumes square feet for area and feet for depth—the combination printed on most US residential and light-commercial excavation worksheets—so twelve hundred square feet at four feet average depth becomes four thousand eight hundred cubic feet, then one hundred seventy-seven point seven eight cubic yards after dividing by twenty-seven. The pipeline is deterministic floating-point arithmetic with no random seeds, no wall-clock timestamps, and no network calls.
Unknown unit or mode strings are rejected the same way so clients cannot silently mix systems.
What you can do with it
Basement or pool cut take-off
Enter excavation footprint and average cut depth to get cubic yards of soil to remove before calling an excavator or dump truck.
Pad and driveway fill order
Set mode to fill, enter area and average fill depth, and order import soil in cubic yards or cubic metres without shortfall.
Multi-zone earthwork schedule
Run each cut or fill zone’s area and average depth through the same formula so purchase orders match the estimate.
FAQ
How does this excavation volume calculator work?
Defaults are square feet, feet of depth, and mode cut.
What is the difference between cut and fill mode?
Mode is a label only. Cut means soil to remove; fill means soil to place. The geometric volume is still area times average depth; the response intent field restates which label you chose.
What happens if area or depth is zero or negative?
Area and average depth must both be strictly positive; a non-positive value would make volume non-physical or zero.
Does this include swell or compaction factors?
No. This calculator returns bank (in-place) geometric volume from area × average depth. Apply your own swell, bulking, or shrink factors outside the tool when hauling loose soil or compacting fill.
What does it cost?
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/excavation-volume \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"area":1200,"depth":4}'const res = await fetch("https://api.kit.forhosting.com/home/excavation-volume", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"area": 1200,
"depth": 4
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/excavation-volume",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"area": 1200,
"depth": 4
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/excavation-volume", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"area":1200,"depth":4}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"area":1200,"depth":4}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/excavation-volume", 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": 1200,
"depth": 4
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.excavation_volume",
"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
Optional area_unit, depth_unit, and mode let you switch to square metres, inches, centimetres, or a fill label when the drawing set or import order requires it. The same pure function powers the free browser tool and the paid API, so a phone estimate matches the line item a script posts later. Zero or negative area or depth is rejected with a clear invalid_input message instead of a silent nonsense volume.
How excavation cut and fill volume is computed
Explicit area_unit values are square feet, square metres, or square yards; depth_unit values are feet, inches, metres, or centimetres. The optional mode field is cut or fill and acts only as a label: it does not change the geometric product, but it is echoed in the response so cut bank volume and fill import volume stay clearly tagged on the same JSON shape. Conversion uses fixed international-foot constants so identical inputs always produce identical JSON: zero point three zero four eight metres per foot, nine square feet per square yard, and one cubic yard equal to twenty-seven cubic feet. Intermediate fields area_sq_ft, area_m2, depth_ft, depth_m, and volume_ft3 are returned so you can audit the unit path against a survey sketch or supplier quote. Area and depth must both be strictly positive: zero or negative values are rejected with invalid_input because a non-positive footprint or average depth makes volume non-physical or zero.
What you send and what you get back
Send two required finite numbers: area for the excavation footprint and depth for the average cut or fill thickness across that footprint. Another useful check is one hundred square metres at one point two metres average fill with metric units: volume is one hundred twenty cubic metres and the cubic-yard figure follows from dividing by the fixed yard-to-metre-cubed constant. Optionally send mode as cut or fill (default cut), area_unit as sq_ft, sq_m, or sq_yd, and depth_unit as ft, in, m, or cm; omitted units default to square feet and feet. Missing required fields, non-numeric strings, NaN, and Infinity fail with invalid_input and are not charged. When area or depth is zero or negative the request fails with a message that the dimension must be positive, so clients can correct the measurement before retrying instead of receiving a zero or negative volume. On success the response echoes cleaned inputs and resolved units, plan area in both square feet and square metres, depth in feet and metres, volume in cubic feet, volume_yd3 for cubic yards as the primary earthwork unit, volume_m3 for cubic metres, a cross-check volume_yd3_from_m3 from the SI path, an intent string that restates cut versus fill in plain language, a unit_note reminder of the defaults and formulas, and a short formula string for documentation. Classic checks include twelve hundred square feet at four feet average cut depth: one hundred seventy-seven point seven eight cubic yards and about one hundred thirty-five point nine cubic metres. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where excavation volume calculators show up in real work
Homeowners pricing a basement addition, pool excavation, or retaining-wall cut need a trustworthy cubic-yard figure before calling an excavator, especially when haul-off and import are billed by the truckload and minimum loads apply. Landscape and hardscape crews use the same average-depth prism for patio pad cuts, gravel base trenches when simplified to area times depth, and grade-change fill zones before they refine with detailed cross-sections. If you later need swell or bulking factors for loose haul volume, shrink factors for compacted fill, multi-layer profiles, trench-only geometry with length and width, topsoil bag counts, or gravel density weight, treat those as separate search intents and landings rather than overloading this excavation area-and-average-depth volume calculator page. General contractors and civil estimators build earthwork take-offs from measured footprints and design average depths; a single deterministic endpoint that reports cubic yards, cubic feet, and cubic metres reduces spreadsheet drift between the estimator and the purchasing clerk when one job is quoted in US units and another on a metric drawing set. Property managers renovating multiple courtyard levels feed each zone’s area and average depth through the API and attach volumes to purchase orders so over-order and under-order stay intentional rather than guessed. 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.