SurfBase

How we compute surf data

Every surf number on SurfBase is computed from public weather history by an open, versioned model — currently model v3 — 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-10-02

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

Search 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: GSHHG 2.3.7 full-resolution shorelines (LGPL, © Wessel & Smith), pinned by checksum — the substrate each surf spot’s exposure is ray-cast against. Where GSHHG’s 1980s shoreline is too coarse at a spot (a degenerate result), we fall back to Natural Earth 1:10m land polygons (public domain), then to the town’s own exposure — and every exposure value records which of the three it used.
  • Surf-spot locations: OpenStreetMap contributors (ODbL) and open spot registries.
  • Internet speeds: Ookla open-data town medians for fixed download (CC BY-NC-SA 4.0) — published on town pages and the statistics hub only, never redistributed in downloads. Towns without a measured median say so; we never impute one.
  • Cost anchor: World Bank International Comparison Program (ICP) 2021 country price levels (CC BY 4.0), via the official World Bank API. Rent and cost-of-living figures modeled from it are labelled modeled wherever they appear.

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 GSHHG shoreline from each surf spot’s own coordinate — not from one point for the whole town, and with extra near-field sampling so a local headland can block a spot’s sector. Shadowed sectors keep a share of their neighbours’ openness (headland diffraction). 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.35–1.3 m, intermediate 0.6–2.6 m, advanced 0.9–6 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”. Every spot is classified separately, and a town’s monthly figure is the best single spot that month — the envelope, not an average and not a union: a town is as good in March as its best March spot, and a spot’s own window may differ from the town’s. That is why some towns have a split season (a north-facing spot in winter, a west-facing one in autumn) rather than one contiguous block.

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 — the residual error is being quantified.
  • 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 now reports the best of its spots in each month rather than a merged coastline — so the town headline can describe a window you will only find at one specific spot; open the spot pins to see which.

Provenance, in our words

Computed fields are labelled computed (ERA5/ERA5-Ocean 2015–2024, model v3) — 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. Per-spot difficulty labels are held to the same bar: a spot shows a skill level only where a human has verified it. The ERA5 size bands are physics, not difficulty — the level switch on a town’s curve describes wave size for that level, not how hard the wave is. Corrections are welcome: hello@digitalnomadsurf.com.

Weather data by Open-Meteo.com (CC BY 4.0). Coastline © GSHHG (Wessel & Smith, LGPL), with Natural Earth (public domain) as the fallback substrate. Spot data © OpenStreetMap contributors (ODbL).