How We Score Rivers: The Inside Walkthrough of the Steelhead Alley Index
The river-fishability rating you see on every SteelHead Addiction river page -- "Excellent," "Good," "Fair," "Poor" -- is produced by a deterministic algorithm with documented inputs, weights, and seasonal switches. This piece walks through the math, the data sources, the limitations, and the season-mode logic that distinguishes steelhead conditions from summer warmwater conditions.
TL;DR
The four input components
1. Flow phase (0-4 points)
Flow phase captures where the river is in its hydrograph at the moment. The score considers the current flow rate, the 24-hour trend (rising / falling / steady), and the per-river researched optimal flow range. Output categories:
- Rising fast (0 points): the river is climbing rapidly toward or past its optimal high. Steelhead are stressed; fly visibility is dropping; fishing conditions are deteriorating.
- Peak / blown (0 points): the river is at or above 2x its optimal high. Stained-to-muddy water, too much volume to fish productively.
- Dropping fast (3 points): the river is falling quickly through its optimal range. This is often the most productive condition -- water is clearing, fish are committed.
- Stable in optimal range (4 points): the river is sitting in its optimal flow range with stable 24-hour trend. The textbook good condition.
- Stable below optimal (2 points): the river is below optimal-low. Often clear water but limited holding water; fish are present but require finesse.
2. Water temperature (0-3 points)
Water temperature zones are species-specific. For steelhead-season scoring:
- 34-42F (3 points): the prime steelhead temperature band. Fish are aggressive, lateral-line feeding works, fly visibility is high.
- 42-48F (2 points): good steelhead temperature. Fish are active but less aggressive.
- 32-34F or 48-55F (1 point): marginal. Cold-water lockjaw or warm-water lethargy.
- Below 32F or above 55F (0 points): outside the productive band.
For summer warmwater scoring, the same river uses different temperature zones tuned to smallmouth bass / walleye / panfish behavior.
3. Clarity (0-3 points)
Clarity is inferred from the ratio of current flow to the river's 30-day baseline flow. The current model:
- Clear (3 points): current flow is at or below the optimal high. Anglers can see 2-3 feet of water column.
- Stained (1 point): current flow is 1-2x optimal high. Greenish-brown water; fly visibility 6-12 inches.
- Muddy (0 points): current flow is >2x optimal high. Chocolate water; near-zero fly visibility.
This is the most-approximated of the four inputs. USGS gauges do not publish turbidity directly; clarity is inferred from flow patterns. The Track A recalibration (2026-06-25) tightened the per-river optimal flow ranges to make this inference more accurate.
4. Weather penalty (0-1 points)
Weather affects fish behavior but the effect is smaller and less consistent than flow + temperature. The scoring assigns up to 1 point for favorable weather and may penalize for unfavorable conditions:
- Stable barometric pressure: positive
- Rapidly falling barometric pressure (pre-front): often very positive
- Rapidly rising barometric pressure (post-front): negative
- Clear sky + bright sun on low/clear water: negative for some species
- Overcast / drizzly conditions: positive for most species
How the points combine
The maximum theoretical score is 11 (4 + 3 + 3 + 1). The mapping to rating tiers:
- Excellent: >= 9 points
- Good: 6-8 points
- Fair: 3-5 points
- Poor: < 3 points
- Unknown: insufficient data (gauge offline, no recent reading, missing temperature data)
Crucially: a "Poor" rating is not the same as "no fish." It means "the conditions are working against you." Anglers who fish anyway sometimes catch fish; the rating just reports the conditions, not the fish.
Season-mode switching
The same scoring algorithm produces different results depending on the season mode:
- Steelhead season (Sep-Apr): water-temperature zones tuned to salmonid behavior (34-42F prime, above 55F unproductive). Optimal flow ranges tuned to steelhead-water conditions.
- Summer warmwater mode (May-Aug): water-temperature zones tuned to smallmouth / walleye / panfish (65-75F prime, above 82F dropping). Optimal flow ranges may shift slightly toward lower-volume warmwater fishing.
This is why a river can rate Excellent in steelhead season at 200 CFS and 38F, and also rate Excellent in summer at 80 CFS and 72F. They are different fisheries being measured under different lenses.
The site\'s public API (/api/public/v1/alley-index and /api/public/v1/conditions/summary) explicitly emits the current season_mode + steelhead_status + primary_targets fields per Codex\'s recent contract update. This prevents LLM tool users (ChatGPT, Gemini, Perplexity) from misreading a summer Good rating as a steelhead recommendation.
Per-river calibration
Each of the 31 rivers in the SHA scope has its own researched optimal flow range. The Chagrin River\'s 200 CFS is moderate; the Salmon River\'s 200 CFS is unfishably low. The per-river ranges come from a combination of:
- Historical USGS data (3-year window, log-normal statistical fit)
- Direct angler reports validating the empirical good-fishing flow bands
- Manual editorial review of the resulting optimal ranges
The 2026-06-25 Track A recalibration corrected 5 rivers whose ranges were dramatically miscalibrated:
- Oak Orchard Creek: 150-500 -> 600-1100 (the Waterport Dam regime invalidated the original assumption)
- Genesee River: 1500-4000 -> 7000-9500 (steelhead-season Mt. Morris Dam managed releases)
- Cuyahoga River: 550-1000 -> 600-1500 (modest ceiling raise)
- Huron River: 150-250 -> 130-350 (modest expansion both directions)
- Black River (OH): 150-300 -> 130-350 (modest expansion)
Update cadence
The scoring is recomputed every 15 minutes for all 31 rivers. The pipeline:
- USGS instantaneous flow + water temperature data ingested (every 15 minutes)
- OpenWeather current conditions pulled (every 15 minutes)
- NWS 7-day forecast updated (every 3 hours)
- Each river\'s recommendation re-scored against current inputs
- Per-river page + the Alley Index dashboard reflect the updated rating
The 7-day forecast index
In addition to the current-moment rating, the SHA system produces a 7-day forecast Alley Index using:
- NWS forecasted air temperatures (drives projected water temperatures)
- NWS forecasted precipitation (drives projected flow patterns)
- Log-linear regression on current flow trajectory (projects rise / fall)
- The same 4-input scoring applied to projected conditions
The 7-day forecast is necessarily less precise than the current-moment rating. Forecast uncertainty compounds; a "Good" forecast 5 days out should be read as a probability, not a guarantee.
Honest limitations
- Turbidity is inferred, not measured. No USGS gauges in the SHA scope publish direct turbidity readings. Clarity is approximated from flow ratios -- which works most of the time and fails in specific scenarios (groundwater-driven rises, snowmelt-driven rises, agricultural-runoff events with low total volume but high turbidity).
- Per-river editorial knowledge isn\'t fully captured. The Salmon River fishes differently than the Chagrin. The algorithm tries to capture this via per-river calibration but cannot capture the experienced angler\'s understanding of pool sequence, structural anomalies, or recent stocking events.
- Weather penalty is the weakest input. The 0-1 point weight reflects honest uncertainty about how much weather actually affects fish behavior. Some studies suggest more; some suggest less.
- The 30-day baseline drifts. The clarity ratio uses a 30-day rolling baseline. After 30 days of below-average flow (a summer drought), the baseline drifts low, and a "normal" rain event registers as a large clarity hit. This is a known artifact.
- Fish behavior is non-deterministic. A river rating Good can produce zero fish on a given day; a river rating Fair can produce a great day. The rating reports the conditions, not the fish.
What the rating cannot capture
- Recent stocking events (rivers right after stocking fish heavier than rating suggests)
- Smolt out-migration windows (massive food availability triggers in spring)
- Pre-front and post-front weather windows beyond the basic barometric trend
- Pressure from other anglers (crowded weekends on the Salmon River)
- Specific angler skill + technique match to conditions
- Anomalous events (chemical spills, sediment slugs from construction)
For these reasons, the SHA rating is a planning tool, not a guarantee. The anglers who use it most effectively combine the rating with local knowledge, recent angler reports, and an honest read of the day\'s overall context.
How this compares to other rating systems
The SHA scoring system is intentionally simpler than some competitors. The deliberate choice:
- 4 inputs are easier to validate + recalibrate than 12
- Public methodology means anglers can understand WHY a river rates as it does
- Per-river calibration matters more than algorithmic complexity
- The output rating is meaningful to anglers (Excellent / Good / Fair / Poor) rather than opaque (78.4 / 100)
The trade-off: the 4-input model occasionally misses edge cases that a 12-input model would catch. The bet is that the simplicity + transparency + per-river calibration produces more useful ratings on average than algorithmic complexity would.
The public API contract
The same scoring engine that drives the per-river ratings also powers the public API:
/api/public/v1/alley-index-- region-wide Alley Index + 7-day forecast/api/public/v1/conditions/summary-- top picks + active storms + season context/api/public/v1/rivers/{slug}-- per-river current conditions + rating + recommendation
Each endpoint emits explicit season-context fields (season_mode, steelhead_status, steelhead_targeting_advice) so LLM tool users (ChatGPT plugins, Gemini, Perplexity) can correctly read a summer Good rating as "good warmwater fishing conditions" rather than misinterpreting it as steelhead-run advice.
The full OpenAPI schema is at /openapi.json. The LLM-facing context at /llms.txt.
Full source list
- Tier 1 -- USGS Water Resources Mission Area / National Water Information System (waterservices.usgs.gov) -- instantaneous flow + water temperature
- Tier 1 -- National Weather Service Forecast API (api.weather.gov) -- 7-day forecast
- Tier 2 -- OpenWeather Current Conditions API -- supplemental air/precipitation data
- Tier 2 -- Editorial review of per-river optimal flow ranges (DJ + SHA contributors)
- Tier 3 -- Direct angler reports validating empirical good-fishing flow windows
Continue learning
- Source Discipline + Tier Hierarchy -- the SHA editorial methodology for source validation.
- Before You Go -- the angler-facing primer on what conditions matter.
- Seasonal Playbook -- when each season favors which water + technique.
- Catch and Release Biology -- companion conservation science piece.
- Steelhead Alley Summer Biology -- the summer-mode counterpart.
- OpenAPI Schema -- the formal API contract.