SteelheadTracker

Columbia Basin Steelhead Migration Dashboard
Loading...
Data: DART, PTAGIS, USGS
Hot Rivers & River Conditions are WIP

Hot Rivers — Which Runs Are Surging?

Rivers ranked by run progress. Expected fish from v117p expansion model (PIT tags × expansion factor at reference dam). Unique PIT tags at river entry gates multiplied by the same expansion factor gives estimated arrivals. % remaining = fish still to come. Rivers with high % remaining approaching their peak date are "hottest."
Loading chart...

Daily Passage — Bonneville Dam Live

Day-of-year overlay across all years. Toggle between raw counts, 7-day, and 14-day averages.
Loading chart...

Daily Passage — Lower Granite Dam Live

Last dam on the Snake River before fish enter tributaries. Key indicator for Clearwater, Salmon, and Grande Ronde runs.
Loading chart...

Annual Run Size by Dam

Total steelhead passage at each major Columbia & Snake River dam, 2010–present.
Loading chart...

Daily Passage by Destination River New

Expanded PIT×DART estimates of daily steelhead passage at each dam, broken down by destination river basin. Select a year and toggle rivers on/off.
Loading chart...

Cumulative Run Timing — Bonneville

What percentage of the run has passed by each day? Compare this year's pace to historical.
Loading chart...

Cumulative Run Timing — Lower Granite

Snake River cumulative timing. Fish arrive later here than at Bonneville due to upstream travel.
Loading chart...

Run Timing by River New

BON cumulative passage split by river destination fraction. Shows estimated per-river timing based on expansion-weighted basin data. Use dropdown to isolate individual rivers.
Loading chart...

Basin Destination by Year New

Estimated adult steelhead by destination river, by calendar year. Each river's share of PIT tags is multiplied by the DART dam count to estimate total fish — the "expansion" number shows how many real fish each PIT tag represents. Hover for details.
Loading chart...

Ocean Age × Origin (IDFG Style) New

Stacked bars by ocean age class (1-ocean, 2-ocean, 3+ ocean) and origin (Hatchery/Wild), matching IDFG's steelhead reporting format. Dark shades = hatchery, light = wild. Hover for details.
Loading chart...

Returning Adults by Drainage Beta

Estimated adult returns by drainage, by calendar year. Same method as Basin Destination — uses each river's PIT tag share × DART dam count. Includes 3yr/5yr/10yr average reference lines. Hover for expansion details.
Loading chart...

Hatchery vs Wild — Bonneville

Origin composition from DART. "Steelhead" = hatchery-origin, "Wild Steelhead" = wild-origin.
Loading chart...

Hatchery vs Wild — Lower Granite

Snake River hatchery vs wild origin split at Lower Granite Dam.
Loading chart...

Adult Length Distribution

Size distribution of returning adults by river system. Bimodal peaks often correspond to 1-ocean vs 2-ocean fish.
Loading chart...

Adult Length vs Ocean Age New

Each point is one fish. Circles = paired juvenile+adult measurements, orange diamonds = adult measurement only (age estimated from length). Click any fish to open its full tag history on PTAGIS. Colored by ocean class. Use dropdown to filter by river.
Loading chart...

Columbia Basin Migration Flows New

Sankey diagram showing steelhead flow through Columbia & Snake River dams to destination rivers. DART dam counts set the total flow at each dam. Toggle between two methods for splitting fish to destination rivers. View dam map →
Loading Sankey data...

Per-River Migration Flows New

Follow fish from Bonneville through each dam on the route to a specific river, with sub-basin breakdowns where available. Tracks by migration year (July–June cohorts) so fish passing BON in summer and arriving at upper tributaries months later are counted together. Toggle between Detected (raw PIT counts) and Expanded (weighted by tagging rates) modes. Hover for details.
Loading river Sankey data...

Entry-Gate Detections by River New

Daily PIT tag detections at river entry gates across all years. Average row at top shows typical timing; individual years below. Select a river to see its entry-gate detections over time. Toggle years on/off.
Years:
Loading heatmap...

Migration Timing by Year — Dams New

Daily DART passage counts across all years at major dams. Each row is a year, each column is a day of year. Shows how migration timing shifts year to year — earlier runs, later peaks, and unusual patterns.
Years:
Loading heatmap...

PTAGIS Detection Sites — Map

Official PTAGIS map of PIT tag interrogation and MRR sites across the Columbia Basin. Use the built-in search (magnifying glass icon) to find sites by code or name. Cross-reference site codes with the heatmap above.

Streamflow & Fish Detections Live

USGS observed streamflow (last 30 days) with daily PIT fish entries. Shows flow conditions at key gauges alongside fish arrival patterns. Dual y-axis: discharge (cfs) on left, fish detections on right.

Select a river and click "Load Flow Data" to fetch live streamflow

Data from USGS National Water Information System (waterservices.usgs.gov)

How to Use This Dashboard

Every chart on this site is interactive. Here are the key things you can do:

Legend Controls:

  • Single click a year or river in the legend to hide/show it
  • Double-click a legend entry to isolate it — only that item will show. Double-click again to restore all.

Dropdowns & Buttons:

  • Use dropdown menus (top-left of charts) to switch between views — dam totals, individual rivers, smoothing modes, etc.
  • On the Run Timing chart, the dropdown lets you pick Bonneville (BON) or Lower Granite (LWG) scaling and filter to individual rivers. Single-river views color lines by year so you can compare across seasons.

Chart Interaction:

  • Hover over any line or bar to see detailed data — fish counts, percentages, PIT tag info, expansion factors
  • Click + drag to zoom into a region. Double-click to reset zoom.
  • Use the camera icon in the top-right toolbar to download a chart as a PNG image

What Can You Learn?

  • Dam Passage — Compare this year's daily fish counts to historical patterns. Is the run early, late, big, or small?
  • Run Timing — Track cumulative progress: what % of the run has passed? How does each river compare?
  • Destinations — Where are the fish going? Basin destination shows estimated returns per river system. The "expansion" number in the hover tells you how many real fish each PIT tag represents (e.g., 5x means each tagged fish represents ~5 total fish). This is calculated by dividing the DART dam count by the number of PIT tags detected.
  • Fish Biology — Size distributions and ocean age help understand the population mix (1-ocean vs 2-ocean fish).
  • Migration Flows — Sankey diagram traces fish from Bonneville through each dam to their final destination river. Width of each band = number of fish. Use the year dropdown to compare across years.
  • Fish Biology — Click any fish dot on the growth scatter to open its full tag history on PTAGIS. Orange diamond markers are fish with a single adult measurement only (age is estimated from length).

Dam & Site Abbreviations:

BON = Bonneville TDA = The Dalles JDA = John Day MCN = McNary IHR = Ice Harbor LMN = Lower Monumental LGS = Little Goose LWG = Lower Granite PRD = Priest Rapids WAN = Wanapum RIS = Rock Island RRH = Rocky Reach WEL = Wells

About SteelheadTracker

SteelheadTracker is a passion project that tracks Columbia Basin steelhead migration using publicly available data from DART (Columbia Basin Research), PTAGIS (PIT Tag Information System), USGS (water data), and NOAA (weather forecasts).

Data Sources:

  • DART — Dam passage counts (daily & annual)
  • PTAGIS — PIT tag detection data (individual fish tracking)
  • PTAGIS Detection Sites — PIT tag monitoring site locations and metadata
  • USGS — Streamflow and water temperature
  • NOAA — River flow forecasts
  • Columbia Basin Dam Map — Overview of dam locations in the basin

How It Works:

A build script fetches the latest DART dam passage data and combines it with precomputed PIT tag analysis (basin destinations, growth, origin classification). Charts are rendered client-side using Plotly.js — no server computation needed.

Methodology Notes:

  • Destination and returning adult charts use calendar year for consistency with dam passage data
  • H/W classification from DART uses the "Wild Steelhead" column reported by dam operators
  • PIT-based H/W uses release site information to infer hatchery vs wild origin
  • Basin destinations are based on post-dam PIT detections at tributary sites
  • Charts marked "Beta" are under active development and may have known limitations

A Note on the Numbers:

Estimating how many steelhead are heading to each river turns out to be a genuinely hard problem. We only have PIT tags in a fraction of the fish, and those tags have to be expanded out — multiplied by factors that can range from 10× to 50× or more — to estimate total basin destinations. I've done my best to cross-reference DART dam counts, PIT tag detections, and the v117p expansion model to produce something useful, but I'm not a fisheries biologist with access to better data, and I'm not a mathematical genius. There are real limitations here: expansion factors vary by year and river, some rivers have very few PIT tags to work with, and the entry gate detection efficiency isn't 100%. If you spot something that looks off, or you have expertise that could improve the methodology, I'd love to hear from you. This is the best I could do with what's publicly available — and I think it's still pretty useful.

Contact & Support:

Built by Paul Van Valkenburg — paul.vanvalkenburg@gmail.com

If you find this project useful and want to support its development — whether that means buying me a beer, helping me take my wife out to dinner to repair the damage this site has done to my marriage, or just keeping the servers running — any contribution is appreciated. Donate via PayPal

Want to receive updates? Email me to join the mailing list.