Furnace sizing calculator
A 2,000-square-foot home at 45 BTU per square foot needs a 90,000 BTU-per-hour furnace. Enter the heated floor area and a climate factor, or pick your climate zone, and the result rounds up to the next 5,000 BTU size before any full load study. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Square footage
- 2,000
- Heating factor
- 45
- Heating btu
- 90,000
- Heating btu rounded
- 90,000
- Recommended furnace btu
- 90,000
- Heating kw
- 26.3763963
A furnace that is undersized leaves rooms cold on design days; one that is grossly oversized short-cycles, wastes fuel, and can reduce comfort and equipment life. Homeowners, remodel planners, and HVAC estimators need a transparent first-pass number before a full Manual J load study. This furnace sizing calculator multiplies conditioned floor area in square feet by a climate-zone heating factor in BTU per square foot, returns the continuous heating output in BTU per hour and kilowatts, and rounds up to a practical furnace capacity step used on many product labels. You can type the factor yourself when a local rule of thumb is known, or pick an IECC-style climate zone so the service applies a mid-band preset for warm, mixed, cold, or very cold regions.
How square footage and climate factor set furnace BTU
Whole-home furnace capacity is commonly estimated with a simple product: heating BTU per hour equals conditioned square footage times a climate-zone heating factor expressed in BTU per square foot per hour. The factor absorbs design outdoor temperature, typical construction, and regional heating severity without requiring a full room-by-room heat-loss model. Warm southern climates often use factors near thirty to thirty-five BTU per square foot; mixed temperate bands near forty to fifty; colder northern zones fifty to sixty; and very cold regions sixty to seventy or more.
This calculator treats square footage as the finished, heated floor area you intend the furnace to serve, not garage, unfinished basement, or unconditioned attic space unless those volumes are deliberately heated. Kilowatt equivalents are included for dual-unit quotes. This is shopping and planning guidance, not a permit-grade Manual J with insulation R-values, infiltration, duct losses, or outdoor design temperatures measured for your lot; treat the output as a transparent starting point and refine with a contractor load calculation before purchase.
Where a quick furnace estimate helps
Home-improvement sites and SEO landings that rank for furnace sizing calculator need a live tool whose free browser path matches the paid automation path on the same pure module. Real-estate and remodel portals pre-fill square footage from listing data and let visitors pick a climate zone to see an estimated BTU range before requesting quotes. Spreadsheet plugins and home-audit apps fill a furnace capacity column from area and a regional factor without shipping opaque vendor tables.
Failed validation does not consume balance. Prefer this capability when the search intent is whole-home furnace BTU from area and climate; use room-level heater BTU tools when you only know volume, insulation, and temperature rise for a single space, and use air-conditioner BTU tools when the job is cooling rather than heating.
FAQ
How does the furnace sizing calculator estimate BTU?
It multiplies conditioned square footage by a climate-zone heating factor in BTU per square foot, then rounds the product up to the next 5,000 BTU step for a practical recommended furnace capacity.
Is this a Manual J load calculation?
No. It is a transparent whole-home rule of thumb for planning and shopping. Use a licensed Manual J study for permit-grade equipment selection with insulation, infiltration, and design temperatures.
What heating factor should I use for my climate?
As a guide, about 30 to 35 BTU per square foot in warm climates, 40 to 50 in mixed ones, 50 to 60 in cold zones and 60 to 70 or more in very cold regions. If you do not know yours, pick the climate zone and a mid-band value is applied.
What square footage should I count?
The finished, heated floor area the furnace will serve. Leave out the garage, an unfinished basement or an unconditioned attic, unless you deliberately plan to heat those spaces.
Why not just buy a bigger furnace to be safe?
A grossly oversized furnace short-cycles, wastes fuel and can reduce comfort and equipment life. One that is too small leaves rooms cold on the coldest design days, which is why a sized estimate beats a guess.
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/furnace-sizing \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"square_footage":2000,"heating_factor":45}'const res = await fetch("https://api.kit.forhosting.com/home/furnace-sizing", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"square_footage": 2000,
"heating_factor": 45
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/furnace-sizing",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"square_footage": 2000,
"heating_factor": 45
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/furnace-sizing", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"square_footage":2000,"heating_factor":45}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"square_footage":2000,"heating_factor":45}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/furnace-sizing", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"square_footage": 2000,
"heating_factor": 45
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.furnace_sizing",
"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
Invalid area or missing sizing inputs fail fast with invalid_input and are not billed.
How square footage and climate factor set furnace BTU
When you supply an explicit heating_factor, that value is used as written. When you omit the factor and send climate_zone instead, the service maps IECC-style zones one through seven and named bands such as mild, moderate, cold, and very_cold onto mid-band presets so you still get a usable estimate from area alone. The raw product is reported as heating_btu with stable twelve-decimal rounding, as heating_btu_rounded for whole-BTU display, and as recommended_furnace_btu after rounding up to the next five-thousand BTU step so the number aligns with common residential furnace nameplates such as sixty, eighty, or one hundred thousand BTU per hour.
Input fields, zone presets, and response shape
POST a JSON body with square_footage as a required positive finite number for conditioned home floor area in square feet. Aliases such as area, sqft, square_feet, floor_area, and home_size are accepted so forms and spreadsheets can map without renaming every column. Provide either heating_factor as a positive BTU-per-square-foot climate factor, or climate_zone as one through seven, zone_1 through zone_7, or a named band hot, warm, mild, moderate, cold, or very_cold. When both are present, the explicit heating_factor wins and the zone is echoed only for context. Missing square footage, non-positive area, missing both factor and zone, unknown zone labels, or factors outside the published absolute range fail with invalid_input and are never charged. Pair the recommendation with local code, equipment AFUE, duct design, and manufacturer sizing tables before you buy: this endpoint is a transparent sizing aid, not an installation design.
Where a furnace sizing API earns its keep
HVAC estimators embed the call in lead forms so customers see heating_btu and recommended_furnace_btu next to equipment options without waiting for a site visit.
Integration use cases
Home replacement and remodel quotes
Enter heated square footage and a climate-zone factor or zone preset to estimate heating_btu and a recommended furnace capacity before comparing equipment labels.
HVAC lead forms and batch estimates
POST area and zone for each property type to fill recommended_furnace_btu columns in quote pipelines and replacement schedules.
SEO widgets and audit automation
Embed the free browser path on a furnace sizing page so visitors get the same BTU product your API later uses in scripts and CI fixtures.
Technical questions
What if I only know my climate zone, not the factor?
Send climate_zone as 1–7 or a named band such as mild, moderate, cold, or very_cold. The service applies a mid-band preset factor and sets factor_from_zone to true.
What happens when I send both heating_factor and climate_zone?
The explicit heating_factor is used for the calculation. The zone is still reported when it resolves, so you can keep regional context without overriding your measured factor.
What does the furnace sizing calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.