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']}")
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
stateCdandcountyCdparameters. - What parameters can I request?
- Use
parameterCdto 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), orstartDT/endDTin YYYY-MM-DD format for specific ranges. - Can I query multiple sites at once?
- Yes, use comma-separated site numbers:
site=09380000,09381000,09382000or usesiteStatus=activewith state/county filters.
What You Can Build
- Real-time river level monitoring for flood warnings
- Streamflow dashboard for kayaking and rafting
- Drought monitoring with groundwater level trends
- Water temperature tracker for fishing conditions
- Hydrological research data collection tool