How the fishing-day score works
What goes into each score, where the data comes from, and what we deliberately don’t do.
The score, in plain English
Every location–species page computes a 0–100 score that answers one question: given today’s live conditions, how good is this place for targeting this fish? The score starts from a neutral midpoint and rises or falls based on twelve factor groups — eleven environmental, plus a recency check against the current state fishing report. An “ideal” day scores 85+; a “skip” day scores under 35. Not every factor applies everywhere: river flow only scores flow-sensitive species, and wave height only coastal and bay locations with a nearby buoy.
The weights behind the score are our own model, so what follows is what moves it, roughly in order of influence, not the point values.
- Water temperature vs species preference — every species has a preferred range and an ideal point. Water near the ideal is a strong positive; water outside the active range is a strong negative.
- Season at the spot — where there is no live water reading, the species’ usual months at that spot stand in for it: outside them, the score drops as hard as it would for water outside the active range.
- Weather — thunderstorms, high winds, active NWS alerts — these are safety-first factors and drive the score down hard.
- Solunar window — a small corroboration only. A feeding window adds a minor nudge just when it overlaps a tide or moon signal that already favors the species, and nothing on its own. Spot pages still list the day’s windows for anglers who plan around them, but they never drive a verdict (see the note below).
- Tide phase vs species preference — striped bass and white perch prefer an incoming tide; yellow perch work the slack. A match helps; a mismatch hurts.
- Wind speed — a light chop (5–15 mph) is a positive for many species because it oxygenates the surface and activates baitfish. Calm water and heavy wind both pull scores down.
- Barometer — fish feed ahead of a falling barometer and slow after a post-front rise. We use observed pressure and its 3-hour tendency — from a nearby NDBC buoy on the coast and the bay, and from the nearest airport weather station (ASOS/AWOS) everywhere else: a sharp recent drop is a strong positive, a gentler fall a smaller one, and a sharp rise a negative. Only where no station has a usable record do we fall back to the NWS gridpoint hourly pressure forecast as a 6-hour rising/falling/steady trend. A measured change only describes the next few hours, so hourly scores and bite windows use it for the next three hours and the forecast trend for each hour after that; past the end of the forecast, the barometer is left out.
- River flow — for flow-sensitive species (trout, river smallmouth, salmon and steelhead), a sharp 24-hour rise means high, muddy, often unsafe water and hurts, while a settled or gently dropping level fishes best. Driven by the USGS gauge’s discharge trend; inland rivers only.
- Wave height — at coastal and bay locations with an NDBC buoy within 20 miles (a buoy farther off is out on different water, so its seas and water temperature are not used; tidal rivers read no buoy at all): light chop breaks up the surface and helps, building seas hurt, and heavy seas make small boats unsafe and hurt most. Mirrors the wind logic for open water.
- Moon phase — some species feed harder under a full moon; others go nocturnal and shy during peak brightness. Counts only where the species record specifies a preference.
- Rain probability — heavy rain (≥70%) is mildly negative; thunderstorms in the forecast are heavily negative.
- Water-quality advisory — an active MDE or analogue advisory pulls down the score.
- Recent local report — when the current state fishing report mentions this species near this location, that’s a real “being caught here now” signal and lifts the score. It only counts while the report is fresh (the data layer ignores any report more than two weeks old), so it rewards genuine recency, never a stale page. Active wherever a state publishes a parseable report: the Maryland DNR weekly report (region by region), plus the state-level agency reports for Delaware, Indiana, New York, Oklahoma, Oregon, and South Carolina. States whose reports are PDF-only, app-rendered, or absent are linked on-page instead (see below).
Season status (in-season vs closed)
The score is a measure of environmental conditions, not a legal go-ahead. Each page also computes whether today is inside an open harvest season for the species–location’s jurisdiction. If harvest is closed, you’ll see a prominent banner and an explicit note that catch-and-release may still be permitted, depending on the specific regulation. Always check the regulations block on the page before keeping any fish.
Closed-to-harvest periods come in three flavors that the page treats distinctly: catch-and-release (you can fish, but can’t keep), no-targeting (you can’t legally fish for the species at all — for example, the MD striped bass August closure, which exists to reduce thermal-stress mortality), and closed (no defined open window covers today under the current rules). Pages display distinct banners so the legal framing is unambiguous.
When each species is in season at a spot
Our species notes were first written for the Chesapeake, and a striper’s April-to-June run there is not New Hampshire’s or Arizona’s. So for those species the written months hold only in Maryland, Delaware, and Virginia. Everywhere else we carry the season over by water temperature: from the gauged Chesapeake-region spots we learn the water-temperature band in which each species is in season there, then count a month at any other spot when that spot’s usual water for the month falls inside the band. Species we added for other regions (snook, salmon, Pacific rockfish and the like) keep the months written for the spots they’re fished at.
Each spot’s usual monthly water temperature (2023–2025) comes from the best record available, in this order: its own NOAA or USGS gauge; a USGS gauge on the same water within a few miles; NOAA’s GLSEA satellite surface-temperature analysis for Great Lakes beaches; a NOAA station within 30 miles of a coastal spot; and, for inland water with no gauge at all, an estimate from local air temperature. That estimate is a fitted air-to-water curve checked against real gauges by leaving each one out in turn: it lands within about 3.4°F of the measured lake surface and 3.4°F of the measured river on average. Reservoir gauges that read colder than the summer air are measuring water released from the bottom of the dam, not the lake people fish, so we don’t use them. Rivers whose temperature is set by a dam release or by springs don’t follow the air, so the estimate doesn’t apply to them, and a gauge elsewhere on the river doesn’t either: unless a gauge measures the reach itself, they get no water-temperature record and no season line rather than a guess. Every season line says which of these it came from.
Why we don’t lead with solunar tables
Most fishing apps put solunar “major/minor” feeding windows front and center. We used to as well, then looked at the evidence. The specific claim — that fish feed predictably in ~2-hour windows when the moon is overhead or underfoot — does not hold up. A peer-reviewed study testing popular solunar tables against recreational catch-per-effort found no significant relationship with any solunar value, lunar phase, or illumination; plain air temperature predicted success better. Studies of largemouth bass have likewise found catch roughly constant across the lunar cycle.
What does have support is narrower: tides are real physics and we score them directly, and lunar phase shows modest, species- and season-dependent effects (most measurable in some saltwater and large-bodied fish). So the windows sit in the sun-and-moon table as reference, next to a note saying exactly this, and solunar counts in the score only as a tiny tie-breaker that only counts when the tide or moon already points the same way. We’d rather show you fewer, better-grounded signals than a confident-looking table the literature doesn’t back.
Limitations
- The barometer is the nearest station’s, not yours. Inland, the reading and its 3-hour tendency come from the nearest airport weather station within 75 miles (sea-level adjusted, like a home barometer); pressure changes over hundreds of miles, so a station tens of miles off is a fair read, but not a gauge at your spot. Where no station has a recent reading, the trend falls back to the NWS gridpoint pressure forecast — used only for the change, since forecast offices disagree on whether that layer is sea-level or ground-level pressure — and where there is neither, the barometer is left out of the score rather than assumed steady.
- Report ingestion is limited to parseable feeds. The score rewards a species the current fishing report mentions (freshness-gated). That requires a report we can fetch and parse: Maryland (region by region) plus six states at state level (DE, IN, NY, OK, OR, SC). The remaining states publish their reports as PDFs, JavaScript apps, or bot-blocked pages with no stable machine-readable structure — we link the official report on those pages but don’t parse it into the score. We don’t fold in user-submitted catches at all.
- Regulation freshness: auto-flagged but not real-time. Every regulation carries a
lastVerifiedISOdate. A verification script (npm run verify:regs) flags source-page drift; a stale-banner on each page auto-alerts users when regs are > 7 days old. Assume the ground truth is always the state agency. - Seasons are open-water seasons. The temperature bands are learned from Chesapeake-region fishing, so they don’t know about ice fishing or the deep-water summer bite on northern lakes. A month outside the season is a month the species is usually harder to find, not a closure; the regulations block is what tells you what’s legal.
- Location-specific rules aren’t fully encoded. Some MD trout waters are catch-and-return by specific water; some VA bass waters have per-river slot limits. The current model treats rules as “per species per jurisdiction per waterbody class” — that covers most but not all cases. Notes fields carry water-specific caveats.
Related reading
- Data sources — where the numbers come from.
- itsabeachday methodology — our sibling site’s approach to a parallel problem (beach conditions scoring).