· · hours ·
A riding day is not a day. It is the seven hours the lifts turn, and the weather inside those hours moves — warming, clouding, gusting — in ways a daily average erases completely. This is the same question as before, asked of hourly data.
Pick your dates. Every winter on record is scored over that same window — rows, one per winter, one column per day. The old version of this had nine winters to work with; a six-day window across is observations per resort instead of 54.
Apparent temperature averaged over the lift hours, with the coldest and warmest hour in brackets. A Good day starts at the bottom of Chilly, so the band boundary and the rule are the same number. Comfortable does a second job: it is the temperature a day needs before heavy cloud is forgiven.
Share of the sky covered by opaque cloud — the thicker of the low and mid layers, averaged over the lift hours. High cirrus is left out, being the kind you can ski under quite happily; counting it would read 38% of all winter days as fully overcast against 25% without it. Flat light outranks all six because a bright overcast you cannot read terrain through is the condition that actually ruins the riding. It is of all Dec–Apr days across the mountains on this page.
Measured wherever a gauge exists. SNOTEL stations within 35 km — 60 km where fewer than three are that close — so the snow tests are measurements rather than model output: the week behind the day, which both Great path requires, and the morning, the 2 inches that open Great's snow path and the 4 that make it Epic. Base depth is answered by a different station from snowfall, because depth is elevation-sensitive and snowfall barely is — but base only gets reported now. Nothing is gated on it. Snowfall is the average of the whole neighbourhood, because distance barely matters for it; base comes from the station closest in elevation, because a gauge 2,000 ft below mid-mountain holds a different snowpack. ERA5 is kept alongside as a second opinion, and the tooltip shows both: the measured inches and what the model said. Resorts with no gauge fall back to the model, and their cards say so.
Snow is not drawn on the cells. It used to be, as a bar rising from the bottom of each square, and it was measured out of the design: on Great and Epic cells the bar sat at full height 56% of the time and was never empty — it was redrawing the colour, since fresh snow is what makes a day great. The one place it said something new was the worst place for it to: 13% of the whole grid is days that dumped and were still not worth riding — too cold, flat light, wind or rain on snow. A tall bar there reads as a good sign at a glance and means the opposite. The amounts live in the tooltip instead, in inches.
The rule behind the tiers is now absolute inches, not a percentile: five in a week, two in a morning, four for Epic. The per-resort scaling did not go away, it moved — where a gauge is in range the inches are simply measured, and where none is, the same inch figures are converted into that resort’s own modelled scale before being tested. The percentile had to go, and the reason is worth stating plainly: it ranks each mountain against itself, so it hands every one of them the same quota of big-snow days however little it snows. Under that rule Mt. Lemmon — roughly ten inches of snow in a whole season — scored more Epic days than Alta, because its own 95th percentile was a fifth of an inch. A number that cannot tell those two mountains apart is not measuring snow.
The model’s own inches were never usable: 4–5× too low by a factor that differs per resort, so neither accurate nor comparable. That is what made the gauges worth wiring in. The measured figures in the tooltip are two different things — inches of new snow depth, which reads low because the pack settles between daily readings while a resort clears its stake every few hours, and inches of water, which is the conserved quantity and what the fresh line is actually computed from. On a fresh day the gauges averaged 4.4–11.1″ of new snow and 0.67–1.96″ of water across the nine resorts this was calibrated on.
One thing the hourly data settles: snowfall has no time-of-day preference. The overnight share was 69–72% at all nine resorts in that sample, which is exactly the 17-of-24 hour ratio. It does not preferentially dump overnight.
Everything above rests on one claim: that the model can tell which days snowed, even though its inches are wrong. That is testable. The NRCS runs automated SNOTEL sites that weigh the snowpack directly, so the model’s verdict on each day is scored against theirs. What is being compared now is the two-inch morning — the line Great’s second path tests — rather than the percentile fresh line this section was originally built around. The gauges decide the tiers wherever they reach, so what follows is the record of how the reanalysis performed against them; ERA5’s own verdict is kept in the data precisely so this comparison stays honest.
Everything in this section was measured once, on a nine-resort sample, and settled the rules the whole page now runs on. The counts below are that experiment’s results, not a description of the resorts currently loaded.
The model’s window ends at the lift opening; a SNOTEL daily value ends at local midnight. Testing lags of −1, 0 and +1 days, −1 won at all nine stations (correlation .70–.90 against .43–.63 for +1), so that is the alignment used.
Which stations count was settled the same way. I first guessed a gate of 6 km and 1,200 ft, then scored 54 resort-station pairs out to 60 km against the same model output. Agreement turned out flat from 0 to 35 km (κ .635 / .599 / .634 / .608 by band) and near-flat against elevation offset (.62 down to .60 across 0 to over 1,500 ft). The nearest station was the best one at only two of nine resorts. The limit is ERA5’s ~25 km grid cell, not where the gauge sits — so the tight gate was discarding nine tenths of the usable stations for nothing.
Which suggested doing better than picking one. Averaging every station within 35 km — each normalised by its own 80th percentile first, so a wet high station cannot drown out a dry low one — beat the single nearest at eight of nine resorts, lifting mean κ from .632 to .691. Independent sensor noise averages out; the weather does not. Water equivalent is the comparison quantity rather than depth, because depth accumulation depends on how often somebody clears the stake, while water is conserved.
| Resort | Gauges | Nearest km | Agreement | Fresh days caught | κ |
|---|---|---|---|---|---|
| Heavenly | 14 | 2.7 | 93% | 83% | 0.79 |
| Sun Valley | 7 | 11.6 | 93% | 82% | 0.78 |
| Wolf Creek | 6 | 1.5 | 91% | 78% | 0.73 |
| Powder Mountain | 9 | 1.3 | 91% | 78% | 0.72 |
| Angel Fire | 6 | 4.2 | 90% | 74% | 0.68 |
| Whitefish Mountain | 3 | 30.9 | 89% | 71% | 0.66 |
| Snowbird | 13 | 1.2 | 89% | 71% | 0.65 |
| Showdown Montana | 5 | 5.1 | 88% | 69% | 0.62 |
| Steamboat | 5 | 8.3 | 87% | 68% | 0.60 |
Agreement is the share of Dec–Apr days the two flags call the same way. “Fresh days caught” is the share of the gauges’ own fresh days the model found. κ is agreement above what the base rates alone would produce; 0.5–0.7 is conventionally moderate to substantial.
The binary flag understates it. Sorted by how far past its own fresh line the model put each day, the share the gauge also called fresh rises cleanly:
| Model’s 72h snow | Days | Gauge agrees |
|---|---|---|
| well under the line | 26,152 | 3% |
| 0.7–1.0× (just under) | 3,227 | 31% |
| 1.0–1.5× (just over) | 3,410 | 60% |
| 1.5–2.0× | 1,704 | 81% |
| 2.0× and above | 2,263 | 95% |
So a day well past its fresh line is trustworthy and one sitting on it is a coin flip. Most of the disagreement is days near the threshold, where binarising a continuous quantity manufactures it — the raw 72-hour amounts correlate .70–.90.
Distance still barely matters. Sun Valley’s nearest gauge is 11.6 km away and it scores second; Snowbird has thirteen gauges with the nearest at 1.2 km and scores seventh. The residual disagreement is the reanalysis smoothing terrain inside a 25 km cell, not the gauges sitting in the wrong spot.
The same 35 km rule reaches of the resorts in the file, against 72 under the original guess. Only carry the badge today, because the badge needs hourly ERA5 as well and that has been fetched for so far. The measured side is loaded and waiting for the rest.
This test found a real bug. The fresh line was originally computed by taking the rolling window after sampling one row per day, which sums 72 separate 9 a.m. hours spread over 72 days: the right average, but far too smooth a distribution. Its 80th percentile sat ~25% low, and the model was calling 25–30% of days fresh instead of 20%. Every figure on this page is post-fix.
Every Dec–Apr day, filed under the first thing that stopped it. The two groups are not the same kind of thing and are worth reading separately: the first is days that went wrong, the second is days that were perfectly rideable and simply had no snow behind them — Good days that fell short of Great, not failures. The green bar on top is the share that cleared both. Only the hourly feed can separate the first group at all: wind holds, flat light and rain-on-snow are invisible in a daily summary.
Passing each resort's mid-mountain elevation to the API fixes temperature. It does not fix precipitation. Orographic enhancement — the reason a Wasatch ridge triples what the valley gets — happens entirely inside a ~25 km grid cell, so the reanalysis cannot see it. Modelled Dec–Apr snowfall against published annual averages:
| Resort | Modelled Dec–Apr | Published annual | Ratio |
|---|---|---|---|
| Snowbird — UT | 98″ | ~403″ | 4.1× |
| Wolf Creek — CO | 87″ | ~430″ | 4.9× |
| Heavenly — CA | 166″ | ~360″ | 2.2× |
Note the ratios differ, which is worse than the magnitude being wrong: the ordering inverts. Of the nine resorts this was checked on, Wolf Creek is the snowiest in reality and comes fourth in the model; Heavenly is among the driest and comes first. So every snow measure here is expressed relative to each resort's own record — "is this a snowy day for this mountain" — which survives a per-resort multiplicative bias even though the raw inches do not.
Base depth was a test here, and it was dropped. It went through two forms. First a per-resort percentile, which by construction rejected the same share of days everywhere, including midwinter days sitting on plenty of snow. Then an absolute floor of six inches of settled snow, converted per resort because modelled depth runs 0.38× to 0.95× of measured depending on the mountain.
The floor was the better rule and still the wrong one, for a reason no amount of calibration fixes: neither ERA5 nor SNOTEL can see snowmaking. Both measure natural cover, so the test marked days Meh at resorts that had groomed, opened and sold tickets — and it did it hardest to exactly the mountains that depend on making their own, the dry and the low. A model that cannot see the snow a resort makes should not be ruling on whether you can ride.
So base is reported, not tested. Every card prints its base and summit, every day still carries a measured or modelled depth, and of days take that depth from an elevation-matched gauge rather than the model. Read it as natural cover, and as context for the tiers rather than a gate on them.
What the reanalysis does do well, and what this therefore leans on: temperature (elevation-corrected to mid-mountain), apparent temperature, wind, cloud layers and precipitation phase. Those are comparable across resorts. Snow amount is not.
Wind chill is the quietly large effect. Across all lift hours the gap between air temperature and what it feels like averages 7.6 °F and reaches 20.3 °F. A daily high of 28 °F is a different day at Showdown, where the gap averages 9.2 °F, than at Powder Mountain, where it averages 7.0 °F.