Insulation R-value calculator
3.5 inches of fiberglass batt at R-3.14 per inch plus half an inch of gypsum board at R-0.9 add up to a wall of R-11.44. Enter each layer's thickness and R per inch to get the total R-value and the U-factor. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Runs in your browser. Free, unlimited — your data never leaves this page.
Building a code-ready wall, roof or ceiling stack starts with adding the thermal resistance of each layer, not with a single product label from a bag of batts. This insulation R-value calculator multiplies each layer thickness in inches by its R-value per inch, sums those layer resistances into a total assembly R-value, and returns the U-factor as one over that total so inspectors, energy modelers and renovation apps share one deterministic contract. Negative thickness on any layer fails with a clear invalid input error so takeoff forms can validate before a submittal.
Build the layer list: thickness, R per inch, and order
An opaque wall or roof assembly is modeled here as a one-dimensional stack of materials in series. For each layer you supply thickness in inches and the material R-value per inch of thickness from manufacturer data, ASHRAE handbook tables or local code appendices. The engine multiplies those two numbers to obtain that layer contribution R sub i, then adds every layer for the assembly total.
Optional name, material or label fields identify drywall, OSB, fiberglass batt, rigid foam or cladding in the response without changing the math. Order in the array is preserved so reports can list interior-to-exterior the same way drawings do; series resistance does not depend on order for the total, but humans do. At least one layer is required and the list is capped for isolate safety.
What you can do with it
Wall and roof assembly takeoffs
Estimators list drywall, cavity insulation, sheathing and cladding with thickness and R per inch to get total assembly R and U for code comparison.
Energy audit and retrofit apps
Audit tools recompute U-factor as users swap foam thickness or batt R ratings, using the same deterministic series sum for reports.
Classroom and code training
Instructors demonstrate how layer R values add in series and how U equals one over total R without building a custom spreadsheet.
FAQ
What happens if a layer thickness is negative?
Negative thickness is rejected and not charged; zero thickness is allowed and contributes zero R to the sum.
Is the insulation R-value calculator free?
The browser tool runs free on your device.
Can I name each material layer?
Yes. Optional name (or material/label) on each layer is echoed in the response so reports can show gypsum, batt, OSB and cladding alongside thickness and R.
How is the U-factor calculated?
It is one divided by the total R-value of the assembly. The higher the total R, the lower the U-factor, which describes how easily heat passes through the whole stack of layers together.
Does the result include air films and thermal bridging through the studs?
No. Air films, thermal bridging and framing factors are not calculated separately. If your energy model needs them, fold them into the R-values you enter for the layers before you read the total.
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/insulation \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"layers":[{"name":"fiberglass batt","thickness":3.5,"r_per_inch":3.14},{"name":"gypsum board","thickness":0.5,"r_per_inch":0.9}]}'const res = await fetch("https://api.kit.forhosting.com/home/insulation", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"layers": [
{
"name": "fiberglass batt",
"thickness": 3.5,
"r_per_inch": 3.14
},
{
"name": "gypsum board",
"thickness": 0.5,
"r_per_inch": 0.9
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/insulation",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"layers": [
{
"name": "fiberglass batt",
"thickness": 3.5,
"r_per_inch": 3.14
},
{
"name": "gypsum board",
"thickness": 0.5,
"r_per_inch": 0.9
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/insulation", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"layers":[{"name":"fiberglass batt","thickness":3.5,"r_per_inch":3.14},{"name":"gypsum board","thickness":0.5,"r_per_inch":0.9}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"layers":[{"name":"fiberglass batt","thickness":3.5,"r_per_inch":3.14},{"name":"gypsum board","thickness":0.5,"r_per_inch":0.9}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/insulation", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"layers": [
{
"name": "fiberglass batt",
"thickness": 3.5,
"r_per_inch": 3.14
},
{
"name": "gypsum board",
"thickness": 0.5,
"r_per_inch": 0.9
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.insulation",
"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 material names keep gypsum, sheathing, cavity insulation and cladding readable in the JSON response.
Build the layer list: thickness, R per inch, and order
Send layers as a non-empty JSON array of objects; aliases materials, assembly and wall_layers are accepted when your form labels use those names. Inside each object, thickness accepts aliases thickness_in, t and depth, while r_per_inch accepts r_value_per_inch, rpi and r_inch. Zero thickness is allowed and contributes zero R, which is useful for optional finishes, but any negative thickness raises invalid_input and is not charged because a negative physical thickness is never a valid takeoff. Non-numeric strings and missing thickness or r_per_inch fields also fail validation before any sum is attempted.
Reading total R, U-factor, per-layer rows, and the series formula
Units metadata labels thickness in inches and the IP R and U conventions so UI copy stays honest. Thermal bridging, air films and two-dimensional framing factors are outside this product; fold those into the R values you pass if your energy model requires them. On success the response echoes layer_count and a normalized layers array. The fields total_r and r_value both carry the assembly sum so clients that prefer either name can pin the same number. The u_factor field is one divided by total R, the conductance of the whole stack in IP units when R is expressed in hour square foot degree Fahrenheit per Btu. The formula string restates R sub i equals thickness in inches times r per inch, R total equals the sum of layer R, and U equals one over R total, while method is always series_r_assembly so downstream code can branch without sniffing product types. Use total_r when comparing assemblies to a minimum R code table, u_factor when energy software or window U-factor tables expect conductance, and the layers array when a report must show how much each material contributes. If every layer has zero thickness or zero r per inch so the total R is zero, the request fails with invalid_input because U would be undefined. Identical inputs always produce identical JSON because the path is pure arithmetic with no network, random seed or wall clock.
API usage, pricing, renovation workflows, and practical limits
Call the free in-browser insulation R-value calculator for quick homeowner stack checks, classroom demos and white-board estimates without opening a spreadsheet. Send a JSON body with the required layers array of objects each carrying thickness and r_per_inch. Use the prepaid API when a renovation app, energy audit tool, builder submittal form or property-management pipeline 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 drawings list millimetres of foam but your R tables are per inch, or with separate home calculators when block counts or wall tiles are the next line on the same takeoff. Prefer manufacturer data sheets for r_per_inch when products are specified, and keep air-film and interior finish R values explicit as layers if the code path you follow includes them in the assembly total. Authors shipping SDKs can map layers to a table of material, thickness, R per inch and layer R while showing total_r and u_factor as summary metrics for the inspector or the homeowner reviewing the upgrade quote.
Technical questions
How do I calculate total insulation R-value for a wall assembly?
Send a layers array of objects with thickness (inches) and r_per_inch for each material. The response returns each layer's R, total_r (assembly R), and u_factor = 1 / total_r.
How is the U-factor computed?
After summing layer R-values into total_r, U-factor is 1 / total_r. If the total R is zero or negligible, the request fails because U would be undefined.