NWS Official Weather: Daily High/Low & METAR Data
Pricing
from $20.00 / 1,000 daily climate reports
NWS Official Weather: Daily High/Low & METAR Data
Official NOAA/NWS daily climate reports for about 600 US stations as clean JSON: max and min temperature with times, precipitation, snow, wind, records, normals, preliminary vs final. Plus hourly METAR observations for any station. Public-domain data from api.weather.gov, no key, no scraping.
Pricing
from $20.00 / 1,000 daily climate reports
Rating
0.0
(0)
Developer
Tenzin Phuntsok
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Get the official NOAA / National Weather Service daily high and low, precipitation, snow, wind, records and normals for about 600 US stations as clean JSON rows, plus hourly METAR observations for any NWS station. Pick stations and dates, click Start, and download the dataset or pull it through the API. Public-domain government data, straight from api.weather.gov: no key, no scraping, no browser.
What does NWS Official Weather do?
The National Weather Service publishes a Climatological Report (Daily), product code CLI, for each of its climate stations every day. It is fixed-width text written for humans. This Actor fetches those reports and parses them field by field, and it also fetches the station's raw hourly observations.
- Daily climate report: the official maximum and minimum temperature with the time each occurred, average temperature, precipitation, snowfall and snow depth, heating and cooling degree days, peak wind and gust, sky cover, humidity, the record and normal values for the date, and the normals for tomorrow. Preliminary and final versions of the report are kept apart.
- Station observations: the hourly and special observations for any NWS/ICAO station (temperature, dewpoint, humidity, wind, gust, pressure, visibility, cloud layers, raw METAR), converted to US units.
Run it once for a date range, or schedule it daily to build your own history. Results are available as JSON, CSV or Excel, through the API, or chained into another Actor such as Dataset to Google Sheets Sync.
Who is NWS weather data for?
- Prediction-market and weather-derivative traders who want the official NWS daily high and low, not a third-party estimate, with the preliminary and final report versions kept apart.
- Analysts, dashboards and AI agents that need one clean row per station-day instead of parsing fixed-width government text.
- Anyone who needs recent station observations with the original METAR attached.
Important: exchanges such as Kalshi and Polymarket settle each market on the source named in that market's rules (for many temperature markets that is The Weather Company, not NWS directly). This Actor returns the official NWS data; it does not claim to be the settlement source for any contract. Check the market rules yourself.
How to get NWS daily climate reports
- Open the Input tab and enter one or more station ids such as
KNYC(Central Park),KMDW(Chicago Midway) orKMIA(Miami). - Leave Data on
daily_climatefor the climate report, or switch toobservationsorboth. - Set the start date (
yesterdayby default) and optionally an end date, up to 31 days per run. - Click Start. The Output tab shows one row per station-day; download it as JSON, CSV or Excel, or read it through the API.
- To build a history, create a Schedule that runs every morning after about 8 AM local time, when the final report for the previous day has been issued.
Input
| Field | Default | Meaning |
|---|---|---|
stations | ["KNYC"] | Station ids. Examples: KNYC Central Park, KMDW Chicago Midway, KMIA Miami, KLAX Los Angeles, KDEN Denver, KPHL Philadelphia, KAUS Austin, KSFO San Francisco, KBOS, KATL, KDFW, KSEA. |
mode | daily_climate | daily_climate, observations or both. |
startDate | yesterday | YYYY-MM-DD, today, yesterday or -N (N days ago). |
endDate | same as start | Up to 31 days per run. |
timezone | America/New_York | IANA zone used to resolve today / yesterday. Observation day boundaries follow each station's own time zone (from NWS station metadata); this is only the fallback. |
reports | latest | latest = newest report per day (final once issued, else the latest preliminary). final = final reports only. all = every issuance. |
observationInterval | hourly | hourly = one observation per clock hour. metar = every observation with a raw METAR, including specials. all = every record (5-minute data at ASOS airports, about 300 rows a day). |
includeRawText | false | Attach the original report text to each climate row. |
cliLocations | none | Override the 3-letter climate location code for a station, e.g. {"PAGS": "GUS"}. K-stations use the last three letters (KNYC = NYC); the main Alaska, Hawaii, Puerto Rico and Pacific airports (PAFA, PANC, PAJN, PABR, PHNL, PHOG, PHTO, PHLI, TJSJ, PGUM, NSTU and others) are built in. Any other non-K station needs an entry here. |
maxConcurrency | 4 | Parallel requests to api.weather.gov (1-8), shared across all stations. |
Example: the final report for Chicago Midway and Miami for the last three days.
{"stations": ["KMDW", "KMIA"],"mode": "daily_climate","startDate": "-3","endDate": "yesterday","reports": "final"}
Output
One row per station-day (climate) or per observation. You can download the dataset as JSON, CSV, Excel or HTML. Climate row, main fields:
{"type": "climate_report","station": "KNYC","cliLocation": "NYC","locationName": "CENTRAL PARK NY","office": "KOKX","date": "2026-09-24","reportType": "final","validAsOfLocal": null,"issuedLocal": "233 AM EDT FRI SEP 25 2026","issuedAt": "2026-09-25T06:33:00+00:00","maxTempF": 66,"maxTempTime": "15:05","maxTempIsRecord": false,"maxTempRecordF": 91,"maxTempRecordYears": [2017],"maxTempNormalF": 73,"maxTempDepartureF": -7,"maxTempLastYearF": 80,"minTempF": 53,"minTempTime": "06:44","minTempRecordF": 40,"minTempRecordYears": [1963],"minTempNormalF": 60,"avgTempF": 60,"precipIn": 0,"precipTrace": false,"precipMonthToDateIn": 2.21,"precipYearToDateIn": 33.56,"snowIn": 0,"snowDepthIn": 0,"heatingDegreeDays": 5,"coolingDegreeDays": 0,"highestWindMph": 17,"highestWindDirection": "NE","highestGustMph": 32,"avgWindMph": 10,"avgSkyCover": 0.4,"weatherObserved": [],"humidityHighestPct": 74,"humidityLowestPct": 42,"normals": {"for": "today","maxNormalF": 73,"maxRecordF": 90,"maxRecordYears": [1970],"minNormalF": 59,"minRecordF": 40,"minRecordYears": [1887]},"productId": "d328a89d-29f7-474e-9de8-c96a5ca3cb5e","sourceUrl": "https://api.weather.gov/products/d328a89d-29f7-474e-9de8-c96a5ca3cb5e","source": "NOAA/NWS Climatological Report (Daily, product CLI) via api.weather.gov","licence": "US Government work, public domain","fetchedAt": "2026-09-25T13:02:11.000Z","tables": { "temperature": [], "precipitation": [], "snowfall": [], "heating": [], "cooling": [] }}
Notes on climate rows
reportTypeispreliminaryfor the afternoon or early-morning versions ("VALID AS OF ... LOCAL TIME") andfinalfor the full-day report issued after local midnight.validAsOfLocalcarries the cut-off time of a preliminary report.- Times such as
maxTempTimeare local standard time as printed by NWS, in 24-hourHH:MM. precipTrace/snowTraceare true when NWS printedT(a trace); the numeric value is then0.*IsRecordis true when NWS flagged the value withR(record set or tied).tablesholds every row of the report's fixed-width table (observed, time, record, record years, normal, departure, last year) for precipitation, snowfall and degree days, so nothing is lost.- Missing values (
MMin the report) arenull. A day whose max and min are bothMMis still returned (NWS says the data is missing), with a note in the log. - Not every office publishes every column.
reportColumnslists the columns that office prints (for example Emporia KS prints no record values, Seattle prints no normals). A field whose column is absent isnull. About 84% of stations use the full layout.
Observation rows
Main fields: station, stationName, stationTimeZone, timestamp (UTC), tempF, tempC, dewpointF, humidityPct, windDirectionDeg, windSpeedMph, windGustMph, pressureInHg, seaLevelPressureMb, visibilityMi, precipLastHourIn, maxTempLast24HoursF, minTempLast24HoursF, heatIndexF, windChillF, cloudLayers, textDescription, rawMetar, sourceUrl.
How much does NWS weather data cost?
Pay per event, Apify platform usage included:
| Event | Price |
|---|---|
| Daily climate report row | $0.02 |
| Hourly observation row | $0.001 |
| Actor start | $0.00005 |
Examples: one station every day for a year is about $7.30; ten stations scheduled daily for 30 days is about $6; a full day of hourly observations for one station is about $0.024. You are charged only for rows actually written to the dataset. A run that returns no rows fails and charges only the start event. Current prices are always on the Pricing tab.
Limits and tips
- api.weather.gov keeps roughly the last 7 days of climate reports and observations. Older dates return no rows. Schedule the Actor daily if you want to build a history.
- The final climate report for a day is normally issued between about 1 AM and 8 AM local time the next day. Run after that, or use
reports: latestto get the preliminary version meanwhile. - Not every observation station has a climate report. About 600 do; the list is at
https://api.weather.gov/products/types/CLI/locations. If a station's report is filed under a code the Actor cannot derive, usecliLocations. You can also pass the 3-letter code itself as the station ("FAI") indaily_climatemode. - Three Pacific offices (Palau TKR, Chuuk TKK, Tinian T11) publish a free-form report that is not parsed; they return a warning instead of a row.
- A run that produces no rows fails, with the reason in the status message. Only the Actor start event is charged for such a run.
- A station that fails (unknown id, NWS error) is reported in the log and status message; the other stations still return rows.
- Rows are written in batches per station; the order of stations in the dataset is not guaranteed.
- If a run is stopped (timeout, abort, platform restart), use Resurrect on the run: it continues with the stations that were not finished. After a hard stop, stations finished in the last two seconds before the stop may appear twice.
- NWS asks for modest request rates. Keep
maxConcurrencylow for large station lists. - Airport ASOS stations report every 5 minutes; the default
observationInterval: hourlykeeps one record per hour so a day is about 24 rows, not 300.
Data source and licence
Data is produced by the US National Weather Service and retrieved from https://api.weather.gov. NWS states that its information "is in the public domain and may be used without charge for any lawful purpose". This Actor is not affiliated with or endorsed by NOAA or the NWS; it only names them as the source of the unaltered data. Each row carries source, sourceUrl and licence so you can cite it.
Other Actors by osel_house
- Dataset to Google Sheets Sync: send this Actor's rows (or any dataset) to a Google Sheet on every run, no Google login.
- Sitemap URL Extractor & Change Monitor: every URL from a site's sitemaps, or only what changed since last time.
- Bulk Email Verifier: verify email lists from CSV, Google Sheets or any scraper dataset for $1 per 1,000.
FAQ and support
Is this the number Kalshi or Polymarket settles on?
Not necessarily. Each market names its own settlement source in its rules; for many temperature markets that is The Weather Company. This Actor gives you the official NWS report, which is often the same reading but is not the contract's source. Read the market rules.
Why is yesterday's report marked preliminary?
The final report is issued the next day, usually between 1 AM and 8 AM local time. Until then reports: latest returns the newest preliminary version with reportType: preliminary. Run again later, or schedule the run after 8 AM local time.
Can I get data older than a week?
No. api.weather.gov keeps about seven days. Schedule the Actor daily to accumulate your own archive, and send the rows to a Google Sheet or a database.
Something broke?
Open an issue in the Issues tab with the run id and the station and date you asked for. Parsing problems on an unusual report are usually fixed within a day. Custom variants (other NWS products, other output formats) can be built on request.