Post hole concrete calculator
Eight 12-inch holes, 36 inches deep, around 4 by 4 posts need a little under six tenths of a cubic yard, because each post displaces 576 cubic inches of mix. Order the concrete around the post, not the empty hole. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Hole diameter
- 12
- Depth
- 36
- Post width
- 4
- Quantity
- 8
- Radius
- 6
- Hole volume in3
- 4,071.50407905
- Post volume in3
- 576
- Net volume in3
- 3,495.50407905
Setting a fence, deck, mailbox, or sign post almost always means an augered cylindrical hole, a timber post in the center, and a concrete collar poured around it. The cubic yards you order is not the volume of the empty hole: the buried post displaces mix, so a honest takeoff subtracts that prism and multiplies by how many identical holes you will pour. This post hole concrete calculator takes hole diameter, hole depth, and post width in inches plus the hole count, models each hole as a right circular cylinder, subtracts a square post of the given width running the full depth, and returns cubic yards of concrete with cubic feet and cubic inches alongside.
How post-hole concrete volume is computed in cubic yards
A cylindrical post hole is modelled as a right circular cylinder whose diameter is the auger size and whose height is the hole depth you actually fill with concrete. Volume of one empty hole is pi times radius squared times depth, with radius equal to hole diameter divided by two. Net concrete per hole is the cylinder minus that prism; total concrete multiplies by the integer count of identical holes.
All three linear measures are inches, the units printed on US augers and nominal lumber: an eight-inch or twelve-inch bit, a thirty-six-inch frost-line hole, a four-by-four post. Cubic yards equal the cubic-inch total divided by 46,656 because a cubic yard is thirty-six inches on a side; cubic feet divide the same total by 1,728.
A classic check is eight twelve-inch holes, thirty-six inches deep, around four-inch square posts: each cylinder is pi times six squared times thirty-six cubic inches, each post displaces sixteen times thirty-six, and the job is a fraction of a cubic yard after the subtraction. The path is deterministic floating-point arithmetic with no random seeds, no wall-clock timestamps, and no network. Waste, over-excavation, and flared hole bells are not added; apply those percentages after you have the geometric volume.
Where a post hole concrete calculator earns its keep
Fence crews and homeowners reach for a post hole concrete calculator when the ready-mix desk or the bag aisle asks for cubic yards, not an auger diameter. Knowing the bit size, how deep you are going, the post width, and how many holes yields a collar volume you can compare against a truck minimum and a bagged-mix backup without opening a spreadsheet of pi. Deck builders setting rim posts or stair posts use the same four numbers to size a small mixer and avoid a short load on a Saturday.
Mailbox, lamp-post, and sign contractors need a reproducible yardage from the same fields an inspector can read off the submittal. Estimating desks that already count posts from run length still need a second, distinct volume for the concrete line item; counting posts and filling holes are different search intents and should not share a page. This landing is also not a solid cylindrical column pour, not a rectangular pad-footing takeoff, and not a dollar fence-cost estimator that already assumes you know how many bags you will buy.
Trade-school modules on construction takeoff can pin the eight twelve-inch holes around four-by-fours in tests because the arithmetic is deterministic.
What you can do with it
Fence-post collar takeoff
Enter auger diameter, frost-line depth, post width, and hole count to get cubic yards of concrete before you call the ready-mix plant or load bags.
Deck and stair posts
Size the mixer for a small set of deck piers from the same cylindrical-hole-minus-square-post geometry the inspector will see on the drawing.
FAQ
What happens if the hole diameter is smaller than the post width?
A post wider than the hole cannot fit, so the tool never returns a negative or invented yardage.
What units are the dimensions in?
Inches, the usual US auger and lumber convention (a common setup is a 12-inch hole, 36 inches deep, around a 4×4).
Is the post round or square?
Enter the actual dressed width if you have it rather than the nominal 4×4 size.
What does it cost?
The browser tool is free and runs locally.
Does the result include extra concrete for waste?
No. The figure is the geometric volume of each hole minus the post, times the number of holes. Waste, over-digging and flared hole bottoms are not added, so apply your own margin after you have the result.
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/build/post-hole-concrete \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"hole_diameter":12,"depth":36,"post_width":4,"count":8}'const res = await fetch("https://api.kit.forhosting.com/build/post-hole-concrete", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"hole_diameter": 12,
"depth": 36,
"post_width": 4,
"count": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/build/post-hole-concrete",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"hole_diameter": 12,
"depth": 36,
"post_width": 4,
"count": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/build/post-hole-concrete", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"hole_diameter":12,"depth":36,"post_width":4,"count":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"hole_diameter":12,"depth":36,"post_width":4,"count":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/build/post-hole-concrete", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"hole_diameter": 12,
"depth": 36,
"post_width": 4,
"count": 8
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "build.post_hole_concrete",
"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
If the hole diameter is smaller than the post width the post cannot physically fit, and the request fails with invalid_input instead of a negative yardage. The same pure function powers the free browser tool and the API, so a Saturday jobsite check matches the line a purchasing script posts later.
How post-hole concrete volume is computed in cubic yards
The buried post occupies a square prism of side post_width and the same depth, so its displacement is post_width squared times depth. If hole diameter is smaller than the post width the post cannot fit and the request is rejected with invalid_input. If the square prism would meet or exceed the cylinder even when the diameter is only slightly larger than the width, the call also fails instead of returning a zero or negative yardage.
What you send and what you get back
A non-integer count fails the same way. Wire the free browser form for a jobsite check, then call the identical contract from scripts for multi-run schedules without reimplementing the geometry. Send four required fields. hole_diameter is the circular hole size in inches; aliases diameter, hole_dia, and hole_d are accepted. depth is the fill height in inches, typically to frost line; aliases hole_depth, height, and h are accepted. post_width is the square post side in inches (use four for a four-by-four, six for a six-by-six, or the actual dressed size if you have it); aliases width, post, post_size, and post_w are accepted. count is how many identical holes you will pour and must be a positive integer; aliases n, quantity, holes, and qty are accepted. Missing fields, empty strings, non-numeric text, NaN, Infinity, zero, and negative values fail with invalid_input naming the field and are not charged. On success the JSON echoes the cleaned inputs, the cylinder radius, hole_volume_in3 and post_volume_in3 for one hole, net_volume_in3 as the annulus, then concrete_in3, concrete_ft3, and the primary concrete_yd3 for the whole job, plus a unit_note, a formula string, and method cylindrical_hole_minus_square_post_yd3 so logs can document the algorithm. Example: hole_diameter 12, depth 36, post_width 4, count 8 is a typical fence-post takeoff. API pricing is the published base of $0.002 per successful item; validation failures do not consume prepaid balance.
Where a post hole concrete calculator earns its keep
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. Keep requests small, pin concrete_yd3 in tests, and you get reproducible yardage for quotes, purchase orders, and edge workers without standing up a CAD kernel of your own.
Integration use cases
Mailbox, lamp, and sign posts
Convert a schedule of identical holes into concrete_yd3 so the concrete line item matches the buried posts, not the empty cylinders.
Technical questions
How does this post hole concrete calculator work?
It models each hole as a cylinder of hole_diameter and depth in inches, subtracts a square post of side post_width for the same depth, multiplies by count, and converts cubic inches to cubic yards (÷ 46,656).