Floor joist calculator
A 144-inch-wide room framed at 16 inches on center needs 10 floor joists: 9 full bays plus the one at the starting end. Enter width and spacing in the same unit and the count never comes up one stick short. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Room width
- 144
- Joist spacing
- 16
- Full bays
- 9
- Remainder
- 0
- Joists needed
- 10
Ordering lumber for a floor platform starts with a simple cut-list question: how many joists do you need across the room? This floor joist count calculator answers with a deterministic on-center formula used on residential and light commercial framing jobs. You provide the room width measured perpendicular to the joist run and the joist spacing in the same linear units—commonly twelve, sixteen, or twenty-four inches on center—and the engine places a joist at the starting end, fills intermediate positions on the spacing grid, and adds a closing joist at the far end when the last bay is only partial. That “plus one for the starting end” rule is the classic takeoff fix for spreadsheets that only divide width by spacing and under-order by one stick. Zero or negative spacing is rejected with a clear invalid input error so estimating tools stay honest before lumber is reserved.
Measure room width and choose a consistent on-center spacing
Measure the clear width of the floor bay you are framing, wall to wall in the direction perpendicular to the joist span, in whatever linear unit your plans use. Joist spacing is the on-center (OC) distance between successive joists—sixteen inches OC is the residential default in many codes, with twelve and twenty-four also common for heavier or lighter layouts, but the calculator accepts any strictly positive finite spacing in the same units as the width.
If you measured the room in inches, send spacing in inches (for example one hundred forty-four for a twelve-foot width and sixteen for standard OC). If you work in millimetres or feet, keep both fields in that system; the engine does not convert units, so mixing feet for width with inches for spacing will invent a nonsense joist count.
What you can do with it
DIY floor framing and remodel platforms
Homeowners enter room width and sixteen-inch OC spacing and know how many joists to load before the weekend deck or subfloor rebuild.
Contractor takeoff and bid automation
Estimating tools batch floor bays from plans, apply OC policy, and emit joist counts for purchase orders without fragile spreadsheets.
FAQ
How does the floor joist calculator count joists?
Exact multiples use width/spacing + 1; partial bays use floor(width/spacing) + 2.
What units should I use?
Any consistent linear system. Mixing feet and inches without converting will produce a wrong count.
What if spacing is zero or negative?
Joist spacing and room width must both be strictly positive; zero or negative values are rejected and not charged.
Is the floor joist calculator free?
The browser tool runs free on your device.
Does this size joists for span and load?
No. It only counts how many joists you need across the width at a chosen OC spacing. Span tables, depth, species and load design remain a separate engineering or code-table step.
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/floor-joist-count \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"room_width":144,"joist_spacing":16}'const res = await fetch("https://api.kit.forhosting.com/home/floor-joist-count", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"room_width": 144,
"joist_spacing": 16
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/floor-joist-count",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"room_width": 144,
"joist_spacing": 16
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/floor-joist-count", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"room_width":144,"joist_spacing":16}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"room_width":144,"joist_spacing":16}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/floor-joist-count", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"room_width": 144,
"joist_spacing": 16
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.floor_joist_count",
"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 browser tool runs free on your device; the prepaid API charges $0.002 per successful item when apps and SDKs need the same contract.
Measure room width and choose a consistent on-center spacing
Send that value as room_width; aliases width, span, room and clear_span are accepted for form labels and takeoff spreadsheet headers that prefer those names. Both fields must be strictly positive finite numbers: zero, negative or non-numeric values raise invalid_input and are not charged. Extremely small or huge values outside the published stability range are also rejected so floating-point bay math stays meaningful on a Worker isolate. Optional aliases for spacing include spacing, oc, on_center, centers and joist_oc, which cover common plan notes and supplier product filters.
How starting-end, OC bays, and the far end are counted
When the room width is an exact multiple of the spacing, the classic formula is simply width divided by spacing plus one; that extra one is the starting-end joist that pure division would miss. When a partial bay remains at the far wall, the engine still counts a closing joist at that rim, which is equivalent to floor(width divided by spacing) plus two. The layout always includes a joist at the starting end of the room—the member that begins the OC grid—then places intermediate joists every joist_spacing across the width. That yields full_bays, remainder (zero when the far end lands on grid), and joists_needed. The method label is always oc_plus_start_end for stable downstream branching in estimating apps. Missing required width or spacing, and zero or negative values for either field, fail with invalid_input. Identical inputs always produce identical JSON because the path is pure arithmetic with no network, random seed or wall clock. This endpoint counts sticks for the primary joist run only: it does not size joist depth from span tables, assign species or grade, or add bridging, blocking, hangers or rim-board SKUs as separate line items—those belong in a follow-on material list once joists_needed is known.
API usage, pricing, framing workflows, and practical limits
Call the free in-browser floor joist calculator for quick site estimates, lumber-yard kiosks and contractor whiteboards without installing a spreadsheet. Remember that joist length is a separate takeoff: this tool answers how many members cross the room, not how long each stick is cut for the bearing span. Send a JSON body with room_width and joist_spacing in matching linear units. Use the prepaid API when a renovation app, quantity-takeoff pipeline, modular home configurator or property-management tool needs a stable contract under KIT balance at $0.002 per successful item; validation failures never consume balance after the engine rejects the request. Pair this endpoint with unit converters when customers mix imperial plans with metric stock lists, or with room dimension helpers when width arrives as separate start and end coordinates that you subtract client-side before calling. Authors shipping SDKs can map joists_needed straight into purchase orders while showing full_bays and remainder as explanatory detail for the estimator reviewing partial bays.
Integration use cases
Lumber yard and ecommerce cut-list tools
Retail sites compute joist counts as shoppers change room width or OC options, using the same deterministic API contract for quotes and carts.