· · hours ·

Seven 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.


Your trip, replayed times

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.

good day great day epic day red top edge = wind hold (40+ mph gusts over half the day)
EpicA rideable powder day: terrain you can see, no wind hold, no rain on the pack, 8°F or better, a week with 5 inches or more behind it, and 4 inches or more in the last 24 hours. If the day is Very Cold it must also be Partly Sunny or better — the colder it is, the more light it has to be given before snow can carry it. Epic asks a different question from Good — not “was this a nice day” but “was this a powder day you could ride” — so it accepts days Good turns down. Taos had 37 inches of measured snow on 27 February 2005 at 12°F under a mostly sunny sky, and the 16°F comfort floor scored it Meh. It is Epic now. Every snow test here is an absolute depth, never a percentile. That distinction is the whole ranking: a per-resort percentile hands every mountain the same quota of big-snow days however little it snows, and under that rule Mt. Lemmon — which averages about 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. Resorts without a gauge are judged on modelled inches converted to their own scale, not on their own ranking. It is rare by design: across the resorts loaded here.
GreatA week with 5 inches or more behind it, no wind hold, no flat light, no rain on snow — and then any one of three ways to earn it: Sun and comfort. Nothing fresh has fallen, so the sky is the whole case for the day: Mostly Sunny or better, and Comfortable or Warm (20°F+).
Two inches this morning, or five over three days. Snow has fallen, so the day is judged on the snow: both reach down to 8°F, well below Good’s floor, and ask only that a cold day not also be under heavy cloud.
Which means a Great day is not always a Good one. Good stops at 16°F; the two snow branches do not, and about a fifth of Great days sit below that line. Fresh snow buys tolerance for cold, and only the branch with no fresh snow on it still has to be comfortable. The week is the floor on all three, and it is what stopped the warm dry hills from topping this list — they can be sunny and comfortable all winter, but they cannot produce five inches in seven days. SNOTEL supplies the number wherever it can: the snowfall is what the stations near the mountain actually weighed, not what the reanalysis produced. The gate is 35 km, widened to 60 km where fewer than three stations are that close. Where no gauge is in range the same inches are tested against the model, scaled by how far that resort’s modelled snowfall sits from its measured record, and the card says no gauge in range — snow modelled instead of carrying a SNOTEL badge. Measured depth gain under-reads, because the pack settles between daily readings, so a gauged resort is held to a slightly harder line than an ungauged one.
GoodFelt temperature 16–45°F, no wind hold (gusts under 40 mph for more than half the day), no flat light, and no rain on snow. Any sky is allowed — but if it is Mostly Cloudy or Cloudy, the day must be Comfortable or Warm. Worth the lift ticket; not necessarily memorable. Good is the only verdict here that asks nothing at all about snow, which is why it is also the only one that never bends on cold: 16°F is a comfort line, and comfort is the whole of what Good measures. Cloud alone does not disqualify a day — what it costs you is warmth. Grey and chilly is the combination that fails. Base depth is reported but not tested. It used to be a floor of 6 inches of settled snow, and it was the wrong gate: neither ERA5 nor SNOTEL can see snowmaking, so the test measured natural cover and marked days Meh at resorts that had in fact opened.
MehAnything that reaches none of those. The tooltip on each cell names what it failed on — rain on snow, wind hold, flat light, too cold, too warm, cloudy and cold — and, where the day came close, what it fell short of next: a Meh day two inches from Epic says so.

Felt temperature

  • Bitter coldunder 10°F
  • Very cold10–15°F
  • Chilly16–19°F
  • Comfortable20–32°F
  • Warm33–45°F
  • Very warmover 45°F

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.

Sky

  • Bluebird5% or less opaque cloud
  • Sunny5–12.5%
  • Mostly sunny12.5–37.5%
  • Partly sunny37.5–62.5%
  • Mostly cloudy62.5–87.5%
  • Cloudy87.5–100%
  • Flat lightany of the above, but low cloud sat on the hill over half the lift day

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.

Travelling to Sort
Regions
Showing to

Where the snow number comes from

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.


Checking the fresh line against a gauge on the hillSNOTEL, 1999–2026

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.

Both the alignment and the station gate were measured, not chosen

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.

ResortGaugesNearest kmAgreementFresh days caughtκ
Heavenly142.793%83%0.79
Sun Valley711.693%82%0.78
Wolf Creek61.591%78%0.73
Powder Mountain91.391%78%0.72
Angel Fire64.290%74%0.68
Whitefish Mountain330.989%71%0.66
Snowbird131.289%71%0.65
Showdown Montana55.188%69%0.62
Steamboat58.387%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 model’s confidence is calibrated

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 snowDays Gauge agrees
well under the line26,1523%
0.7–1.0× (just under)3,22731%
1.0–1.5× (just over)3,41060%
1.5–2.0×1,70481%
2.0× and above2,26395%

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.


Where the days goshare of all Dec–Apr days

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.


What this model gets wrong

Snowfall amount is not usable, and the error is not uniform

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:

ResortModelled Dec–Apr Published annualRatio
Snowbird — UT98″~403″4.1×
Wolf Creek — CO87″~430″4.9×
Heavenly — CA166″~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.