SurfBase

How we compute surf data

Every surf number on SurfBase is computed from public weather history by an open, versioned model — currently model v2 — with the thresholds published below. Nothing on a town page is a forecast, a rating out of ten, or a writer’s opinion. Where the model has limits, they are listed here, not hidden.

Last updated 2026-09-09

What the numbers mean

Surfable days by month is the share of days — over the 2015–2024 historical record — that had rideable surf for a given skill level: real swell reaching that coastline, at a size that suits the level, without the wind blowing it apart, during daylight hours. It is a climatology: what the ocean has done, not what it will do on your trip.

The monthly swell size band, wind quality and water temperature are shown as plain facts next to the curve. We deliberately do not collapse a town into one abstract surf score.

How results are ordered

Discover has no composite “match” number. Filters are hard cutoffs — every town shown passes every filter you set — and the ordering is a single stated fact. With travel months selected, towns sort by their mean surfable-days percentage across those months, for your level. With no search, towns in their best window right now come first, ranked by the current month’s percentage. The other sorts are equally literal: fastest measured download speed (Ookla town median), lowest modeled rent in USD. Ties break alphabetically, so the same inputs always produce the same order.

Data sources

  • Waves: hourly significant wave height, direction and period from the ERA5-Ocean reanalysis via Open-Meteo (CC BY 4.0), 2015–2024.
  • Wind: hourly 10 m speed and direction from ERA5 via Open-Meteo, 2015–2024.
  • Sea temperature: daily means via Open-Meteo, 2023–2025. Open-Meteo serves no sea-surface temperature before December 2022, so this window is shorter than the wave window — three complete years, every month sampled three times.
  • Coastline geometry: Natural Earth 1:10m land polygons (public domain), pinned by checksum.
  • Surf-spot locations: OpenStreetMap contributors (ODbL) and open spot registries.

The classifier, in full

For every daylight hour (sun above the horizon at that coordinate), an hour is rideable for a level when all four hold:

  • Real swell: wave period ≥ 6 s — shorter is local windchop.
  • Reaching the coast: the swell direction is weighted by a 16-sector open-water map, ray-cast against the land polygons from the town’s actual spots. Land within 15 km on a bearing blocks it (we keep a 0.05 factor for diffracted energy); open water to 300 km is fully exposed; values between are log-scaled and directions between sectors are interpolated. A swell whose reported direction grazes the coast still reaches it through the best-exposed bearing within ±22.5° (directional spread + refraction), at 70% height.
  • The right size for the level: effective height = height × exposure × √(period / 10 s), inside the level’s band — beginner 0.351.3 m, intermediate 0.62.6 m, advanced 0.96 m.
  • Not blown out: under 8 km/h is clean from any direction. Wind within ±67.5° of the landward bearing is offshore — clean to 35 km/h, fair to 55 km/h; within ±67.5° of seaward it is onshore — fair only to 10 km/h; the rest is cross-shore, fair to 18 km/h. “Blown” kills the hour.

A day counts as surfable when at least 2 daylight hours — and at least 20% of that day’s daylight — are rideable. A month joins the best window at ≥ 60% surfable days (intermediate); a town with no month reaching 30% is shown honestly as having no reliably surfable season in our model — we publish that state rather than inventing a “best month”.

These thresholds are our definitions — there is no canonical literature table for “surfable”. They were fixed from physical reasoning, tuned only against a panel of coasts with well-documented seasons, then verified against a second, locked panel the tuning never saw. Every change bumps the model version.

Known limits — read these

  • Grid resolution. The wave reanalysis cells are tens of kilometres wide; neighbouring towns can share the same offshore series. Differentiation comes from coastline exposure and wind, not from the raw wave feed.
  • Swell direction is a proxy before 2021. The historical record carries only the total wave direction, not separated swell trains. We gate on period as a groundswell proxy and measured the disagreement against post-2021 swell partitions on our reference panel: 7.8% of classified hours change exposure materially.
  • No tides. There is no free historical tide dataset; at monthly granularity tide state averages out, but tide-critical spots (shallow reefs, points that only work at low) are not modelled.
  • No seafloor yet. Breaking size uses a period-scaled proxy, not real bathymetry — a deep-water reef and a gentle beach break are treated alike (bathymetry is the next stage of this model).
  • Island shadowing and multi-coast towns. Distant-island swell shadows are only captured where the land polygons intersect a bearing within 300 km, and a town spanning two coasts is treated as open wherever any of its spots is open — both can overstate exposure.

Provenance, in our words

Computed fields are labelled computed (ERA5/ERA5-Ocean 2015–2024, model v2) — never “verified” or “measured”. Town records separately carry an AI-seeded vs spot-checked flag for their descriptive fields; a human check is the only thing that upgrades it. Corrections are welcome: hello@digitalnomadsurf.com.

Weather data by Open-Meteo.com (CC BY 4.0). Coastline © Natural Earth (public domain). Spot data © OpenStreetMap contributors (ODbL).