Your bills already contain a measurement of your building. This gets it out of them — no utility login, no scraping, no API.
Every shot uses the included synthetic demo house — 14 Larkspur Lane, Fairhaven, fictional, IECC zone 4A. No real bills, addresses or account numbers appear in any image. Captured from the packaged build.
What it looks like
Heat loss, measured — not estimated. 35 billing cycles of gas against heating degree days give a UA of 567–673 BTU/h/°F at r = 0.989. The figure is a range, not a number, because furnace efficiency is the one link in the chain nobody measured — and the panel says so on the page rather than in the small print.The same measurement from the ordinary end of the product. One point per billing cycle against heating demand; the dashed line is the building envelope.Every stored statement, spread across the days it actually covers — so a 50-day cycle is not one month, and a missing month is not a cheap one.The fixed floor. Per service, split into the part that responds to using less and the part that does not: $89.98 a cycle on electric, $16.73 on gas, $48.23 on water, before a single unit is consumed.Bring your own bills. A CSV template with 95 recognised header spellings and a Green Button (NAESB/ESPI) importer, plus the house facts that turn a fitted slope into a statement about a building.
What I ran before shipping it
59 tests pass, run out of the exact zip you would download rather than off my working copy.
I refitted the envelope by hand to check the app's arithmetic: a separate regression over the same 35 billing cycles gives slope 0.16502 and intercept 1.61, which is what it prints.
Zero JavaScript. No <script>, no onclick, no listener in any template; no external URL; and no requests, urllib or socket import anywhere in the package.
It had a Windows timezone bug, now fixed. Windows ships no IANA database, so every zone quietly fell back to UTC and filed interval readings under the wrong local hour.
Not included
The headline anomaly detectors cannot be demonstrated. The seeded demo house is clean, so the findings panel prints “Nothing anomalous”, and the dead-meter and late-fee detectors have no test covering them. You would be buying those on a reading of the code, not on a demonstration.
No utility login, no API, no scraping, no PDF bill parsing. You import CSV or Green Button files you download yourself.
UA is a range because furnace efficiency is unmeasured, and the field EER is a lower bound — latent load is invisible to cooling degree days.
It refuses to fit below MIN_CYCLES = 6. No sensors, no thermostat, no solar, no equipment-sizing verdict, no multi-house, no mobile app, no support.
thermal.py is 625 lines with 13 tests and is not wired to any page — the web layer computes its own fits.
Not an energy audit, and it performs no safety function.
Get it
Home Energy Analyzer — $9
Complete Flask source, 7,480 lines of application Python. SQLite or Postgres, a synthetic demo house so it is populated on first run, and no credentials anywhere.