Estimate decking boards needed from area, width, and gap
Twenty square metres of deck with 0.14 m boards and a 0.005 m gap need 138 boards. Enter your area, board width and spacing to get a whole-board count that already includes the gaps. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Deck area
- 20
- Board width
- 0.14
- Gap
- 0.005
- Effective width
- 0.145
- Boards exact
- 137.931034483
- Boards needed
- 138
Planning a deck order is easier when the spacing between boards is part of the calculation instead of an afterthought. This decking board estimator uses the deck area, the visible width of each board, and the intended gap to produce both an exact estimate and a whole-board purchase count. It adds the gap to the board width, divides the area by that effective coverage width, and rounds upward because suppliers do not sell fractional boards.
Understand the effective board width
A row of decking is not made from timber alone. Every installed board is followed by a deliberate space that helps water drain, allows some materials to expand, and creates the finished visual rhythm. This estimator therefore treats one repeated strip as the visible board width plus the desired gap.
A board that is 0.14 units wide with a 0.005-unit gap has an effective width of 0.145 units. Keep all measurements consistent: if width and gap are in metres, use an area basis compatible with metres; if they are in feet, stay in feet. Mixing millimetres, inches, and metres without conversion can produce a plausible-looking but unusable count.
The formula is returned with every successful response, making the assumption visible in exports, logs, and quoting systems rather than hiding it behind a single unexplained integer.
Read the exact estimate and purchase count
If the exact result is 137.93, the purchase estimate is 138, not 137, because rounding down would leave part of the stated coverage unmet. Stable precision is applied to displayed decimal intermediates so repeated requests serialize consistently while the integer ceiling is taken from the full calculation. Validation happens before division.
Deck area must be positive, the gap must be zero or greater, and board width must be strictly positive. Missing values, nonnumeric text, NaN, and Infinity are rejected as well. Numeric strings from ordinary web forms are accepted when they represent finite values.
A zero gap is valid for a theoretical tight layout, although installers should follow the spacing guidance supplied by the decking manufacturer for the material, moisture condition, fastening system, and local climate.
Use the estimate in a practical material plan
Use this result as a transparent first-pass quantity, then reconcile it with the actual deck drawing and product specification. A homeowner can compare several board widths while holding the measured area and chosen gap constant. A contractor can place the same deterministic calculation inside an early quote so every revision uses the same rounding rule.
Before ordering, account separately for waste caused by end cuts, damaged stock, board defects, diagonal installation, picture-frame borders, breaker boards, stairs, and the need to preserve matching production lots. Confirm whether the merchant sells individual boards or fixed packs and round again to the pack size if necessary. Also verify the real board width rather than relying only on a nominal product name, because dressed timber and composite products may not match their nominal dimensions.
What you can do with it
Compare decking products
Change board width while keeping area and gap constant to compare the whole-board estimate for competing products.
Prepare an early project quote
Turn measured area and the specified installation gap into a repeatable preliminary material quantity.
Audit a purchasing calculation
Keep the effective width, exact quotient, and rounded count together so another person can reproduce the estimate.
FAQ
Why does the gap affect the result?
The gap is part of each repeated installed strip, so adding it to board width accounts for the spacing between adjacent boards.
Does the estimate include cutting waste?
No. Add a separate allowance for offcuts, defects, borders, diagonal layouts, damage, and other project-specific waste before ordering.
How many deck boards do I need for 20 square metres?
With boards 0.14 m wide and a 0.005 m gap, each row covers 0.145 m, so the exact figure is 137.93 boards and you buy 138. Rounding down would leave part of the deck uncovered.
Which units should I use for area, board width and gap?
Use one system throughout: square metres with board width and gap in metres, or square feet with both in feet. Mixing millimetres, inches and metres gives a count that looks plausible but cannot be used.
Can I enter a gap of zero?
Yes, a zero gap gives the count for a tight layout with boards touching. For a real deck, follow the spacing the board maker recommends for the material, moisture, fastening method and your local climate.
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/deck-board-count-estimate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"deck_area":20,"board_width":0.14,"gap":0.005}'const res = await fetch("https://api.kit.forhosting.com/build/deck-board-count-estimate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"deck_area": 20,
"board_width": 0.14,
"gap": 0.005
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/build/deck-board-count-estimate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"deck_area": 20,
"board_width": 0.14,
"gap": 0.005
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/build/deck-board-count-estimate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"deck_area":20,"board_width":0.14,"gap":0.005}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"deck_area":20,"board_width":0.14,"gap":0.005}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/build/deck-board-count-estimate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"deck_area": 20,
"board_width": 0.14,
"gap": 0.005
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "build.deck_board_count_estimate",
"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
The calculation is deterministic, quick to audit, and available for $0.002 per API request.
Understand the effective board width
The response names that value effective_width so it can be checked before anyone relies on the final quantity. Deck area is then divided by this effective width to obtain boards_exact. This compact area-based estimate is useful when the supplied area already represents the coverage basis for the board run. It does not infer board length, deck orientation, diagonal layouts, borders, stairs, or offcuts. Those details can change a construction takeoff and should be handled separately.
Read the exact estimate and purchase count
The calculator returns two quantities for different decisions. boards_exact is the unrounded quotient of deck_area divided by board_width plus gap. It shows how close the plan is to the next whole board and is useful for comparison or review. boards_needed is the ceiling of that quotient, which means any fractional requirement becomes one additional whole board. A zero or negative board width produces an invalid_input error rather than Infinity, a negative quantity, or a misleading answer.
Use the estimate in a practical material plan
A purchasing application can store deck_area, board_width, gap, effective_width, boards_exact, and boards_needed together, allowing a reviewer to reproduce the number without finding an old spreadsheet. The endpoint costs $0.002 per successful API request and performs no network lookup, storage operation, model call, random choice, or date-dependent step.
Technical questions
How is the number of boards calculated?
The estimator divides deck_area by board_width plus gap, then rounds the exact quotient upward to a whole board.
What happens when board width is zero or negative?
The request returns invalid_input because board_width must be a finite number greater than zero.
What does an API request cost?
A successful API request costs $0.002. The calculation is deterministic and does not contact external services.