How we get our data

What this site is

findsurfcamp.com is an independent comparison of surf camps. It sells nothing and takes no bookings: every "Visit website" button sends you to the camp's own site. We count those clicks per camp, page and language - without storing your IP address - so we can show each camp how many visitors we send it. To tell how many different people that is, each click carries an anonymous code that changes every day and can't be traced back to you; nothing is stored on your device.

A rule runs through everything below: we only publish a figure we can trace to a source. When we do not know something, the page says nothing about it; "unknown" is never shown as "no".

Prices

Every price is read on the camp's own website, never on a booking platform or a review site, and stored with the page address, the date it was checked and the exact sentence it came from. Before it is published, that sentence is found again on the live page.

The price we compare camps on is the "surf week": the lowest price per person for 6 to 8 nights that includes accommodation and surf lessons. If a camp also sells a cheaper stay without lessons, its page shows it separately, labelled as such, and it is never ranked against surf weeks.

A price is only published if the page says it is per person and what it buys (a week, a package of so many nights, or a night); only a week of 6-8 nights with surf lessons is compared as a surf week. We do not work prices out: a nightly rate is not multiplied by seven, and a room price is not divided between guests. There is one sum: where a camp sells the stay and its own surf course separately, each with a published price, the surf week is the two added together, and the page shows it as "stay + surf course" with both figures. Where a camp publishes a table of prices by season, we take the lowest regular price in it, not a "from" figure that no row of the table shows. Where a camp runs a time-limited discount we publish its regular price. Prices appear in the currency the camp uses (euros, US or Australian dollars, British pounds or Indonesian rupiah). You can choose to see every price in one currency: a price in another currency is then converted at the European Central Bank reference rate of the date shown and marked ≈, and the camp page keeps the figure as the camp publishes it. Sorting by price compares currencies the same way.

Where no camp in a destination publishes a surf week but at least three publish a price per person by the night or the trip, as in Mentawai, the destination page shows "Published prices": every such figure as the camp writes it, grouped by unit, never multiplied into a week and never ranked against another unit.

"What a surf week costs" on a destination page is the range and median of those surf weeks, and only appears when at least three camps there publish one. Prices change with the season: check the date next to each one and confirm on the camp's site.

What a camp includes

Meals, yoga, video analysis and who a camp takes (adults only, families) come from the camp's own site, each with a quote and a link to the page it came from, shown next to the value. If a camp's site does not say, we show nothing for it.

Google ratings

Ratings and review counts come from Google (Places API) and only for camps with their own Google listing. We refresh them about once a month and never edit, average or estimate them. A camp without its own listing shows no rating.

Waves, season and swell

Wave figures come from the Copernicus Marine Service global wave reanalysis (GLOBAL_MULTIYEAR_WAV_001_032, known as WAVERYS): the swell height, period and direction every three hours for October 1995 to September 2025, thirty years. We read it at sea off each surf town, in the nearest cell of its 0.2° grid on the side the town's breaks face, within 40 km, whose centre is at sea and whose waves the coast does not damp. For every town we list the surf spots within 6 km from surf-forecast.com, with the type of break and the swell direction each one works best with, and estimate how much of the swell reaches each spot.

A day counts as good for first lessons when a learner spot in the town gets waves of 0.5 to 2 m: a beach break, a beach the town's camps say they teach on, or, in a town with no beach, a reef or point that Wannasurf rates for "All surfers". Beginners start in the whitewater, the broken wave rolling in, not on green waves. The lower limit and the idea of whitewater come from Boqué Ciurana et al. 2022 (Sustainability, a study of the surf schools at Somo): whitewater of 0.9 to 1.5 m for beginners, green waves of 0.5 to 0.9 m, and under 0.5 m nothing to surf; no coaching body publishes a number. The upper limit, 2 m, is calibrated rather than sourced: our height at a spot is the offshore swell scaled by the spot's exposure and its angle to the swell, which overstates the height in the foam zone of a sandy beach. We set it against what camps say about their own towns (below). Read on the yearly mean, 8 of 13 checkable claims agree at 1.5 m, 11 of 13 at 2 m and 11 of 13 at 2.5 m; reading claims that say "always" month by month, as we do below, 7, 8 and 10 of 13. At 2.5 m nearly every town reads 90-100%, so the figure stops telling towns apart: 2 m is the limit that improves agreement under both readings while keeping towns apart. The claims that still disagree (Taghazout, Seminyak, Mirissa, Santa Teresa, Famara) are quoted beside their tables. The camp check below uses these same claims, so their agreement with the 2 m band is partly by construction.

