← SteelheadTracker dashboard

Field notes

The most interesting things 8.7 million tagged fish have taught us. Every number on this page is computed from our own detection data and links to where the full story lives.

1 in 197 steelhead does the whole thing twice

448  of 88,374 tagged adults at the Bonneville ladder came back for a second complete run — down the river as a spent kelt, back to the ocean, and up all those dams again. Median time between runs: 381 days. 132 tags span long enough to be third-year candidates.

Salmon die after spawning. Steelhead don't have to — and these 448 fish are individually documented proof: each is one PIT tag with two dated crossings of the same ladder.

Definition: same tag detected at the Bonneville adult ladder twice, ≥180 days apart. A few of these could be overwintering fish re-ascending after falling back rather than true ocean round-trips — the one-year cluster in the chart is why we read most as genuine. Reproduce: build_field_notes.py. More on what tags can tell us: the Bonneville tracers.

Every river has a size signature

Rank the rivers by the fish they grow and the order is stable and steep: Clearwater fish run a median of 760 mm, while Imnaha fish run 504 mm. The big two-ocean "B-run" fish concentrate almost entirely in the Snake — and within the Clearwater, size maps to which tributary: 3% of Lapwai Creek fish clear 78 cm against 74% in the upper Lochsa.

Measured fork lengths of PIT-tagged adults, from each river's own page (12 rivers with ≥100 measurements). Per-river detail on the river pages.

We learn the region in a month — the river takes until spring

A tagged fish crossing Bonneville reaches Lower Granite in a median of 36 days, so the site can say which region the run favours while the season is still on. But the antennas that name a specific river mostly sit at spawning tributaries, and the median wait for that answer is 199 days. The destination of a fall run resolves the following spring — not for lack of tags, but because the fish haven't arrived yet.

Measured in bon_tag_resolution.py; the full story is on the tracers page.

The rivers barely trade places

The single most humbling measurement on this site: the split of the run between rivers is so stable year to year that copying last year's published composition predicts it to about 2 points — better than our own tag-based model. Columbia steelhead are creatures of habit at the population level, even while individual years boom and bust in size.

That finding now shapes the model itself: where a published answer exists we anchor on it, and our tags supply the change since then.

Scored leave-one-year-out against IDFG's wild escapement; the full comparison is on the accuracy page.

In August, half of Granite's count is last year's fish

On a late-August day, a mean of 55% of the fish counted at Lower Granite this calendar year (up to 92% in some years) crossed before June — the tail of the previous season's run, still moving through the system after overwintering. The river is full of holdovers when the new run starts, which is why early-season "how does this year compare" reads at upstream dams deceive, and why this site keys everything to the June-1 migration year.

Measured in granite_wedge_test.py, which exists because Paul argued the residuals were contaminating the forecast — he was right.