USGS logo

Open data · Coming soon

USGS Water Data Export for Rivers and Streams

Export river flow and water level readings from USGS. Choose stations, a US state or a small map area. Get recent history or just the latest reading.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

observationId66a4e3fb8abe42fcb0942b5c0fe98f68:2026-10-13T13:50:00.000Z
site01646500
siteNamePOTOMAC RIVER NEAR WASH, DC LITTLE FALLS PUMP STA

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: 01646500 in USGS station numbers. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Export USGS river discharge and gage height into clean JSON or CSV files. Choose station numbers, a US state or a map area, and get recent history or the latest readings with units and approval status. No USGS account or API key is needed.

Who uses it

Hydrologists and engineers

Get recent flow data for a few stations.

Anglers and paddlers

Check the latest river flow at your spots.

Data teams

Feed water readings into a dashboard on a schedule.

Price

Prices will be shown after release.

Questions

How far back can I go?

One run covers up to 31 days. Use several runs for a longer time.

What does Provisional mean?

USGS has not approved the reading yet. It can still change.

Do I need a USGS account?

No. You do not need an account or API key.

How many stations can I add?

Up to 20 station numbers per run, or one state, or one map box.

Is a USGS key needed?

No. The tested route works without one. USGS rate limits still apply, including on shared cloud IPs.

Does zero mean a missing value?

No. Numeric zero stays zero. Missing and non-numeric source values have value: null; rawValue keeps the source text when present.

Are timestamps local?

dateTime is UTC. sourceDateTime keeps the source offset. timeZone is the station's USGS abbreviation; it is not an IANA time-zone identifier. usesDaylightSavings keeps the source flag.

Can I fetch all historical data in one run?

No. Each export is limited to 31 days and 1000 observations. Use smaller windows and inspect completeness.

Can I replace an older WaterServices tool without changes?

The core station and measurement fields are similar, but UTC dates, qualifier arrays, unit text and parameter names may differ. Approval status is a separate field. Older input fields and daily-value mode are not supported.

Details

Step by step on Apify
  1. Open Input. The example has three stations, discharge and the last seven days.
  2. Keep maxResults at 200 for a small first export.
  3. Click Start.
  4. Open Water observations to see station, value, units, time and approval status.
  5. Open Run summary to check the status and any limit reason.
Use cases
NeedInputKey fields
Research a recent river periodsites + date rangerawValue, dateTime, unit, approvalStatus
Compare current stationssites + latestOnlysite, value, unit, sourceUpdatedAt
Explore a small regionstate or bboxsiteName, latitude, longitude, parameterCode
Tips for better results
  • Keep the leading zeros in station numbers, like 01646500.
  • Use code 00060 for discharge and 00065 for gage height.
  • Read the run summary. A small row limit can fill with the first station.
Limits and good to know

This is a continuous-data export, not a flood warning service. It does not fetch daily aggregates, field measurements or water-quality samples. It does not convert units or infer missing readings. Metadata may be null if the source has no station details.

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "observationId": "66a4e3fb8abe42fcb0942b5c0fe98f68:2026-10-13T13:50:00.000Z",
  "site": "01646500",
  "siteName": "POTOMAC RIVER NEAR WASH, DC LITTLE FALLS PUMP STA",
  "latitude": 38.949777777777776,
  "longitude": -77.12763888888888,
  "parameterCode": "00060",
  "parameterName": "Discharge",
  "unit": "ft^3/s",
  "value": 11300,
  "rawValue": "11300",
  "dateTime": "2026-10-13T13:50:00.000Z",
  "sourceDateTime": "2026-10-13T13:50:00+00:00",
  "timeZone": "EST",
  "usesDaylightSavings": true,
  "qualifiers": null,
  "approvalStatus": "Provisional",
  "statistic": "00011",
  "timeSeriesId": "66a4e3fb8abe42fcb0942b5c0fe98f68",
  "provider": "USGS",
  "sourceUrl": "https://api.waterdata.usgs.gov/ogcapi/v1/collections/latest-continuous/items?f=json&limit=20&parameter_code=00060&time=2026-10-06T14%3A22%3A05.011Z%2F2026-10-13T14%3A22%3A05.011Z&monitoring_location_id=USGS-01646500%2CUSGS-09380000%2CUSGS-03339000",
  "fetchedAt": "2026-10-13T14:22:05.607Z",
  "sourceUpdatedAt": "2026-10-13T13:58:17.797147+00:00",
  "licence": "USGS public domain"
}
Data fields (23)
FieldTypeMeaning
observationIdstringStable time-series ID plus UTC timestamp; safe for joining repeat exports.
sitestringUSGS station number, preserving leading zeros.
siteNamestringName from the monitoring-locations endpoint.
latitudenumberStation latitude in WGS84 degrees.
longitudenumberStation longitude in WGS84 degrees.
parameterCodestringFive-digit USGS measurement parameter code.
parameterNamestringName from the USGS parameter-codes endpoint.
unitstringUnits exactly as reported with the observation.
valuenumberNumeric value when parseable; null for missing or non-numeric values. Use rawValue for full precision.
rawValuestringExact source value string; no rounding.
dateTimestringObservation timestamp normalized to UTC ISO 8601.
sourceDateTimestringOriginal timestamp with source offset.
timeZonestringStation time zone abbreviation; not an IANA time zone.
usesDaylightSavingsbooleanWhether USGS marks the station as using daylight savings.
qualifiersarrayUSGS observation qualifier codes as an array; scalar source codes are wrapped. Null means none supplied. See approvalStatus separately.
approvalStatusstringUSGS Approved or Provisional; provisional values may be revised.
statisticstringUSGS statistic code, for example 00011 for instantaneous data.
timeSeriesIdstringUSGS time-series identifier.
providerstringUSGS data source.
sourceUrlstringAPI page from which this observation was fetched.
fetchedAtstringFetch time in UTC.
sourceUpdatedAtstringSource last_modified timestamp; a refresh does not always mean the measurement changed.
licencestringUSGS public domain attribution.
Input settings (9)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
USGS station numberssitesarray["01646500", "09380000", "03339000"]
State FIPS codestatestring
Map bounding boxbboxarray
Parameter codesparametersarray["00060"]
Latest reading onlylatestOnlybooleanfalse
Recent dayslastDaysinteger7
Start date (UTC)startDatestring
End date (UTC)endDatestring
Maximum observationsmaxResultsinteger200

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure