This spring I read Cody Cottier’s piece in Scientific American about mountain lakes turning green, with cyanobacteria blooming in a Colorado lake at 11,135 feet, and built ALPINE-WATCH to keep an eye on the Sierra and Cascade lakes I love. The plan was simple: pull the water samples scientists post to the national Water Quality Portal, twice a week, and flag any lake getting greener.

This week I opened it up for a proper look, and found that 8 of my 13 lakes had been coming back empty, and only one, Odell, had any chlorophyll readings at all. Not low, empty: no samples at all, while the dashboard cheerfully said everything was fine.

Why the lakes were empty

Part of it was the plumbing. Since March 2024 the portal’s older data service no longer gets new USGS samples, and my queries looked in a small box around a single point in each lake. But the bigger reason is simpler: most mountain lakes are never sampled at all. Nobody is hauling a boat up to Kibbie Lake, one of the largest natural lakes in Yosemite and a long walk from any road, or to Many Island Lake above it. The long records that do exist, like UC Davis’s at Tahoe, mostly live somewhere else.

So I turned the project around. If nobody can get to these lakes, the satellites can.

A grid of seventeen colour swatches, one per lake, sorted from bluest to greenest: Crater Lake, Waldo Lake and Lake Tahoe are deep blue at the top, Forel-Ule 2 to 3; Chelan, Convict, Garnet and Fallen Leaf are blue-green at 4; Spirit Lake and Lake Cushman are grey-green at 5; Thousand Island, Donner, Lower Twin, Mono, Odell and Diablo are greener at 6; Kibbie and Many Island are greyed out as too dark to read

Every lake’s summer colour from Sentinel-2, 2022–2026, bluest first. Crater Lake comes out on top, as it should.

What it watches now

Seventeen lakes, from Tahoe and Crater Lake to four backcountry lakes in Yosemite and the Ansel Adams Wilderness, each traced from its OpenStreetMap outline. For every clear pass of the European Sentinel-2 satellites, every few days since 2017, it reads only the open water, staying 40 m in from shore so beaches and shallows don’t sneak in, and keeps four things:

And instead of holding every lake to one threshold, each lake is compared with itself. Crater Lake will always be bluer than a reservoir; what matters is whether this summer is clearly greener, warmer or more chlorophyll-heavy than that lake’s own recent summers.

The ALPINE-WATCH detail view for Crater Lake on a dark navy background: a Sentinel-2 true-colour picture of deep blue water, four boxes reading colour, chlorophyll index, July to August surface temperature and ice-out, and three small charts of summer colour, chlorophyll index and surface temperature by year, each with a shaded band for its usual range

Crater Lake on the new dashboard: FU 2, right in its usual range. Click any lake on the map for its own page.

A few things the satellites taught me

Satellites are honest about what they can’t see, as long as you let them be. Building this turned up three surprises, and each one became a rule:

Smoke gets screened out too (August in the Sierra, of course), along with clouds, ice and slush. Diablo Lake’s famous turquoise is glacial flour and Mono Lake is salty, so their colours are shown but never set off a flag on their own.

How the lakes look this year

Most are steady. A few are worth a second look: Convict Lake and Lower Twin Lake (near Bridgeport) ran warmer than usual this summer, Lower Twin also shows more chlorophyll signal than usual, and Donner Lake came out a little greener. None of that is a diagnosis; a flag here just means “worth a closer look.” And for the backcountry lakes, the satellites caught Kibbie Lake opening up in mid-April this year.

The ground samples are still there too, now that the queries look across each lake’s whole outline: five lakes have samples since 2019, including more than 1,400 at Tahoe.

How it works: lake outlines from OpenStreetMap; Sentinel-2 L2A and Landsat 8/9 Collection 2 read a small window at a time from Microsoft Planetary Computer by a GitHub Action every Monday, one job per lake, only fetching passes it hasn’t seen. Forel-Ule colour uses the Sentinel-2 coefficients from Van der Woerd & Wernand, the same constants used in ESA’s SNAP toolbox. A lake is flagged when a summer value sits 1.5 spreads off its own recent median. The code is on GitHub.

The map, every lake’s summers and its satellite picture are on the dashboard.

Open ALPINE-WATCH Code on GitHub

Go deeper

📖 Read

Van der Woerd, H.J. & Wernand, M.R. (2018). Hue-angle product for low to medium spatial resolution optical satellite sensors. Remote Sensing 10, 180. — how a satellite reads the Forel-Ule scale.

Mishra, S. & Mishra, D.R. (2012). Normalized difference chlorophyll index: a novel model for remote estimation of chlorophyll-a concentration in turbid productive waters. Remote Sensing of Environment 117, 394–406. — NDCI.

📊 Data

Copernicus Sentinel-2 L2A (ESA) and USGS Landsat 8/9 Collection 2 Level-2, via Microsoft Planetary Computer · lake outlines © OpenStreetMap contributors · ground samples from the Water Quality Portal.

Related: SECCHI, my Lake Tahoe clarity dashboard, and more water projects.

If you’re headed up to one of these lakes next summer and want to know what colour it’s been, it’s all on the map. I’d love to hear what you see.