How the Home Stress Index is calculated
The Home Stress Index is a 0–100 measure of how hard recent weather and drought have been on houses in a given Texas county or metro. It is built from five signals, each computed by published arithmetic from public records, and combined using the fixed weights below. The Home Stress Index measures conditions in an area, not damage to a home. It is not a prediction, an inspection, or a probability of loss.
What the score means at a glance
- Range: 0–100, where higher means conditions have been harder on houses.
- Signals: five, weighted — Roof & Storm, Foundation & Soil, HVAC, Water & Irrigation, Trees & Yard.
- Bands: Normal (0+), Moderate (25+), Elevated (50+), High (75+).
- Granularity: county for storms and drought, metro for forecast and air quality. Never address-level.
- Determinism: no model, no randomness — identical records always produce an identical score.
What are the five signals, and how are they weighted?
| Signal | Weight | What it measures | Sources |
|---|---|---|---|
| Roof & Storm | 30% | Hail, severe wind and tornado events recorded by NOAA in the counties covering the area, each weighted by how recently it happened and how large it was. Flood events are recorded by the same feed but excluded, because flooding is not roof stress. | NOAA Storm Events Database (county-level, published on a multi-month lag) |
| Foundation & Soil | 25% | Drought persistence over the trailing 52 weeks. Central Texas clay shrinks as it dries and swells as it rewets, and it is the length of a dry spell rather than any single week that moves a slab. We hold no soil-composition or per-property data, so this describes moisture conditions around houses in the county, not the state of a foundation. | U.S. Drought Monitor (weekly, county-level) |
| HVAC | 20% | How much of the recent forecast ran at or above 100°F, with extra weight for days at or above 105°F, plus air quality as a proxy for filter load. It is a measure of demand on a cooling system, not of that system's condition. | National Weather Service forecast API; EPA AirNow (both metro-level) |
| Water & Irrigation | 15% | The current week's U.S. Drought Monitor category for the county, scaled by how much of the county is actually at that level. It reads the same feed as Foundation & Soil but only the latest week, so the two are related readings rather than independent evidence. | U.S. Drought Monitor (weekly, county-level) |
| Trees & Yard | 10% | Drought over the trailing 26 weeks blended with recent wind and tornado activity. Drought weakens limbs; wind is what brings the weakened ones down. | U.S. Drought Monitor; NOAA Storm Events Database |
The composite is the weighted mean of the five sub-scores. When a signal cannot be computed for an area — because a feed does not cover it — the remaining weights are re-normalised and the area's reading records which signals were missing. A missing signal is never scored as zero, because "we don't know" and "conditions are calm" are not the same statement.
How does a raw record become a score?
Three layers, kept separate so each can be checked on its own:
- Layer A — observation. The published record as its source stated it, with the source name, the period it covers and when we last confirmed the feed.
- Layer B — sub-score. A published rule converts the observation to 0–100. Every term that contributed is retained, so the arithmetic can be re-added by hand.
- Layer C — explanation. Driver codes and the plain-language sentences generated from them. The wording is produced from templates, so what the dashboard says is fixed by this methodology rather than written per page.
How quickly does a past storm stop counting?
Each storm event is weighted by 0.5 ^ (days since event / 180), then dropped once that weight falls below 5%. Severity before decay: hail at 1.75"+ = 34 pts, 1"+ = 20 pts, 0"+ = 9 pts; wind at 70+ mph = 22 pts, 58+ mph = 13 pts, 0+ mph = 7 pts; a tornado in the county = 18 pts. Events recorded without a measured magnitude — which is every flood and tornado row, and some wind rows — are counted at the lowest severity band rather than assumed severe.
How is drought severity converted to a score?
The U.S. Drought Monitor publishes, for each county each week, the share of the county's area at each drought category. We score the worst category present (D0 = 20, D1 = 40, D2 = 62, D3 = 82, D4 = 100) and then scale it by the share of the county actually at that level. A county that is 10% in severe drought is not a county in severe drought, and scoring the label alone would overstate it by an order of magnitude.
What is the current reading for each area?
Austin — 45/100 (Moderate)
LIVE| Signal | Score | Band | Records through |
|---|---|---|---|
| Roof & Storm | 67 | Elevated | |
| Foundation & Soil | 41 | Moderate | |
| HVAC | 39 | Moderate | |
| Water & Irrigation | 22 | Normal | |
| Trees & Yard | 38 | Moderate |
All time-based maths for this area is measured from , the newest record behind it.
San Antonio — 38/100 (Moderate)
LIVE| Signal | Score | Band | Records through |
|---|---|---|---|
| Roof & Storm | 48 | Moderate | |
| Foundation & Soil | 43 | Moderate | |
| HVAC | — | not published | |
| Water & Irrigation | 13 | Normal | |
| Trees & Yard | 33 | Moderate |
All time-based maths for this area is measured from , the newest record behind it.
Which ZIP codes does this cover, and how exactly?
225 ZIP codes across the Austin and San Antonio metros. Coverage comes from the U.S. Census Bureau’s 2020 ZCTA-to-County Relationship File, filtered to the counties of the two metropolitan statistical areas — so every ZIP we resolve is backed by a published federal crosswalk rather than by a guess about ZIP-prefix ranges. A ZIP outside that list returns “not covered yet” rather than being matched to the nearest metro.
| Metro | ZIPs | Counties (ZIPs each) | Spanning >1 county | Drought ingested |
|---|---|---|---|---|
| Austin | 96 | Travis (55), Williamson (15), Hays (12), Bastrop (10), Caldwell (4) | 29 | 3 counties |
| San Antonio | 129 | Bexar (78), Atascosa (12), Medina (9), Guadalupe (8), Comal (7), Bandera (6), Kendall (5), Wilson (4) | 27 | 3 counties |
Does a ZIP code get its own county's reading?
Not always, and the dashboard says which it is. The index is published per metro, computed for that metro’s representative county — Travis for Austin, Bexar for San Antonio. A ZIP in, say, Bastrop or Medina County is covered, but the readings it sees are the metro’s, not its own county’s. Of the ZIPs we cover, 82 of 96 in Austin and 93 of 129 in San Antonio sit in a county we already ingest drought data for, which is what a future county-level reading would be built from.
56 of the covered ZIPs straddle more than one county inside their metro, and 6 straddle the Austin–San Antonio boundary itself and appear in the federal file under both metros. For those, the file carries no land-area or population share to arbitrate with, so we assign each to one metro and label it as a boundary ZIP rather than implying it sits cleanly on one side.
Why is there no ZIP-versus-metro comparison?
Because none of our inputs vary within a metro. Storm and drought records are published by county; forecast and air-quality readings are metro-wide. Every ZIP in a metro therefore resolves to an identical reading, and any percentile we showed would be a modelled difference presented as a measured one. The comparison stays marked as coming soon until an input that genuinely varies below the county level is in place.
What public data is deliberately left out?
| Source | Why it is not in the score |
|---|---|
| usda-soil | One sample at the metro centroid, currently 'Urban land, 0 to 6 percent slopes', which says nothing about shrink-swell potential. A single point cannot characterise a county's soils, and using it would imply a per-property soil read we do not have. |
| census-acs | Median home age is a genuine foundation-risk factor, but it is a metro median and we only hold it for Austin. Including it would shift one metro by a constant and leave the other without it, making the two composites non-comparable. |
| eia-electricity | Statewide residential price. It cannot vary between Austin and San Antonio, so it would move every area's HVAC score by the same amount — adding cost anxiety to the number without adding any information about local conditions. |
| ercot | Still a sample feed. Sample data never reaches an indexed page or a score. |
| tx-forest-service | Still a sample feed. Fire danger would be a real Trees & Yard input once the fetcher is implemented. |
Home Stress Index — questions and answers
Is the Home Stress Index a prediction of damage to my home?
No. The Home Stress Index measures conditions in an area, not damage to a home. It is not a prediction, an inspection, or a probability of loss. It describes what the weather and drought have been doing across a county, using published public records. Two identical houses on the same street receive the same score, because every input is measured at county or metro level.
How precise is the Home Stress Index for a specific ZIP code?
It is not ZIP-specific. Storm and drought records are published by county, and forecast and air-quality readings by metro, so every ZIP in a metro currently resolves to the same reading. We do not publish a ZIP-versus-metro comparison because no input we hold varies within a metro; producing one would mean modelling a difference rather than measuring it.
How is the Home Stress Index calculated?
In three layers. A raw public observation is read from its source, converted by a published rule into a 0–100 sub-score for one of five signals, and the five sub-scores are combined using fixed weights. Every step is deterministic arithmetic: the same records always produce the same score, and no language model is involved at any point.
How far back does a storm keep counting toward the score?
Storm events decay exponentially with a 180-day half-life, so an event from six months ago counts half as much as one from this week and a year-old event still carries about a quarter. Unrepaired storm damage does not heal, so the decay is deliberately slower than recency alone would suggest.
How current is the Home Stress Index?
Each signal reports two dates: how far its underlying records run, and when we last confirmed the feed. A signal is never presented as more current than its stalest input, and all time-based maths is measured from the newest record we hold rather than from today's date — so a feed that stops updating produces a visibly stale score instead of a quietly decaying one.
See our sitewide methodology for how every feed is sourced, updated and labelled, or the data catalog for the underlying records.