Skip to content
OpenWaterAtlas

How we score climate fit

Every spot in OpenWaterAtlas gets a 0–100 score for a given date window. Here's exactly what goes into that number — and what doesn't.

The formula

Four ingredients, weighted by what actually matters for a trip that works.

  1. 40%

    Historical wind & wave fit

    Five years of daily wind and wave data, matched against the activity. Diving and freediving reward calm windows (p50 wind < 15 kn). Kitesurfing rewards consistent wind in the 12–25 kn Beaufort band. Surfing sits in between (8–22 kn sweet spot). We count "good days" inside your window and convert that ratio to a score.

  2. 25%

    Skill alignment

    Beginner trips lose points on spots that demand current handling, deep entries, or low visibility. Advanced divers can tolerate everything but get a small bonus on easier spots when traveling with mixed parties. The system compares your declared level against the spot's difficulty band.

  3. 20%

    Party fit

    Solo, couple, family, or group changes what "a good spot" means. Family with kids gets a bonus on shallow, easy spots near towns. Solo travelers get a bonus on accessible spots with hostel density. Couples where one dives and one kites get a special cross-discipline pair recommendation when both activities are within 5 km.

  4. 15%

    Budget proxy

    We use cost-of-living indexes (Numbeo-style aggregates) and OpenStreetMap density of hostels, dive centers, and grocery stores as a rough budget signal. We're not pricing your trip — we're flagging whether a destination is plausible for a backpacker vs. an all-inclusive resort traveler.

All four signals are clamped to 0–100, so no single ingredient can dominate. The final number is what you see on every spot card.

Origin-aware scoring

Starting M{TBD}, OpenWaterAtlas considers your departure country when ranking destinations. How your departure country affects rankings: the base climate-fit score is blended with an origin factor that reflects visa friction, flight zone, and jet-lag impact.

final_score = base_score × 0.9 + origin_factor × 0.1

The origin factor itself is a weighted blend of three signals (0–100 each):

  1. Visa policy (40%)

    visa-free = 100 · visa-on-arrival = 85 · e-visa = 70 · visa required = 40 · denied = 0.

  2. Flight zone (35%)

    domestic = 100 · short-haul = 90 · medium-haul = 70 · long-haul = 50 · ultra-long = 30. Add +10 if a direct flight is available from the primary hub in your origin country.

  3. Jet-lag impact (25%)

    0h diff = 100 · 1–3h = 85 · 4–6h = 65 · 7–9h = 45 · 10–12h = 25.

If you don't set an origin, the origin factor is neutral (50) and the score falls back to the base climate fit. No IP address is stored.

  • Visa matrix — passport-index 2024 + manual curation
  • Flight routes — OpenFlights 2024 + manual curation of the top 200 routes
  • Distance & jet-lag — great-circle calculation from country centroids

Data sources

Everything is licensed for commercial use with attribution. We do not scrape paywalled or NC-licensed data.

  • NOAA SST: daily. Bleaching: 5-day. Buoys: hourly.

    Sea surface temperature, Coral Reef Watch bleaching alerts, NDBC buoy data for wind/wave realtime overlay.

    API
    ERDDAP gridded SST · NDBC station feeds · Coral Reef Watch v3.1
    License
    Public domain (US Federal)
  • Open-Meteo Forecast: hourly. Historical climatology: rebuilt monthly.

    Wind, wave, swell, precipitation, air temperature — daily climatology and forecast. Self-hosted on our infra (DWD attribution).

    API
    Marine API · Forecast API
    License
    CC-BY 4.0 (DWD source); free non-commercial / commercial via self-host.
  • iNaturalist Per-spot refresh: monthly.

    Marine species sightings per spot — what divers have actually seen recently.

    API
    Observations API (geosearch + taxonomy)
    License
    CC0 / CC-BY only — we filter out CC-BY-NC observations.
  • OpenStreetMap Per-region: monthly.

    POI seed for dive centers, hostels, grocery stores, hospitals, chambers. Density signals for budget proxy.

    API
    Overpass API per-region queries · Nominatim geocoding (self-hosted in production)
    License
    ODbL — commercial OK with attribution and share-alike on derivative DB.
  • Wikipedia Quarterly diff crawl.

    Narrative seed for country, region, and spot pages. Always paraphrased and editor-reviewed before publish.

    API
    REST API · Action API category crawl
    License
    CC-BY-SA 4.0 — attributed per source.
  • Wikimedia Commons Monthly + on-demand.

    Primary photography source. Geosearch + categorymembers around each spot.

    API
    MediaWiki API geosearch
    License
    Per-file: CC0 / CC-BY / CC-BY-SA. Author + license badge shown on every image.
  • Pexels On-demand.

    Editorial filler imagery for landing pages where no Commons photo exists.

    API
    Pexels API
    License
    Pexels License (free commercial use, no attribution required — we attribute anyway).
  • Passport Index Quarterly diff + ad-hoc corrections.

    Visa matrix per origin × destination country — passport-index 2024 + manual curation for edge cases.

    API
    Open dataset CSV (~199×199 entries)
    License
    Open data — attributed.
  • OpenFlights Annual refresh.

    Direct flight routes between IATA airports — OpenFlights 2024 + manual curation of the top 200 routes we care about for origin scoring.

    API
    Routes CSV (~67k worldwide)
    License
    ODbL — commercial OK with attribution.
  • Distance & jet-lag — great-circle calculation from country centroids, time-zone diff via PostGIS tz lookup.

    API
    Static PostGIS table (centroid + tz per ISO-2)
    License
    Public domain.

Limitations →

Limitations

Climate scoring is not weather forecasting. Here is what we explicitly cannot do.

Historical, not predictive

We score against a 5-year rolling window for wind and wave (10 years for sea surface temperature). This tells you what's typical — not what will happen on the day. For day-of forecasts we link out to Windy and the operator's own brief.

Grid-cell accuracy

Wind and wave data come from gridded reanalysis (ERA5, NOAA WAVEWATCH III). In remote areas without a nearby buoy, the nearest grid cell can be 25–50 km from the actual spot, which underestimates local micro-climates (lee shadows, thermal effects).

Bleaching alert lag

NOAA Coral Reef Watch bleaching alerts update on a 5-day cadence, with up to 30 days of delay before a confirmed alert appears in our index. For real-time coral status, check operator briefings.

Sparse spots

Tier C spots (see below) may have minimal validation. Confidence indicators on each spot card mark this honestly.

Editorial process

We sort every spot into three tiers based on validation depth. Tier is shown on each spot page.

  1. Tier A — Hand-curated

    Founder-visited or expert-verified. Complete metadata, original photos, operator-confirmed pricing windows, conservation notes, hazard maps. These are the spots we'd send a friend to.

  2. Tier B — LLM-augmented

    Built from primary sources (NOAA, Open-Meteo, OSM, Wikipedia, iNaturalist) with LLM-assisted narrative synthesis, then reviewed by the editor. Operator data is from public listings or operator self-submission.

  3. Tier C — OSM-imported

    Geocoded from OpenStreetMap with minimal metadata. Awaiting curation. Surfaced only when local context is requested (e.g., "all dive spots in this bay").

Something wrong?

Spot info out of date, operator closed, or you have a correction?

Contact us →
View →