A record most states don't have — or at least don't make readily available
Every duck hunter has a theory about what makes a good day. A hard north wind. The first cold front of the season. A dark moon. The opener. A specific blind at a specific refuge that always seems to shoot.
California keeps unusually good records to test those theories against. For 39 seasons, state and federal public hunting areas have logged, for nearly every hunt day, how many hunters checked in and how many birds they took home. Joined to daily weather going back to 1987, that's 49,005 hunt-days across 41 refuges — about 3.4 million hunter-days and 6.9 million birds. This article walks through that raw record. It doesn't fit a model or claim causes; that's the next piece. It just lays the data out honestly and points at the patterns — and the puzzles — that fall out of it.
Two things to say up front. First, this is a measure of success per hunter, not of how many ducks exist. Every number below is birds bagged per hunter-day: total birds taken divided by total hunters, over the days that match. Second, all rates are hunter-weighted — a busy Saturday at Sacramento counts for more than one quiet Tuesday at a tiny unit, so a big refuge and a small one are compared honestly, never as an average of averages.
Across all 49,005 hunt-days, the statewide average is almost exactly two birds per hunter. The interesting question is what pulls a given day above or below that line.
The controls below set the scope for all four figures. Focus a region, narrow to recent seasons, and watch the leaderboard, the map, the season curve, and the weather panels update together. Everything here is also in the live explorer, where you can cross-filter down to a single refuge and click any weather bar to condition the rest.
Birds per hunter, by refuge
The same refuges, on the map
Where you hunt: a factor-of-two spread
Refuge choice is real. Pooling all 39 seasons, Kern in the southern San Joaquin leads the serious-sample public areas at about 2.9 birds per hunter, with Gadwall and Little Dry Creek just behind at roughly 2.8, and Delevan and Colusa — Sacramento Valley stalwarts — close after. At the other end, a long tail of units averages closer to one bird per hunter. Top to bottom, the well-sampled refuges span roughly a factor of two to three in raw success.
The regions sort cleanly too. The Sacramento Valley tops the state at about 2.2 birds per hunter, the San Joaquin sits at 2.1, Southern California at 1.8, the Northeast at 1.6, and Suisun Marsh & Delta averages lowest at 1.4. But keep the caveat in mind: a refuge's raw average bundles together everything about it — its water, its pressure, its season timing, even which kinds of days its regulars choose to hunt. The raw leaderboard tells you where success has happened, not how much of it the marsh itself deserves credit for.
When you go: the season has one shape, everywhere
The arc through the season is the most dramatic pattern in the raw record, and it repeats almost everywhere. October opens hot: the first half of the month — early-zone openers, mostly in the northeast — runs about 3.0 birds per hunter, and the last half of October, when the main Central Valley openers land, holds 2.3. Then the bottom falls out. Early November averages 1.3 — less than half the opening pace — aka Slowvember. The easy local birds have been shot at and the big northern push hasn't arrived. From there success climbs steadily every half-month: 1.8 in early December, 2.1 in late December, 2.3 in early January, and 2.6 in the last two weeks of the season as fresh migrants pile in.
Chart 03 shows that arc as birds-per-hunter by half-month. Focus a region in the controls and a dashed line appears — the all-refuge average under the same conditions — so you can see whether your marsh beats the statewide pattern or just rides it. One honest note on the early-October bar: only about a thousand hunt-days land there, mostly in the northeast zone, so it's a real spike but a thin slice of the record.
Success through the season
The weather, as it looks raw — and why it looks wrong
Here is where the raw record gets genuinely interesting. Chart 04 breaks success down by eight weather patterns — sky, wind direction, daytime high, wind speed, cold-front swing, barometer trend, moon, and rain. These are plain marginal averages: every hunt-day sorted into a band, no adjustments.
Read them at face value and the results are surprising. Clear days (2.21) beat rainy ones (1.93). Dry days beat wet days. A cold-front day (2.00) is indistinguishable from a steady one (1.99), and mild warm-up days actually edge both. Cold days don't beat warm days by much of anything. Only two of the eight splits stand out cleanly: wind — genuinely windy days (13+ mph) stand clear of the pack at 2.28 — and the moon, where bright-moon periods drag noticeably below dark ones.
The catch is that these marginals mix everything together. Rainy days cluster in the heart of the season, cold-front days are also colder and windier, and the biggest single day of the year — the opener — falls on a warm, clear October weekend, quietly crediting "warm and clear" with a pile of birds that belong to the calendar. Untangling what each factor does on its own takes a statistical model, and that's the subject of the companion piece on the white paper — where several of these raw readings reverse direction.
Success across eight weather patterns (raw)
What the raw record can — and can't — tell you
Taken on its own terms, the record supports a few plain statements:
- The calendar dominates. The swing from the opener (~2.3–3.0) to the early-November trough (1.3) and back to late January (2.6) dwarfs every weather split in the raw data. Nothing else in these charts moves birds-per-hunter by a factor of two.
- Refuge choice is a real, persistent edge. The same units sit at the top of the leaderboard decade after decade, and the well-sampled spread is roughly two- to three-fold.
- Wind is the one weather split that survives face-value reading. Genuinely windy days (13+ mph) out-produce everything else; a bright moon under-produces.
- Most other weather splits are flat — or backwards — in the marginals. Rain, cold fronts, and falling barometers all look indifferent or worse in the raw splits.
And here is what it can't tell you. The raw splits can't say whether clear days help or whether the opener just happens on them; whether Kern is a great marsh or a well-watered one in a desert; whether rainy days are bad or just mid-November in disguise. Every hunt-day carries its whole context with it — date, place, weather, and the self-selection of the hunters who chose that morning — and a marginal average smears all of that together.
There's also a whole layer of variables nobody records at all. Did the hunters on a given day simply shoot poorly? Did the better hunters draw the less desirable, less productive spots on the refuge that morning? Was a unit half-flooded, or freshly disked, or crowded at the parking lot? Over 39 seasons that kind of noise should mostly balance out — which is exactly why this record is worth studying at this scale — but on any single day it can swamp everything the weather is doing.
The honest asterisk
These are check-station tallies, with all the rounding and reporting quirks that implies. Hunters choose when to go, so a "good day" is partly a day good hunters decided was worth showing up for. Refuge water is actively managed, not handed down by nature. None of that erases the patterns — most are stable across 39 seasons — but it's why nothing on this page should be read as a cause.
Coming next: the model
The companion piece takes these same 49,005 hunt-days into a hierarchical statistical model that holds date, place, and weather still at the same time — and several of the raw readings above reverse direction once the calendar is held fixed. It covers the white paper's findings in plain language first, then goes deep on the statistics and the code, including how the model is wired into a live predictive app.
Sources & reproducibility
Where the numbers come from
Harvest and hunter counts are from California public-refuge check-station reports, 1987–2025 (state and federal wildlife areas). Daily weather is Open-Meteo ERA5 reanalysis, matched to each check station. The tidy analysis table behind everything lives in the refuge-harvest-model white-paper repo, which also holds the statistical model covered in the companion piece.
Every figure on this page is computed directly from the 49,005 hunt-days — no model, no adjustment. All rates are hunter-weighted, and the ~95% bands are a Poisson approximation.
Poke at it yourself
The live data explorer is the companion to this article: the same 49,005 hunt-days, fully cross-filterable by region, refuge, season, date window, and every weather pattern, with a zoomable map. This article's source, including the data-build script, is in the refuge-harvest-success repo.
