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,419 dive sites, grouped into 105 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 66 | Fair | Low | Fair | Good | Low | Low | Low | Low | Low | Peak | Peak | Fair | October, November |
| Mataram (Pujut, Lombok Tengah) 46 | Low | Low | Low | Peak | Peak | Good | Low | Fair | Fair | Good | Good | Low | April, May |
| Kuta, Badung 35 | Low | Low | Good | Peak | Good | Fair | Low | Low | Fair | Peak | Peak | Fair | October, November |
| Manado 35 | Low | Low | Low | Low | Good | Good | Good | Peak | Good | Peak | Low | Low | August, September, October |
| Luwok 34 | Low | Low | Low | Fair | Low | Low | Low | Fair | Peak | Peak | Good | Low | September, October |
| Bima 28 | Low | Low | Low | Good | Good | Fair | Low | Low | Fair | Peak | Peak | Low | October, November |
| Jakarta 20 | Low | Low | Low | Good | Peak | Good | Fair | Peak | Good | Peak | Low | Low | May, August, September, October |
| Banda Aceh 3 | Low | Low | Good | Peak | Low | Low | Low | Low | Low | Low | Low | Low | April |
| 🇪🇬 Egypt | |||||||||||||
| Hurghada 91 | Low | Low | Low | Good | Fair | Fair | Peak | Good | Good | Peak | Peak | Fair | July, November |
| Berenice Troglodytica 58 | Low | Low | Low | Low | Low | Low | Peak | Fair | Low | Low | Low | Low | July |
| Sharm El Sheikh 42 | Fair | Low | Low | Fair | Fair | Fair | Good | Good | Good | Peak | Good | Fair | October |
| Marsa Alam 33 | Fair | Fair | Low | Fair | Fair | Fair | Peak | Good | Fair | Peak | Fair | Low | July, October |
| Saint Catherine 22 | Fair | Low | Low | Good | Fair | Fair | Peak | Good | Fair | Good | Peak | Good | July, November |
| 🇲🇻 Maldives | |||||||||||||
| Malé 94 | Low | Low | Peak | Peak | Low | Fair | Low | Low | Low | Low | Low | Low | March, April |
| Maamigili 42 | Low | Low | Peak | Peak | Low | Fair | Low | Low | Low | Low | Low | Low | March, April |
| Gan 8 | Low | Low | Peak | Fair | Low | Good | Low | Low | Low | Low | Low | Low | March, June |
| Noonu Atoll 8 | Low | Low | Peak | Peak | Low | Low | Low | Low | Low | Low | Low | Low | March, April |
| 🇫🇷 France | |||||||||||||
| Biarritz 19 | Low | Low | Low | Low | Low | Fair | Peak | Peak | Good | Low | Low | Low | July, August |
| Hyères, Var 15 | Low | Low | Low | Low | Low | Good | Good | Peak | Low | Low | Low | Low | August |
| Cannes 10 | Low | Low | Low | Low | Low | Good | Good | Peak | Low | Low | Low | Low | July, August |
| Papeete 8 | Low | Fair | Peak | Good | Fair | Low | Low | Low | Low | Low | Low | Low | March |
| Perpignan/Rivesaltes 8 | Low | Low | Low | Low | Fair | Peak | Good | Peak | Good | Good | Low | Low | June, August |
| Bordeaux 7 | Low | Low | Low | Low | Low | Low | Good | Peak | Fair | Low | Low | Low | July, August |
| Le Castellet, Var 7 | Low | Low | Low | Low | Low | Good | Fair | Peak | Low | Low | Low | Low | August |
| Montpellier/Méditerranée 7 | Low | Low | Low | Low | Low | Fair | Fair | Peak | Low | Low | Low | Low | August |
| Pointe-à-Pitre 7 | Good | Fair | Fair | Peak | Good | Low | Low | Fair | Peak | Fair | Good | Good | April, September |
| Grand-Bourg 5 | Fair | Fair | Fair | Peak | Peak | Low | Low | Good | Peak | Fair | Fair | Fair | April, May, September |
| Hondarribia 5 | Low | Low | Low | Low | Low | Fair | Peak | Peak | Low | Low | Low | Low | July, August |
| Brest 4 | Low | Low | Low | Fair | Fair | Peak | Good | Peak | Fair | Low | Low | Low | June, August |
| Marignane, Bouches-du-Rhône 4 | Low | Low | Low | Fair | Low | Good | Peak | Peak | Low | Low | Low | Low | July, August |
| 🇵🇭 Philippines | |||||||||||||
| Coron 18 | Fair | Low | Good | Peak | Good | Fair | Low | Low | Low | Low | Good | Fair | April |
| Mamburao 17 | Low | Low | Fair | Peak | Peak | Fair | Low | Low | Low | Fair | Good | Low | April, May |
| Ormoc City 14 | Low | Low | Fair | Good | Peak | Peak | Low | Good | Low | Low | Fair | Low | May, June |
| Dumaguete City 12 | Low | Low | Fair | Peak | Good | Fair | Low | Good | Fair | Low | Low | Low | April |
| Cabatuan 10 | Low | Low | Fair | Peak | Good | Low | Low | Low | Low | Low | Low | Low | April |
| Panglao 7 | Low | Low | Low | 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 | Fair | Peak | Low | Low | Low | Low | Fair | Good | Fair | Low | April |
| Mambajao 3 | Low | Low | Low | Fair | Good | Peak | Fair | Peak | Good | Fair | Low | Low | May, June, August, September |
| 🇹🇭 Thailand | |||||||||||||
| Na Thon (Ko Samui Island) 23 | Low | Low | Good | Peak | Low | Low | Low | Low | Low | Low | Low | Low | April |
| Phuket 17 | Low | Fair | Good | Peak | Low | Low | Low | Low | Low | Low | Low | Low | April |
| Langkawi 9 | Low | Fair | Good | Peak | Good | Good | Good | Low | Low | Low | Low | Low | April |
| Ranong 8 | Low | Fair | Good | Peak | Low | Low | Low | Low | Low | Low | Low | Low | April |
| Laem Ngop 7 | Low | Fair | Good | Peak | Fair | Low | Low | Low | Low | Low | Low | Low | April |
| Krabi 6 | Low | Low | Good | Peak | Fair | Low | Low | Low | Low | Low | Low | Low | April |
| 🇺🇸 United States | |||||||||||||
| Pensacola 11 | Low | Fair | Low | Good | Fair | Fair | Peak | Fair | Good | Fair | Low | Fair | July |
| Kahului 10 | Good | Low | Low | Low | Low | Fair | Fair | Fair | Good | Peak | Good | Fair | October |
| Monterey 10 | Low | Low | Low | Low | Fair | Fair | Good | Peak | Peak | Good | Low | Low | July, August, September |
| Burlington 6 | Fair | Low | Low | Low | Fair | Fair | Low | Fair | Peak | Low | Low | Low | September |
| Gainesville 6 | Fair | Fair | Low | Fair | Good | Fair | Good | Fair | Good | Peak | Good | Good | October |
| San Jose 5 | Low | Low | Low | Low | Low | Fair | Peak | Peak | Peak | Good | Low | Low | July, August, September |
| Hagåtña 4 | Fair | Fair | Good | Good | Peak | Peak | Fair | Fair | Fair | Low | Good | Fair | May, June |
| Hilo 4 | Good | Low | Low | Low | Low | Low | Low | Low | Peak | Peak | Low | Low | September, October |
| Panama City Beach 3 | Low | Low | Low | Low | Low | Low | Low | Low | Fair | Peak | Fair | Low | October |
| San Juan 3 | Peak | Low | Fair | Low | Peak | Good | Low | Fair | Fair | Peak | Good | Peak | January, May, October, December |
| Santa Ana 3 | Fair | Low | Low | Fair | Fair | Good | Peak | Good | Good | Peak | Good | Good | July, October |
| 🇭🇷 Croatia | |||||||||||||
| Rijeka(Omišalj) 32 | Low | Low | Low | Low | Low | Peak | Good | Fair | Low | Low | Low | Low | June |
| Pula 13 | Low | Low | Low | Low | Low | Peak | Good | Good | Low | Low | Low | Low | June, July |
| Zadar 11 | Low | Low | Low | Low | Low | Peak | Good | Fair | Low | Low | Low | Low | June |
| Split 5 | Low | Low | Low | Low | Low | Peak | Good | Fair | Low | Fair | Low | Low | June |
| Sečovlje 3 | Low | Good | Low | Fair | Low | Peak | Good | Good | Low | Low | Low | Good | June |
| 🇦🇺 Australia | |||||||||||||
| Cairns 11 | Low | Low | Low | Low | Low | Low | Low | Low | Low | Good | Peak | Fair | November |
| Gold Coast 11 | Low | Low | Low | Low | Low | Peak | Fair | Fair | Low | Low | Low | Low | June |
| Sydney (Mascot) 11 | Low | Fair | Low | Peak | Good | Good | Fair | Fair | Fair | Fair | Low | Good | April |
| Williamtown 9 | Low | Fair | Low | Good | Fair | Fair | Fair | Good | Good | Fair | Fair | Peak | December |
| Geelong/Melbourne 8 | Good | Good | Peak | Good | Fair | Low | Low | Low | Low | Low | Low | Low | March |
| Grafton 5 | Good | Good | Low | Low | Low | Peak | Low | Fair | Low | Low | Fair | Good | June |
| Perth 5 | Fair | Good | Good | Peak | Good | Low | Low | Low | Fair | Fair | Fair | Fair | April |
| 🇮🇹 Italy | |||||||||||||
| Genova (GE) 21 | Low | Low | Low | Low | Low | Peak | Peak | Peak | Low | Low | Low | Low | June, July, August |
| Alghero 7 | Low | Low | Low | Fair | Good | Peak | Peak | Peak | Good | Good | Low | Low | June, July, August |
| Rome 7 | Low | Low | Low | Low | Low | Peak | Good | Good | Low | Low | Low | Low | June, August |
| Campo nell'Elba (LI) 5 | Low | Low | Low | Low | Fair | Good | Peak | Good | Low | Low | Low | Low | July |
| Grosseto (GR) 5 | Low | Low | Low | Low | Fair | Peak | Good | Peak | Low | Low | Low | Low | June, July, August |
| Reggio Calabria 5 | Low | Low | Low | Low | Low | Peak | Peak | Peak | Fair | Low | Low | Low | June, July, August |
| Olbia (SS) 4 | Low | Low | Low | Low | Low | Good | Good | Peak | Fair | Fair | Low | Low | June, July, August |
| Pisa (PI) 3 | Low | Low | Low | Low | Low | Peak | Peak | Fair | Low | Low | Low | Low | June, July |
| 🇲🇽 Mexico | |||||||||||||
| Cozumel 27 | Low | Low | Fair | Fair | Good | Low | Good | Good | Peak | Good | Fair | Low | September |
| Cancún 5 | Low | Low | Low | Fair | Good | Low | Peak | Peak | Good | Low | Low | Low | July, August |
| San José del Cabo 3 | Low | Fair | Low | Fair | Peak | Fair | Fair | Fair | Fair | Good | Good | Peak | May, December |
| Tulum 3 | Fair | Fair | Fair | Fair | Fair | Low | Good | Good | Peak | Peak | Good | Good | September, October |
| 🇬🇧 United Kingdom | |||||||||||||
| Brighton, East Sussex 25 | Low | Low | Low | Fair | Good | Peak | Good | Peak | Low | Low | Low | Low | June, July, August |
| Kirkwall, Orkney Islands 10 | Low | Low | Low | Fair | Peak | Good | Good | Fair | Low | Low | Low | Low | May, July |
| Birmingham, West Midlands 3 | Low | Low | Low | Fair | Fair | Good | Fair | Peak | Low | Low | Low | Low | August |
| 🇵🇹 Portugal | |||||||||||||
| Lisbon 18 | Low | Low | Low | Low | Low | Low | Fair | Good | Peak | Low | Low | Low | September |
| Porto 8 | Low | Low | Low | Low | Low | Fair | Low | Peak | Good | Low | Low | Low | August |
| Portimão 6 | Low | Low | Low | Fair | Fair | Fair | Fair | Fair | Peak | Fair | Good | Low | September |
| Cascais 4 | Low | Low | Low | Low | Low | Low | Fair | Fair | Peak | Fair | Low | Low | September |
| 🇲🇹 Malta | |||||||||||||
| Valletta 32 | Low | Low | Low | Low | Low | Good | Peak | Peak | Low | Low | Low | Low | June, July, August |
| 🇨🇾 Cyprus | |||||||||||||
| Paphos 8 | Low | Low | Low | Low | Low | Good | Peak | Fair | Fair | Good | Low | Low | June, July |
| Lefkoniko (Geçitkale) 7 | Low | Low | Low | Low | Low | Fair | Good | Fair | Peak | Peak | Good | Low | September, October |
| Larnaca 5 | Low | Low | Low | Low | Fair | Good | Good | Good | Good | Peak | Peak | Low | October, November |
| Akrotiri 3 | Low | Low | Low | Low | Low | Good | Good | Fair | Good | Peak | Good | Low | October |
| 🇨🇴 Colombia | |||||||||||||
| San Andrés 17 | Low | Low | Good | Peak | Good | Low | Low | Fair | Peak | Good | Low | Low | September |
| 🇲🇦 Morocco | |||||||||||||
| Rabat 8 | Low | Low | Low | Low | Low | Fair | Peak | Peak | Good | Good | Fair | Low | July, August |
| Essaouira 4 | Fair | Low | Low | Low | Fair | Fair | Good | Peak | Peak | Peak | Peak | Fair | August, September, October, November |
| Agadir (Temsia) 3 | Low | Low | Low | Low | Low | Low | Peak | Peak | Good | Good | Peak | Fair | July, August, September, November |
| 🇪🇨 Ecuador | |||||||||||||
| Isla Baltra 8 | Peak | Peak | Good | Good | Good | Fair | Low | Low | Low | Fair | Fair | Good | January, February |
| Salinas/La Libertad 5 | Good | Fair | Peak | Peak | Good | Fair | Low | Low | Fair | Fair | Low | Fair | April |
| 🇨🇻 Cape Verde | |||||||||||||
| Espargos 6 | Low | Low | Low | Low | Low | Fair | Peak | Fair | Low | Good | Fair | Low | July |
| São Pedro 4 | Fair | Low | Low | Low | Low | Low | Peak | Low | Low | Fair | Good | Fair | July |
| 🇹🇿 Tanzania | |||||||||||||
| Zanzibar 8 | Fair | Good | Good | Low | Low | Low | Low | Low | Fair | Fair | Good | Peak | December |
| 🇦🇷 Argentina | |||||||||||||
| Mar del Plata 4 | Good | Low | Low | Low | Peak | Good | Fair | Fair | Good | Fair | Low | Low | May |
| La Plata 3 | Low | Low | Low | Fair | Fair | Peak | Fair | Low | Low | Low | Low | Fair | June |
| 🇲🇺 Mauritius | |||||||||||||
| Plaine Magnien 4 | Low | Fair | Fair | Peak | Fair | Low | Low | Low | Fair | Good | Peak | Good | April, November |
| 🇹🇷 Turkey | |||||||||||||
| Bodrum 3 | Low | Low | Low | Fair | Fair | Fair | Low | Peak | Fair | Peak | Low | Low | August, October |
Rating is relative to each region's own year: 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 region needs at least 3 sites with climatology to appear (105 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.