Nominal to actual lumber size
A 2x4 is really 1.5 by 3.5 inches, and a 2x8 is 1.5 by 7.25. Type a board label such as 2x4, 2-by-4 or two-by-four and get the dressed thickness and width of dry North American softwood in inches. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Nominal
- 2x4
- Designation
- 2x4
- Thickness nominal
- 2
- Width nominal
- 4
- Thickness actual
- 1.5
When carpenters, remodelers, and DIY builders buy a two-by-four, they do not receive a board that measures two inches by four inches. North American softwood is sold under a nominal designation and dressed at the mill to a smaller finished cross-section. Layout errors, tight door bucks, and miscut stud packs often trace back to forgetting that a 2x4 is actually one-and-a-half by three-and-a-half inches. This nominal-to-actual lumber size tool accepts a board label such as 2x4, 2×4, 2-by-4, or two-by-four—or separate nominal thickness and width numbers—and returns the dressed actual thickness and width in inches using the standard dry S4S (PS-20-style) rules used across framing yards.
Why nominal lumber differs from actual finished size
Historical rough-sawn boards were close to their called sizes, but modern softwood is dried and surfaced on four sides before it reaches the yard. The industry therefore keeps the familiar names—two-by-four, two-by-six, four-by-four—while publishing dressed dimensions that are smaller by a fixed dressing allowance. In dry service, a nominal one-inch board is three-quarters of an inch thick; dimensions greater than one inch and less than eight inches lose one-half inch; dimensions of eight inches and above lose three-quarters of an inch.
Those rules apply independently to thickness and width, so a nominal 2x4 becomes 1.5 by 3.5 inches, a 2x8 becomes 1.5 by 7.25 inches, and a 4x4 becomes 3.5 by 3.5 inches. Ignoring the gap shows up immediately when you stack studs to a plate, fit a prehung door, or order plywood for a header sandwich: drawings that assume full nominal inches will not clear the finished stock.
This converter encodes the dressing map so you can paste a designation from a takeoff and read back the true cross-section without hunting a laminated wall chart at the big-box aisle.
How to call the converter and read the response
Send either a single nominal designation string or a pair of numeric legs. The designation field accepts common shop spellings: 2x4, 2×4, 2X4, 2-by-4, 2 by 4, and spoken forms such as two-by-four. Word numbers from one through twelve plus fourteen, sixteen, eighteen, twenty, and twenty-four are recognized on each leg.
A wide board such as 2x10 yields 1.5 by 9.25 because the ten-inch leg is at or above eight and therefore loses three-quarters of an inch. Empty strings, unknown words, single numbers without a separator, and legs outside the allowed range are rejected and not billed. Pair this size lookup with length and count tools when you need board feet or stud packs—this capability only answers what the finished cross-section measures.
Where nominal-to-actual size checks pay off on site
Framing crews use actual dimensions when laying out rough openings so jack studs, king studs, and headers clear the finished door or window unit with the right shimming gap. Cabinet installers convert nominal shelf stock and face-frame stock so interior clearances match hardware templates. Deck builders check post and beam callouts before notching ledgers; a nominal 4x4 is not a four-inch square in the field.
Estimating software and homeowner takeoff sheets that store only the yard label still need actual inches for collision checks against sheathing thickness, insulation batts, and drywall. Keep designations canonical in your database (2x4 rather than mixed punctuation), pin the rounded actual fields in tests, and you get reproducible finished sizes for cut lists, BIM parameters, and edge workers without embedding a full lumber handbook in every client.
When your region uses metric softwood standards or green rough stock, do not force this map—use a regional reference instead of guessing from North American dry S4S numbers.
What you can do with it
Rough opening and stud layout
Convert 2x4 and 2x6 designations to 1.5×3.5 and 1.5×5.5 in so jack and king stud packs match actual plate and header widths.
Takeoff and estimating spreadsheets
Map yard callouts from a lumber list into finished cross-sections before checking clearances against doors, cabinets, and sheathing.
FAQ
What is the actual size of a 2x4?
Under dry softwood S4S rules, a nominal 2x4 dresses to 1.5 inches by 3.5 inches. Send nominal 2x4 (or thickness 2 and width 4) to receive those actual dimensions.
Which designations does the converter accept?
Numeric forms such as 2x4, 2×4, 2-by-4, and 2 by 4, plus word forms like two-by-four. You may also send separate thickness and width numbers in nominal inches.
How is actual size calculated from nominal?
Each leg is dressed independently: ≤1 in → 0.75 in; between 1 and 8 in → nominal minus 0.5; 8 in and above → nominal minus 0.75 (PS-20-style dry S4S).
Does this cover hardwood or green lumber?
No. The map is for North American dry softwood S4S. Hardwood, green, and metric timber use different allowances; use a regional reference for those products.
Why is a 2x10 only 9.25 inches wide?
Because any side of 8 inches or more loses three quarters of an inch when it is dressed, while sides between 1 and 8 inches lose half an inch. The 10-inch side becomes 9.25 and the 2-inch side becomes 1.5.
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/nominal-actual-lumber \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"nominal":"2x4","designation":"valor-ejemplo"}'const res = await fetch("https://api.kit.forhosting.com/home/nominal-actual-lumber", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"nominal": "2x4",
"designation": "valor-ejemplo"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/nominal-actual-lumber",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"nominal": "2x4",
"designation": "valor-ejemplo"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/nominal-actual-lumber", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"nominal":"2x4","designation":"valor-ejemplo"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"nominal":"2x4","designation":"valor-ejemplo"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/nominal-actual-lumber", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"nominal": "2x4",
"designation": "valor-ejemplo"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.nominal_actual_lumber",
"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
Why nominal lumber differs from actual finished size
It is intentionally limited to North American softwood dry S4S practice; green lumber, hardwood S2S, and metric timber standards use different allowances and are out of scope for this endpoint.
How to call the converter and read the response
If you prefer structured input, supply thickness and width as finite nominal inches between one-half and twenty-four inclusive; missing one of the pair without a designation fails with invalid_input. On success the body echoes the canonical designation (for example 2x4), the nominal thickness and width, the actual thickness and width rounded to twelve decimal places for stable automation, a short actual_label string such as 1.5×3.5 in, the dressing formula, a human message, and an ordered steps array suitable for audit logs. Example: nominal two-by-four yields thickness_actual 1.5 and width_actual 3.5. The browser tool is free; successful API calls bill at $0.002 against prepaid KIT balance.
Integration use cases
Shop drawings and DIY cut lists
Paste two-by-four style labels into the free widget and print actual inches next to each board so cuts and dadoes fit dressed stock.
Technical questions
What does the nominal to actual lumber size tool cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.