The formula
Four ingredients, weighted by what actually matters for a trip that works.
- 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.
- 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.
- 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.
- 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):
-
Visa policy (40%)
visa-free = 100 · visa-on-arrival = 85 · e-visa = 70 · visa required = 40 · denied = 0.
-
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.
-
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.
- Country centroids Static.
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
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.
-
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.
-
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.
-
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").