Forecast Accuracy Report

The surf forecast that grades itself. Every 6 hours we snapshot our own forecasts at NOAA buoy locations, then score them against what the buoys actually measured. No cherry-picking — every scored forecast is counted, and every scored pair is published as an open dataset.

Check our work: summary JSON · per-station CSV · every scored pair · the scoring code

Rolling 30-day window · updated 2026-10-18 22:37 UTC

Forecasts scored
47,246
last 30 days
Wave height error (MAE)
0.208 m
0.7 ft average miss
Bias
-0.07 m
under-forecasts on average

Great Lakes

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
East Lake Ontario #45012 2085 -0.08 m 0.174 m 0.189 m 0.225 m
North Lake Michigan #45002 2085 -0.13 m 0.222 m 0.229 m 0.228 m

Gulf

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
Galveston, TX #42035 2317 -0.14 m 0.144 m 0.174 m 0.18 m

Hawaii

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
Mokapu Point, HI #51202 2301 -0.15 m 0.237 m 0.236 m 0.256 m
Waimea Bay, HI #51201 2301 +0.26 m 0.295 m 0.287 m 0.287 m

Mid-Atlantic

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
Barnegat, NJ #44091 2277 -0.23 m 0.266 m 0.296 m 0.384 m
Long Island (30nm S of Islip), NY #44025 2148 -0.13 m 0.227 m 0.267 m 0.361 m
New York Harbor Entrance, NY #44065 2278 -0.04 m 0.163 m 0.173 m 0.232 m

New England

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
Block Island, RI #44097 2278 -0.06 m 0.209 m 0.225 m 0.283 m

Northern California

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
Monterey, CA #46042 2301 -0.01 m 0.151 m 0.172 m 0.194 m
San Francisco Bar, CA #46026 2301 +0.07 m 0.139 m 0.166 m 0.176 m

Pacific Northwest

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
Columbia River Bar, OR/WA #46029 2301 -0.00 m 0.157 m 0.177 m 0.218 m
Grays Harbor (Westport), WA #46211 2301 +0.03 m 0.153 m 0.166 m 0.193 m

Puerto Rico

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
San Juan, PR #41053 2185 -0.02 m 0.104 m 0.118 m 0.123 m

Southeast

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
Cape Canaveral Nearshore, FL #41113 2277 -0.25 m 0.253 m 0.258 m 0.26 m
Grays Reef, GA #41008 2061 -0.05 m 0.157 m 0.167 m 0.2 m
Masonboro Inlet, NC #41110 2277 -0.08 m 0.145 m 0.163 m 0.192 m
Oregon Inlet, NC #44095 2277 -0.16 m 0.195 m 0.258 m 0.33 m
St. Augustine, FL #41117 2277 -0.24 m 0.267 m 0.245 m 0.254 m

Southern California

Buoy Pairs Bias MAE 0–24h MAE 24–48h MAE 48–72h
San Pedro, CA #46222 2317 -0.05 m 0.156 m 0.154 m 0.144 m
Torrey Pines Outer, CA #46225 2301 -0.02 m 0.14 m 0.151 m 0.144 m

Methodology

Every 6 hours (about 2h45m after each NOAA wave-model cycle) we request our own public forecast at the exact coordinates of 21 NDBC wave buoys spanning every region we serve. Each snapshot stores the predicted significant wave height (and wave period, though the period figures aren't shown here — see below) out to 72 hours ahead.

Once a forecast's valid time passes, it is paired with the buoy observation nearest in time (within 45 minutes) and the error is recorded. Bias is the mean of forecast − observed (positive = we over-forecast), MAE is the mean absolute error, both over a rolling 30-day window. Wave heights are significant wave height in meters, compared like-for-like in open water — this measures the wave model, not breaking-wave face height at the beach.

We don't publish a headline period-bias number. Our own forecast sources define "wave period" differently (a mean period from one, a peak period from another) and neither matches NDBC's peak-period observation cleanly, so a pooled figure would mostly measure that definitional gap rather than forecast skill. The per-source period error is still computed and available in the raw JSON for anyone who wants to dig into it.

We use these numbers, not just publish them: where a buoy shows a persistent, well-sampled bias, the forecast served for nearby spots is automatically nudged by the measured amount (capped, and only with 30+ scored pairs behind it). The verification always scores the raw model output, so the correction can't hide the model's true error. Pipeline code is open source.