USGS Water Data

Science API · Works in USA · Streamflow, groundwater, water quality · NWIS system

TL;DR

The USGS Water Services API delivers real-time and historical water data from the National Water Information System (NWIS). With over 1.5 million monitoring sites nationwide, you can query streamflow (discharge), river stage (height), groundwater levels, water temperature, and water quality samples. The example endpoint for site 09380000 (Colorado River near the Green River, Utah) returns instantaneous water flow and stage data in JSON format.

Quick start: https://waterservices.usgs.gov/nwis/iv/?site=09380000&format=json

No API key needed — just make a request!

How to Use This API

1. Instantaneous Values for a Site

https://waterservices.usgs.gov/nwis/iv/?site=09380000&format=json

2. Daily Mean Discharge

https://waterservices.usgs.gov/nwis/dv/?site=09380000&format=json&startDT=2025-01-01&endDT=2025-12-31

3. Groundwater Levels

https://waterservices.usgs.gov/nwis/gwlevels/?site=37335207944501&format=json

4. JavaScript — Check River Level

fetch('https://waterservices.usgs.gov/nwis/iv/?site=09380000&format=json')
  .then(r => r.json())
  .then(d => {
    const ts = d.value.timeSeries[0];
    const val = ts.values[0].value[0];
    console.log(ts.sourceInfo.siteName);
    console.log('Value:', val.value, ts.variable.unit.unitCode);
    console.log('Time:', val.dateTime);
  });

5. Python — Get Recent Data

import requests

resp = requests.get('https://waterservices.usgs.gov/nwis/iv/', params={
    'site': '09380000',
    'format': 'json',
    'period': 'P1D'
})
data = resp.json()
ts = data['value']['timeSeries']
for series in ts:
    var = series['variable']
    val = series['values'][0]['value'][0]
    print(f"{var['variableName']}: {val['value']} {var['unit']['unitCode']}")
Try it: https://waterservices.usgs.gov/nwis/iv/?site=09380000&format=json

API Details

API URL
https://waterservices.usgs.gov/nwis/iv
Documentation
waterservices.usgs.gov
Category
Science
Authentication
Not Required
Geographic Coverage
USA — 1.5M+ monitoring sites nationwide

Frequently Asked Questions

What types of water data are available?
Instantaneous values (iv), daily values (dv), groundwater levels (gwlevels), water quality samples (qwdata), and statistics (stat).
How do I find the right site number?
Use the USGS Site Map at maps.waterdata.usgs.gov or query by state/county using stateCd and countyCd parameters.
What parameters can I request?
Use parameterCd to filter: 00060=discharge (cfs), 00065=stage (ft), 00010=water temperature, 00095=specific conductance. Omit for all available parameters.
What time formats are supported?
Use period=P7D (last 7 days), or startDT/endDT in YYYY-MM-DD format for specific ranges.
Can I query multiple sites at once?
Yes, use comma-separated site numbers: site=09380000,09381000,09382000 or use siteStatus=active with state/county filters.

What You Can Build