An hour-by-hour simulation of one typical year — your home, your heating, real cold-climate equipment curves, and each province's real grid. Change anything below and every chart recomputes instantly.
−5 °C
2.0 %/yr
Outdoor temp (°C)
Capacity (Btu/h)
COP
Loading equipment curves, grid data and weather…
The verdict
The bottom line for your inputs — does the switch cut emissions, by how much, and what it does to your bill. The numbers that back it up follow below.
Calculations, step by step
The full hour-by-hour simulation, one step at a time — from the weather that drives it, through the home's load and the equipment, to the energy bought, the emissions it causes, and how confident you should be in the answer.
Step 1 — The weather driving everything
Everything below starts here — how cold this city gets, and how often. Compared against the typical (TMY), coldest and mildest years on record.
The weather, across the years
Step 2 — How much heat the home needs
Turn the weather into demand: the colder it is outside, the more heat the home loses. Each hour's load is UA × (zero-heat temp − outdoor).
Heating load vs outdoor temperature
Step 3 — What the heat pump can deliver
The selected unit's capacity falls as it gets colder. Capacity and the heat it actually delivers — with the switch-over to backup — on one chart.
Capacity & heat delivered
Step 4 — Capacity, COP and the energy it takes to run
Heat delivered ÷ COP gives the electricity the pump draws; the backup covers the rest. This is the purchased energy the grid has to supply.
COP & energy vs outdoor temperature
Step 5 — How dirty each kilowatt-hour is
The grid's carbon intensity is the multiplier on step 4's electricity. It can shift with temperature — and whether it rises in the cold changes the verdict.
Grid carbon intensity vs outdoor temperature
Step 6 — The emissions, before and after
Energy (step 4) × grid intensity (step 5), plus any furnace combustion, summed over the year — versus the home's current heating. The bottom line.
Emissions vs outdoor temperature
Step 7 — What it costs to run
What the switch does to the actual power/gas bill at today's provincial rates — running cost only, not equipment or payback. The dollar totals are in Final numbers below.
Electricity price plan
Per-scenario operating costs use each province's current residential rates from prices_json/ — the dollar totals are in Final numbers below.
Cost by hour of day
Final numbers
Everything above, added up — the full year's energy, emissions and cost, now versus with the heat pump.
Annual energy by sourcenow vs heat pump, totals for the year
Annual heating emissions — now vs heat pump
Annual operating costnow vs heat pump, current rates
Loading current energy prices…
Per-scenario operating costs use each province's current residential rates from prices_json/.
heatpump
Heat Pump Explorer — Summary
Scenario
Key numbers
Annual totals
Energy by source
Heating emissions
Operating cost
The 8,760 hours behind these numbers
Every hour of the simulated year, row by row — the same figures the charts and totals above are built from, with nothing rounded away or averaged out.
Show the hour-by-hour table (8,760 rows)
Each row is one hour of the typical-meteorological-year weather record for the selected city. Baseline COP and Backup COP are the fixed efficiencies you set (or the defaults) — they don't vary hour to hour in this model, unlike the heat pump's COP and capacity, which follow outdoor temperature. Costs use the currently selected electricity plan and are $0 for a component that draws no energy that hour.
When
Weather & load
Baseline — current system
Heat pump
Backup
Temp°C
LoadkW
Status
COP
EnergykWh
GHGkg
Cost$
COP
CapacitykW
EnergykWh
GHGkg
Cost$
COP
EnergykWh
GHGkg
Cost$
Run a scenario above, then open this table.
GHG and cost are per-hour splits of the same figures totalled in the KPIs and charts above — they will sum to the annual totals (to rounding). "Status" reads Backup only / HP + backup / HP only / No load; the heat pump's own COP and capacity are shown even on hours it doesn't run (e.g. locked out by cold), so you can see why it didn't.
Assumptions & methodology
Every number above is a modelled estimate — here's exactly how it's built, and what to distrust.
Show assumptions — how this is calculated, and what to distrust
This tool runs an hour-by-hour simulation (8,760 hours, one typical year) in your browser — no server, no dependencies. It is a screening tool: useful for direction and rough magnitude, not a substitute for a heat-loss assessment or a contractor's quote. Full derivations and validation tables are in HeatPump/METHODOLOGY.md in the repository.
Pipeline overview
what you set outside data (in-box)
Six inputs set up the model; heat load and heat pump details are also grounded in outside data (tagged in-box). The steps below walk through each one's formulas and sources in detail.
CityDesign temperature (used to size the default heat load): the 2.5th-percentile January dry-bulb at each home's own weather station, house-weighted mean per city. Source: NBC Appendix C climatic design data, joined to HOT2000 weather-station records — HeatPump/data/processed/city_design_temps.json.
Weather year2001–2025, plus "coldest" and "mildest," re-run the whole year against that year's actual recorded temperatures instead of the TMY. Source: same ECCC stations, historical observations.
Coldest year: the year with the highest heating-degree-days (HDD), calculated hourly by comparing the outdoor air temperature against a defined indoor air temperature, set at 18°C for this analysis.
Mildest year: the year with the lowest HDD, same calculation.
Step 2 — Heat load
Two sliders drive this step directly — there's no home-type dropdown picking them for you. Together they set the straight line below.
Design heat loadThe kW the home needs on the city's coldest design day.
Zero-heat temp.The outdoor temperature above which the home needs no added heat. The model has no separate calculation for internal/solar gains — this one number stands in for them, the same way it does for the "effective" balance points in the real-homes explorer below.
Load(hour) = UA × max(0, zero-heat temp − outdoor temp)
UA = design_load_kW × 1000 ÷ (zero-heat temp − city design temp).
CityDefault slider values: the household-weighted median design load and zero-heat temperature across 4 EnerGuide archetypes for the selected city. Source: HeatPump/data/processed/archetypes.json, built from ERS retrofit records.
Domestic hot water is excluded from the load.
Real homes explorer — what real homes in look like
Every ERS-audited home in , before any retrofit — filter by house type and see how load varies with outdoor temperature for the worst, best and typical homes in that filter, real audited homes. Proof of concept.
Filter homes
The "real homes" section above plots every ERS-audited home in the selected city, pre-retrofit condition — up to ~290,000 homes per city, not a sample.
Quantity
ERS field
Notes
Peak load
EGHDESHTLOSS
Design heat loss at the city's design temperature, taken directly from the audit.
Energy consumed
EGHFURNACEAEC
Fuel or electricity used by the heating system — not the same as heat delivered.
Seasonal efficiency
EGHFURSEASEFF
AFUE-style percentage; >100% for a heat pump.
Heat delivered
—
consumed × (efficiency ÷ 100). Homes with efficiency outside 30–400% are excluded and counted per city (not silently dropped).
Balance point (the "0-heat" temperature): solved, not measured.
Model: a straight line from outdoor temperature to heating load, no internal or solar gains.
The line's slope (UA) is fixed from EGHDESHTLOSS ÷ (21°C − city design temp). 21°C is HOT2000's default indoor design setpoint — the temperature EGHDESHTLOSS is computed at.
The balance point is then the one unknown solved so that integrating the load line over a full TMY year reproduces the home's own delivered annual energy.
Because gains are excluded by construction, this is an effective balance point — it absorbs real internal/solar gains, occupant behaviour, and TMY-vs-actual-year weather differences into one number, not a physical measurement.
"Worst" and "best" are the 99th/1st percentile of a combined peak-load and delivered-energy ranking within the filtered set — not the literal extreme — so one mis-keyed audit row can't stretch the display. "Average" is the arithmetic mean of the filtered set, not any single real home.
Steps 3–4 — Equipment
Current heatingIts efficiencyBaseline — the system you have today. Assumed to cover 100% of the load on its own, with no partial-load derating or cycling losses. "Its efficiency" defaults to a typical AFUE for the fuel picked and can be dragged to match a real system:
Fuel
Default
Adjustable range
Roughly corresponds to
Natural gas
80%
70–98%
80% ≈ an older standard-efficiency furnace · 95–98% ≈ a newest-generation condensing furnace
Oil
83%
60–90%
83% ≈ typical in-service oil furnace · 90% ≈ a newer high-efficiency model
Propane
90%
75–96%
90% ≈ mid-efficiency · 96% ≈ a newest condensing model
Electric baseboard
100%
95–100%
Resistance heating — essentially 100% by definition
Heat pump sizeHeat pump tierProject — the heat pump. Tier × capacity band selects one of 9 real, individually-certified units (3 performance tiers × 3 capacity bands: <18k, 18–30k, 30–42k Btu/h). No scaling, no averaging between models — the tool simulates each unit's own published capacity and COP curve.
How the 9 units were chosen:
Sampling frame: every AHRI-certified reference number appearing in Canada's EnerGuide/ERS retrofit audit records — 439,975 record appearances across 15,148 distinct certified models. Source: NRCan EnerGuide/ERS.
Bucketing: each certified model's own AHRI certificate is placed on a 3×3 grid:
Axis
Bands
What it measures
COP at 5°F
≤1.8 / 1.8–2.0 / >2.0
Efficiency in deep cold. 1.75 is the shared certification floor (ENERGY STAR, CEE, NEEP); 55% of records report exactly 1.80.
Capacity maintenance
<0.60 / 0.60–0.80 / ≥0.80
Capacity at 5°F ÷ capacity at 47°F — how much heat the unit still delivers in cold weather. Same definition used by ENERGY STAR v6.2, CEE, and NRCan Greener Homes.
Representative selection: within each of the 9 cells, the most-installed currently-certified model (by ERS appearance count) is used. Every unit is traceable to its own AHRI number.
Curves: capacity and COP vs. outdoor temperature come from that unit's own published manufacturer datasheet (submittal / product data), not the certificate — AHRI publishes capacity at three temperatures and COP at only one, not enough points to simulate a season. Where no datasheet table exists, the NEEP cold-climate listing is used instead, cited per model. When a datasheet and its own certificate disagree, the certificate governs which cell the unit sits in; the datasheet governs the simulated curve.
~28% of ERS record appearances are for models with no certified 5°F rating and cannot be bucketed — 99% of that group is discontinued/delisted equipment that predates the rating. Counts are ERS record appearances, not installed units (a home audited twice counts twice; retrofit and new-construction records are pooled).
Lockout temperature: a fixed assumption per tier — low −15°C, mid −20°C, high −25°C — not each unit's own published minimum (which range −15 to −30°C across the 9 units and don't line up cleanly by tier). Output is zero below the assumed lockout; no derating.
Switch-over temp.Switch-over temperature (dual-fuel backup) is a separate, user-adjustable input: the temperature at which the system hands off to its furnace. It can be set warmer than the tier lockout; below the tier lockout the heat pump cannot run regardless of this setting.
Installed-capacity vs. audited design-heat-loss ratios in ERS retrofit records with a certified heat pump are widely scattered (median ratio ≈0.66, 24% within ±20%) — no single "correctly sized" ratio is implied or suggested by the tool. Source: ERS retrofit records.
Underlying data — tier scatter, equipment curves & spec-sheet table
Every AHRI-certified unit appearing in the EnerGuide/ERS data, positioned by COP at 5°F and capacity maintenance, sized by ERS appearance count. ★ marks the 9 cells this tool simulates.
Bubble area ∝ ERS appearances.
Capacity and COP vs. outdoor temperature for the 9 simulated units, digitized from each unit's manufacturer datasheet. Solid = interpolated between published points; dashed = extrapolated.
Spec-sheet table — calculated vs. AHRI-certified vs. NEEP (−30°C to 20°C)
One row per whole-degree C. Calc. is the digitized curve above. AHRI is the certificate's two anchors (COP + capacity at max compressor speed, 5°F; rated capacity, 47°F). NEEP republishes the same certificate's Min/Rated/Max Heating table at more temperatures. Blank cells mean no source publishes a value there.
T (°C)
COP
Capacity (Btu/h)
Calc.
AHRI
NEEP min
NEEP rated
NEEP max
Calc.
AHRI
NEEP min
NEEP rated
NEEP max
digitized datasheet point · AHRI/NEEP certified data
Energy purchased
Electricity purchased = heat delivered ÷ COP (heat pump) or ÷ 1.0 (electric baseboard). Below the tier's lockout temperature (dual-fuel backup) or the heat pump's own minimum operating temperature (electric backup), backup fuel or electricity covers the load instead. No assumptions beyond the equipment curves and heat load (Step 2) feed into this step.
Dual-fuel backup's own efficiency is a fixed, not user-adjustable, AFUE per fuel — unlike the baseline system's efficiency above, which is a deliberately simplified assumption rather than a spec'd furnace:
Backup fuel
AFUE
Gas furnace
95%
Oil furnace
85%
Propane furnace
90%
Electric resistance
100%
Steps 5–6 — GHG emissions
Grid emissions
Hourly grid intensity: a temperature × hour-of-day × season surface, calibrated against published provincial intensities (within ±6%). Source: 2019–2026 IESO / AESO / Hydro-Québec generation-by-fuel data (Hydro-Québec's open-data historical production export — downloaded manually, no stable direct-link URL recorded in the pipeline). Decomposed as EF = annual level × shape, so the shape (weather/time pattern) applies on top of the most recent complete year's level.
Basis
Definition
2025 value
Marginal
New load served by the marginal generator — gas, whenever gas is running
ON/AB ≈ 500 g/kWh
Hourly average (default)
Fleet-average intensity from the surface, hour by hour
ON ≈ 97 · AB ≈ 414 · QC ≈ 0.02 g/kWh
ECCC yearly
Province's published National Inventory Report annual average — one flat number
National ~100 g/kWh (2022)
ECCC yearly is the only basis available for provinces without an hourly pipeline (BC, MB, SK, NS, NB…), where it's paired with a flat, labelled marginal estimate — and where it, rather than the hourly average, is what the page opens on. Source: ECCC National Inventory Report.
Ontario's average intensity is rising as gas generation grows. Quebec's marginal figure does not model higher-carbon imports (~35 g/kWh) that new winter demand may draw on in practice — Quebec's "after" number is a floor, not a ceiling.
Line loss converts delivered electricity (the home's meter) into the generation-equivalent kWh the grid EF above is computed against — bundled onto the same Yes/No "Upstream losses" switch as the upstream-methane term below (No zeroes both).
Province
Line loss
Source
Ontario
7.4%
IESO transmission loss (~2%) compounded with the Ontario Energy Board's audited distributor Total Loss Factor (5.31–5.42%, 2005–2006)
Alberta
7.68%
CEA Electricity Consumption Report, transmission+distribution combined (2002)
Quebec
7.5%
Régie de l'énergie, blended transmission+distribution loss factor
BC / MB / NS / SK
5%
World Bank/IEA Canada-wide transmission-and-distribution loss estimate
The Ontario, Alberta and Quebec figures are the most specific sources found; all three are dated 2002–2008, not current-year measurements.
Other fuel emissions
Fuel
Combustion factor
Natural gas
185.4 g CO₂e/kWh (fuel input)
Oil
255.4 g CO₂e/kWh
Propane
213.6 g CO₂e/kWh
CO₂ + CH₄ + N₂O, residential rows. Each is derived in code from a volumetric factor and an energy content rather than typed in as a finished number, so the two can never disagree: gas (1921 + 0.072) g/m³ ÷ 10.3611 kWh/m³, oil (2753 + 0.026 + 0.006) g/L ÷ 10.7778 kWh/L, propane (1515 + 0.027 + 0.108) g/L ÷ 7.0917 kWh/L. The same energy contents convert litres to kWh in the cost card, and m³ to leaked-methane mass in the upstream term. Source: ECCC National Inventory Report; conversions shared with Python/ghg_factors.py, the retrofit pipeline's factor module.
Refrigerants
Annual in-service leak (adjustable, default 2%/yr) + amortized end-of-life loss (15% of charge over a 15-year life), each weighted by global-warming potential and factory charge mass — both specific to the selected refrigerant.
Refrigerant
GWP100
GWP20
Charge, 2 ton
Charge, 3 ton
Charge, 4 ton
Charge source
R-410A
2,256
4,715
3.26 kg
4.63 kg
6.01 kg
manufacturer spec sheets, n=6
R-32
771
2,690
2.08 kg
2.96 kg
3.84 kg
ratio-scaled from R-410A, unverified
R-454B
531
1,854
5.90 kg
6.72 kg
7.55 kg
manufacturer spec sheets, n=4
R-290 (propane)
0.02
0.07
0.45 kg
0.64 kg
0.83 kg
ratio-scaled from R-410A, unverified
GWP: blend-weighted from constituent-molecule GWPs (R-410A = 50% R-32 + 50% R-125; R-454B = 68.9% R-32 + 31.1% R-1234yf, composition per Chemours' Opteon XL41 datasheet). Source: IPCC AR6 WG1 Ch.7, Table 7.SM.7. The GWP horizon toggle switches between the 100-year figure (default, standard emissions-inventory basis) and the 20-year figure (near-term forcing — the horizon this page's upstream-methane term below already uses).
Charge mass: charge_kg = a + b × rated_capacity_kW, fitted to factory-charge figures read from manufacturer spec sheets (GREE, Carrier, TOSOT, LG, Lennox — every point and source file in HeatPump/reference/refrigerant_charge_datapoints.csv). No R-32 or R-290 unit was found with a stated charge, so those two are scaled from the R-410A curve by a peer-tool charge ratio (Building Decarbonization Alliance's Heat Pump Lifecycle Emissions Explorer).
Refrigerant charge sample sizes (n=6, n=4) are a spot-check, not a systematic market survey. R-32 and R-290 charge figures are not verified against any manufacturer data.
Upstream emissions
Every combustion and grid figure above — the fuel table, the grid-intensity surface, ECCC's own annual averages — counts only combustion/generation-stage emissions. None of them include what it took to get the fuel out of the ground and to the burner or the power plant: extraction, processing, flaring/venting, and pipeline/transport leakage. This is standard practice for national GHG inventories (ECCC's National Inventory Report, and the IPCC methodology it follows, report combustion separately from the fugitive-emissions category), but it means a bare combustion factor understates a fossil fuel's real climate impact unless upstream emissions are added on top — which is what the toggle below does for gas.
One Yes/No switch applies a fixed value for the upstream methane-equivalent adder before combustion (line loss, the other term on this switch, is documented under Grid emissions above). No zeroes it.
Upstream methane: 2.14% of gas throughput, weighted at the 20-year methane GWP (85), calibrated so leak% × GWP reproduces a +65% carbon-intensity increase over combustion-only for a single home's gas-to-heat-pump project. Source: The Atmospheric Fund's Fugitive Methane guideline (May 2022), "no pipeline infrastructure change" scenario. TAF attributes that +65% to fugitive methane leakage (+10 points) and non-methane extraction process emissions like flaring and venting (+55 points), which this engine represents as one bundled term rather than two.
Where upstream methane comes from — the map
The "Upstream losses" toggle above adds a methane-equivalent leak rate onto gas heating's emissions. That rate isn't abstract — it comes from real fugitive emissions across the oil and gas sector. This map shows where, using the most recent inventory of its kind.
Fugitive methane emissions, 2016
A Canada map of fugitive oil/gas/coal methane, giving the upstream-methane term above a geographic reference.
Source: NASA GES DISC's Global Fuel Exploitation Inventory (GFEI) CH₄, v1, 2016 (Scarpelli et al. 2020, essd-12-563-2020; DOI 10.5067/Q28GFYJYFZ7H).
A global 0.1°×0.1° grid of fugitive methane emissions (fuel exploitation, not combustion), spatially allocated to mines, wells, pipelines, compressor stations, storage, processing plants and refineries — all summed into one number per fuel type. The map does not isolate pipeline losses specifically. Native resolution is ~110m N–S per cell, cropped to a Canada land-boundary polygon (the source grid extends into the US along the border, dropped here).
2016 is the newest vintage available at this scope — there's no newer equivalent, which is why the rest of this tool doesn't rely on it for a live number. Treat the map as illustrative of where fugitive methane clusters, not a current-day number for any one facility.
Colour scale is log-scaled per selected layer (all-sources / gas / oil / coal); emission density is heavily right-skewed. Drawn with an Albers equal-area conic projection (the standard for Canadian thematic maps) rather than a flat rectangle — chosen because it's equal-area: a patch that looks twice as big on screen really is twice the land area, which matters when colour encodes emissions per km².
A share of nonzero grid cells share an identical value with neighbouring cells — GFEI spreads a region's reported total across cells it can't independently resolve, using one shared modelled rate (78% of nonzero gas cells in Canada, vs. ~1% of oil cells). Those cells are flagged as "background" (flat colour) and can be hidden, separate from "resolved" cells with an independently estimated value. That "region" is a Canadian province: checked by intersecting each shared value's cells against province boundaries (the same geo_json/*.json polygons used elsewhere on this site) — the top repeated gas values are ≥99% contained within a single province (e.g. 10,584/10,620 cells at one shared value fall in NT, 4,499/4,501 at another in SK). The province-shaped edges visible on the map are therefore GFEI's own per-province background allocation, not a projection artifact; hiding background removes them. This bundles all oil/gas/coal fugitive sources together — it is not a pipeline-only layer.
Comparison against published studies
Metric
This tool
Published figure
Seasonal COP (premium unit, ON/QC/AB)
≈2.3–2.5
≈2.4 (NRCan / field data)
Gas → heat pump, average grid, Ontario
−68 to −74%
NRCan: significant reduction (average basis)
Gas → heat pump, average grid, Quebec
≈−95%
NRCan: significant reduction
Gas → heat pump, Alberta
barely changed or slightly worse
NRCan: same direction
Baseboard → heat pump, ON/AB
−50 to −58%
Efficiency Canada: 49–77%
Sources: NRCan/CanmetENERGY cold-climate heat-pump report (2022), Canadian Climate Institute's Heat Pumps Pay Off (2023), Efficiency Canada's Heat Pump Myth Buster (2023). Full tables in HeatPump/METHODOLOGY.md.
This tool defaults to the hourly average basis, which is the like-for-like comparison with the published studies above — they use the grid average too. Switching to Marginal in Advanced answers a different question (what the next kWh of heating load draws), and in Ontario and Alberta it roughly quintuples the "after" number, so the two bases are not interchangeable. Corrected 2026-08-19: this passage and the table above previously described marginal as the default, which the page has never done. The grid is calibrated to 2025 (Ontario's intensity has risen since the studies above were published), and homes use the ERS population median (larger than the single reference house those studies model).
Step 7 — Cost
Energy priced per hour against each province's current residential rates. Source: canada-utility-rates, from the utilities' own published tariffs.
Ontario: Time-of-use (default) or Ultra-low overnight, priced per (month, hour).
Quebec: Hydro-Québec Rate D's tier-2 (marginal/top-tier) rate, applied to all modelled electricity. Rate D has no flat residential option; any home with a material electric heating load exceeds the 40 kWh/day first tier on essentially every heating day, so its heating electricity sits in tier 2 regardless of other household usage.
Alberta: screening-estimate supplements for transmission (≈$0.017/kWh) and default gas supply (≈$2.25/GJ), flagged on the card.
The electricity service charge is identical in both scenarios and excluded. The gas fixed charge is counted only in scenarios that consume gas.
Federal consumer carbon charge excluded (set to zero 2025-04-01). Figures are pre-tax.
The number to trust is the difference between scenarios, not the absolute bills — several charges are identical in both and cancel out.
Average costs by province
One representative rate per province, for scale — not what the simulation itself uses (which is hour-by-hour against the home's own simulated load, not a fixed usage split).
Ontario's electricity figure blends its time-of-use off/mid/on rates at the Ontario Energy Board's own published "typical" residential usage split (63% off-peak / 18% mid-peak / 19% on-peak) plus delivery/regulatory adders — Alberta and Quebec are flat rates, so no blending applies there. Alberta figures average Calgary and Edmonton, the two cities this tool tracks. Effective dates range 2024-10 to 2026-05 by province and fuel — see prices_json/<prov>.json for exact dates per rate.
Time-of-use & ultra-low-overnight rates, by hour of day (Ontario)
Ontario is the only tracked province with an hour-varying residential rate — Alberta and Quebec both bill a flat $/kWh, so there's no "by hour" shape to chart there. The lines below are Ottawa's own published weekday schedule (identical structure province-wide; only the utility's fixed monthly charge differs by city).
Weekends aren't shown: time-of-use bills every weekend hour at off-peak, and ultra-low overnight bills every weekend hour except the overnight window at off-peak too (no mid/on-peak ever applies on weekends). Ultra-low overnight has no seasonal schedule — its overnight/mid/on-peak hours are the same in summer and winter, unlike time-of-use.
What this does not do
No equipment or installation cost — only annual operating cost, not payback.
No solar gains or thermostat setbacks — the zero-heat temperature absorbs them.
No ground-source option in this version.
One provincial grid applied to each city's own weather.
Every number here is a modelled estimate with a margin of error, not a guarantee.
Sources
NRCan EnerGuide / ERS retrofit and new-construction audit records