Microproduct data guideintermediate

NOAA NCEI Daily Summaries

Station-level daily temperature, precipitation, snow, and weather summaries for building climate profiles and threshold-monitoring tools.

At a glance

Difficulty
Intermediate — some data preparation helps
Size
Small · ≤0.1 GB
Formats
JSON, CSV, NetCDF
Access
API or Download
API key
Not required
Provider
NOAA National Centers for Environmental Information
Updates
Daily
Data terms
U.S. Government public data / NOAA disclaimer

From source to product signal

Test a product idea in four steps

NCEI Daily Summaries provide weather observations aggregated by station and day. Start with one documented station, one calendar year, and a few named data types. Missing observations and quality attributes must be inspected before a threshold count is interpreted as a climate pattern.

1

Check the setup

  • Python 3.10 or newer
  • A notebook environment such as Jupyter or Google Colab
  • An internet connection
2

Access the data

  1. 1.Confirm the station identifier, period of record, units, and daily-summary data types.
  2. 2.Request one calendar year with station names and observation attributes included.
  3. 3.Parse numeric values and inspect missing dates and quality attributes before calculating thresholds.
Open official source
3

Run the Python example

Install the packages, then run the notebook cell.

python -m pip install pandas requests

import pandas as pd
import requests

response = requests.get(
    "https://www.ncei.noaa.gov/access/services/data/v1",
    params={
        "dataset": "daily-summaries",
        "stations": "USW00094728",
        "startDate": "2025-01-01",
        "endDate": "2025-12-31",
        "dataTypes": "TMAX,TMIN,PRCP",
        "format": "json",
        "units": "standard",
        "includeAttributes": "true",
        "includeStationName": "true",
    },
    timeout=30,
)
response.raise_for_status()
daily = pd.DataFrame(response.json())
daily["DATE"] = pd.to_datetime(daily["DATE"])
daily["TMAX"] = pd.to_numeric(daily["TMAX"], errors="coerce")
hot_days = daily[daily["TMAX"] >= 90]
hot_days = hot_days.assign(retrieved_at_utc=pd.Timestamp.now(tz="UTC"))
print(hot_days[["DATE", "TMAX", "TMAX_ATTRIBUTES"]].head(20))
4

Test a useful signal

Count hot days at one weather station

Count days with a maximum temperature of at least 90 degrees Fahrenheit at one station in 2025.

  1. 01Verify the station, standard-unit setting, calendar-year coverage, and temperature threshold.
  2. 02Reindex to the full year and count qualifying days only after identifying missing TMAX observations and quality attributes.
  3. 03Explain why one station, missing observations, quality flags, and a single year do not establish a regional or long-term climate trend.

Dataset details

NOAA National Centers for Environmental Information is a government source. Last verified 2026-08-11. Temporal coverage: station-dependent historical records through recent days.

Domains

ClimateWeatherEnvironmental Science

Data types

Time SeriesStation Data

Tasks

Climate AnalysisThreshold MonitoringTrend Analysis

Geography

Global

Formats

JSONCSVNetCDF

Provider

NOAA National Centers for Environmental Information

Data terms

U.S. Government public data / NOAA disclaimer