US NOAA Tide Times Scraper (Predictions & Water Levels)
Pricing
from $1.50 / 1,000 row delivereds
US NOAA Tide Times Scraper (Predictions & Water Levels)
Fetches NOAA tide predictions (high/low tides) and water-level data for US coastal stations. Returns one normalized row per tidal event with station info, timestamps (UTC), values in meters and source URLs. For surf and fishing apps, coastal monitoring and tourism planning.
Pricing
from $1.50 / 1,000 row delivereds
Rating
0.0
(0)
Developer
Steadfetch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
steadfetch/us-tide-times-extractor
Returns NOAA tide predictions (high/low tides) and water-level measurements for US coastal stations, as JSON. One row per tidal event, with station info, UTC timestamps, values in meters, and source URLs.
What it does
- Queries the public, keyless NOAA CO-OPS API (
api.tidesandcurrents.noaa.gov) for tide predictions or water-level data. - Returns one row per predicted high/low tide or water-level measurement:
station_id,product,event_type,time,value,unit,datum,source_url,captured_at. - Supports two product modes:
predictions(high/low tides) andwater_level(continuous measurements with H/L detection). - Uses plain HTTP + JSON. No browser, no login, no paywall.
- Validates every row against the dataset schema before it reaches the dataset.
- Geo-discovery: find stations near a lat/lon coordinate within a radius.
How to use
Run it from the Apify Console or with the CLI:
$apify call steadfetch/us-tide-times-extractor --input='{"stations":["8443970","9414290"]}'
Read the rows from the run's default dataset (JSON, CSV or the API).
Minimum input
{ "stations": ["9414290"] }
With no input the Actor checks the default US stations (8443970 Boston, 9414290 San Francisco) for today.
Input fields
| Field | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
stations | array | No | [] | NOAA station IDs (7-10 digits). Use lat/lon for geo-discovery instead. | ["8443970","9414290"] |
lat | number | No | null | Latitude for geo-discovery (requires lon + radiusKm). | 36.95 |
lon | number | No | null | Longitude for geo-discovery (requires lat + radiusKm). | -121.99 |
radiusKm | integer | No | 25 | Radius in km for geo-discovery (1-100). | 25 |
product | string | No | predictions | NOAA product: predictions or water_level. | predictions |
date | string | No | today | Query date in YYYY-MM-DD format. Defaults to today for predictions. | "2026-10-26" |
monitorMode | boolean | No | false | When true, only emits rows whose values changed vs knownState. | false |
knownState | object | No | {} | Maps station IDs to their last known value (for monitor mode). | {"9414290":1.521} |
Output
Example output
{"station_id": "9414290","station_name": "San Francisco, CA","latitude": 37.8063,"longitude": -122.4659,"product": "predictions","event_type": "H","time": "2026-10-26T07:25:00.000Z","value": 1.521,"unit": "m","datum": "MLLW","source_url": "https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?product=predictions&station=9414290&date=2026-10-26&timezone=gmt&units=metric&format=json","captured_at": "2026-10-26T09:00:00.000Z"}
Output fields
| Field | Type | Description |
|---|---|---|
station_id | string | Seven- to ten-digit NOAA station identifier (required). |
station_name | string or null | Human-readable station name. |
latitude | number or null | Station latitude in decimal degrees. |
longitude | number or null | Station longitude in decimal degrees. |
product | string | predictions or water_level (required). |
event_type | string or null | High tide (H) or low tide (L). Predictions only. |
time | date-time | UTC ISO 8601 timestamp (required). |
value | number | Tide height or water level in meters (required). |
unit | string | Always m (metric). Required. |
datum | string or null | Vertical datum reference (e.g., MLLW). |
source_url | string | Public NOAA URL that returns the same data (required). |
captured_at | date-time | UTC timestamp when the data was fetched (required). |
Pricing
Pay-per-event: apify-actor-start at 0.00005 USD per run (Apify-recommended default) and apify-default-dataset-item at 1.50 USD per 1,000 results (0.0015 USD per row delivered), plus steadfetch-monitor-check at 0.0004 USD per monitor check (0 results delivered).
Measured cost per 1,000 results: about 0.010 USD (local run of two stations: ~12 rows each, 4 HTTP requests, 8 s at 256 MB and 0.2 USD per GB-hour), so the price leaves about 99% margin.
Works on the Apify free plan - about 3,333 results for the $5 monthly credit.
FAQ
Does the Actor need an API key from NOAA? No. The NOAA CO-OPS datagetter API is public and keyless.
Which stations are available? Any NOAA CO-OPS station in the US and its territories. Use the station list or geo-discovery to find the nearest station to a coordinate.
Can I monitor a station for changes? Yes. Set monitorMode: true and pass knownState mapping station IDs to their last known values. Only changed rows are emitted.
What time zone are the timestamps in? All timestamps are UTC. The NOAA API returns times in local time; the Actor converts to UTC when time_zone=gmt is used.
Can I get water-level data? Yes. Set product to water_level and the Actor returns continuous water-level measurements. H/L extrema are auto-detected from the measurements.
When am I charged? Once per run start and once per row delivered. Monitor checks without new data only charge the monitor-check event.
Maintenance
This Actor is tested daily. Data comes from the NOAA CO-OPS API, a public US federal source with no copyright restrictions (17 U.S.C. section 105). No known rotatable anti-bot patterns; the only rate limit is 1 request/second between calls.
Support
Report bugs or request features through the Apify Store page (Issues tab) of the Actor, or through the Steadfetch actors repository issues. Include the run ID and the input used.