What you need
- Multimeter for macOS 13 or later, $19.99 once.
- The USGS site number of your gauge (find it at waterdata.usgs.gov; for example 01646500 is the Potomac near Washington, DC).
Set it up
- Add a Web Address meter with your site number and the key path
value.timeSeries.0.values.0.value.0.value:Web addresshttps://waterservices.usgs.gov/nwis/iv/?format=json&sites=01646500¶meterCd=00060 - Refresh every 15 minutes. Set the range to the flows you care about, with alerts where the river gets too low or too high to run.
Multimeter settings
In Customize This Meter… (from the meter’s menu):
| Setting | Value |
|---|---|
| Source | Web Address |
| Web address | the USGS address above with your site |
| Key path | value.timeSeries.0.values.0.value.0.value |
| Refresh every | 15 minutes |
| Range | like 0 to 10000 |
| Unit | cfs |
| Alerts | High values at flood stage for your river |
| Label | the river |
| Face | Sparkline, Level Bar or Columns |
Tested: Run on October 29, 2026 for 01646500: 2,650 cfs; gauge height 2.95 ft.
More on this source, including every format it reads, in the Web Address guide.
Limits
- US gauges only. The reply holds one reading per parameter you ask for; ask for one at a time so the key path stays the same.
Variations
Gauge height in feet
Change parameterCd=00060 to parameterCd=00065. Water temperature is 00010 (°C) where measured.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| No number found in the response | The key path doesn’t match the reply. | Run curl -s with the address and read the JSON. Dots walk into objects, numbers pick array items (items.0.count). |
| Couldn’t reach the address | No network, a typo in the host, or the service is down. | Open the address in your browser. Multimeter tries again at the next refresh. |
| No number found | The gauge doesn’t measure that parameter. | Check which parameters your site reports on its USGS page. |
Questions
Is there anything like this outside the US?
Many countries publish gauges (the UK Environment Agency, Germany’s Pegelonline). Any that answers JSON works the same way with its own key path.