Passive house heating savings
A 150 m² home in a cold climate with average insulation saves 17,568 kWh of heating a year as a Passive House. Enter area, climate and insulation to see your own figure in kilowatt-hours. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Floor area m2
- 150
- Climate zone
- Cold
- Insulation level
- Weighted average
- Baseline heat loss w per m2k
- 1.4
- Passive heat loss w per m2k
- 0.18
- Baseline heating kwh
- 20,160
- Passive heating kwh
- 2,592
A passive house, or Passivhaus, is a performance standard that slashes space-heating energy by combining a super-insulated airtight envelope with heat-recovery ventilation so residual demand stays near fifteen kilowatt-hours per square metre per year. Homeowners, architects, energy auditors, and retrofit programs often need a transparent annual kilowatt-hour savings figure from three numbers they already have: treated floor area, climate zone, and the insulation level of the existing or code-minimum envelope. This passive house heating energy savings calculator applies a first-order specific-heat-loss model. It subtracts the Passive House heat-loss coefficient from the baseline coefficient for the stated insulation, multiplies by floor area and the climate zone's heating degree-days, and converts watt-hours into annual kilowatt-hours saved.
What Passive House heating savings means and how the formula works
Annual heating energy savings in this capability means the conventional space-heat that a Passive House envelope displaces over a representative heating season, not a full PHPP or WUFI design and not a cash payback. The model is a floor-area specific-heat-loss balance.
A baseline coefficient H in watts per square metre per kelvin represents fabric transmission plus infiltration and ventilation for the stated insulation class: two point four for a poor uninsulated stock envelope, one point four for an average code-era house, zero point eight for a good modern-code envelope, and zero point five for a high-performance but not yet Passive House shell. The Passive House coefficient is zero point one eight watts per square metre per kelvin, a first-order stand-in for a super-insulated airtight envelope with heat-recovery ventilation.
Climate enters as heating degree-days at an eighteen-degree Celsius base: eight hundred for a hot zone, one thousand eight hundred mixed, two thousand eight hundred temperate, four thousand cold, and five thousand five hundred very cold. Annual energy in kilowatt-hours is H times floor area times degree-days times twenty-four hours divided by one thousand. Savings is the difference between the baseline load and the Passive House load, which factors as the H gap times area times degree-days times twenty-four over one thousand.
In a Central European climate near three thousand five hundred degree-days the Passive House product is about fifteen kilowatt-hours per square metre per year, the classic PHI heating-demand criterion. The tool does not size windows, model thermal bridges, fetch weather, or convert kilowatt-hours to money or carbon. It answers the heating-savings question from area, climate, and insulation so you can pair the result with your own tariff or emissions factor.
What you can do with it
Home and retrofit first-pass quotes
Turn treated floor area, a climate zone, and the existing insulation class into annual kilowatt-hour heating savings before a full PHPP or heat-pump design.
Fleet and rebate program estimates
Batch many dwellings against a standard climate and insulation class to estimate annual heating energy a Passive House or deep-retrofit program would displace.
FAQ
What happens if the floor area is not a positive number?
Zero, a negative value, a missing area, and a non-numeric token are rejected and are not billed.
Which climate zones and insulation classes does the calculator use?
Insulation sets H in W/(m²·K): poor 2.4, average 1.4, good 0.8, high 0.5. Passive House H is 0.18.
Is this a full PHPP or Passivhaus certification check?
No. It is a first-order heating-savings estimate from area, climate, and insulation. Pair it with PHPP or a certified designer for certification, thermal bridges, and peak load.
How much heating energy does a passive house save?
It depends on area, climate and insulation. A 150 m² house in a cold climate with average insulation drops from 20,160 to 2,592 kWh a year, a saving of 17,568 kWh, or 117.12 kWh per square metre.
Does the result show money or CO2 savings?
No. The result is annual heating energy in kilowatt-hours only. Multiply it by your own electricity or gas tariff, or by your emissions factor, to turn it into a bill or a carbon figure.
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/eco/passive-house \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"floor_area_m2":150,"climate_zone":"cold","insulation_level":"average"}'const res = await fetch("https://api.kit.forhosting.com/eco/passive-house", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"floor_area_m2": 150,
"climate_zone": "cold",
"insulation_level": "average"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/eco/passive-house",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"floor_area_m2": 150,
"climate_zone": "cold",
"insulation_level": "average"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/eco/passive-house", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"floor_area_m2":150,"climate_zone":"cold","insulation_level":"average"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"floor_area_m2":150,"climate_zone":"cold","insulation_level":"average"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/eco/passive-house", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"floor_area_m2": 150,
"climate_zone": "cold",
"insulation_level": "average"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "eco.passive_house",
"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 same pure analytic module powers the free browser path and the prepaid API path at $0.002 per successful call. Floor area that is not a positive number fails with invalid_input and is not billed.
Input contract, response shape, and error behaviour
Numeric fields are rounded to twelve decimal places for stable goldens across runtimes. Example: one hundred fifty square metres, a cold climate, and average insulation yields a baseline near twenty thousand one hundred sixty kilowatt-hours and annual savings of seventeen thousand five hundred sixty-eight kilowatt-hours. POST a JSON body with three required fields: floor_area_m2, the treated floor area in square metres; climate_zone, one of hot, mixed, temperate, cold, or very_cold; and insulation_level, one of poor, average, good, or high. Accept aliases area, area_m2, floor_area, floor_area_sqm, and treated_floor_area for the area; climate, zone, and hdd_zone for the climate; and insulation, insulation_class, envelope, and envelope_level for the insulation class. Area may arrive as a JSON number or a numeric string and must be a positive finite number no larger than one million square metres. Zero, a negative value, a missing field, an empty string, and a non-numeric token all fail with invalid_input and a message that floor_area_m2 must be a positive number. Those validation failures are not billed. An unknown climate zone or insulation class fails with invalid_input naming the field and listing the allowed values. On success the body echoes the cleaned area, climate_zone, and insulation_level, reports baseline_heat_loss_w_per_m2k and passive_heat_loss_w_per_m2k, baseline_heating_kwh and passive_heating_kwh, the primary annual_kwh_saved and savings_kwh_per_m2, plus heating_degree_days, hdd_base_c, hours_per_day, unit labels, formula and equation strings, method specific_heat_loss_hdd, and a short steps array. This endpoint does not run PHPP, size a heat pump, or convert currency.
Where a Passive House savings API earns its keep
Residential retrofit sales teams use a passive house heating energy savings calculator to turn a dwelling's treated floor area, a climate zone, and a stock insulation class into an annual kilowatt-hour displacement before they open a full PHPP workbook. Municipal and NGO efficiency programs batch thousands of dwellings against a standard climate and insulation class to estimate fleet-level heating savings for rebate, deep-retrofit, or Passivhaus mandate planning. Invalid areas or unknown enum values do not consume balance. Classroom building-physics labs and vocational courses need a deterministic oracle that rejects a non-positive area as invalid_input instead of returning a negative or zero-area load that a buggy grader might treat as success. Keep requests small, pin annual_kwh_saved and savings_kwh_per_m2 in tests, and you get reproducible heating savings for quotes, dashboards, and edge workers without standing up a full Passive House planning suite of your own.
Integration use cases
Education and deterministic grading
Let students and LMS graders check (H_baseline − H_passive) × A × HDD × 24 / 1000 with a clear invalid_input when the area is not a positive number.
Technical questions
How do I estimate annual heating energy saved by a passive house?
Send floor_area_m2 (a positive number), climate_zone (hot, mixed, temperate, cold, or very_cold), and insulation_level (poor, average, good, or high). The API returns annual_kwh_saved = (H_baseline − H_passive) × A × HDD × 24 / 1000, plus baseline and Passive House loads.
What does the passive house heating energy savings calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.