What happened after Canadian home energy retrofits?
Explore matched EnerGuide evaluations to see which upgrades were installed and how modelled energy use, emissions and estimated operating costs changed.
— retrofits match
Small sample — medians and percentages here are noisy, read them as rough indications only
Find your area
Each shape is a postal area — the first 3 characters of a postal code. Click one to select it. Colour = audited homes; grey = no audit data.
Results are based on EnerGuide/HOT2000 modelled energy use, not utility bills.
Most matched homes participated in retrofit programs and completed a follow-up evaluation.
Results describe energy, emissions and estimated operating costs only. Retrofit cost is a separate, proof-of-concept estimate — see below.
Comfort, indoor air quality and homeowner satisfaction are not available in the source data.
This tool CAN show
What upgrades were most common
How much modelled energy use changed
How often heat pumps were installed
How modelled emissions changed
Estimated operating-cost changes at today's energy rates
A proof-of-concept estimated retrofit cost and payback for some measures and homes (not full coverage — see the retrofit cost card)
This tool CANNOT show
Actual retrofit invoices or contractor quotes
Actual utility bills
Comfort improvements
Occupant satisfaction
Indoor air quality changes
The homes shown here are not a random sample of Canadian homes. Most have both a pre- and post-retrofit EnerGuide evaluation, which often means they participated in a retrofit incentive program and completed a follow-up assessment.
Did the retrofits work?
The bottom-line outcome across every home in this view.
Outcomes
Typical energy savingMedian energy saving
—
loading…
Energy saved per m²Median EUI saving
—
kWh/m² · typical homemedian home
Estimated typical bill savingEstimated median bill saving
—
$/yr · typical homemedian home
Emissions savedMedian GHG saving
—
tonnes CO₂/yrtCO2e/yr · typical homemedian home
Retrofit activity
Heat pumps added
—
Fuel switches
—
changed heating fuel
Deep retrofits
—
Solar panels addedSolar PV added
—
Upgrades per homeAvg. measures per home
—
average of 8 tracked upgradesmeasures · mean per home
How much did homes save?Energy saving distribution — 1% increments
Saved energy
Used more
Most homes show lower modelled energy use after retrofit. About 2.8% show higher modelled energy use. Many of these homes had no detected upgrade under this tool's thresholds and the increases are generally small. The data cannot determine whether these differences reflect modelling variation, untracked changes, home modifications, occupant behaviour, or a genuine increase in expected energy use.Negative values mean modelled total energy use was higher at the follow-up evaluation than at the initial evaluation. These cases are uncommon and are typically small in magnitude. The dataset alone cannot determine the reason for the increase.
From every audit to your selection
How the full list of audited homes in this area narrows down to the matched before/after homes shown here, and how many match your filters.Left to right: every audited home in the area → split by which evaluations it has → the ones that formed a valid before/after pair → the ones matching your current filters. Only the last step changes when you adjust filters.
Energy & emissions — before vs after
How much each home used and emitted before and after the work, and how the fuel mix shifted.
Energy use per square metre (kWh/m²)Energy use intensity (EUI) — kWh per m²
Energy use per square metre, before, after, and what the advisor recommended — lower is more efficient.EUI = total energy (kWh) ÷ floor area (m²). A lower EUI means a more efficient home. Pre- and post-retrofit distributions are shown as lines; the purple dashed line is the advisor's recommended-upgrade EUI from the pre-retrofit audit (not what was actually done); the amber bars show, for the homes that improved, how much their EUI dropped by. Outliers above 500 kWh/m² clipped for scale. FSA view only — the province-wide view doesn't yet precompute a recommended-EUI distribution.
Greenhouse gas emissions — tonnes of CO₂ per yearGHG emissions — tCO2e per year
Greenhouse gas emissions from home energy use, before and after.Modelled annual greenhouse gas emissions from home energy use. Fuel switching to electricity can lower GHG even when total energy use rises, depending on grid mix. Pre- and post-retrofit distributions are shown as lines; the amber bars show the reduction distribution. 4 GHG bases available — see Methodology, "GHG scenarios" — because the source data's own GHG field (ERSGHG) is only populated for about half of matched pairs; the other 3 are calculated from each home's own fuel consumption instead.
Energy bill — $ per year at current rates
Estimated yearly energy bill before and after, at today's rates — lower is cheaper to run.Each home's modelled annual energy, by fuel, priced at its province's current residential rates. Volumetric energy only — fixed monthly service charges are excluded. Today's rates are applied to audits from 2004–2026, so read this as “what a home like this would save at current prices,” not a historical bill. A home that switches to electricity can see its bill rise even when energy and emissions fall. Bills above $8,000/yr are clipped for scale. Where the prices come from, and their limits →
Design heat loss — pre & post (kW)
The heating power a home needs on the coldest design day — lower means a better-sealed, better-insulated home that's cheaper to keep warm.Modelled design heat loss (kW) at the design outdoor temperature — the peak heating demand the envelope imposes, i.e. what heating equipment is sized against. A lower post value can allow a smaller furnace or heat pump at replacement time. Pre- and post-retrofit distributions are shown as lines; amber bars show the per-home reduction distribution.
Where the heat escapes — annual loss by component
Every home loses heat through its walls, roof, windows, foundation and the air that leaks through gaps. This shows where it goes, and which parts the retrofits actually fixed.Mean annual heat loss per home (HOT2000 EGHHL*, kWh/yr) by envelope component, averaged over the current selection. Means rather than medians so the six components sum to the whole-home figure.
Energy by fuel — pre vs post · total kWh across all matched homes
Each fuel gets a box sized to its larger of pre/post use; the fill level shows the actual pre or post value as a share of that box, so a half-filled box means usage dropped by half. The bottom row shows the resulting saving (green) or increase (red) per fuel. This chart uses total energy summed across all matched homes, so each fuel's share adds up to the true total. Hover any box for exact values.
Space heating by fuel — pre vs post · total kWh across all matched homes
Read exactly like the chart above, but counting only the energy HOT2000 attributes to space heating — domestic hot water, appliances, and lighting are excluded.
Heating fuel flow — aggregate energy pre → post (GWh)
Flow width = total energy (GWh) across all matched homes. Grey flows = same fuel, no switch. Coloured flows = fuel switch. Hover a flow for details.
What was upgraded
Which measures were carried out, and how far insulation and airtightness actually moved.
Audits per year — initial (D) & follow-up (E)
Initial (D) and follow-up (E) audits by year. Two bars per year (D then E); solid segments are the homes matching your current filters, faded segments are the rest — so you can see when the selected retrofits were done against all audit activity in the area.
What measures were done
Measures by vintage
For homes built in each decade, the share that got each measure. Vintage buckets with fewer than 20 matched homes are dropped to avoid noisy percentages.
Insulation & air leakage — before vs afterInsulation & air leakage — median pre → post
Higher R-value and lower air leakage are both better.R-value = imperial thermal resistance (higher = better; RSI shown in brackets is the metric equivalent, R = RSI × 5.68). ACH50 = air changes per hour at 50 Pa (lower = better).
Roof insulation
Wall insulation
Foundation insulation
Air leakage
Did homes follow the advisor's recommendation?
For each component, restricted to homes where the pre-retrofit audit's plan called for a meaningfully better value (≥10% improvement over the pre-retrofit value — the same threshold used elsewhere on this page to flag a component as "upgraded"): the share that met or exceeded the recommended value, the share that improved but not as far as recommended, and the share with no meaningful change. Components with fewer than 20 such homes in the current selection are omitted.
Solar PV adoption
Share of matched homes with solar PV recorded pre- and post-retrofit, and the median system size among adopters.
The homes in this view
Who these retrofitted homes are — vintage, size, type — and how they sit within the wider neighbourhood.
Year built
Floor area (m²)
Building type
Number of storeys
Neighbourhood housing stock — 2021 Census
Equipment detail
Raw heat-pump and window references recorded for the matched homes.
Heat pump + backup
Backup fuel — share of heat-pump homes
Electricity vs. backup-fuel energy — mean kWh/yr
Top: what accompanies the heat pump in matched homes with one — the backup system that covers demand beyond the heat pump's own capacity, or when it's offline. Bottom: how much of the season's heating load the heat pump itself carried (electricity) vs. its backup, for homes with a gas, oil or propane backup. Electric-backup homes aren't shown here: the heat pump's own electricity draw can't be separated from an electric backup's. Wood backups still appear in the fuel-share chart above but not in this comparison.
Heat pump sizing — capacity vs. design heat loss
How much of a home's peak heating need the heat pump alone can cover, at the selected outdoor temperature.Ratio of AHRI-certificate-verified heat pump heating capacity to design heat loss (both kW) — not the raw auditor-entered capacity field, which runs well above the certified value and is inconsistent across different audit rows for the same certificate (see Methodology, section F). Homes without a resolvable AHRI certificate reference aren't included (see Methodology) — coverage is highest for retrofits from about 2019 onward.
Common heat pump models (outdoor unit)
Top 5 most common outdoor heat-pump units among matched homes (pre- and post-retrofit combined), grouped by brand + outdoor model number. One outdoor unit can be certified under several AHRI reference numbers — different indoor coil pairings, refrigerant lines... — so every certificate behind an outdoor model is listed underneath it. Each line shows heating capacity at 47°F and 5°F outdoor temperature, HSPF2 (seasonal heating efficiency), COP at 5°F, and cold-climate status where on file — click the AHRI number for its directory page.
Common window codes
Pre-retrofit
Post-retrofit
Top 5 window codes by frequency, decoded into glazing/coating/fill/spacer/frame using NRCan's published code tables.
Most common window changes
For homes with a decodable window code both before and after, the share where each attribute changed at all, ranked — top 5 of 6 tracked attributes. "Most often" shows the single most common from → to change for that attribute. Codes outside NRCan's standard table (custom/user-defined windows) aren't included.
Estimated retrofit costProof of concept
Estimated extra cost of the efficient choice over what a homeowner would likely have done anyway, priced against a US cost database (2023 USD, no CAD conversion) — a proof-of-concept estimate, not a quote.Incremental cost: insulation/air sealing have no business-as-usual (BAU) equivalent, so their figure is the full REMDB cost; windows are the efficient-minus-standard premium; an ASHP is netted against the home's own pre-audit heating system (like-for-like where ERS records it) plus the A/C it replaces, and can be negative. REMDB is 2023 USD from US retail/contractor data — no CAD conversion or Canadian-labour adjustment applied. Payback = incremental cost ÷ this home's annual $ saved (see the Energy bill card above) — flagged low-confidence for Alberta, and for any home whose main pre-retrofit fuel is oil, propane or wood (screening-rate pricing, not per-province data). Not every measure or every home is priced. Full methodology →
Individual retrofits
Every matched home in this postal area, one row each — click to expand. (Shown when a single area is selected.)
Individual retrofits — click a row for detail
Sort by
Area
Type
Built
m²
EUI kWh/m²
Fuel
Saving
Depth
Est. cost
Payback
How this data was built — methodology
This tool visualises real home-energy audits. Here is where the data comes from, how it is transformed and analysed.
1 · Where the data comes from
Audit data comes from Natural Resources Canada's EnerGuide Rating System (ERS)open dataset — the official record of home-energy audits across Canada, covering audit years 2004–2026. NRCan introduced the rating system in 1998 as an unbiased, credible way to estimate how energy is used in a home, and it has since rated over a million of them. An audit is a registered energy advisor visiting a home and modelling it in HOT2000 — NRCan's residential energy analysis and rating software, described by NRCan as "the Canadian standard for evaluating the energy performance of houses and multi-unit residential buildings" — to work out how much energy the home uses and where that energy is lost.
2 · Matching "before retrofit" and "after retrofit"
Each audit record has an evaluation type tag. We treat type D as the initial ("before retrofit") evaluation and type E as the follow-up ("after retrofit") evaluation. A home is identified by a stable house ID, and we keep it when it has at least one before and at least one after audit. Where a home has more than one of either — a re-audit, or a home that went through an incentive program more than once — we use its earliest before audit and its latest after audit, so the pair spans the home's whole audit history. That after audit must be dated later than the before one. That paired record becomes one pre → post row. A home audited only once is dropped — there is nothing to compare it to.
3 · Making sure it's really the same home
To avoid accidentally comparing two different homes (or a home that had a major addition), a pair is kept only if, between the two audits, the floor area changed by no more than 10% and the house type, number of storeys, and number of dwelling units stayed the same. Pairs that fail these checks are removed before anything is counted.
4 · Converting everything to the same units
The source records each fuel in its own unit, so we convert everything to a common one — kilowatt-hours (kWh) — before comparing: natural gas from cubic metres, oil and propane from litres, wood from tonnes, and the overall total from megajoules. Electricity is already in kWh. Greenhouse-gas emissions have 4 available bases, switched by the dropdown above the GHG chart — the audit's own reported figure (only ~50.5% of homes have it) plus 3 we calculate from each home's own fuel consumption, so every matched home gets a GHG figure regardless of whether the audit itself recorded one. See section I below, "GHG scenarios", for the full breakdown.
5 · Fields we calculate ourselves
From the audit values we derive the numbers you see:
EUI (energy use intensity) = total energy ÷ floor area, in kWh/m² — lets a small efficient home and a large one be compared fairly. Energy saving % = (before − after) ÷ before. Positive means energy use dropped; negative means it rose. Negative cases are rare (2.8% of homes) and mostly small: about 56% of them have no retrofit measure flagged. It is not clear why those homes have higher energy usage — see the open questions at the end of this section. Retrofit depth, based on how much total energy fell. The three bands are mutually exclusive at the boundaries: Shallow = 0 to 10% saved (10% exactly counts as shallow), Medium = more than 10% and less than 50%, Deep = 50% or more (50% exactly counts as deep). A home that used more energy after the retrofit falls into none of the three — that is 2.8% of matched pairs, so the three shares do not sum to 100%. Fuel switch = the main heating fuel changed (e.g. gas → electricity). Design heat loss comes straight from the audit, converted to kW: the peak heating power the home needs on the coldest design day. It is a measure of the building envelope (and what heating equipment must be sized to), not annual energy use — a lower value after the retrofit can allow a smaller furnace or heat pump at replacement time. Average measures per home = the mean, across matched homes, of how many of the 8 tracked upgrade measures (below) each home did — a home with insulation, air sealing and a heat pump added counts as 3. It is not a count of distinct upgrade "events", just how many of the 8 tracked categories cleared their threshold.
6 · What counts as an "upgrade"
Each measure is flagged per home using a sensible threshold, so tiny modelling wiggles don't get counted as real work:
Roof / wall / foundation / floor insulation — the insulation value went up by more than 10%. Air sealing — air leakage dropped by more than 10%. Windows changed — the recorded window type is different before vs after. Heating system changed — the heating fuel or equipment type is different, and it wasn't a heat pump addition (see below) — a heat pump addition is itself a furnace type/fuel change, so without this exclusion "Heating system changed" and "Heat pump added" would double-count the same homes in every measure-mix chart. This exclusion applies to the aggregate charts on this page; the raw Heating_Change field in the per-home table (FSA mode) is the unmodified ERS diff and can be true alongside HeatPump_Addition. Heat pump added — no heat pump recorded before, one recorded after. Can co-occur with a furnace type/fuel change (e.g. replacing a gas furnace with a heat pump) — that home counts only toward "Heat pump added", not "Heating system changed".
7 · Two views: postal code or province
Postal code. When you pick a single FSA (the first three characters of a postal code), the tool loads the actual individual audit records for that area and calculates everything live in your browser — that is why you also get the sortable table of individual homes.
Province. When you look at a whole province, doing that over hundreds of thousands of records would be slow, so the medians and chart shapes are pre-calculated once. Both paths use the same bucket widths and definitions, so the two views agree.
8 · How the histograms are built
Charts that show a distribution group values into fixed-width "buckets" and count how many homes fall in each — for example energy-use buckets are 20 kWh/m² wide, design-heat-loss buckets 2 kW, and the saving-% chart uses 1% steps. The "improvement" charts only count homes that actually got better on that measure, so homes that stayed flat don't dilute the picture.
9 · Things to keep in mind
These are modelled energy estimates from the audit software, not metered utility bills — actual consumption varies with weather and occupant behaviour. Outliers (e.g. EUI above 500 kWh/m²) are clipped so the charts stay readable. Pre-retrofit solar is rarely recorded in the source, so "solar added" reflects systems present at the follow-up audit and may slightly overcount homes that already had panels. The source data contains no retrofit cost information and no utility bills. This tool estimates annual operating costs using current provincial energy rates applied to modelled fuel consumption, and separately, as a proof of concept, an estimated retrofit cost and payback period (see below) — none of these are actual utility bills, historical costs, contractor quotes, or a substitute for a real payback calculation.
The sample is self-selected. Requiring both a before and an after audit means these are overwhelmingly homes that took part in retrofit incentive programs (which required the follow-up audit) and finished their planned work. Homeowners who renovated without a program, or who started and never booked the follow-up, are not captured — so the savings shown here are likely somewhat higher than what a randomly chosen renovation achieves, and the homes themselves skew toward owners motivated enough to go through a grant process.
10 · Estimated retrofit cost & payback (proof of concept)
A separate, experimental estimate — not derived from the ERS source data (which has no cost fields at all) but from pairing each home's recorded upgrades against PNNL/DOE's National Residential Efficiency Measures Database (REMDB), a US per-measure cost-regression database (2023 USD; no CAD conversion or Canadian-labour adjustment applied). Figures are incremental: insulation and air sealing have no business-as-usual equivalent, so their cost is the full REMDB figure; windows are priced as the efficient-minus-standard premium; an air-source heat pump is netted against the home's own pre-audit heating system (matched like-for-like where ERS records the fuel/type, a generic gas-furnace assumption otherwise) plus the air conditioner it replaces — and can come out negative, meaning REMDB estimates the heat pump was cheaper than replacing the old system. Solar panels and an HRV/ERV are priced at full REMDB cost too, on the same no-business-as-usual logic: PV from the capacity the audit actually added (post minus pre KWPV, at REMDB's per-watt rate), an HRV/ERV whenever the recorded ventilation type gains one — though that last one is a flat placeholder, since the fields REMDB fits it on (recovery efficiency and airflow) don't survive the pipeline. Low/Mid/High correspond to REMDB's 10th/50th/90th percentile cost regressions. Payback = incremental cost (mid) ÷ this home's own annual $ saved (the Energy bill card above) — undefined/hidden for homes with near-zero or negative energy savings, and flagged lower-confidence for Alberta electricity and for any home whose dominant pre-retrofit fuel is oil, propane, or wood, since those utility rates are national screening estimates, not measured per-province data (see the price-source note above). Coverage is partial: not every measure is priced (furnaces/boilers, floor insulation and doors are out of REMDB's current scope here), apartments/duplexes/triplexes are excluded entirely, and 13% of the homes it does cover end up with no priced measure at all — full methodology, per-measure formulas and every assumption: docs/RETROFIT_COSTS.md.
This section documents the full technical pipeline for readers familiar with the EnerGuide Rating System (ERS) dataset and HOT2000 — including the original source column names, every conversion factor and threshold, and the transformation scripts. Column names in UPPERCASE are the original headers of the ERS public CSVs; mixed-case names (e.g. Pre_TotalEnergy) are the fields this site derives from them.
Pipeline overview — CSVs to interactive charts (hover any box)
How an ERS CSV extract becomes a row on this page: cleaned and paired into a before/after home (earliest initial audit, latest follow-up), checked that it's really the same home, converted to common units and reduced to the derived fields below, enriched with GHG emission factors — then stored as Parquet and transformed into the static JSON this page loads, enriched with Census, AHRI, pricing and boundary data, and split into Canada, province and FSA views. The dashed branch is the retrofit-cost proof of concept (section H): priced separately against an external US cost database and joined back in client-side by house ID. Hover (or focus with Tab) any box for the numbers, filters or data behind it. Full detail in sections A–J below.
A · Source data & record selection
Input is NRCan's public ERS dataset as annual CSV extracts (evaluation entry years 2004–2026, all provinces and territories, using the PROVINCE column). Records are separated on EVALTYPE: D = initial (pre-retrofit) evaluation, E = follow-up (post-retrofit) evaluation. Pairs are formed on HOUSEID, across all file years, with these rules applied in order:
Pairing. A HOUSEID is kept if it has at least one D record and at least one E record anywhere in the dataset. Where a home has more than one of either — a re-audit, or a home that went through an incentive program more than once — it is reduced to its earliest D and its latest E, so the pair spans the home's whole audit history. The E's ENTRYDATE must then be strictly later than the D's. Records with no ENTRYDATE are excluded before this reduction, since they cannot be ordered.
Changed 2026-07-24. This rule previously required exactly one D and exactly one E, dropping every multi-audit home rather than guessing which evaluation paired with which — 149,145 homes, about 9% of those holding both an initial and a follow-up audit. Measured against the full dataset, the earliest-D/latest-E reduction gives a correctly-ordered pair for 99.6% of them. The matched sample rose from 1,369,305 to 1,451,433 homes (+6.0%), and the share of D&E homes that end up matched rose from 84.0% to 89.1%; the remainder of the gain is absorbed by the same-home integrity filters below, which reject proportionally more multi-audit homes because a longer span makes structural change likelier. Headline results were essentially unchanged by the addition — the median saving stayed at 20% — which is the evidence that the recovered homes resemble the ones already included. The trade-off is stated in the open questions below: a home with two separate retrofit projects now contributes one row covering both.
Same-home integrity filters. A pair is dropped when the home appears to have physically changed between D and E:
FLOORAREA changed by more than ±10% (relative to D, which must be > 0)
a change in TYPEOFHOUSE, STOREYS, or NUMDWELLINGUNITS
These three are compared robustly, not as raw strings: NUMDWELLINGUNITS is compared as a number, so 1.0 and 1 (the same count written differently in different audit years) count as equal, and a field left blank in both audits is treated as unchanged — a pair is dropped only when a field genuinely differs, or is present in one audit but blank in the other. This removes additions, rebuilds, and evaluations keyed to the wrong house, without discarding pairs over cosmetic formatting or jointly-missing values. (An earlier exact-string comparison dropped roughly 831,000 otherwise-valid pairs on those two artifacts alone — almost all on NUMDWELLINGUNITS; see the open-questions note below.) No other outlier filtering is applied at the record level — extreme values are only clipped at chart-display time (see section G).
Nationally, about 1,629,313 HOUSEIDs carry both a D and an E record; 1,451,433 (89.1%) survive every gate above. Of the roughly 177,880 that don't, a gate-by-gate reconstruction run over the full raw dataset (approximate — it reproduces each check in isolation, so ties on same-day dates can fall slightly differently than in the streaming pipeline) attributes about two-fifths to the date-order check (the follow-up not dated strictly after the initial — mostly unparseable or same-day-tied dates, see the open-questions note below), about a fifth to the floor-area check, and just over a third to the structural check — within which a NUMDWELLINGUNITS mismatch is still the largest single reason, but now split roughly 4-to-1 between "recorded in one audit, blank in the other" and a genuine change in unit count, rather than the formatting/blank-vs-blank artifact the 2026-07-24 fix above already removed.
Identity and descriptive fields carried through unchanged: HOUSEID, CLIENTPCODE (the forward sortation area — the public file carries only the first three postal characters), PROVINCE, YEARBUILT, FLOORAREA, TYPEOFHOUSE, STOREYS, FNDTYPE, and ENTRYDATE (reduced to year for publication).
B · Unit conversion to kWh
Each fuel is reported in its own unit in the source, so all energy quantities are converted to kWh at extraction time. MJ→kWh is exact (÷3.6). The per-fuel heating values are published Government of Canada conversion factors, cited per row below.
GJ column used verbatim where populated (HOT2000 v11.2+); else HOT2000's own per-home heating-fuel split (already MJ, no assumption needed); tonne fallback (14.0 GJ/t) only for the remaining ~0.3% of records with neither column — NRCan Solid Biofuels Bulletin No. 2 (air-dry firewood 14–15 MJ/kg HHV)
Pre/Post_HeatLoss
EGHDESHTLOSS
W
× 0.001 (→ kW)
design heat loss, not energy
Pre/Post_GHG
ERSGHG
tCO₂e/yr
as-is
already includes electricity via provincial grid factor (ERSELECGHG is netted in at source); only ~50.5% of matched pairs have this field populated. 3 calculated alternatives with ~100% coverage exist — see Methodology section I, "GHG scenarios"
Pre/Post_SolarPV
KWPV
kW DC
as-is
—
Wood. Since HOT2000 v11.2 the dataset reports wood energy directly in GJ (EGHFCONWOODGJ), which is used as-is — no heating-value assumption at all for those records. Older records only carry tonnes (EGHFCONWOOD), which by itself needs a heating-value assumption to convert to energy — but most of those records also carry EGHHEATFCONSW, HOT2000's own per-home split of heating energy by fuel (already in MJ, no assumption needed, and already used for the heating-only Pre/Post_HeatWood figures elsewhere on this page), so that's used first. Only for the remaining ~0.3% of tonnes-only records with neither column does the flat 14.0 GJ/t fallback apply, and for those, per-home wood energy is approximate to the extent the actual wood type (softwood, hardwood, pellets) differs from that figure. (A flat-factor version of this fallback previously produced a small number of homes — 29 Pre-audit, 14 Post-audit, all wood-primary — where computed wood energy exceeded the home's own reported total; preferring EGHHEATFCONSW resolves this, since it's a subset of the home's own reported heating total by construction.)
Validation. As a consistency check, for homes consuming electricity plus exactly one other fuel, the per-fuel quantities × these factors reconcile with the audit's own total (EGHFCONTOTAL) to within about 1% across all audit years — so the cited factors closely track whatever HOT2000 applies internally. None of this affects Pre/Post_TotalEnergy or any savings figure (those convert from MJ exactly); it only scales the per-fuel breakdown charts.
C · Calculated fields
All formulas operate on the kWh-converted values above; percentages are undefined (null) when the denominator is not > 0.
Field
Formula
Source columns
EnergySavingPct
(pre − post) ÷ pre, on total energy
EGHFCONTOTAL (D, E)
HeatEnergySavingPct
(pre − post) ÷ pre, on space-heating energy
EGHFURNACEAEC (D, E)
EUI (kWh/m²)
total energy ÷ floor area, computed at render time for pre and post separately
EGHFCONTOTAL, FLOORAREA
Average measures per home
sum of the 8 measure-flag counts (section D) ÷ matched-home count
all 8 *_Upgrade/*_Change/HeatPump_Addition flags
FuelSwitch
primary heating fuel differs between D and E
FURNACEFUEL (D ≠ E)
Shallow_Retrofit
post ≥ 0.90 × pre and post ≤ pre (saved 0–10%)
EGHFCONTOTAL
Medium_Retrofit
post < 0.90 × pre and post > 0.50 × pre (saved >10%, <50%)
EGHFCONTOTAL
Deep_Retrofit
post ≤ 0.50 × pre (saved ≥ 50%)
EGHFCONTOTAL
(no band)
post > pre — energy rose. All three flags are false, so the bands do not sum to the matched-home count (2.8% of pairs)
EGHFCONTOTAL
Pre/Post_Year
year component only
ENTRYDATE (D, E)
D · Measure (upgrade) definitions
Each measure is a per-home boolean computed from the D vs E values of one or two source columns. The ±10% thresholds are meant to avoid counting a slight modelling difference as a retrofit measure — AIR50P of 5.8 in one audit against 5.83 in the other, for example, is re-measurement noise, not work performed.
Measure flag
Source column
Rule (D = pre, E = post)
Wall_Insulation_Upgrade
MAINWALLINS (RSI)
E > 1.10 × D, with D > 0
Roof_Insulation_Upgrade
CEILINS (RSI)
E > 1.10 × D, with D > 0
Foundation_Insulation_Upgrade
FNDWALLINS (RSI)
E > 1.10 × D, with D > 0
Floor_Insulation_Upgrade
EGHINEXPOSEDFLR (RSI)
E > 1.10 × D, with D > 0
Air_Tightness_Upgrade
AIR50P (ACH @ 50 Pa)
E < 0.90 × D, with D > 0 (lower is better)
Windows_Change
WINDOWCODE
both non-empty and different
Heating_Change
FURNACEFUEL, FURNACETYPE
either differs
HeatPump_Addition
HPSOURCE
blank or "N/A…" in D, populated in E
Supporting HVAC detail columns carried for display: HEATAFUE, EGHFURSEASEFF (seasonal efficiency/COP), HPSOURCE, COP, and AHRI (the certified heat-pump reference number — see section F).
E · Transformation pipeline (Python)
Stage 1 — annual CSVs → one Parquet per province (ers_web_pipeline.py). The yearly source CSVs are too large to load in memory, so they are stream-read with PyArrow in ~100k-row batches, all columns as strings (numeric coercion happens later, per column). Three passes: (1) split each year's file into D and E Parquet intermediates per province; (2) build a cross-year pairing index of HOUSEID → (D year, E year) applying the exactly-one-D/one-E and date-order rules; (3) join each (D-year, E-year) group, apply the integrity filters, unit conversions, measure flags, and derived fields, and append to ers_web_<PROV>.parquet (Snappy compression, ~50 columns). One data-quality repair worth noting: some source years serialize the AHRI identifier as 211644151.0 and others as 211644151; without normalizing the trailing .0, ~20% of Ontario's "distinct" AHRI numbers were duplicates of this kind.
Stage 2 — Parquet → static JSON. Three scripts read the province Parquet files and emit everything the page fetches:
split_fsa_json.py writes one file per FSA (fsa_json/<PROV>/<FSA>.json) holding that area's raw matched rows, plus a per-province _index.json (row count, median saving, and dore_count per FSA, used for the search typeahead, the choropleth, and the "retrofits selected" KPI denominator). dore_count is the area's full audited population — every HOUSEID with any initial (D) or follow-up (E) evaluation, matched or not — computed by a separate lightweight scan of the raw ERS CSVs (build_fsa_audit_totals.py), since the shipped files carry only matched pairs. A home is counted under its D record's FSA (or its E record's when it has no D). Categorical values are case-normalized first — audit years disagree on casing ("single detached" vs "Single Detached"), which otherwise silently splits one category into two. Annual-kWh columns are rounded to integers and EnergySavingPct kept at 4 decimals to control file size. AHRI numbers are masked to each province's five most common (matching what the province view lists); all other values ship as null.
precompute_province_stats.py writes province_json/<PROV>.json: every chart on the page, pre-aggregated in Python for the whole province and for each house-type slice — medians, measure counts, Sankey fuel-flow totals, per-fuel means for the waterfall, and all histogram bins. Bin widths and clipping rules are copied verbatim from the front-end code (EUI 20 kWh/m², GHG 1 tCO₂e, design heat loss 2 kW, savings 1%, insulation 0.25–0.5 RSI/ACH steps), so the precomputed province view and the raw-row FSA view produce identical chart shapes for the same data.
aggregate_canada.py builds the all-Canada default view from the province JSONs without touching raw rows: counts and histogram bins are additive and summed exactly; medians are not additive, so national medians are re-derived as weighted medians over the summed bins (an approximation bounded by the bin width); the fuel waterfall ships per-home means, so each province's mean is weighted by its row count before combining.
Why this format. The site is static — plain files served from a repository, no database or API server. Loading a full province of raw rows into the browser (hundreds of thousands of rows) is neither fast nor necessary, so the page fetches the smallest artifact that answers the current selection: one precomputed province JSON when no FSA is chosen, or one FSA's raw-row file (median ≈ 490 rows, largest ≈ 5,800) when one is. FSA files use an array-of-arrays layout ({"columns": […], "rows": [[…], …]}) rather than an array of objects — writing the ~50 column names once instead of once per row measured ~77% smaller for a typical FSA. Raw rows are only shipped at FSA granularity, which is also what makes the individual-retrofits table possible there and not province-wide.
F · Supplementary datasets
2021 Census join.extract_fsa_census.py reads the Statistics Canada 2021 Census Profile at forward-sortation-area geography (catalogue 98-401-X2021013, long format: one row per FSA × characteristic) and keeps ~30 housing-stock characteristics by their CHARACTERISTIC_ID: population (1), total private dwellings (4), structural dwelling type (42–49), tenure (1415–1416), period of construction (1441–1448), dwelling condition (1450–1451), and owner-household costs and values (1482–1489). StatCan suppression and quality symbols (x, F, E, r, rE, .., …) become nulls. The result is one ~1 MB JSON keyed by FSA, fetched once and joined in the browser to the selected area via CLIENTPCODE. This is a context panel only — census values never enter the retrofit calculations.
Heat pump backup identification. For a home with a heat pump, the heating-equipment fuel and type columns (FURNACEFUEL, FURNACETYPE) describe the companion system HOT2000 models alongside the heat pump — the furnace or boiler that covers load beyond the heat pump's capacity or when it is offline — not the heat pump's own energy source, which is always electricity. That is what the "Heat pump + backup" card counts. The "still burned this fuel" sub-line is the share of homes with that recorded backup fuel whose post-retrofit heating-only consumption in that same fuel is above zero (Post_HeatNaturalGas, Post_HeatOil, Post_HeatPropane). It is computed for combustion fuels only: electric backup shares a meter with the heat pump's own draw, so the figure would be 100% by construction, and the wood species share a single combined consumption field.
AHRI directory enrichment. The ERS AHRI column carries the AHRI certification number of an installed heat pump but no product details. Every number surfaced on the site is looked up against the AHRI Directory's public search endpoints; current (Appendix M1) rating fields are preferred, with legacy Appendix M values as fallback: brand, model, heating capacities at 47 °F / 17 °F / 5 °F, HSPF2, SEER2/EER2, COP at 5 °F, refrigerant, ENERGY STAR and cold-climate designations, and listing status. Appendix M and Appendix M1 are the two versions of the US Department of Energy's test procedure for rating heat pumps and air conditioners (10 CFR Part 430, Subpart B). M1 took effect for equipment manufactured from 2023 and tests at external static pressures closer to real installed ductwork, so it generally reports lower capacities and efficiencies than M did for the same unit — which is also why its efficiency metrics are renamed (HSPF2, SEER2, EER2). The two are not interchangeable, so where a certificate carries both the M1 figures are used and the M values only fill gaps. Numbers that no longer resolve are flagged "Delisted" rather than dropped. The page renders these beside each AHRI number and deep-links to the directory entry.
Which ERS heat-pump fields agree with the certificate, and which don't. The raw auditor-entered HPCAP (heat pump capacity, Watts) is unreliable for a sizing claim — checked against the AHRI certificate across 318,585 rows nationally, it runs a median 1.6× the certified 47 °F capacity, clusters visibly near 1×/2×/4× of the true value (consistent with a unit-entry error), and 63% of AHRI codes appearing more than once show inconsistent HPCAP values across different audit rows for the very same certified unit. The generic COP field looked similarly unreliable at first — its values run systematically higher than the certificate's Heating_COP_at_5F_M1 — but a spot-check against NEEP's published performance table for the site's most common installed unit (AHRI 211644151) shows why: NEEP lists that unit's COP as 3.00 at the AHRI 47 °F rated point and 1.80 at 5 °F, and the ERS COP field's median for that exact unit is 2.99 — matching the 47 °F point, not 5 °F. COP appears to be recorded at the mild rating condition throughout, so it isn't unreliable, it's just being compared at the wrong temperature; the AHRI Directory's own search endpoint only exposes a certified COP at 5 °F, so this can't yet be validated at 47 °F across the full dataset. The cold-climate-ASHP-specific fields do carry a 5 °F match already recorded elsewhere in the source: CCASHPCOP (present when CCASHP = "T") agrees with the certificate's 5 °F COP almost exactly — HOT2000 most likely populates it from the AHRI number directly rather than a manual entry — and CCASHPCAPACITYMAINTENANCE (the auditor-recorded 5F/47F capacity ratio, as a %) tracks the certificate closely too: across 210,243 rows nationally, the median difference from the certified value is 0.0 percentage points, and 85% of homes land within ±10pp of it. None of these three fields — CCASHPCAP, CCASHPCAPACITYMAINTENANCE, CCASHPCOP — are currently used on this page; this note is left here as a record of which raw fields to prefer if that changes.
Energy prices (the bill card). The "Energy bill — $ per year" chart prices each home's modelled energy at current residential rates; no price data comes from the ERS dataset itself. Natural gas tariffs come from the community-maintained MaxPr1me/canada-utility-rates repository, which aggregates official utility and regulator rate pages and is re-scraped monthly; each rate we keep carries the originating source_url, so any number can be traced back to the utility that published it. Electricity tariffs no longer come from that repository: it was caught giving a Saskatchewan rate (9.28¢/kWh, dated 2025-01-01) about 67% below SaskPower's own published schedule (15.476¢/kWh, effective 2026-02-01) despite being flagged "high confidence," and a forced re-download reproduced the same stale figure. Electricity is now sourced from offgridsolarsystem.ca's rate-aggregation page (dated 2026-07-01) instead — a third-party blog, not a utility-primary source, chosen because it was independently verifiable (it matched SaskPower's own PDF exactly) and gives full national coverage in one place. Only the Saskatchewan figure has actually been cross-checked against a utility source; the rest of the country is carried as-is and flagged, not confirmed — see section H below for the full account. Heating oil comes from StatCan table 18-10-0001 (monthly average retail price of household heating fuel, ¢/L by city), and heating oil and propane also come from NRCan's Prices by City exports (Furnace Oil and Auto Propane) — that page has no machine-readable endpoint, so those two are a manual re-download step rather than an automated fetch.
Reduction rules, applied by rates_etl.py (per-city detail for ON/QC/AB) and utility_rates_reference.py (one blended number per province, all provinces): residential tariffs only; the latest effective_date per (utility, tariff) wins; carbon components are excluded because the federal consumer fuel charge went to zero on 2025-04-01; $/GJ converts to $/m³ at 0.03798 GJ/m³ and $/day fixed charges to monthly at ×365/12; a utility offering several residential plans contributes one, time-of-use blended to a single ¢/kWh on the OEB-typical 63/18/19 off/mid/on split. Alberta is the weak spot: it is deregulated, so energy and wires are separate bills that must be summed rather than averaged, and the upstream export omits the electricity transmission volumetric charge and the default gas commodity charge outright — screening-grade constants are substituted for both, flagged low confidence, because omitting them would bias AB electricity ~15% low and make AB gas look nearly free. Propane, oil and wood rates are single-province averages throughout and are lower confidence than the electricity and gas tariff figures; the wood rate is one flat national screening ¢/kWh, since no per-species price breakdown exists.
Window-code decoding.WINDOWCODE is the 6-digit HOT2000 window characterization code; each digit position indexes a lookup table — glazing, coating/tint, gas fill, spacer, window type, frame material. The digit tables are used both to render a readable description and to compare pre vs post codes attribute-by-attribute for the "most common window changes" card. User-defined codes (digits outside the standard tables) are shown raw and excluded from the attribute comparison. The 6 tables, from NRCan's Support.xlsx reference workbook (Python/build_window_lookup.py):
1 — Glazing
1 Single (SG)
2 Double/double with 1 coat
3 Triple/triple with 1 coat
4 TG with 2 coatings
5 Double Acrylic
6 DG + 1 Heat Mirror 66
7 DG + 1 Heat Mirror 88
8 DG + 12Heat Mirror 88
2 — Coating/tint
0 Clear
1 Low-E .04 (soft)
2 Low-E .10 (soft)
3 Low-E .20 (hard1)
4 Low-E .35 (hard2)
5 Tint
6 Tint + Low-E .04
7 Tint + Low-E .10
8 Tint + Low-E .20
9 Tint + Low-E .35
A Reflective
B Reflective + tint
3 — Fill
0 13 mm air
1 9 mm air
2 6 mm air
3 13 mm Argon
4 9 mm Argon
5 6 mm Argon
6 9 mm Krypton
4 — Spacer
0 Metal
1 Fused Glass
2 Insulating
5 — Window type
0 Picture
1 Hinged
2 Slider with sash
3 Semi-sash slider
4 Patio door
5 Skylight
6 — Frame
0 Aluminum
1 Aluminum Thermal Break
2 Wood
3 Aluminum Clad Wood
4 Vinyl
5 Reinforced Vinyl
Map boundaries. FSA polygons come from Statistics Canada's 2021 cartographic boundary file (lfsa000b21a_e), inverse-projected from the Statistics Canada Lambert conformal conic to WGS84 geographic coordinates and simplified with an area-scaled tolerance (small urban FSAs keep near-full detail; very large rural FSAs are simplified aggressively) into one GeoJSON per province.
Map colour scale. Shapes are filled on a diverging scale centred on 0% median saving (green = saved energy, red = used more), or a sequential navy scale by audited-home count when no FSA in view has a saving figure. Both use a gamma-corrected mix (t^0.55 rather than a straight linear blend from the pale base colour) so low-magnitude areas — most of a typical province's range — separate visually instead of bunching near-white; the legend bar is sampled from the same function so it matches the fill exactly. Each shape additionally prints its own median saving % at its bounding-box centre, sized off that shape's own footprint (small FSAs below a legibility floor are left unlabelled rather than showing an unreadable smudge).
G · Assumptions & known limitations
Fuel energy contents are published Government of Canada conversion factors (table in section B, sources cited per fuel), applied as single constants — not utility- or year-specific heating values (real delivered natural gas varies by a few percent). They reconcile with HOT2000's own totals to within ~1% (see the validation note in section B); the largest remaining assumption is the 14.0 GJ/t wood fallback on records that predate EGHFCONWOODGJ. Since the headline total (EGHFCONTOTAL) is converted from MJ exactly, none of this affects the savings figures.
The ±10% measure thresholds are heuristics, chosen to separate real work from model-to-model noise, not derived from a formal sensitivity analysis. Negative energy savings occur in 2.8% of matched pairs; about 56% of those have no measure flagged at all, which could be inter-audit modelling variance rather than retrofits that backfired — but this has not been confirmed (see the open questions at the end of this section).
All energy values are HOT2000 modelled estimates under standard operating conditions, not metered consumption. How GHG is computed depends on which of the four bases in section I is selected, and they differ in exactly this respect. As reported and ERS-aligned, at year of audit (the default) use each audit's own year's factors, so a pre and post taken years apart embed different electricity factors and are not re-normalized to a common grid-intensity year. The two Current (2026) bases do the opposite: they apply one flat 2026 factor to every audit year, which makes retrofits from different years comparable but no longer reflects the grid the home actually ran on. Neither treatment is more correct than the other — the active basis is shown beside the chart, and it travels in share links and exports.
The sample is self-selected: requiring both a D and an E evaluation selects heavily for incentive-program participants who completed their planned work and booked the follow-up. That mechanism points upward: these homes did the work and came back to have it verified, which the average renovation attempt does not. It is a reasoned expectation rather than a measured bias, and it is not the only selection at work — incentive programs also steer participants toward a particular, often cheaper, measure mix. Treat these savings as unrepresentative of Canadian homes generally, most plausibly on the high side, rather than as a quantified upper bound.
Geography is FSA-only (the public dataset carries just the first three postal characters in CLIENTPCODE), and charts clip display outliers for readability (EUI ≤ 500 kWh/m², GHG ≤ 30 tCO₂e, design heat loss ≤ 150 kW, floor area ≤ 700 m², year built 1850–2030) — clipped homes remain in all medians and counts. The Canada-wide view offers only "All types" because house-type labels are not a consistent taxonomy across provinces. The source contains no retrofit cost information and no household utility bills. Dollar values on the Energy bill card are estimated operating costs derived from modelled energy use and current provincial energy prices. A separate, proof-of-concept retrofit cost and payback estimate (section H above) is priced against an external US cost database, not derived from the ERS source data — partial coverage, not a substitute for a real quote.
H · Retrofit cost estimate — proof of concept
What it is. A separate model, run outside the ERS pipeline entirely — the source data has no cost fields — that prices each home's recorded measures against PNNL/DOE's National Residential Efficiency Measures Database (REMDB), vintage 2024.12.23 (2023 USD; no CAD conversion or Canadian-labour adjustment applied anywhere). Every figure is an incremental cost — the extra spend over the business-as-usual (BAU) choice a homeowner would likely have made anyway, not a full invoice — computed at REMDB's Low/Mid/High (10th/50th/90th percentile) quantile-regression coefficients: material_price = coef1×metric1 + coef2×metric2 + intercept, then either × installation_multiplier or + installation_adder (REMDB's own rule — each component/class row uses exactly one of the two), with metrics clamped to REMDB's stated bounds before use.
Per measure. Roof/wall/foundation insulation and air sealing have no BAU equivalent (nobody re-insulates as routine upkeep), so incremental cost is full REMDB cost, priced against geometric area proxies derived from FOOTPRINT/BASEMENTFLOORAR under a rectangle-footprint assumption (2:3 aspect ratio, a stated judgement call, not a sourced Canadian housing-stock distribution). Windows are priced as efficient(post pane count) − standard(pre pane count), per window, from REMDB's raw Windows Data sheet (not its collapsed machine-readable row, which cannot see glazing class), with frame material (Vinyl/Metal) read from WINDOWCODE's frame digit where decodable. Solar PV and HRV/ERV are likewise full-cost, not incremental: PV is priced on the capacity the retrofit added (Post_SolarPV − Pre_SolarPV, clamped to 0.1–20 kW to drop unit artifacts) against REMDB's Solar PV row, which is a $/watt regression rather than a flat system price; an HRV/ERV is flagged when CENVENTSYSTYPE goes from neither to one of them, and priced at REMDB's Mechanical Ventilation / ERV-HRV row using fixed midpoint metrics (0.70 SRE, 150 CFM), because neither recovery efficiency nor airflow survives ers_web_pipeline.py — every such row carries hrv_source = flat_placeholder_metrics, so it is a class-average placeholder, not a per-home fit.
An air-source heat pump is netted against the home's own pre-audit heating system plus the air conditioner it replaces: incremental = ASHP_cost − BAU_heating_cost − BAU_cooling_credit, and can be negative. BAU heating is like-for-like where possible — Pre_HeatType/Pre_HeatFuel mapped to the closest REMDB row (gas furnace, gas/oil boiler, electric baseboard, all REMDB-fitted; plus two rows REMDB itself never fit but real raw line-item data exists for — Oil Furnace and Electric Boiler — derived as the 10th/50th/90th percentile installed-$/BTU or material-$/BTU across 6 and 10 raw workbook rows respectively) — falling back to a generic gas furnace only when REMDB has no row at all for that fuel/type (propane, wood, electric furnace). The BAU cooling credit reads ACCENTESTAR/ACWINDNUM/cooling-energy fields to credit central, room, or no pre-existing A/C. ASHP ducted-vs-ductless classification (HPEquipType/NUMBEROFHEADS, base-case fields — not the UGR*-prefixed "proposed upgrade" variants) falls back, when unrecorded (the pre-2025 majority of records), to each province's own most-common reported class rather than one hardcoded constant — Atlantic Canada (PE/NB/NF/NS) independently falls back to ductless, every other province/territory to centrally-ducted, consistent with each region's forced-air-furnace housing stock.
Payback = incremental cost (mid) ÷ this home's own annual $ saved, using the same blended provincial rates as the Energy bill card above (utility_rates_reference.json) — computed directly in the cost pipeline, not from the bill card's own rendering path. Electricity rates were re-sourced this round: the prior source (canada-utility-rates) was caught giving a Saskatchewan rate stale by over a year and ~67% understated, despite being marked "high confidence" internally — verified directly against SaskPower's own published rate PDF. Electricity now comes from a third-party rate-aggregation page, cross-checked against SaskPower and matching exactly there, but not independently re-verified for any other province — flagged, not settled. Natural gas stayed on the original source after the same audit found every province's gas rate frozen at an identical 2024-10-01 effective date (~21 months stale), a more systemic gap with no verified replacement lined up yet. Heating oil and propane rates (needed for payback on Atlantic Canada's oil-heavy stock) use national screening constants pending the same NRCan "Prices by City" manual-download step that section F's price notes describe — cross-checked against two independent current sources (~$2.00 CAD/L oil, ~$1.10 CAD/L propane) but not per-province. Every payback figure carries a machine-readable flag for which of these applied.
Pipeline & delivery.Python/retrofit_cost_extract_fields.py pulls the ERS fields ers_web_pipeline.py's BASE_MAPPING doesn't carry (footprint, window/door counts, ASHP config, pre-existing cooling) straight from the raw yearly CSVs. Python/retrofit_cost_estimate.py does the pricing, run per province, all 10 provinces plus Northwest Territories and Nunavut (Yukon has no ERS records at all). Its input is 1,420,044 records, not the full 1,451,433 matched pairs: apartments, duplexes and triplexes are excluded outright (31,389 records, 2.2%) because REMDB's regressions are fitted on single-dwelling geometry and the footprint proxies below are meaningless for a unit inside a larger building. Of those 1,420,044, 1,237,117 (87%) carry at least one priced measure. Python/build_retrofit_costs_json.py splits the output into a companion tree, retrofit_costs_json/<PROV>/<FSA>.json, mirroring fsa_json's own per-FSA layout and array-of-arrays compression, with dictionary-coded categorical columns (a shared _dictionary.json) instead of repeating string labels per home. Deliberately a separate tree from fsa_json, joined client-side by HOUSEID — cost methodology has changed independently of the underlying ERS row data repeatedly during this feature's development, and keeping them separate means a cost-only fix stays a small script re-run instead of forcing a full fsa_json rebuild every time.
Coverage is partial and this is a proof of concept, not a production estimate. Eight measures are priced (roof, wall and foundation insulation, air sealing, windows, ASHP, solar PV, HRV/ERV); furnace/boiler replacement cost, floor insulation, and doors are not priced at all (no capacity/area field survives the pipeline, or no change-signal field exists). Apartments, duplexes and triplexes are excluded from the whole cost model (31,389 of the 1,451,433 matched pairs), since REMDB's regressions and the footprint proxies above both assume single-dwelling geometry. Insulation material and wall construction type are fixed assumptions (Batt, Wood/Steel Stud) — ERS records neither; the HRV/ERV figure uses fixed placeholder metrics rather than per-home ones. The rectangle-footprint aspect ratio (2:3) is an assumed judgement call, not a sourced distribution. Full methodology, every formula and assumption: docs/RETROFIT_COSTS.md.
I · GHG scenarios
Why this exists. The audit's own ERSGHG field is only populated for 50.5% of matched pairs nationally (Quebec ~78%, PEI ~84%, down to Ontario ~43% and Saskatchewan ~9%). This tool also calculates GHG for every matched home from its own recorded fuel consumption (~100% complete), giving 4 ways to view the same number, switched by the GHG basis dropdown above the GHG chart: As reported (raw ERSGHG, ~50.5% coverage only) · Current (2026) official (ECCC's published factors, applied flat to every audit year, so retrofits from different years compare on equal footing) · Current (2026) official, ERS-aligned (same, but Alberta and Newfoundland & Labrador substitute an ERS-calibrated factor) · ERS-aligned, at year of audit (every province's own audit-year factor, ERS-calibrated — the default).
On the naming (changed 2026-08-20). These two bases were labelled "corrected" until 2026-08-20. That wording implied ECCC's published factors are wrong, which is not something this data can establish: the ERS-derived figures are back-calculated from what HOT2000 reported, so a gap between them and ECCC may equally reflect a different accounting boundary or vintage inside HOT2000. They are relabelled ERS-aligned — a sensitivity showing what the ERS data implies — and the claim that the audit-year basis is the "historically accurate" one has been withdrawn, pending the HOT2000 question tracked in section J.
"ERS-calibrated" means measured directly from the ERS data itself — each fuel's own reported consumption divided into its own reported GHG, by province and year (ers_ghg_factors.py). The tables below compare that figure against ECCC's currently-published one.
Province
ERS 2016
ERS 2020
ERS 2023
ERS 2026
ECCC current (2026)
ERS-aligned
Alberta
15.8
848.2
765.9
584.7
438.0
584.7
British Columbia
9.8
10.5
12.0
16.1
18.0
18.0
Manitoba
0.0
1.7
1.2
0.8
2.5
2.5
N.W.T.
0.9
240.4
207.7
—
420.0
420.0
New Brunswick
322.3
294.4
296.1
306.0
234.0
234.0
Nfld. & Labrador
—
—
33.1
23.1
17.0
23.1
Nova Scotia
75.5
739.1
731.4
718.0
581.0
581.0
Nunavut
—
—
—
—
800.0
800.0
Ontario
0.0
43.0
31.9
33.0
59.0
59.0
P.E.I.
—
292.7
292.7
306.0
234.0
234.0
Quebec
0.1
1.3
1.0
1.5
1.9
1.9
Saskatchewan
98.9
758.7
734.3
692.4
631.0
631.0
Yukon
0.4
51.8
64.2
91.8
74.0
74.0
Electricity, g CO₂e/kWh. "—" = fewer than 30 audits that province/year (suppressed, not zero). Alberta and Newfoundland & Labrador (bold) are where the gap between the ERS figure and ECCC's current one is large and persistent enough — 18–29% and 27–49% low respectively, every year 2023–2026 — that the two ERS-aligned scenarios substitute the ERS-calibrated figure in place of the official one everywhere, not just for older audits.
Fuel
ERS 2016
ERS 2020
ERS 2023
ERS 2026
ECCC current
ERS-aligned (2026)
Natural gas
5.3
183.6
186.1
188.1
185.4
188.1
Heating oil
26.5
255.0
255.6
255.6
255.4
255.6
Propane
7.3
218.9
218.8
218.9
213.6
218.9
Combustion fuels, g CO₂e/kWh, national (not province-split). 2016 is the clearest case: Ontario's own ERSNGASGHG ran near-zero for 2006–2016 despite real gas use, dragging the national ERS-implied factor down with it that year. From 2020 on, combustion tracks ECCC's current value closely — so unlike electricity, no province gets a permanent combustion correction; only the year-varying "ERS-aligned, at year of audit" scenario needs the ERS figure, and only for older audits.
In short: the ERS data implies emission factors that differ from ECCC's currently-published values, sometimes substantially, for stretches of years. Where that gap is large and stays large (Alberta and Newfoundland & Labrador electricity), the site permanently substitutes the ERS-calibrated figure. Everywhere else the gap is mainly a historical artifact of older audit years, so only the year-varying "ERS-aligned, at year of audit" scenario needs it — the flat "current" scenarios intentionally price every retrofit at today's rate regardless of when it happened. Wood is always 0: ECCC has no residential wood-combustion factor, and the ERS-implied ratio (~358 kg CO₂e/kg) isn't physically plausible for one. Note what that zero does and does not say — it applies the biogenic-neutral convention to wood's combustion CO₂ (the carbon was recently atmospheric), but it also drops wood's non-CO₂ combustion products, CH₄ and N₂O, which are not biogenic-neutral and are material for cordwood appliances. Wood-heated homes therefore carry a GHG figure that is low by an unquantified amount here, not a true zero. Full derivation, factor tables and citations: ghg_factors.py, compute_ghg_scenarios.py, ers_ghg_factors.py; the open question of what HOT2000 uses internally is tracked in docs/ENERGUIDE_QUESTIONS.md §5.4.
J · Open questions — to be investigated with the EnerGuide team
Open items we would like to confirm with NRCan's EnerGuide team.
Homes with more than one D or E audit. When a HOUSEID has several initial and/or several follow-up audits (a re-audit, or a home that went through an incentive program more than once), these 149,145 homes — about 9% of those holding both audit types — used to be dropped entirely rather than guessing which evaluations pair. They are now paired earliest-D to latest-E, which yields a correctly-ordered pair for 99.6% of them and raised the matched sample from 1,369,305 to 1,451,433 homes.
What we would like the EnerGuide team to confirm: is earliest-D-to-latest-E the right reduction? About 55% of these homes have two Ds and two Es, and for them the span may cover two separate retrofit projects reported as one before/after. We chose it because it is conservative in the direction that matters — it captures the home's whole change rather than an arbitrary half — and because headline results barely moved when the homes were added (median saving stayed at 20%), suggesting they behave like the homes already in the sample. But if the intended reading is one row per project, the correct treatment would instead be to pair each D with the next E that follows it, producing multiple rows per home. Which does NRCan consider faithful to how these evaluations are recorded?
Same-month audit dates (~84,000 nationally, ~5% of D&E homes) — still excluded.ENTRYDATE in the public file is recorded at month precision (values are the first of a month), so a D and E carried out in the same month tie, and the "follow-up dated after initial" rule drops them. We have confirmed these are not data faults: none have unparseable dates, and 99.4% are exact same-day ties rather than reversals.
What we would like the EnerGuide team to confirm: since EVALTYPE already establishes which audit is the initial and which is the follow-up, is the date test only a guard against genuine reversals — in which case admitting same-month pairs (E ≥ D instead of E > D) would be correct and would recover about 84,000 homes? Or does a same-month D and E indicate something else, such as a single visit recorded twice or an administrative re-issue, that should stay excluded? (Either way the ~0.6% where the E genuinely predates the D should remain excluded.)
Negative energy savings with no measures (2.8% of matched pairs). Some homes use more energy after the retrofit than before, and about 56% of those have no retrofit measure flagged at all. The working assumption is inter-audit modelling variance, but that has not been confirmed — what else could explain it? (Both figures fell when the pairing rule above changed — previously ~4% and ~75% — which is itself mild evidence for the modelling-variance reading, since the homes added were ones with longer, better-documented audit histories.)
Conversion factors. The kWh conversions in section B use published Government of Canada heating values. Are there factors better aligned with HOT2000’s own fuel library and the ERS, which we could adopt instead?
Heating-only propane exceeds whole-house propane by a constant 0.27%. Space-heating consumption (EGHHEATFCONSP) should by definition be a subset of the home's total propane use, yet it exceeds it in about 80% of propane-heated homes. The ratio is not scattered — it sits at 1.0027 across the interquartile range, which is the signature of a units constant rather than a data fault. It matches: the heating field is HOT2000's own MJ output, while whole-house propane is a volumetric column converted here at 25.53 MJ/L (CER, section B), and 25.60 ÷ 25.53 = 1.0027. In other words HOT2000 appears to use ~25.60 MJ/L internally and our published figure is 0.27% low. This is cosmetic at chart scale but it is the cleanest available evidence of a HOT2000 fuel-library value, so it is worth confirming and adopting.
What exactly each envelope component in "Where the heat escapes" covers. The six EGHHL* fields are taken at face value as Windows & doors (EGHHLWINDOOR), Walls (EGHHLWALLS), Foundation (EGHHLFOUND), Roof (EGHHLCEILING), Exposed floor (EGHHLEXPOSEDFLR) and Air leakage (EGHHLAIR), but HOT2000's own component boundaries are not publicly documented in detail.
What we would like the EnerGuide team to confirm: does EGHHLAIR include mechanical ventilation heat loss (e.g. an HRV's unrecovered share) or only envelope infiltration? Does EGHHLFOUND cover the whole basement/crawlspace envelope (walls and slab) or just below-grade walls, with the slab counted elsewhere? Does EGHHLCEILING include cathedral/flat-roof assemblies, or only attic ceilings? Confirming the boundaries would let us describe each bar precisely instead of by field name alone.
What emission factors does HOT2000 use to compute ERSGHG, and at what geographic granularity? We could not find this documented in any public NRCan source (see section I above for why this matters and what we checked).
Both pairing items are surfaced in the "From every audit to your selection" funnel above: the Not paired flow is where the remaining unpaired homes drop out. Since the first item was resolved, that flow has shrunk — 89.1% of homes holding both an initial and a follow-up audit now reach the matched sample, up from 84.0%.
Data availability — every ERS column vs. what this page uses
The public EnerGuide/ERS extract carries 433 columns per audit record. This page reads 48 of them. The table below is every one of those 48, grouped in pipeline order, with its % filled (measured across all 4,542,544 raw audit records — see caveat below), the unit conversion applied if any, and exactly what it's used for. The full 433-column reference, with the same fill-rate methodology, is in ERS_DATA_DICTIONARY.md.
ERS source column
Used as
% filled
Conversion
Used for
Identity & pairing
HOUSEID
HOUSEID
100.0%
—
Pairing key: matches one home's before (D) and after (E) audits
CLIENTPCODE
FSA
100.0%
—
FSA (postal first 3 chars) -- area selector, map
PROVINCE
PT
100.0%
—
Province selector
YEARBUILT
YearBuilt
100.0%
—
Year-built distribution
FLOORAREA
FloorArea
100.0%
—
Floor-area distribution; same-home match gate (≤10% change pre/post)
TYPEOFHOUSE
BldgType
100.0%
—
Building-type filter/breakdown; same-home match gate (must match pre/post)
STOREYS
Storeys
100.0%
—
Storeys distribution; same-home match gate (must match pre/post)
FNDTYPE
FoundationType
90.3%
—
Foundation type (displayed)
NUMDWELLINGUNITS
(filter/flag only, not a displayed column)
48.2%
—
Same-home match gate (must match pre/post) -- not shown in table
EVALTYPE
(filter/flag only, not a displayed column)
100.0%
—
Splits each row into "before" (D) vs "after" (E) audit
ENTRYDATE
Pre_/Post_Date
100.0%
—
Audit date; pairing order gate (E must postdate D); audit-year extraction
Energy totals, per fuel (whole-house)
EGHFCONTOTAL
Pre_/Post_TotalEnergy
100.0%
× 0.27778 (MJ → kWh)
% energy saved; retrofit depth (shallow/medium/deep) thresholds
% filled is measured across all raw D/E audit records, not the smaller before/after-matched sample the charts above use, so it reads a little higher than what a single matched retrofit record has filled in. EVALTYPE, AIRCONDTYPE and NUMDWELLINGUNITS are used only to split before/after records or gate the same-home pairing match (section A above) — they never appear as a displayed value, so they carry no conversion factor and no "used as" name.
Private feedback
Was this clear?
Your response is private and helps improve this page.