NWS Weather Edge Fields
An nws alias reads the US National Weather Service for one observation station: its latest observation, the daily and hourly forecasts for its location, and active alerts for its county. There are 57 fields: 55 numbers and 2 text fields that rules compare with == or != (see Text fields).
This page covers how to choose a station, every field by group, and how NWS values differ in backtests. Custom strategies on Kalshi and Polymarket US read a field as edge.<alias>.<field> once it is listed in the alias's fields. For the alias keys and refresh minimums, see Declaring and Reading Edge Data.
Choosing a station
station is a 4-letter ICAO id in capitals, such as KMDW (Chicago Midway) or KLGA (LaGuardia). Only the format is checked, so confirm the id exists before you deploy.
- Pick the station your market settles on. For example, Kalshi's New York daily-high markets settle on Central Park (
KNYC), not LaGuardia. - Only 38 stations can be backtested, listed under Backtest support.
KNYCandKAUSare not among them. - If the station's observation or its location lookup fails, the whole alias fails. If only a forecast or alert lookup fails, the alias stays healthy and the affected fields degrade (see Fields that fail open).
Observation fields
From the station's latest report.
| Field | Unit | Meaning |
|---|---|---|
current_temp_f | °F | Latest observed temperature. |
humidity | fraction 0 to 1 | Relative humidity. Write 0.70 for 70%. |
wind_speed_mph | mph | Observed wind speed. |
wind_direction_deg | degrees | Observed wind direction. |
pressure_mb | millibars | Observed barometric pressure. |
dew_point_f | °F | Observed dew point. |
observation_age_sec | seconds | Age of the observation when it was fetched. It stays frozen between fetches. |
observation_age_sec is a simple staleness guard: a condition such as observation_age_sec < 5400 ignores reports that were more than 90 minutes old when fetched. Because the value is frozen between fetches, allow for up to one refresh of extra age.
Daily forecast fields
NWS forecasts come in daytime and nighttime periods, not calendar days. forecast_high_f is the first daytime period, so once today's daytime period has passed, it describes tomorrow.
| Field | Unit | Meaning |
|---|---|---|
forecast_high_f | °F | First daytime period's temperature. |
forecast_low_f | °F | First nighttime period's temperature. |
precip_prob | fraction 0 to 1 | First daytime period's chance of precipitation. A missing value reads 0. |
temp_delta_from_forecast_high_f | °F | current_temp_f − forecast_high_f. Negative while still below the forecast high. |
forecast_high_day_2_f, forecast_low_day_2_f | °F | Second daytime and nighttime periods. |
precip_prob_day_2 | fraction 0 to 1 | Second daytime period's chance of precipitation. A missing value reads 0. |
forecast_high_day_3_f, forecast_low_day_3_f | °F | Third daytime and nighttime periods. |
precip_prob_day_3 | fraction 0 to 1 | Third daytime period's chance of precipitation. A missing value reads 0. |
precip_amount_in | inches | Amount parsed from the forecast text. Not recommended; see Precipitation text fields. |
precip_type | text | rain, snow, mixed or none. Compare with == or !=; see Text fields. Not recommended; see Precipitation text fields. |
| Local time | forecast_high_f means | forecast_low_f means | forecast_high_day_2_f means |
|---|---|---|---|
| 10:00 | today | tonight | tomorrow |
| 20:00 | tomorrow | tonight | the day after tomorrow |
Hourly forecast fields
Twelve hourly periods, each with three fields, 36 fields in total. N runs from 1 to 12; temp_hour_0 and temp_hour_13 do not exist.
| Fields | Unit | Meaning |
|---|---|---|
temp_hour_1 … temp_hour_12 | °F | Forecast temperature for the Nth hourly period. |
precip_prob_hour_1 … precip_prob_hour_12 | fraction 0 to 1 | Chance of precipitation for the Nth period. A missing value reads 0. |
wind_hour_1 … wind_hour_12 | mph | Forecast wind for the Nth period. For a range such as "10 to 15 mph" it takes the low end. |
The first period is normally the hour in progress, so temp_hour_1 is about now and temp_hour_6 about five hours ahead.
Alert fields
| Field | Unit | Meaning |
|---|---|---|
alert_active | 0 or 1 | 1 when any NWS alert is active for the station's county, including advisories and special statements. |
alert_severity | text | Highest active alert: none, advisory, watch or warning. Compare with == or !=; see Text fields. |
alert_active fires on minor alerts too: a heat advisory counts. If the alert lookup fails, it reads 0, not unavailable, so an alert-based exit does not fire during that outage.
Precipitation text fields
Two fields are read from the wording of the first daytime forecast rather than from a number. Neither works as a dependable filter:
precip_typeis matched on keywords: "rain" or "showers" means rain, "snow" means snow, both mean mixed. "Snow showers likely" therefore readsmixed, while drizzle, sleet, flurries or thunderstorms alone readnone.precip_amount_inrecognizes only two phrasings and reads 0 for everything else, including "less than a tenth of an inch" and "around an inch". It can also pick up an unrelated measurement, such as snow depth or hail size. A value of 0 does not mean "no rain expected".
For rain risk, use precip_prob or the precip_prob_hour_N fields.
NWS in backtests
NWS history is rebuilt from public weather archives (Open-Meteo reanalysis and forecasts, and the Iowa Environmental Mesonet warning archive), so several fields mean something slightly different in a backtest:
- Observations are modeled values at the station's coordinates, not the station's own report.
pressure_mbis sea-level pressure. - Daily forecasts use the day's max, min and max chance of precipitation for the sample's UTC date, not NWS periods. They exist only for roughly the last 92 days; older samples are unavailable.
- Hourly forecasts use the hour containing sample time + N hours, about one hour later than the live field with the same N. Like the daily forecasts, they exist only for roughly the last 92 days.
precip_amount_inandprecip_typeare observed precipitation, not forecast text.- Alerts cover the station's whole forecast office and count warnings, watches and advisories only.