NWS Daily Climate Report Scraper: Official High, Low, Rain avatar

NWS Daily Climate Report Scraper: Official High, Low, Rain

Pricing

Pay per event

Go to Apify Store
NWS Daily Climate Report Scraper: Official High, Low, Rain

NWS Daily Climate Report Scraper: Official High, Low, Rain

Daily high, low, precipitation, snow, records and normals parsed from the official NWS Daily Climate Report (CLI) text for MIA, NYC, ORD and 18 more locations. Latest, date-range with NCEI history, or live running max/min from METARs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Scott Williams

Scott Williams

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

NWS Daily Climate Reports: Official High, Low and Rain by Station

Get each day's official high and low temperature, precipitation, snow, records, normals and degree days for U.S. weather stations as clean JSON. Values are parsed from the official NWS Daily Climate Report (CLI) text that each National Weather Service office issues for its climate locations, with NOAA NCEI GHCN-Daily history and a METAR-based live running max/min.

Typical uses: settling or tracking temperature-based contracts and markets that reference the NWS daily climate report, daily weather data for dashboards and models, energy and degree-day analysis, and a clean history of daily highs and lows for one station.

Three modes

  • latest (default): the newest full-day report for each location, plus today's partial-day report if one has been issued.
  • date_range: every report for the dates you choose (up to 10 years). The NWS site keeps about the last 25 days of CLI reports. For older dates, or days with no full-day report, the Actor fills in NCEI GHCN-Daily summaries (high, low, precipitation, snow), which usually appear a few days after the date.
  • live_intraday: a preliminary running max and min for today's climate day, computed from the station's METAR observations. Useful before the afternoon or next-morning report is out.

Locations

21 built-in locations: MIA, NYC (Central Park), LAX, MDW, ORD, AUS, DEN, PHL, ATL, BOS, DCA, SEA, PHX, DFW, HOU, IAH, SFO, LAS, MSP, ANC, HNL.

Any other three-letter CLI location code (for example LGA) works in latest and date_range too. For NCEI history or live mode on it, add its details with stationMap:

{"stationMap": {"ABQ": {"icao": "KABQ", "ghcnd": "USW00023050", "timeZone": "America/Albuquerque"}}}

Input

FieldDefaultNotes
contactEmailnone (needed for live data)Sent in the User-Agent so the data provider can reach you about your traffic. Never written to the output. Leave it empty to get free samples (below).
modelatestlatest, date_range or live_intraday
cliLocations["MIA"]Three-letter CLI codes, up to 100
reportKindsfull_day, partial_dayWhich report kinds to keep
startDate / endDatedate_range only, YYYY-MM-DD, inclusive
includeNceiHistorytrueFills dates with no full-day CLI report
maxReportVersions50How many archived issuances to scan per location
useSixHourExtremestruelive mode: also use the METAR 6-hour max/min groups
onlyNewSinceLastRunautoSkips reports already delivered. Corrected or re-issued reports are delivered again.
stateKeydefaultKeeps separate "only new" memory for each schedule
includeRawTextfalseAttaches the CLI text
maxItems1000

No e-mail = free sample mode. If contactEmail is empty, the run makes no requests, logs a warning and returns 4 free sample reports (MIA, NYC and BOS, late October 2026, parsed from real reports saved with the Actor) with isSample: true. Filters are not applied to samples and nothing is charged. Add your e-mail to get live data. An e-mail that is invalid, or uses a placeholder domain such as example.com, stops the run with an input error.

Example: a backfill for three cities.

{"contactEmail": "YOUR_CONTACT_EMAIL", "mode": "date_range", "cliLocations": ["MIA", "NYC", "BOS"], "startDate": "2026-10-01"}

Output example

One of the free sample records (from a run with no e-mail on 2026-10-31; some fields left out here):

{
"cliLocation": "MIA",
"climateDate": "2026-10-27",
"reportKind": "full_day",
"maxTempF": 84,
"minTempF": 75,
"avgTempF": 80,
"normalMaxF": 84,
"normalMinF": 72,
"recordMaxF": 90,
"recordMaxYears": [1997, 2021],
"precipIn": 0.41,
"snowIn": 0.0,
"cdd": 15,
"highestGustMph": 36,
"productKey": "KMFL-CDUS42KMFL280826-CLIMIA",
"isSample": true
}

reportKind is one of full_day (the final report for the climate day), partial_day (the report valid as of the afternoon), ncei_daily_summary (an NCEI history day) or obs_running (a preliminary live value).

Main fields: maxTempF, minTempF and their times in local standard time, avgTempF, normals, departures and records with record years, precipIn and snowIn (a trace is 0.0 with precipTrace or snowTrace true), month- and year-to-date precipitation, hdd/cdd, wind, issuanceTimeUtc, isCorrection, productKey (stable id), sourceUrl and isSample (true only on free samples). Missing values (MM) are null, never 0. See sample_output.json for full records.

  • The climate day runs midnight to midnight in local standard time, so during daylight saving time it runs 1 AM to 1 AM clock time.
  • sourceUrl points to the archived version number seen at fetch time (sourceVersionAtFetch). The NWS site renumbers versions as new reports arrive, so use productKey as the identifier.
  • obs_running values are preliminary. They come from METAR temperatures, which are rounded differently from the official daily extremes, and can differ by 1 to 2 °F.

Price

Pay per event, no start fee set by the Actor:

  • $0.001 per climate report (full-day or partial-day CLI)
  • $0.0005 per NCEI history day
  • $0.001 per live snapshot
  • Sample records (no contact e-mail) are free, and records that could not be parsed are delivered free with the raw text.

Set a maximum cost per run in Apify and the Actor stops cleanly when it is reached.

If the input is invalid (for example it is not a JSON object, an e-mail or location is not valid, or a whole-number field is not a number), nothing is fetched and the run ends with one free status row: Invalid input, nothing was fetched or charged: <reason>. Nothing is charged for it.

  • forecast.weather.gov: the CLI text product, at most 1 request per second.
  • aviationweather.gov Data API: METARs, at most 1 request every 2 seconds.
  • NCEI Access Data Service: GHCN-Daily, at most 1 request per second.
  • On errors against the weather.gov and aviationweather.gov hosts the Actor waits at least a minute between retries and tries at most 3 times, as NWS asks. Each host's robots.txt is checked before use.

This Actor uses U.S. government data from NOAA (the National Weather Service, the Aviation Weather Center and NCEI), which is in the public domain. Values in this dataset are parsed or computed by the Actor and are not official government material (17 U.S.C. § 403). The official values are the ones NOAA publishes, and NWS can revise reports after issue. This Actor is not affiliated with or endorsed by NOAA or the National Weather Service.

NCEI attribution

ncei_daily_summary records come from NOAA's National Centers for Environmental Information (NCEI), a U.S. government work. Cite as: Menne, M.J., I. Durre, B. Korzeniewski, S. McNeill, K. Thomas, X. Yin, S. Anthony, R. Ray, R.S. Vose, B.E. Gleason, and T.G. Houston (2012): Global Historical Climatology Network - Daily (GHCN-Daily), Version 3. NOAA National Climatic Data Center. doi:10.7289/V5D21VHZ. Retrieved through the NCEI Access Data Service (https://www.ncei.noaa.gov/access/services/data/v1).