# NWS Official Daily High/Low & Live Max Temperature (`staymeter-labs/nws-daily-high-low-live`) Actor

Official NWS daily high/low and precipitation for any US climate station (KNYC, KMDW, KMIA, KAUS, KLAX, KDEN, KPHL and more) plus live running max/min from observations, with preliminary vs final status. Public-domain NWS/NOAA data only.

- **URL**: https://apify.com/staymeter-labs/nws-daily-high-low-live.md
- **Developed by:** [Staymeter Labs](https://apify.com/staymeter-labs) (community)
- **Categories:** Developer tools, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## NWS Official Daily High/Low & Live Max — climate report plus today's running extremes

Get the **official NWS daily high/low temperature and precipitation** for any US station with an NWS climate report — such as **KNYC (Central Park), KMDW (Chicago Midway), KMIA, KAUS, KLAX, KDEN, KPHL** — together with the **live running max/min from NWS observations** for the same climate day. One clean row per station per day, with a clear `in-progress` / `preliminary` / `final` status.

Built only from public-domain U.S. National Weather Service / NOAA data. Useful for weather dashboards, daily records, energy and agriculture analysis, and checking how today's observed high compares with the official record.

### How to use in 3 steps

1. Enter **stations** (ICAO codes such as `KNYC`, `KMDW`, `KMIA`; `NYC` also works).
2. Optionally set **start date / end date** (station-local climate days), or just **daysBack** (e.g. `0` = today only, `6` = last week). Default: today and the previous 2 days.
3. Run it — or schedule it every 15–60 minutes to track today's running high/low, and read the `final` row the next morning.

### What you get

| Field | Example | Notes |
|---|---|---|
| `station`, `stationName`, `date` | `KNYC`, `New York City, Central Park`, `2026-10-03` | `date` is the NWS **climate day**: local *standard* time 00:00–24:00 (it does not shift with daylight saving) |
| `status` | `final` | `in-progress` (day not over), `pending` (day over, no CLI yet), `preliminary` (same-day CLI), `final` (CLI issued after local midnight) |
| `officialHighF`, `officialLowF` | `70`, `59` | From the NWS Daily Climate Report (CLI); `null` until it is issued |
| `officialPrecipIn`, `officialPrecipTrace`, `officialSnowIn` | `0.0`, `true`, `0.0` | A trace is `0.0` with `officialPrecipTrace: true` |
| `cliReportType`, `cliIssuedAt`, `cliProductId`, `cliReportTextUrl` | | Link to the original NWS text product |
| `obsMaxF`, `obsMaxC`, `obsMaxAt` | `87.8`, `31.0` | Highest observed temperature inside the climate day |
| `obsMinF`, `obsMinC`, `obsMinAt` | | Lowest observed temperature |
| `obsCount`, `firstObsAt`, `lastObsAt`, `lastObsTempF` | | How complete the observation record is |
| `obsHighMinusOfficial`, `obsLowMinusOfficial` | `0.8` | Observed extreme minus official CLI value (°F) |

Missing values are `null`, never a fake zero.

#### Sample output

```json
{
  "station": "KPHL",
  "date": "2026-10-02",
  "status": "final",
  "officialHighF": 87.0,
  "officialLowF": 66.0,
  "officialPrecipIn": 0.18,
  "obsMaxF": 87.8,
  "obsMinF": 66.2,
  "obsCount": 315,
  "lastObsAt": "2026-10-03T04:55:00+00:00",
  "obsHighMinusOfficial": 0.8
}
```

### Input examples

```json
{ "stations": ["KNYC", "KMDW", "KMIA"] }
```

```json
{ "stations": ["KNYC"], "daysBack": 0 }
```

```json
{ "stations": ["KAUS", "KLAX"], "startDate": "2026-09-01", "endDate": "2026-09-30", "finalOnly": true }
```

### Important: observations vs. the official value

The official high/low is the NWS Climate Report value, computed from ASOS data in whole °F. Observations from api.weather.gov are individual METAR reports (0.1 °C precision, whole °C for some reports) and can differ from the official number by up to about 2 °F. Use `obs*` fields to follow the day as it develops, and `official*` fields for the confirmed value. Observations are only available for roughly the last 7 days; older days contain the official values with `obs*` empty.

### FAQ

**When is the final value available?** The `final` CLI is normally issued shortly after local midnight (standard time clock), so `status` flips from `in-progress` to `final` overnight.
**What happens if one station fails?** Other stations are still returned and the run status message lists the skipped ones; the run only fails if no station returned data (e.g. all codes unknown). Invalid dates give a clear error.
**Which stations are supported?** Any station with a CLI report, e.g. `KNYC`, `KMDW`, `KMIA`, `KAUS`, `KLAX`, `KDEN`, `KPHL`, `KSEA`, `KBOS`, `KATL`.
**Why does the climate day ignore daylight saving time?** NWS climate reports always cover local standard time 00:00–24:00, so in summer the day runs from 1:00 a.m. to 1:00 a.m. on the clock.

### Pricing

Free to use — you only pay Apify's standard platform usage, which is tiny because this Actor calls official APIs directly (no browser, no proxies).

### Data sources

- Observations: [api.weather.gov](https://www.weather.gov/documentation/services-web-api) (NWS). "All of the information presented via the API is intended to be open data, free to use for any purpose."
- Daily Climate Reports (CLI): NWS products, via the archive of the [Iowa Environmental Mesonet](https://mesonet.agron.iastate.edu/) (Iowa State University).

Not affiliated with NOAA, the NWS or Iowa State University.

# Actor input Schema

## `stations` (type: `array`):

ICAO codes of NWS stations, e.g. KNYC (NYC Central Park), KMDW (Chicago Midway), KMIA (Miami), KAUS (Austin), KLAX (Los Angeles), KDEN (Denver), KPHL (Philadelphia). 3-letter codes like NYC also work.

## `startDate` (type: `string`):

First climate day (YYYY-MM-DD, station-local). Defaults to 2 days before the end date.

## `endDate` (type: `string`):

Last climate day (YYYY-MM-DD, station-local). Defaults to today at the station.

## `finalOnly` (type: `boolean`):

Return only days whose official final NWS report has been issued.

## `includeObservations` (type: `boolean`):

Add running max/min from api.weather.gov observations (available for roughly the last 7 days).

## `daysBack` (type: `integer`):

How many days before the end date to include when no start date is set (0 = only the end date). Handy for scheduled runs.

## Actor input object example

```json
{
  "stations": [
    "KNYC",
    "KMDW",
    "KMIA",
    "KAUS"
  ],
  "finalOnly": false,
  "includeObservations": true,
  "daysBack": 2
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "stations": [
        "KNYC",
        "KMDW",
        "KMIA",
        "KAUS"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("staymeter-labs/nws-daily-high-low-live").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "stations": [
        "KNYC",
        "KMDW",
        "KMIA",
        "KAUS",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("staymeter-labs/nws-daily-high-low-live").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "stations": [
    "KNYC",
    "KMDW",
    "KMIA",
    "KAUS"
  ]
}' |
apify call staymeter-labs/nws-daily-high-low-live --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,staymeter-labs/nws-daily-high-low-live"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/AbLZz45daiPPQQWpB/builds/YnfOvDKbzIgfInX4o/openapi.json
