The best time to dive, month by month, for every dive region
"Best time to visit" advice is usually one person's memory of one trip — and it's almost always pitched at whole countries, which is the wrong grain: the Pacific and Caribbean coasts of Mexico don't share a season. So this scores every month from 5 years of daily wind, rain and temperature across 1,277 dive sites, grouped into 98 dive regions (by nearest travel hub) in 23 countries. Darker = the calmer, drier, warmer weeks each region's own conditions favour. Built from our open dataset — reproducible, not a guess.
| Dive region | J | F | M | A | M | J | J | A | S | O | N | D | Best months |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 🇮🇩 Indonesia | |||||||||||||
| Sorong 65 | Fair | Low | Fair | Good | Low | Low | Low | Low | Low | Peak | Peak | Fair | October, November |
| Mataram (Pujut, Lombok Tengah) 42 | Low | Low | Low | Peak | Peak | Good | Good | Good | Good | Good | Good | Low | April, May |
| Manado 34 | Low | Low | Low | Low | Good | Good | Good | Peak | Peak | Peak | Low | Low | August, September, October |
| Luwok 32 | Low | Low | Low | Fair | Low | Low | Low | Fair | Peak | Peak | Good | Low | September, October |
| Kuta, Badung 31 | Low | Low | Good | Peak | Good | Good | Good | Good | Good | Peak | Peak | Fair | April, October, November |
| Bima 28 | Low | Low | Low | Good | Good | Good | Good | Good | Good | Peak | Peak | Low | October, November |
| Jakarta 20 | Low | Low | Low | Good | Peak | Good | Good | Peak | Good | Peak | Low | Low | May, August, September, October |
| Banda Aceh 3 | Low | Good | Good | Peak | Good | Good | Low | Good | Good | Low | Low | Low | April |
| 🇪🇬 Egypt | |||||||||||||
| Hurghada 86 | Low | Low | Low | Good | Fair | Fair | Peak | Good | Good | Peak | Peak | Good | July, November |
| Berenice Troglodytica 57 | Low | Low | Low | Low | Low | Low | Peak | Fair | Low | Low | Good | Low | July |
| Sharm El Sheikh 41 | Good | Good | Good | Good | Good | Fair | Good | Good | Good | Peak | Good | Good | October |
| Marsa Alam 31 | Fair | Fair | Low | Fair | Fair | Fair | Peak | Good | Fair | Peak | Good | Good | July, October |
| Saint Catherine 21 | Good | Good | Good | Good | Good | Good | Peak | Good | Good | Good | Peak | Good | July, November |
| 🇲🇻 Maldives | |||||||||||||
| Malé 94 | Good | Good | Peak | Peak | Low | Good | Low | Low | Low | Low | Low | Low | March, April |
| Maamigili 40 | Good | Good | Peak | Peak | Low | Good | Low | Low | Low | Low | Low | Low | March, April |
| Gan 8 | Good | Good | Peak | Good | Low | Good | Low | Good | Good | Low | Low | Low | March, June |
| Noonu Atoll 8 | Good | Good | Peak | Peak | Low | Good | Low | Low | Low | Low | Low | Low | March, April |
| 🇵🇭 Philippines | |||||||||||||
| Coron 18 | Good | Good | Good | Peak | Good | Fair | Low | Low | Low | Low | Good | Good | April |
| Mamburao 17 | Good | Good | Good | Peak | Peak | Fair | Low | Low | Low | Fair | Good | Good | April, May |
| Ormoc City 14 | Low | Low | Good | Good | Peak | Peak | Low | Good | Low | Low | Fair | Low | May, June |
| Dumaguete City 11 | Good | Good | Good | Peak | Good | Fair | Low | Good | Fair | Low | Low | Low | April |
| Cabatuan 10 | Good | Good | Good | Peak | Good | Low | Low | Low | Low | Low | Low | Low | April |
| Panglao 7 | Low | Low | Good | Peak | Good | Fair | Low | Fair | Fair | Low | Low | Low | April |
| Surigao City 4 | Low | Low | Fair | Good | Good | Peak | Low | Low | Fair | Fair | Low | Low | June |
| Davao 3 | Low | Low | Good | Peak | Low | Low | Low | Low | Fair | Good | Fair | Low | April |
| Mambajao 3 | Low | Low | Low | Good | Good | Peak | Fair | Peak | Good | Fair | Low | Low | May, June, August, September |
| 🇫🇷 France | |||||||||||||
| Hyères, Var 13 | Low | Low | Low | Low | Low | Good | Good | Peak | Good | Low | Low | Low | August |
| Cannes 10 | Low | Low | Low | Low | Good | Good | Good | Peak | Good | Low | Low | Low | July, August |
| Papeete 8 | Low | Fair | Peak | Good | Good | Low | Good | Low | Low | Low | Low | Low | March |
| Biarritz 5 | Low | Low | Low | Low | Low | Good | Peak | Peak | Good | Low | Low | Low | July, August |
| Bordeaux 5 | Low | Low | Low | Low | Low | Good | Peak | Peak | Good | Low | Low | Low | July, August |
| Le Castellet, Var 5 | Low | Low | Low | Low | Low | Good | Good | Peak | Good | Low | Low | Low | August |
| Pointe-à-Pitre 5 | Good | Good | Good | Peak | Good | Good | Good | Good | Peak | Fair | Good | Good | September |
| Grand-Bourg 4 | Fair | Fair | Fair | Peak | Peak | Low | Low | Good | Peak | Fair | Fair | Fair | April, May, September |
| Perpignan/Rivesaltes 4 | Low | Low | Low | Low | Good | Peak | Good | Peak | Good | Good | Low | Low | June, August |
| Brest 3 | Low | Low | Low | Fair | Fair | Peak | Good | Peak | Fair | Low | Low | Low | June, August |
| Hondarribia 3 | Low | Low | Low | Low | Low | Good | Peak | Peak | Low | Low | Low | Low | July, August |
| Montpellier/Méditerranée 3 | Low | Low | Low | Low | Good | Good | Good | Peak | Good | Low | Low | Low | August |
| 🇹🇭 Thailand | |||||||||||||
| Na Thon (Ko Samui Island) 20 | Good | Good | Good | Peak | Low | Low | Low | Low | Low | Low | Low | Low | April |
| Phuket 15 | Good | Good | Good | Peak | Low | Low | Low | Low | Low | Low | Low | Good | April |
| Langkawi 9 | Low | Good | Good | Peak | Good | Good | Good | Low | Low | Low | Low | Low | April |
| Ranong 8 | Good | Good | Good | Peak | Low | Low | Low | Low | Low | Low | Low | Low | April |
| Laem Ngop 7 | Good | Good | Good | Peak | Fair | Low | Low | Low | Low | Low | Good | Good | April |
| Krabi 6 | Good | Good | Good | Peak | Fair | Low | Low | Low | Low | Low | Low | Good | April |
| 🇺🇸 United States | |||||||||||||
| Pensacola 11 | Low | Fair | Low | Good | Fair | Fair | Peak | Fair | Good | Fair | Low | Fair | July |
| Monterey 10 | Low | Low | Low | Low | Fair | Good | Good | Peak | Peak | Good | Low | Low | July, August, September |
| Kahului 8 | Good | Good | Good | Good | Good | Good | Good | Good | Good | Peak | Good | Good | October |
| Burlington 6 | Fair | Low | Low | Low | Fair | Good | Good | Good | Peak | Low | Low | Low | September |
| Gainesville 6 | Fair | Good | Good | Good | Good | Good | Good | Fair | Good | Peak | Good | Good | October |
| San Jose 5 | Low | Low | Low | Low | Low | Good | Peak | Peak | Peak | Good | Low | Low | July, August, September |
| Hagåtña 4 | Good | Good | Good | Good | Peak | Peak | Fair | Fair | Fair | Low | Good | Good | May, June |
| Hilo 4 | Good | Low | Low | Low | Low | Good | Low | Low | Peak | Peak | Low | Low | September, October |
| Panama City Beach 3 | Low | Low | Low | Good | Good | Low | Low | Low | Fair | Peak | Fair | Low | October |
| San Juan 3 | Peak | Good | Good | Good | Peak | Good | Good | Good | Good | Peak | Good | Peak | January, May, October, December |
| 🇭🇷 Croatia | |||||||||||||
| Rijeka(Omišalj) 29 | Low | Low | Low | Low | Low | Peak | Good | Good | Low | Low | Low | Low | June |
| Pula 11 | Low | Low | Low | Low | Low | Peak | Good | Good | Low | Low | Low | Low | June, July |
| Zadar 10 | Low | Low | Low | Low | Low | Peak | Good | Good | Good | Low | Low | Low | June |
| Split 5 | Low | Low | Low | Low | Low | Peak | Good | Good | Good | Fair | Low | Low | June |
| Sečovlje 3 | Low | Fair | Low | Fair | Low | Peak | Good | Good | Low | Low | Low | Fair | June |
| 🇦🇺 Australia | |||||||||||||
| Cairns 11 | Low | Low | Low | Low | Low | Low | Low | Low | Low | Good | Peak | Fair | November |
| Williamtown 9 | Good | Good | Good | Good | Fair | Fair | Fair | Good | Good | Good | Good | Peak | December |
| Sydney (Mascot) 8 | Low | Good | Low | Peak | Good | Good | Fair | Fair | Fair | Good | Good | Good | April |
| Geelong/Melbourne 7 | Fair | Good | Peak | Good | Good | Low | Low | Low | Low | Low | Low | Low | March |
| Grafton 5 | Good | Good | Low | Low | Low | Peak | Low | Fair | Low | Low | Fair | Good | June |
| Perth 4 | Fair | Good | Good | Peak | Good | Low | Low | Low | Fair | Fair | Good | Fair | April |
| Gold Coast 3 | Good | Low | Low | Good | Low | Peak | Fair | Fair | Good | Good | Low | Good | June |
| 🇮🇹 Italy | |||||||||||||
| Genova (GE) 20 | Low | Low | Low | Low | Low | Peak | Peak | Peak | Low | Low | Low | Low | June, July, August |
| Alghero 6 | Low | Low | Low | Fair | Good | Peak | Peak | Peak | Good | Good | Low | Low | June, July, August |
| Rome 6 | Low | Low | Low | Low | Good | Peak | Good | Peak | Good | Low | Low | Low | June, August |
| Reggio Calabria 4 | Low | Low | Low | Low | Good | Peak | Peak | Good | Good | Good | Low | Low | June, July, August |
| Campo nell'Elba (LI) 3 | Low | Low | Low | Low | Fair | Good | Peak | Good | Good | Low | Low | Low | July |
| Grosseto (GR) 3 | Low | Low | Low | Low | Fair | Good | Good | Peak | Good | Low | Low | Low | August |
| Olbia (SS) 3 | Low | Low | Low | Low | Good | Peak | Peak | Peak | Good | Good | Low | Low | June, July, August |
| 🇬🇧 United Kingdom | |||||||||||||
| Brighton, East Sussex 25 | Low | Low | Low | Fair | Fair | Peak | Good | Peak | Low | Low | Low | Low | June, July, August |
| Kirkwall, Orkney Islands 10 | Low | Low | Low | Fair | Fair | Fair | Good | Fair | Low | Low | Low | Low | May, July |
| 🇲🇽 Mexico | |||||||||||||
| Cozumel 24 | Good | Good | Good | Good | Good | Low | Good | Good | Peak | Good | Good | Good | September |
| Cancún 5 | Low | Low | Low | Fair | Good | Low | Peak | Peak | Good | Good | Good | Low | July, August |
| San José del Cabo 3 | Good | Good | Good | Good | Peak | Good | Good | Good | Good | Good | Good | Peak | May, December |
| 🇵🇹 Portugal | |||||||||||||
| Lisbon 17 | Low | Low | Low | Low | Low | Low | Good | Good | Peak | Low | Low | Low | September |
| Porto 6 | Low | Low | Low | Low | Low | Good | Good | Peak | Good | Low | Low | Low | August |
| Portimão 5 | Low | Low | Low | Fair | Fair | Fair | Fair | Fair | Peak | Good | Fair | Low | September |
| Cascais 4 | Low | Low | Low | Low | Low | Low | Good | Good | Peak | Fair | Low | Low | September |
| 🇲🇹 Malta | |||||||||||||
| Valletta 31 | Low | Low | Low | Low | Low | Good | Peak | Peak | Good | Good | Low | Low | June, July, August |
| 🇨🇴 Colombia | |||||||||||||
| San Andrés 17 | Low | Low | Good | Peak | Good | Low | Low | Fair | Peak | Good | Low | Low | September |
| 🇨🇾 Cyprus | |||||||||||||
| Paphos 6 | Low | Low | Low | Good | Good | Good | Peak | Good | Good | Good | Good | Low | July |
| Lefkoniko (Geçitkale) 5 | Low | Low | Low | Good | Good | Good | Good | Good | Peak | Peak | Good | Low | September, October |
| Larnaca 3 | Low | Low | Low | Good | Good | Good | Good | Good | Good | Peak | Peak | Low | October, November |
| 🇪🇨 Ecuador | |||||||||||||
| Isla Baltra 7 | Peak | Peak | Good | Good | Good | Good | Good | Good | Good | Good | Good | Good | January, February |
| Salinas/La Libertad 4 | Good | Fair | Good | Peak | Good | Good | Good | Good | Good | Good | Good | Good | April |
| 🇨🇻 Cape Verde | |||||||||||||
| Espargos 6 | Low | Low | Low | Low | Low | Good | Peak | Good | Good | Good | Good | Low | July |
| São Pedro 3 | Good | Low | Good | Good | Low | Low | Peak | Good | Good | Good | Good | Good | July |
| 🇲🇦 Morocco | |||||||||||||
| Rabat 5 | Low | Low | Low | Low | Good | Good | Peak | Peak | Good | Good | Fair | Low | July, August |
| Essaouira 3 | Fair | Good | Good | Good | Good | Good | Good | Peak | Peak | Peak | Peak | Good | August, September, October, November |
| 🇦🇷 Argentina | |||||||||||||
| Mar del Plata 4 | Good | Low | Low | Low | Fair | Fair | Fair | Fair | Fair | Fair | Low | Low | May |
| La Plata 3 | Good | Good | Good | Fair | Fair | Fair | Fair | Low | Low | Low | Good | Good | June |
| 🇹🇿 Tanzania | |||||||||||||
| Zanzibar 4 | Good | Good | Good | Low | Good | Good | Good | Good | Good | Good | Good | Peak | December |
| 🇲🇺 Mauritius | |||||||||||||
| Plaine Magnien 3 | Low | Good | Good | Peak | Good | Low | Low | Low | Low | Good | Peak | Good | April, November |
| 🇹🇷 Turkey | |||||||||||||
| Bodrum 3 | Low | Low | Low | Fair | Good | Good | Good | Peak | Good | Peak | Low | Low | August, October |
Rating vs. each region's own year, plus fixed comfort thresholds: Peak Good Fair Low "Low" = that region's off-season, not "bad diving". Number after a region = dive sites in it. Hover a cell for the underlying wind / rain / temperature.
How the regions and the score are built
A country is too coarse a unit — Mexico spans the Pacific and the Caribbean, the US spans Florida, California and Hawaii. We don't hold administrative regions, so each dive site is snapped to its nearest airport hub (within 150 km) and regions are named by that hub city — Cozumel, Cabo, Kona, Key West — which is how you'd fly there anyway. Sites more than 150 km from any hub (remote liveaboard reefs like Socorro) are left out.
For each site we hold a 5-year daily climatology — median wind, mean rain and mean air temperature per day — from Open-Meteo / ERA5. We average those to a monthly value per region, then score each month on three things a diver feels:
- Calm — lower wind means better visibility, easier boat access and less surge.
- Dry — less rain means less runoff killing viz, and fewer blown-out days.
- Warm — warmer air tracks warmer water (weighted at half, since divers tolerate warmth far better than cold).
Each factor is z-normalised within the region and combined. Every month is then rated Peak / Good / Fair / Low by how far it sits from that region's own best month — so the rating answers "which months are best for this region", not a global ranking, and a genuinely year-round region never drops to "Low". A relative score alone over-reacts where conditions barely change, so we also apply fixed diver thresholds (rain above ~3 mm/day, wind above ~13 kn, air below ~25°C): a month that is comfortable in absolute terms is rated at least Good, and a month that is rough in absolute terms is capped at Fair. A region needs at least 3 sites with climatology to appear (98 qualify today).
Caveats, stated plainly. This is a climate-conditions signal, not a marine-life calendar — a manta or whale-shark season can peak outside the calmest weeks. Water temperature is inferred from air, not measured per month. Regions are approximated by airport proximity, not surveyed dive-operator boundaries. And climate is the long-run average; any single year varies. Every input is in the open dataset, so you can re-derive or re-weight this yourself.
Data: OpenWaterAtlas open dataset (DOI 10.5281/zenodo.20668393), built on Open-Meteo / ERA5. CC-BY 4.0 — reuse with attribution and a link back.