The other three levels are named as schools and camps name them (what each can do is on our Surf levels page, /surf-levels) and read on the face of the wave at its peak, the height surfers name by the body. We convert our height at a spot with the day's mean period of the primary swell (forecasts usually quote the peak period, which is longer) using Komar & Gaughan (1972), Hb = 0.39 g^(1/5) (T H²)^(2/5), times 0.7. That multiplier runs from 0.7 for an ordinary beach to 1.0 for an exposed peak, 0.85 in the middle; we use the ordinary-beach end because our height at a spot overstates what breaks, as the first-lessons calibration showed (carried into the formula it gives 0.68), and because with 0.85, 38 of the 79 towns with learner spots never had a month of green waves on most days, the sheltered bays where beginners are taught among them; with 0.7, 13. A face is uncertain by about 30% on a given beach and day. Body terms follow Surfline's scale (knee 0.6 m, waist 0.9, chest 1.2, head 1.5, overhead 1.8). Beginner (green waves): a face of 0.6 to 1.2 m, knee to chest high, at a beach, a school beach or a spot Wannasurf rates for all surfers, and not at a beach Wannasurf rates for experienced surfers or pros only. Intermediate: 1.2 to 2 m, chest high to just overhead, at any spot. Advanced: 1.5 m and up, head high and up, at any spot. A month tile reads "most days" at 50% of its days or more, "some days" from 25%, "few days" below; first lessons are said in words, "almost every day" from 85%. Where no month has green waves on most days, the table says why when one reason covers most days of the year: the wave is bigger than chest high at every green-wave spot (and, if none of them is sheltered, that smaller waves may break inside or in sheltered corners the model cannot see), or under knee high at every one.

"In season" means that on most days of the month (at least half) the town has waves for first lessons; towns with no month like that are judged on waves for intermediate or advanced surfers (most days for either). A town with no beach break and no such reef on its spot list gets no learner figure: we write "no data" rather than 0%. Days that miss first lessons are counted as too small (every learner spot under 0.5 m) or too big (none between 0.5 and 2 m and one above). The "typical swell offshore" is the usual range of the open-sea swell over the year - not the height of a wave breaking on the beach.

School beaches are the beaches where a camp's surf school, in its own words on its own website, teaches beginners. One enters our figures only with such a quote and its page, and only when it has a surf-forecast.com page that gives its position, exposure and ideal swell direction; beaches whose shelter we could only estimate are recorded but not used. A school beach counts as a learner spot whatever its type, and even beyond the 6 km of the spot list, because that is where the camps say they teach. Where a camp states how often beginners can have lessons, when the beginner season is or how rarely the surf gets too big, we quote it beside the figures and check them against it: they agree when our figure falls no more than 10 points short of the camp's (a figure the camp gives for the year is read against our yearly average; a claim that beginners can always, or every day, have lessons is about every month, so it is read against our worst month; for how rarely the surf gets too big, when ours is no more than 10 points above it), and, for a season, when they read at least as many first-lessons days in those months as in the rest of the year. A camp's word is not a measurement, so where the two differ we say so and leave the reader to weigh both. Wind and tide are not measured: an onshore wind or a high tide can spoil waves the swell alone would allow.

Wave figures: Generated using E.U. Copernicus Marine Service Information; https://doi.org/10.48670/moi-00022. Water figures: NOAA Coral Reef Watch CoralTemp (public domain).

Checked against buoys

We check the wave figures of 30 towns against the buoys within 50 km: a deep-water buoy (300 m or more) where there is one, since it measures the open sea the model reads, and otherwise an exposed coastal buoy on the same coast. A coastal buoy near a headland or a harbour measures a sea the coast has already sheltered, which the spot model accounts for itself, so it is left out where a deep buoy exists. Over 2022-2025, the buoy's hourly readings and the reanalysis go through the same spot model on the days both have data, and we compare the share of days for first lessons, for beginners on green waves and for intermediates month by month. Both take the model's period: buoys report the peak period and the model the mean one, and the face of a wave grows with the period, so the check compares heights and directions. A town is flagged when the difference averages more than 10 points a month or exceeds 25 in one month, or when the buoy's and the model's daily wave heights correlate below 0.8. A verdict needs 10 calendar months and a year of days in common. 23 towns agree, 3 are flagged and 4 have too few months of buoy records yet. Towns with no suitable buoy within 50 km carry a model estimate, unchecked.

Buoy data: Generated using E.U. Copernicus Marine Service Information; https://doi.org/10.48670/moi-00043, from Puertos del Estado, Euskalmet, Instituto Hidrográfico, IEO-CSIC and Cerema (CANDHIS). CDIP 271 via NOAA NDBC: Data courtesy of CDIP (https://cdip.ucsd.edu).

