1. Cycle monitor
Housing turnover is the classic replacement trigger; lock-in + affordability are the current brake. LII/CARR/WSO cycle context: shipments ~25% below the 2022 peak, destock complete, sell-through still negative (2Q26).
2. Replacement-cycle model
Homes completed in year t need their first full HVAC changeout ~N(16yr, 3.5yr) later. The 2006-10 construction collapse thins the 2022-2027 first-replacement cohort — the structural headwind beneath the cyclical destock. Shape model (first-cycle only), not absolute industry units. Overlay: JEF sees replacement pool ~5.5M (2027) -> ~5.9M (2028) -> 6.5-7M (2029/30) incl. later cycles; COVID pulled forward ~4-5M units 2021-25.
3. New construction & attach rates
New-construction attach of central AC is ~saturated (~95% of new SF completions); the live variables are heat-pump mix and LII's deliberate RNC share walk-away (RNC revenue -30% in 2Q26).
4. Pricing & input costs
The 2020-26 supercycle: PPI +~50% since Jan 2020; installed cost ~2x. Watch capture-below-list (Wolfe 2Q26) and the fade of the A2L premium into 2027; copper/steel/aluminum tariffs are the cost-push.
5. Forced migration to A2L (R-410A → R-454B / R-32)
The defining regulatory event of the cycle: it drove the 2024 pre-build, the 2025 air pocket, and a permanently higher price floor. Rising legacy R-410A refrigerant cost is the slow-fuse that flips repair-vs-replace back to replace.
6. Repair vs. replace
Consumers deferring $15K+ changeouts with $3-5K repairs is the demand-destruction mechanism; a falling repair:replace ratio is an early recovery signal. (JEF Mar-26 survey: 'Repair Driving the Conversation'; quotes per job up to 2-3 from 1-2.)
7. Key markets (Sunbelt concentration)
FL/TX/AZ/CA/GA carry the cooling-replacement pool; hot-climate run-hours cut unit life to 10-12 yrs vs up to 20 in the north. WSO: 30-40% share in Sunbelt strongholds. Metro mechanical permits are the most direct public read on realized replacement volumes.
8. Company KPI ledger (documented markers)
Update quarterly from earnings; these anchor the public data to reported reality.
| Ticker | Metric | Period | Value | Note | Source |
|---|---|---|---|---|---|
| CARR | Resi destock | 2Q26 | Ended | resi sales +HSD, orders +40% — LII now the resi laggard | AlphaSense LII primer 07.29.26 |
| Industry | Shipments vs peak | 1H26 | ~-25% | back to 2018/19 levels; GFC-trough-like replacement | Wolfe survey 07.01.26 |
| Industry | OEM share shift | 2Q26 | LII losing | Daikin/Goodman + Rheem gaining on trade-down (distributor survey) | Wolfe survey 07.01.26 |
| Industry | Sell-in vs sell-through | Oct 25 | -50% vs -1% | AHRI sell-in vs HARDI sell-through — the destock signature | JEF 12.21.25 |
| LII | Resi (HCS) volumes | 1Q26 | -21% | one-step -10%, two-step -15% | LII 1Q26 call |
| LII | Commercial (BCS) | 2Q26 | +24% | organic +15% (vol +12%); margin 25.5%; light cml turning after 17-18 months down | LII 2Q26 call |
| LII | FY26 EPS guide | 2Q26 | $23.00-24.00 | cut from $23.50-25.00; HCS growth 4%->1% (core ~-3% ex-M&A); recovery pushed to 2027 | LII 2Q26 call / JEF |
| LII | Resi (HCS) volumes | 2Q26 | -12% | price/mix +3% vs +12% LY; RNC revenue -30% | LII 2Q26 call |
| LII | Resi (HCS) volumes | 4Q25 | -32% | peak destock quarter | LII 1Q26 call |
| WSO | Domestic ASP | 4Q25 | +11% | A2L ~15% realized premium | JEF 02.17.26 |
| WSO | Gross margin | FY25 | 28.0% | Record; +120bps despite volume collapse; ~200bps from Pricefx (structural) | WSO MIQs |
| WSO | Inventory | FY25 | -30% | $2.1B peak -> $1.4B; $500M reduction target met; record Q4 OCF $400M | WSO MIQs |
| WSO | Revenue growth | FY25 | -5% | $7.24B; units -17%, price/mix offset | WSO 8-K / MIQs |
| WSO | Unit volumes | FY25 | -17% | A2L transition + destock year | WSO MIQs / JEF |
| WSO | Sales | Jan/Feb 26 | -5% | incl. price; mgmt: don't extrapolate off-peak | 4Q25 call |
9. Recommendations — how to use this tracker
10. Data health (last runs)
| Run | Scraper | Status | Detail |
|---|---|---|---|
| 2026-07-29 15:01 | census_chars | ok | manual: [] |
| 2026-07-29 15:01 | census_chars | ok | hp_share_new_sf: 27 yrs |
| 2026-07-29 15:01 | census_chars | ok | ac_share_new_sf: 53 yrs |
| 2026-07-29 15:00 | gtrends | FAIL | US batch 1 retry exhausted |
| 2026-07-29 14:57 | cohort_model | ok | 36 yrs from completions 1968-2026 |
| 2026-07-29 14:57 | census_chars | ok | manual: [] |
| 2026-07-29 14:57 | census_chars | ok | ac_share_new_sf: 53 yrs |
| 2026-07-29 14:57 | census_chars | ok | downloaded 12: ['mfu_aircond_cust.xls', 'soldaircond_cust.xls', 'soldheatsystem_cust.xls', 'soldheatingfuel_cust.xls', 'mfb_aircond_cust.xls |
| 2026-07-29 14:57 | fred:PALUMUSDM | ok | 414 obs |
| 2026-07-29 14:57 | fred:PCOPPUSDM | ok | 414 obs |
| 2026-07-29 14:57 | fred:PCU333415333415 | ok | 583 obs |
| 2026-07-29 14:57 | fred:UMCSENT | ok | 673 obs |
| 2026-07-29 14:57 | fred:MORTGAGE30US | ok | 2887 obs |
| 2026-07-29 14:57 | fred:EXHOSLUSM495S | ok | 13 obs |
| 2026-07-29 14:57 | fred:COMPUTSA | ok | 702 obs |
| 2026-07-29 14:57 | fred:PERMIT | ok | 798 obs |
| 2026-07-29 14:57 | fred:HOUST1F | ok | 810 obs |
| 2026-07-29 14:57 | fred:HOUST | ok | 810 obs |
| 2026-07-29 14:55 | cohort_model | FAIL | COMPUTSA not loaded — run fred_macro first |
| 2026-07-29 14:55 | gtrends | ok | GA: 262 weeks x 2 |
| 2026-07-29 14:54 | gtrends | ok | CA: 262 weeks x 2 |
| 2026-07-29 14:54 | gtrends | ok | AZ: 262 weeks x 2 |
| 2026-07-29 14:54 | gtrends | ok | TX: 262 weeks x 2 |
| 2026-07-29 14:54 | gtrends | ok | FL: 262 weeks x 2 |
| 2026-07-29 14:53 | gtrends | ok | US batch 2: 262 weeks x 2 |
| 2026-07-29 14:53 | gtrends | FAIL | US batch 1: The request failed: Google returned a response with code 429 |
| 2026-07-29 14:52 | permits | FAIL | Los Angeles, CA: 403 Client Error: Forbidden for url: https://data.lacity.org/resource/yv23-pmwf.json?$select=date_trunc_ym(issue_date)%20AS |
| 2026-07-29 14:52 | permits | ok | Austin, TX: 103 months |
| 2026-07-29 14:52 | refrigerant | ok | manual: [] |
| 2026-07-29 14:52 | refrigerant | ok | R-454B cylinder: $120.0 from https://www.budgetheating.com/search.php?search_query=r454b |
| 2026-07-29 14:52 | refrigerant | skip | https://hvacdirect.com/catalogsearch/result/?q=r454b+refrigerant: could not convert string to float: '' |
| 2026-07-29 14:52 | refrigerant | ok | R-410A cylinder: $120.0 from https://www.budgetheating.com/search.php?search_query=r410a |
| 2026-07-29 14:52 | refrigerant | skip | https://hvacdirect.com/catalogsearch/result/?q=r410a+refrigerant: could not convert string to float: '' |
| 2026-07-29 14:52 | ahri | ok | manual: [] |
| 2026-07-29 14:52 | ahri | empty | parsed 0 datapoints from 1 links |
| 2026-07-29 14:52 | census_chars | ok | manual: [] |
| 2026-07-29 14:52 | census_chars | ok | hp_share_new_sf: 27 yrs |
| 2026-07-29 14:52 | census_chars | ok | ac_share_new_sf: 265 yrs |
| 2026-07-29 14:52 | census_chars | ok | downloaded 12: ['heatfuelbysystem_cust.xls', 'aircond_cust.xls', 'mfb_aircond_cust.xls', 'mfb_heatingfuel_cust.xls', 'soldaircond_cust.xls', |
| 2026-07-29 14:52 | noaa_cdd | ok | 2226 obs from climdiv-cddcst-v1.0.0-20260707 |