Is it a surf day?
Each break's page answers that in its first line: whether, in the next seven days, there's a daylight window of your kind of surf, and when. Everything under it is the evidence.
Grades
Every hour is graded like a ski piste, on the size of the waves reaching the beach:
| Grade | Size at the beach | What it's like |
|---|---|---|
| flat | under 0.3 m | Nothing to ride. |
| green | 0.3–0.6 m | Beginner whitewater: easy to stand up and ride to the beach. |
| blue | 0.6–1.5 m | Proper waves with some power, still friendly. |
| red | 1.5 m and up | Big or rough. For confident surfers. |
| black ⚠ | any size, when a hazard applies | Experts only. Never shown as a recommendation. |
Black means at least one of: 3 m or more; 1.5 m or more with onshore wind gusting 55 km/h or more; strong offshore wind (35 km/h or more, which pushes you away from the beach); or a storm surge of +1.0 m or more with onshore wind. A gusty south-westerly on its own isn't black: people surf those days happily.
Pick your kind of day: any mix of green, blue, red and black. Blue and red are on to start with; someone happy in blue but not in black or beginner whitewater can leave just blue on. Black is never on unless you turn it on, and black hours are always listed under “Be careful” whatever you pick. Your choice stays in your browser. Only daylight counts. Grades describe the sea, not the weather: whether 3°C and rain is worth it is your call.
Where the lines come from. We looked for public, dated blog posts and comments on surf conditions along the Dutch coast, and scored 1,280 timestamped calls from them against what our forecast would have said, rebuilt from historical data for every day from August 2023 to October 2026. With these lines our grade matches what people said 68% of the time (70% against reports from people on the beach); the posts' own forecasts matched the beach reports 78% of the time. The weakest grade is red: days of long, clean groundswell often feel bigger than the forecast says. We keep checking against new observations. If a grade looks wrong to you on the beach, tell us: contact@hayloftsystems.nl.
Waves reaching the beach
Forecast models give the height of the open sea several kilometres out — including waves heading the wrong way. On a day with offshore wind, the sea can be a metre of chop blowing out to sea while the beach gets almost nothing. So we split the sea into swell and wind waves and count each by how directly it travels towards that beach; anything heading away counts as nothing. Angled swell still counts for something, because the seabed bends it round towards the shore. The open-sea height is still shown when you point at the chart.
Size counts the period too. A metre of 9-second swell has far more push than a metre of 5-second chop, and surfers describe them as different days: the chop is "nothing, just slop". So grades use each part of the sea weighted by its period, given as the height a 7-second wave would need for the same push. The heights you see on the page stay the plain height reaching the beach.
That number is not the face you'll ride, which depends on the sandbanks and the tide on the day. It's a way to compare days and beaches fairly.
Be careful
Grades can't see foam, rip currents or conditions at the pier and harbour mouths. The lifeguards' flags beat any forecast. Thick sea foam and strong currents played a part in the deaths of five experienced surfers at Scheveningen in May 2020; neither shows up in a wave forecast.
Confidence
Every window is checked against two independent wave forecasts.
| Next three days | Days four to seven | |
|---|---|---|
| Both forecasts say it's your kind of day | High | Moderate |
| Only the main forecast does | Moderate | Low |
| Only the second forecast does | Low | Low |
High and moderate windows are marked in gold. Low-confidence windows are listed as a chance, never in gold. Confidence drops a step after three days because the main forecast's detailed regional model only runs about three days ahead; after that it hands over to the same forecaster's coarser global model, and every forecast gets fuzzier further out anyway.
The main forecast is the German weather service's wave model: its detailed European model (DWD EWAM) for the first three days, then its global model (DWD GWAM). The second is Météo-France's. We chose them by checking both against two years of Rijkswaterstaat's measured wave heights at eight stations off the coast, from Zeeland to Egmond, in daylight hours:
| DWD European | DWD global | Météo-France | |
|---|---|---|---|
| Average error (open sea, 1 m or more) | +0.08 m | −0.04 m | −0.20 m |
| Real 1.5 m hours it caught | 89% | 76% | 69% |
| Its 1.5 m hours that didn't happen | 23% | 23% | 10% |
The main forecast is closer to the measured sea and catches most real windows, but raises more false alarms. The second reads low on surfable days and misses more, but when it does say yes it is usually right. That's why agreement between them is the best sign you have. This compares each model's best estimate of the present sea with what was measured; archives don't keep their five-day-ahead forecasts, which are always less accurate.
Wind
Offshore wind — blowing from the land out to sea — grooms the waves; onshore wind chops them up. Each beach faces a slightly different way, so "offshore" is worked out per break:
| Break | Faces | Offshore wind | Wave cell | Tide gauge |
|---|---|---|---|---|
| Domburg | NW (324°) | from the SE | 7 km | Westkapelle |
| Westkapelle | W (276°) | from the E | 10 km | Westkapelle |
| Hoek van Holland | NW (310°) | from the SE | 10 km | Hoek van Holland |
| Ter Heijde | NW (310°) | from the SE | 9 km | Hoek van Holland + Scheveningen (blended by distance) |
| Kijkduin | NW (313°) | from the SE | 9 km | Scheveningen |
| Scheveningen | NW (310°) | from the SE | 7 km | Scheveningen |
| Noordwijk | WNW (288°) | from the ESE | 9 km | Scheveningen + IJmuiden (blended by distance) |
| Zandvoort | WNW (291°) | from the ESE | 9 km | IJmuiden |
| Bloemendaal | WNW (296°) | from the ESE | 11 km | IJmuiden |
| Wijk aan Zee | W (280°) | from the E | 6 km | IJmuiden |
| Egmond aan Zee | W (273°) | from the E | 8 km | IJmuiden + Den Helder (blended by distance) |
| Petten | WNW (285°) | from the ESE | 11 km | IJmuiden + Den Helder (blended by distance) |
| Texel | WNW (298°) | from the ESE | 10 km | Texel Noordzee |
Tide and storm surge
The tide curve is calculated in your browser from harmonic constants we fitted to four years (2022–2025) of Rijkswaterstaat's published astronomical water levels at six gauges. Checked against Rijkswaterstaat's own tables for 2026, which the fit never saw:
| Gauge | Typical error | Worst |
|---|---|---|
| Westkapelle | 7.7 cm | 35.6 cm |
| Hoek van Holland | 6.5 cm | 31.8 cm |
| Scheveningen | 6.4 cm | 31.0 cm |
| IJmuiden | 6.6 cm | 29.2 cm |
| Den Helder | 5.2 cm | 23.3 cm |
| Texel Noordzee | 5.3 cm | 24.7 cm |
Breaks between two gauges blend the two by distance. That astronomical tide leaves out the weather. On this coast a storm can raise or lower the sea by far more than the fit's error, so the page also shows Rijkswaterstaat's measured water level and its own forecast for the next two days. The gap between them and the predicted tide is the surge.
Updates
Nothing is stored. Each time you open or refresh a page, your browser asks Open-Meteo for the latest forecast, and our server asks Rijkswaterstaat for the latest water levels on your behalf, because Rijkswaterstaat doesn't accept requests from browsers.
For AI assistants
Pages build their forecast in the browser, so assistants should use the feed at surfdag.nl/api/<break>.json. To have an assistant send you a daily report, give it surfdag.nl/skill.
Sources
Wave, sea temperature and weather forecasts from Open-Meteo, used under CC BY 4.0. Water levels and the data behind the tide fit from Rijkswaterstaat. Wetsuit advice follows the consensus across the major wetsuit makers' temperature charts.