TownBuoyDistanceDaysFirst lessons, pointsGreen waves, pointsIntermediate, pointsWorst month, pointsDaily rResult
AjoSantander offshore37 km0-----too few months
AjoBilbao-Vizcaya49 km10831055170.98agrees
Berria (Santoña)Bilbao-Vizcaya39 km1083564120.98agrees
Berria (Santoña)Santander offshore46 km0-----too few months
BiarritzDonostia37 km106534490.99agrees
BiscarrosseCap Ferret27 km105923370.99agrees
CaiónLangosteira II6 km107610109200.94agrees
CapbretonDonostia46 km106553490.99agrees
Costa AdejeTenerife Sur16 km937181235820.4flagged
El MédanoTenerife Sur9 km937662210.65flagged
GijónCabo de Peñas47 km88312480.98agrees
HossegorDonostia46 km106553490.99agrees
LacanauCap Ferret44 km105932280.99agrees
Laga (Urdaibai)Bilbao-Vizcaya41 km1083754150.99agrees
Las PalmasGran Canaria37 km884154110.95agrees
MolietsAnglet39 km759444100.98agrees
Moya (Gran Canaria north coast)Gran Canaria24 km884466130.95agrees
PenicheMonican0130 km1007153110.99agrees
Porto CovoSines coastal14 km203-----too few months
RazoVillano-Sisargas47 km1023948190.97agrees
SalinasCabo de Peñas25 km883434100.99agrees
San ClementeCDIP 271 Green Beach9 km80413480.92agrees
San Juan de la ArenaCabo de Peñas22 km883334100.99agrees
Santa CruzMonican0148 km100731260.99agrees
SeignosseDonostia47 km106553490.99agrees
SomoSantander offshore40 km0-----too few months
SopelaBilbao-Vizcaya28 km1083464120.98agrees
SuancesSantander offshore47 km0-----too few months
ValdoviñoLangosteira II43 km107611109240.93flagged
Vieux-BoucauAnglet33 km759444100.98agrees
Vila Nova de MilfontesSines coastal25 km203-----too few months
ZarautzDonostia34 km106543590.99agrees

Live forecast

"Waves today", the wave period and the weather on the cards, and the next days on each camp, are model forecasts: wave height and period from Météo-France's MFWAM wave model (a 1/12° grid) and air temperature and the weather symbol from ECMWF's IFS model (0.25°). Our server reads them from Open-Meteo's open data each time a new model run is published (MFWAM twice a day, IFS four times). The waves are read at sea off each surf town, in the grid cell nearest the one the wave figures above use, and the weather in the cell nearest the town.

The models give a value every three hours. "Today" is the step nearest the current time; each of the next days is the average of its morning steps, from 6 to 12 o'clock local time. The weather symbol is worked out from cloud cover, rain, snow and how unstable the air is, the way Open-Meteo does it. These are forecasts for the open sea, not a surf report: a sheltered beach can be much smaller.

Forecast data: Météo-France, ECMWF, via Open-Meteo.com (CC BY 4.0).

Water temperature

The water temperature is the sea surface temperature off each surf town from NOAA Coral Reef Watch CoralTemp (a daily satellite analysis at 5 km) for October 2015 to September 2025: the median of every seventh day in each month, read about 12 km out from the town on the side its breaks face. Each camp card shows the figure for the month it is now; the pages also give the range from the coldest month to the warmest. We use the last ten years because the sea is warming, so an older average would read colder than the water you will find. It is open water, so a sheltered bay or a river mouth can be a degree or two off.

Airports and driving times

The nearest airport is the closest one with scheduled flights, from OurAirports. The driving time and distance are calculated on OpenStreetMap roads (OSRM) without traffic and rounded to 5 minutes, so allow extra time at busy hours. Where our catalogue records a transfer time to that same airport (in Bali, for example, where traffic doubles the free-flow time), that time is used instead; the filter and the airport sort use the same minutes the page shows.

Photos

Photos come from each camp's own website and promotional videos, and every gallery names its source. If a photo is yours and you want it removed or replaced, see the Photos page.

Pages we ask search engines to index

A camp page is offered to search engines only when it holds at least one fact of its own: a Google rating from its own listing, a verified price or verified details of what it includes. The others stay on the site and in every list, and return to the index as soon as they gain one.

Found a mistake?

Write to contact@findsurfcamp.com with the page address. Camps can also send us their prices, packages and photos; we publish them with the same rules as everything else.