water / gsl
Great Salt Lake
The largest salt lake in North America, and the last stop on the Colorado River's journey west. Pick a water year, drag the rivers, and watch the level respond — the model runs entirely in your browser.
Inflows
Scenario inflows
USGS 10126000 · avg 0.58 MAF/yr diverted
USGS 10219000 · avg 0.09 MAF/yr diverted
USGS 10171000 · avg 0.05 MAF/yr diverted
USGS 10141000 · avg 0.06 MAF/yr diverted
These MAF values are the total flow per river at the last recorded gauge, not a true representation of what actually makes it to the lake. The “to lake” total above is the flow model’s estimate of what survives diversions and natural losses, not a measurement. The diversions take a fixed amount each year, not a fixed share of the flow — they shrink only when the inflow falls below the take — so in a dry year almost nothing is left for the lake. In 2025, Bear River at Corinne recorded 0.58 MAF — about the same as its average take — but only 0.03 MAF made it to the lake. See the Bear River dashboard to see where the water goes.
What-if
What if 2025 ran on these inflows?
Model end
4189.7 ft
Actual
4189.7 ft
Δ vs actual
+0.00 ftProjection
5-year projection
Projected end (Sep 30 2029)
4188.6 ft
BAU end
4193.8 ft
Δ vs BAU
−5.29 ftBAU baseline = long-term mean inflow
Chart
Great Salt Lake water level
Inflow (right axis, M acre-ft) is the annual sum of the four river gauges. Dotted where the total is an estimate — a source gauge is missing for that year, or the water year is partial.
How this works
How the model works
The Great Salt Lake is a terminal lake: it has no outflow, so its level rises with inflow and falls with evaporation. For each water year (Oct 1 – Sep 30) the model steps the level once: Δh = I ÷ A − e, where I is the total inflow set by the sliders (million acre-ft), A is the lake’s mean surface area at the current level from the published elevation–area curve (a bigger lake rises less from the same inflow), and e is the annual evaporation depth (ft/yr).
The projection sustains the slider inflows for the chosen horizon (5/10/15/20 years) from a chosen start year and compares them against business-as-usual (long-term mean inflow). The main chart overlays both on the observed 1847–2026 record, with the 4,200 ft historic-average level and the 2022 record low marked.
Limitations
Limitations
- Evaporation is a calibrated residual, not a measurement. e is fitted from the observed level change and the measured inflow, so it absorbs evaporation plus groundwater, diversions, and unmeasured streams — and can even go negative in very wet years (e.g. 1982: -0.4 ft/yr).
- Gauges sit upstream of diversions. The river gauges (e.g. Corinne on the Bear) read flow before major diversions take water away, so measured inflow overstates what actually reaches the lake. The calibrated residual absorbs that offset for historical years, but what-if scenarios inherit the bias.
- Flat-lake approximation. Each annual step spreads the year’s inflow over the lake’s mean surface area; the area change within the year and the basin’s 3-D shape are ignored. Fine at annual resolution, but a coarse representation of the lake.
- Data gaps. No Bear River gauge data 1957–1962 (its slider defaults to 0 and the residual absorbs the missing flow). 2026 is a partial year. The 1847–1948 level record is monthly.
- Fit quality. Run on actual inflows, the model reproduces the observed 1949-2025 level within 0.18 ft RMSE, with the 1986 high off by 1.2 ft and the 2022 low off by 0.6 ft.
About the data
- Levels:
- Great Salt Lake surface elevation, USGS-10010000 (62614, ft)
- Inflows:
- Bear River (USGS 10126000), Sevier River (USGS 10219000), Jordan River (USGS 10171000), Weber River (USGS 10141000)
- Model:
- one water year per step, Δh = inflow ÷ mean surface area − evaporation depth (calibrated at 1.86 ft/yr, RMSE 0.18 ft over the record)
- Data as of:
- 2026-10-25 · generated 2026-10-27
Data sources
Where the data comes from
Every figure on this page traces back to a public source. The links go to the authoritative page for each gauge and curve; the raw daily values behind them come from the USGS Water Data OGC API.
- Lake level: Great Salt Lake surface elevation — Great Salt Lake surface elevation, USGS-10010000 (62614, ft) USGS page
- Bear River: Bear River at Corinne, USGS-10126000 (00060, CFS) USGS page
- Sevier River: Sevier River at Juab, USGS-10219000 (00060, CFS) USGS page
- Jordan River: Jordan River at 1700 S, SLC, USGS-10171000 (00060, CFS) USGS page
- Weber River: Weber River near Plain City, USGS-10141000 (00060, CFS) USGS page
- Elevation–area curve: published USGS hypsometric curve, calibrated to the Utah DWR anchor points Utah DWR
- Daily values: fetched from the USGS Water Data OGC API API
Processing
How the data is processed
The tooling does not alter the observed values — it converts units, fills brief gaps, and derives the model’s evaporation term. Each step, and why it is acceptable:
- Daily values → water years. Daily observations are grouped into water years (Oct 1 – Sep 30); each year keeps its start and end level and its total inflow. The water year is the standard accounting period for this basin, and it is an aggregation of observed values — the underlying figures are USGS daily means, not estimates.
- Cubic feet per second → acre-feet. Each river’s daily mean flow is converted to volume and summed over the year: daily CFS × 86,400 s ÷ 43,560 ft³/acre-ft. A pure unit conversion (flow rate → annual volume); no data is added or removed.
- Gap-filling. Short gaps in a daily record are linearly interpolated between the surrounding observations — up to 31 days for the fast-varying rivers and up to 366 days for the slowly-varying lake level (which was recorded monthly early on). Longer gaps are left missing, and every filled day is counted per source. Linear interpolation across a short gap is a standard, conservative fix for brief missing data; the caps stop it from fabricating long stretches, and the filled-day counts are stored in the data file.
- Elevation → surface area. The lake’s area at any level is read from the published elevation–area curve, interpolated with a smooth monotone (PCHIP) spline between the table’s 0.5-ft rows and clamped to the table’s range outside it. PCHIP is smooth and monotonicity-preserving, so area never decreases with elevation or overshoots between the published points; clamping avoids inventing area beyond the measured range. The curve is the published USGS/DWR relationship, not a fit.
- Calibrated residual evaporation. Evaporation is not measured directly; it is the mass-balance residual e(y) = I(y) ÷ A_avg(y) − (h_end − h_start). The model uses the per-year residuals, and the single reported number is their mean. This is a derived parameter, not a change to the observed data — the observed levels and inflows are used as-is. The residual legitimately bundles evaporation with the unmeasured terms (groundwater, diversions, small streams), and it is validated against the full record (RMSE 0.18 ft)
- Rounding. Values are rounded for storage — inflow to whole acre-feet, level to 0.01 ft. The rounding is far below the model’s resolution (levels are read to about 0.1 ft on the charts), so it does not affect the results.