Microproduct Data Guideintermediate

Water Quality Portal

Discrete water-quality sample results from USGS, EPA, and hundreds of partner agencies for building watershed monitoring and local water-quality tools.

Report a Problem

At a Glance

Difficulty
Intermediate — some data preparation helps
Size
Small · ≤0.5 GB
Formats
CSV, JSON, TSV
Access
API or Download
API Key
Not Required
Provider
U.S. Geological Survey and U.S. Environmental Protection Agency
Updates
Continuous
Last Verified
Aug 20, 2026
Source Type
Government source
  • Python syntax checked

From Source to Product Signal

Test a Product Idea in Four Steps

The Water Quality Portal returns discrete sample chemistry, not continuous USGS gauge readings or EPA drinking-water system compliance records. Start with nitrate results for one monitoring location and a one-year window. Sampling is irregular, so a gap is not a clean bill of health.

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.Read the Water Quality Portal description and distinguish sample results from gauge time series.
  2. 2.Request a bounded CSV extract for one site, one characteristic, and a short date range.
  3. 3.Keep the monitoring location, characteristic, result value, unit, and activity date.
Open Official Source
3

Run the Python Example

Install the packages, then run the notebook cell.

python -m pip install pandas requests

import io
import pandas as pd
import requests

response = requests.get(
    "https://www.waterqualitydata.us/data/Result/search",
    params={
        "siteid": "USGS-01646500",
        "characteristicName": "Nitrate",
        "startDateLo": "01-01-2024",
        "startDateHi": "12-31-2024",
        "mimeType": "csv",
        "zip": "no",
        "dataProfile": "narrowResult",
    },
    timeout=60,
)
response.raise_for_status()
results = pd.read_csv(io.StringIO(response.text))
results["retrieved_at_utc"] = pd.Timestamp.now(tz="UTC")
print(
    results[
        [
            "MonitoringLocationIdentifier",
            "ActivityStartDate",
            "CharacteristicName",
            "ResultMeasureValue",
            "ResultMeasure/MeasureUnitCode",
        ]
    ].head(20)
)
4

Test a Useful Signal

Chart recent nitrate samples at one Potomac gauge

Test whether discrete nitrate results can power a bounded watershed-quality monitor.

  1. 01Convert ResultMeasureValue to numeric and keep the activity date, unit, and detection-condition text.
  2. 02Plot the 2024 samples and note days with no observation.
  3. 03Explain that irregular sampling is not a continuous water-quality record and is not a drinking-water compliance result.

Dataset Details

U.S. Geological Survey and U.S. Environmental Protection Agency is a government source. Last verified 2026-08-20. Temporal coverage: historical discrete samples through current agency submissions.

Geography

Formats

Provider

U.S. Geological Survey and U.S. Environmental Protection Agency

Data Terms

U.S. Public Domain / USGS CC0 guidance

Send Feedback