Marine Weather, Wave, Swell & Sea Forecast Scraper
Pricing
from $7.56 / 1,000 marine conditions results
Marine Weather, Wave, Swell & Sea Forecast Scraper
Get live marine conditions for any coastal spot or coordinates: wave height, swell and wind-wave with direction and period, sea surface temperature, ocean currents, Douglas sea state, plus a multi-day wave forecast and optional 92-day history. Export to JSON, CSV or Excel.
Pricing
from $7.56 / 1,000 marine conditions results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Marine Weather, Wave, Swell & Sea Forecast Scraper
Here is one real result, with every field the actor returns:
{"input": "Nazare, Portugal","resolvedName": "Nazaré","country": "Portugal","admin1": "Leiria District","latitude": 39.7083,"longitude": -9.125,"timezone": "Europe/Lisbon","observedTime": "2026-08-21T12:15","waveHeight": 2.14,"waveHeightFt": 7.02,"wavePeriod": 7.95,"waveDirection": 333,"waveDirectionCompass": "NNW","windWaveHeight": 1.12,"windWaveDirection": 350,"windWavePeriod": 4.1,"swellWaveHeight": 1.8,"swellWavePeriod": 7.75,"swellWaveDirection": 327,"swellWaveDirectionCompass": "NNW","seaSurfaceTemperatureC": 17.8,"seaSurfaceTemperatureF": 64,"oceanCurrentVelocity": 0.6,"oceanCurrentDirection": 252,"seaStateDouglas": 4,"seaStateLabel": "Moderate","forecastDays": 3,"forecast": [{ "date": "2026-08-21", "waveHeightMax": 2.22, "swellWaveHeightMax": 1.84, "wavePeriodMax": 8.05, "waveDirectionDominant": 331 },{ "date": "2026-08-22", "waveHeightMax": 1.86, "swellWaveHeightMax": 1.82, "wavePeriodMax": 9.5, "waveDirectionDominant": 329 },{ "date": "2026-08-23", "waveHeightMax": 2, "swellWaveHeightMax": 1.88, "wavePeriodMax": 10.65, "waveDirectionDominant": 282 }],"historyDays": 92,"historyStart": "2026-05-21","historyEnd": "2026-08-20","avgWaveHeight": 1.45,"maxWaveHeight": 3.16,"maxSwellHeight": 3.1,"roughestDay": "2026-06-05","roughestDayWaveHeight": 3.16,"pctDaysRough": 10.9,"aiSmallCraftAdvisory": true,"aiSurfConditions": "The waves are moderate, with a significant height of 2.14 m, suitable for experienced surfers.","aiBoatingSuitability": "Conditions are challenging for small boats and kayaks due to moderate wave heights.","aiFishingConditions": "Fishing may be difficult due to the moderate sea state and wave conditions.","aiSwimSafety": "Swimming is not recommended due to the moderate wave heights and currents.","aiSummary": "Moderate conditions warrant caution for small craft and swimmers.","source": "Open-Meteo Marine","observedAt": "2026-08-21T11:24:03.726Z","error": null}
The most complete marine conditions scraper available. It returns the full wave field decomposed into total wave, wind-wave and swell with direction and period for each, plus sea surface temperature, ocean surface currents, a derived Douglas sea-state label, and a multi-day wave forecast, for any coastal spot by name or coordinates. Most marine scrapers give you wave height alone.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Use cases
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor takes a list of coastal locations, resolves each one to ocean coordinates (a place name is geocoded for you, or you pass a latitude,longitude pair directly), and returns one normalized marine record per location. Each record carries the current sea state and a daily wave forecast for the requested window.
For every location you get the total significant wave height (in metres and feet), the wave period and direction (degrees plus a 16-point compass label), and the same three values broken out separately for the locally wind-driven wind-wave and the distant-generated swell. On top of that it returns sea surface temperature (Celsius and Fahrenheit), ocean surface current velocity and direction, and a derived Douglas sea-state code (0 to 9) with its plain-language label (Calm, Smooth, Slight, Moderate, Rough, Very rough, High, Very high, Phenomenal). A compact forecast array gives the daily max wave height, max swell height, max wave period and dominant wave direction for each forecast day.
Marine conditions are defined only over ocean grid points. If a location resolves to an inland or off-grid point, the actor returns an honest error record for it (and is not charged) rather than fabricating values or crashing.
Use cases
- Surf forecasting. Track swell height, swell period and swell direction separately from local wind-wave chop to judge wave quality at a break.
- Shipping and marine logistics routing. Monitor wave height, sea state and ocean currents along a route or at ports to plan safer, faster passages.
- Offshore wind and energy operations. Check significant wave height and sea state windows for crew transfers, installation and maintenance vessels.
- Fishing. Combine sea surface temperature, current and sea state to decide where and when to fish, inshore or offshore.
- Coastal tourism and beach safety. Feed wave height, sea state labels and swim-safety context into beach and resort dashboards.
- Ocean research and monitoring. Pull consistent wave, swell, SST and current series for many coastal points into JSON, CSV or Excel.
- Insurance and risk. Use the 92-day history add-on to quantify how rough a stretch of coast has been (average and max wave height, share of rough days).
Quickstart
Open the actor, paste this into the input, and press Run. It returns current marine conditions plus a 3-day wave forecast for two well-known coastal spots.
{"locations": ["Nazare, Portugal", "Pipeline, Hawaii"],"forecastDays": 3}
Each item in locations can be a coastal place name (geocoded automatically) or a latitude,longitude pair such as "33.6,-118.3". One record is returned per location.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
locations | string[] | no | (none) | Coastal locations to fetch. Each item is a place name (for example Nazare, Portugal, Pipeline, Hawaii), auto-geocoded, OR a latitude,longitude pair such as 33.6,-118.3. One record per location. Use coastal or offshore points; marine data is only defined over the ocean grid. |
forecastDays | integer | no | 3 | Days of daily wave forecast to include per record (0 to 7). 0 returns only the current snapshot. |
includeHistory | boolean | no | false | Opt-in add-on. Adds a 92-day marine history summary per location (average and max wave height, max swell, roughest day, percentage of rough days). Billed only when a real history series is returned. Paid Apify plans only. |
aiMarineAdvisory | boolean | no | false | Opt-in add-on. Adds an AI-written marine advisory per location (small craft advisory flag, surf, boating, fishing, swim safety, summary). Billed only when a usable advisory is produced. Paid Apify plans only. |
maxResults | integer | no | 10 | Maximum locations to return in one run. Free Apify plans are capped at 10. |
Output reference
One dataset item per location. Types are string, number, integer, boolean, array, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
input | string | The location string you passed in. |
resolvedName | string | Resolved place name (from geocoding), or the lat,lon you passed. |
country | string | Country of the resolved location, or null for a raw coordinate. |
admin1 | string | State or region of the resolved location. |
latitude | number | Latitude of the marine grid point used. |
longitude | number | Longitude of the marine grid point used. |
timezone | string | IANA timezone of the location. |
observedTime | string | Local time of the current observation. |
waveHeight | number | Significant wave height in metres. |
waveHeightFt | number | Significant wave height in feet. |
wavePeriod | number | Wave period in seconds. |
waveDirection | number | Mean wave direction in degrees (0 to 360). |
waveDirectionCompass | string | Wave direction as a 16-point compass label (N, NNE, NE, ...). |
windWaveHeight | number | Wind-wave (locally wind-driven) height in metres. |
windWaveDirection | number | Wind-wave direction in degrees. |
windWavePeriod | number | Wind-wave period in seconds. |
swellWaveHeight | number | Swell (distant-generated) wave height in metres. |
swellWavePeriod | number | Swell wave period in seconds. |
swellWaveDirection | number | Swell wave direction in degrees. |
swellWaveDirectionCompass | string | Swell direction as a 16-point compass label. |
seaSurfaceTemperatureC | number | Sea surface temperature in degrees Celsius. |
seaSurfaceTemperatureF | number | Sea surface temperature in degrees Fahrenheit. |
oceanCurrentVelocity | number | Ocean surface current velocity in km/h. |
oceanCurrentDirection | number | Ocean surface current direction in degrees. |
seaStateDouglas | integer | Douglas sea-state code 0 to 9 derived from wave height. |
seaStateLabel | string | Douglas sea-state label (Calm, Smooth, Slight, Moderate, Rough, Very rough, High, Very high, Phenomenal). |
forecastDays | integer | Number of forecast days requested. |
forecast | array | Daily forecast points: date, waveHeightMax, swellWaveHeightMax, wavePeriodMax, waveDirectionDominant. |
historyDays | integer | Days covered by the 92-day history (history add-on). |
historyStart | string | First day in the history window (history add-on). |
historyEnd | string | Last day in the history window (history add-on). |
avgWaveHeight | number | Average daily max wave height over the history window (history add-on). |
maxWaveHeight | number | Max wave height over the history window (history add-on). |
maxSwellHeight | number | Max swell height over the history window (history add-on). |
roughestDay | string | Roughest day in the history window (history add-on). |
roughestDayWaveHeight | number | Max wave height on the roughest day (history add-on). |
pctDaysRough | number | Percentage of history days with max wave height above 2.5 m (history add-on). |
aiSmallCraftAdvisory | boolean | Whether an AI small-craft advisory is warranted (AI advisory add-on). |
aiSurfConditions | string | AI surf conditions assessment (AI advisory add-on). |
aiBoatingSuitability | string | AI boating suitability assessment (AI advisory add-on). |
aiFishingConditions | string | AI fishing conditions assessment (AI advisory add-on). |
aiSwimSafety | string | AI swim safety assessment (AI advisory add-on). |
aiSummary | string | AI plain-language summary of conditions (AI advisory add-on). |
source | string | Data source. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a location that cannot be resolved or has no marine data, a single record with a populated error field is written instead and is not charged. |
Example output record
Real record from a live run (input {"locations": ["33.6,-118.3"], "forecastDays": 3}), a coordinate off the Southern California coast:
{"input": "33.6,-118.3","resolvedName": "33.6,-118.3","country": null,"admin1": null,"latitude": 33.625,"longitude": -118.2917,"timezone": "America/Los_Angeles","observedTime": "2026-08-21T04:15","waveHeight": 0.72,"waveHeightFt": 2.36,"wavePeriod": 8.7,"waveDirection": 247,"waveDirectionCompass": "WSW","windWaveHeight": 0,"windWaveDirection": 278,"windWavePeriod": 0,"swellWaveHeight": 0.72,"swellWavePeriod": 8.7,"swellWaveDirection": 247,"swellWaveDirectionCompass": "WSW","seaSurfaceTemperatureC": 20.6,"seaSurfaceTemperatureF": 69.1,"oceanCurrentVelocity": 0.4,"oceanCurrentDirection": 110,"seaStateDouglas": 3,"seaStateLabel": "Slight","forecastDays": 3,"forecast": [{ "date": "2026-08-21", "waveHeightMax": 0.86, "swellWaveHeightMax": 0.86, "wavePeriodMax": 9.35, "waveDirectionDominant": 236 }],"source": "Open-Meteo Marine","observedAt": "2026-08-21T11:23:57.296Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~marine-wave-swell-forecast-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"locations":["Nazare, Portugal","Pipeline, Hawaii"],"forecastDays":3}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~marine-wave-swell-forecast-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"locations":["33.6,-118.3","21.66,-158.05"],"forecastDays":5}'
Apify CLI:
apify call scrapers_lat/marine-wave-swell-forecast-scraper \--input '{"locations":["Nazare, Portugal"],"forecastDays":3,"includeHistory":true}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per location returned (
resultevent) plus a small one-timeapify-actor-startcharge per run. See the pricing tab for current per-event prices. - Add-ons are opt-in and paid only on success. The 92-day history (
marine_history) is charged per location only when a real history series is returned. The AI advisory (ai_marine_advisory) is charged per location only when a usable advisory is produced. Both are off by default and available to paid Apify plans only. - No charge on failure. If a location cannot be resolved, has no marine data (inland or off-grid), or the run errors, the actor writes a record with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 locations per run, and the paid add-ons are disabled for them. Upgrade for higher
maxResultsand add-ons.
FAQ and troubleshooting
A location returned an error about no marine data. Why?
Marine conditions are only defined over ocean grid points. If a place name or coordinate resolves to an inland or off-grid point, the actor returns an error record for it and does not charge. Use a coastal or offshore point (a nearby latitude,longitude over water works well).
What is the difference between wave, wind-wave and swell?
waveHeight is the total significant wave height. It is decomposed into the windWave component (locally wind-driven chop) and the swell component (longer-period energy that traveled from distant storms). Surfers usually care about the swell height, period and direction.
How is the Douglas sea state computed?
seaStateDouglas (0 to 9) is derived from the significant wave height using the standard Douglas scale thresholds, and seaStateLabel gives the matching plain-language label.
Can I pass coordinates instead of a place name?
Yes. Any item formatted as latitude,longitude (for example 21.66,-158.05) is used directly, no geocoding. Names are geocoded for convenience and are not charged.
How current is the data?
Each record carries observedTime (the local time of the current reading) and observedAt (when the actor collected it). The forecast covers the number of days set in forecastDays.
Is this an official tool? No. This actor is independent and reads only publicly available marine forecast data. It has no affiliation with any weather or ocean agency.
Related scrapers
- Air Quality, AQI, Pollen & UV Scraper: global air quality, US and European AQI, pollutants, pollen and UV.
- Open-Meteo Weather Scraper: global land weather, temperature, precipitation and wind forecast.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with any weather or ocean agency. Accesses only publicly available marine forecast data.
