NOAA Tides API - Tide Predictions, High Tide & Low Tide Times
Pricing
from $3.70 / 1,000 tide predictions
NOAA Tides API - Tide Predictions, High Tide & Low Tide Times
For marine ops, fishing and surf apps, port logistics and coastal engineering: the time and height of every high and low tide from the official NOAA CO-OPS API, for any of 3,499 US tide prediction stations - 1,256 reference and 2,243 subordinate. Give a station id or just a lat,lon. No API key.
Pricing
from $3.70 / 1,000 tide predictions
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
9 days ago
Last modified
Categories
Share
For boating, fishing and surf apps, coastal construction scheduling, and any calendar that has to know when the water moves: official NOAA tide predictions for the United States — the time and height of every high tide and low tide, for any of NOAA's 3,499 tide prediction stations, from the CO-OPS API.
Every station type works, not just the easy ones: 1,256 reference stations and 2,243 subordinate stations (measured from the official station list on 2026-08-31). Give it a station id, or just a lat,lon point and it finds the nearest station for you — 13.44,144.66 resolved to Apra Harbor, Guam at 0.54 km, with a +10 offset. Up to 365 days in one run, and past dates work.
The raw API returns local clock time with no offset (2026-09-01 04:32), which no scheduler can use. This Actor reads the same window in the station's local time and in UTC and lines the two up, so every row carries timeLocal, timeUtc and utcOffsetHours — plus minutesToNextTide and the range to it, already computed.
NOAA also rejects a request with HTTP 200 and an error body. That is reported as a rejection, never as "no tides".
- No API key, no scraping, no proxy. US government data, public domain.
- Past and future dates. Tide tables for a whole month, or just the next tides from right now.
- Both unit systems on every row — feet and metres.
- Export as JSON, CSV or Excel.
What this returns that the raw NOAA endpoint does not
The CO-OPS predictions endpoint answers with three fields per tide: a time string, a height, and H or L.
Everything below is the work this Actor does on top of it.
| Column | Why it matters |
|---|---|
timeUtc, utcOffsetHours | The raw API returns local clock time with no offset (2026-09-01 04:32). A scheduler cannot use that. This Actor reads the same window in the station's local time and in UTC and lines the two up, so every tide carries a real ISO-8601 UTC timestamp and the offset that applied at that moment — daylight saving included. When the two cannot be lined up, timeUtc is null and the run says so: it never guesses an offset. |
stationId, stationName, state, latitude, longitude | The raw API returns none of these with the predictions. |
distanceKm, requestedPoint | Give "37.81,-122.47" and you get the nearest station plus how far away it is. |
heightMeters | The raw API returns one unit system per request. Both are here (meters converted from the feet NOAA returns; within 1 cm of NOAA's own metric answer). |
minutesToNextTide, rangeToNextFeet, rangeToNextMeters | How long until the water turns, and how far it moves. |
isNextTide | In the default "days ahead" mode, exactly one row per station is marked as the next tide from the moment the run starts. In a fixed beginDate/endDate window it marks the first tide that is still ahead, and nothing at all for a window in the past. |
timeZoneName | NOAA's own name for the station's standard time zone (EST even in July). Use utcOffsetHours for the offset that actually applied to that tide - it follows daylight saving. |
stationType, referenceStationId | Whether a station is a NOAA reference station or a subordinate station, and which station it is derived from. |
Input
| Field | Type | Default | Meaning |
|---|---|---|---|
locations | array | ["8443970"] | NOAA station ids (8443970, TEC1603) and/or points ("42.36,-71.05"). Points are resolved to the nearest tide prediction station. |
days | integer | 7 | Days of tides from the moment the run starts. Only tides still ahead are returned. About 4 tides per day per station. |
beginDate | string | "" | Start of a fixed window, "2026-09-01". The station's own local calendar days, like a printed tide table. Past dates work. |
endDate | string | "" | End of the fixed window. At most 365 days in one run. |
datum | string | "MLLW" | MLLW, MLW, MSL, MTL, MHW, MHHW, NAVD or STND. |
maxRetries | integer | 4 | Retries when NOAA does not answer. Bad requests are not retried. |
Output
One row per predicted high or low tide:
{"rowType": "tide","stationId": "8443970","stationName": "Boston","state": "MA","latitude": 42.35389,"longitude": -71.05028,"stationType": "reference","tideType": "Mixed","tide": "high","tideCode": "H","timeLocal": "2026-08-31 14:05","dateLocal": "2026-08-31","timeUtc": "2026-08-31T18:05:00.000Z","utcOffsetHours": -4,"heightFeet": 10.43,"heightMeters": 3.179,"datum": "MLLW","minutesToNextTide": 375,"rangeToNextFeet": 10.439,"rangeToNextMeters": 3.182,"isNextTide": true,"source": "NOAA CO-OPS Tides & Currents (official, public domain)"}
What it does when something is wrong
A tide feed that quietly answers "no tides" is worse than one that fails, so this Actor never does that.
- A station id that does not exist, a station with no predictions (the Great Lakes have none), or a datum the station does not publish → one row saying which input failed and why, and that row is not charged.
- NOAA rejecting a request with HTTP 200 and an error body — which is what happens when you ask for a datum a station does not carry — is treated as a failure, not as a day without tides.
- If no location at all could be read, the run fails instead of finishing green with an empty dataset.
- If the local and UTC copies of the predictions cannot be lined up, the rows still arrive with local time
and heights,
timeUtcisnull, and the run logs it and recordsRUN_UTC_UNMATCHED. - A run that hits the maximum total charge you set says so in the log and in
RUN_BUDGET_STOP.
Measured
Run on 2026-08-31 with 5 inputs — 2 station ids, 2 points, 1 station id that does not exist:
35 tide rows + 1 error row in 7.9 seconds, 0 rows with a missing UTC timestamp.
13.44,144.66 resolved to Apra Harbor, Guam at 0.54 km, with a +10 offset.
42.36,-71.05 resolved to Boston at 0.68 km — the same station as the id 8443970 in the same run,
so it was read once and charged once, not twice.
A 365-day window was checked at Boston, Troy, Guam and Hawaii: both daylight saving changes were picked up
in the right places, and no timestamp went backwards.
The build is covered by 70 automated checks, and 65 deliberate defects were injected one at a time to confirm those checks actually catch them.
Billing
Pay per event: one charge per tide row delivered. Rows that report a problem, and the row that says "no tides in this window", are not charged. Setting a maximum total charge on the run stops delivery rather than handing rows over unpaid.
Support
Questions and bug reports: use the Issues tab on this Actor. Include the input you ran and the run id.
Data source: NOAA CO-OPS Tides & Currents — official US government data, public domain. This Actor is not affiliated with NOAA.