Daily water storage levels, Australian dams and reservoirs
liveDaily storage volumes for every Australian storage that reports to the Bureau of Meteorology's Water Data Online, one row per storage and day, with the validated daily mean volume in megalitres and the Bureau's quality code. The series is the Bureau's DMQaQc.Merged.DailyMean.24HR time series of the Storage Volume parameter, read whole for every station. Records run from the 1960s for the large dams, and the storage's owner, state, coordinates and full storage volume are in the companion dataset of Australian water storages.
Also called: Dam levels NSW, Victoria, Queensland, WA, SA, Tasmania, Warragamba Dam level history, Wivenhoe Dam level history, Melbourne dam levels daily, Perth dam levels, Water storage volumes Bureau of Meteorology, Seqwater dam levels, Wivenhoe Dam level, Sydney dam levels, Warragamba Dam level.
- Which dams are here?
- Every storage whose owner reports a daily storage volume to the Bureau of Meteorology under the Water Regulations 2008, about 540 dams, weirs and reservoirs in every state and territory, from Warragamba and Wivenhoe to small town supplies. Each row is one storage on one day with the validated daily mean volume in megalitres and the Bureau's quality code. The companion dataset of Australian water storages lists each storage with its owner, coordinates and full storage volume.
- Are the Seqwater and Sydney dams included?
- Both are included. The Queensland Bulk Water Supply Authority (Seqwater) reports Wivenhoe (station 143036A), Somerset (143305A), North Pine, Hinze, Baroon Pocket, Little Nerang, Leslie Harrison, Wyaralong, Moogerah, Maroon, Borumba, Enoggera, Gold Creek, Lake Manchester, Lake Kurwongbah, Lake MacDonald, Ewen Maddock and the other south east Queensland storages. WaterNSW reports the Sydney storages, Warragamba (212243), Avon, Cataract, Cordeaux, Nepean, Woronora, Prospect Reservoir, Tallowa, Fitzroy Falls, Wingecarribee and the Blue Mountains dams. The Bureau names many stations by the creek and dam wall, such as Nerang R at Hinze Dam HW, and lists some Sydney storages more than once under numbers such as 212243.1, so search by name and check the station number in the storages dataset.
- How do I get a percentage full?
- Divide the day's volume by the full storage volume in the companion storages dataset, joining on the station number. The Bureau publishes no percentage itself, and this site derives nothing, so the figure is yours to work out. A water utility's own page may differ by a point because it may quote an 8 am reading against a different capacity.
- What do the quality codes mean?
- They are the Bureau's own codes for how a value was checked, from 10 for the best quality through 90 and 110 to 140 and above for estimated or unchecked values, as documented on the Water Data Online site. The codes are kept as published.
- Why the Bureau rather than each water utility?
- The utilities report their storages to the Bureau under the Water Regulations, and the Bureau publishes them under CC BY 3.0 AU. Most utilities' own pages carry no open licence, or challenge automated requests, so the Bureau's feed is the one licensed national source. Melbourne Water also publishes its ten storages through the Victorian open data portal under CC BY 4.0.
Made for agents
Connect your AI agent
Any agent that connects to publicdata.au/mcp can find this dataset, read its 6 fields and diff its versions. Every answer names the version and carries BoM's attribution. No key.
Then ask it: What does Daily water storage levels, Australian dams and reservoirs hold, and what changed in the newest version?
claude mcp add --transport http publicdata https://publicdata.au/mcp One command. No key, no account, no sign-up.
Settings, then Connectors, then Add custom connector, and paste https://publicdata.au/mcp.
On the web and in the desktop app.
https://publicdata.au/mcp Streamable HTTP. Cursor, VS Code or any client that connects to a remote MCP server.
Using https://publicdata.au/llms.txt, how many people died on Queensland roads in 2025, by month? For an assistant that reads the web and has no connector.
Download it as CSV, Parquet, SQLite and 4 more formats
Pick a format and a version. CSV is picked first because it opens in the tools most offices have. The URL is yours to keep. A dated version never changes.
In your own tools
Use it in Excel, R, Python and more
Excel and Power BI read the CSV from its address and refresh from it. The R and Python packages take any dataset on this site by its slug, so a new dataset needs no new release. The DuckDB file attaches read-only over HTTPS, and a query reads only the blocks it touches.
The dated URL in the code never changes. https://publicdata.au/d/au-water-storage-levels/latest/ redirects to the newest version.
https://publicdata.au/d/au-water-storage-levels/latest/data.csv In Excel choose Data, then From Web, and paste this address. Excel keeps it, so Refresh All reads the newest version. A sheet holds about a million rows; past that, load the query to the Data Model.
https://publicdata.au/d/au-water-storage-levels/latest/data.csv In Power BI Desktop choose Get data, then Web, paste this address and choose Anonymous when asked how to sign in. A scheduled refresh reads the same address, so the report follows each new version.
library(publicdataau)
df <- pd_read("au-water-storage-levels")
pd_attribution(df) install.packages("publicdataau"). pd_read() fetches the version's Parquet file; pd_rows() and pd_aggregate() ask the query API instead, and pd_connect() attaches the DuckDB file.
import publicdata_au as pd_au
df = pd_au.read("au-water-storage-levels")
df.attrs["publicdata"]["attribution"] pip install "publicdata-au[pandas]". read() fetches the version's Parquet file; rows() and aggregate() ask the query API, and connect() attaches the DuckDB file.
INSTALL httpfs; LOAD httpfs;
ATTACH 'https://publicdata.au/d/au-water-storage-levels/v/2026-10-01/data.duckdb' AS au_water_storage_levels (READ_ONLY);
SELECT state, count(*) FROM au_water_storage_levels.records GROUP BY 1 ORDER BY 2 DESC; The DuckDB file attaches read-only over HTTPS and only the blocks a query touches are read. Parquet works the same way: FROM read_parquet(url).
What is in it
Column names are made snake_case and the publisher's original header is kept beside each one. Blank cells are null. Nothing is added, removed, ranked or summarised.
| Field | Type | Publisher's header | Note |
|---|---|---|---|
| station_no | string | station_no | The Bureau's station number for the storage, the join key to the storages dataset. |
| station_name | string | station_name | |
| state | string | state | The state or territory named in the Bureau's owner label for the station, MDB for a Murray-Darling Basin Authority storage. |
| date | date | date | |
| volume_ml | number | value | The daily mean storage volume in megalitres. |
| quality_code | integer | quality_code | The Bureau's quality code for the value. |
Download this table as a data dictionary (Excel), or read it as a Frictionless Table Schema at schema.json. The key is station_no, date.
A sample of 10 rows
The latest day with a volume in each state, the largest storage on that day first, each state in turn. A blank cell is shown as null.
| station_no | station_name | state | date | volume_ml | quality_code |
|---|---|---|---|---|---|
| 212243 | Warragamba Dam | NSW | 2026-09-30 | 1929898.13 | 140 |
| ROCKL-RES-HG | Rocklands | VIC | 2026-09-30 | 123719.48 | 140 |
| LKALEX | Lake Alexandrina | MDB | 2026-09-29 | 1638867.493 | 140 |
| 120016A | Burdekin Falls Dam | QLD | 2026-09-29 | 1605399.423 | 110 |
| 139.2 | GREAT LAKE - AT POATINA INLET | TAS | 2026-09-29 | 1084939 | 140 |
| A4260553 | Lake Victoria at Outlet Regulator | SA | 2026-09-29 | 660851 | 90 |
| G8150011 | Darwin River Dam - Intake Tower | NT | 2026-09-29 | 253681.26 | 140 |
| 410748 | Googong Res at Dam | ACT | 2026-09-29 | 119589.939 | 140 |
| RE750 | West Barwon Res | null | 2026-09-29 | 14751.94 | 140 |
| ODSS_57614_WSLAHD.1 | Wellington Wsl Logger | WA | 2026-09-28 | 79110.631 | 140 |
The first row as JSON
As it appears in data.ndjson.
GET https://publicdata.au/d/au-water-storage-levels/latest/data.ndjson
{
"station_no": "110014A",
"station_name": "Tinaroo Falls Dam",
"state": "QLD",
"date": "1959-06-03",
"volume_ml": null,
"quality_code": -1
}
Smaller files
The same rows split by a field, one JSON file each. Each file carries the same provenance header.
By state (10 files)
by/state/index.json lists every file with its row count.
What changed
One version for every release the publisher has made since this site started following the dataset. The date is the day the file changed on the portal.
- 2026-10-01 6,476,491 rows6 fieldsutf-86c19c1b1aa38The publisher offers no file. These bytes are every value of the named time series for every station reporting the parameter, as the Bureau's Water Data Online service returned them, ordered by station and date, so the same data gives the same bytes.
versions.json · changes.json · history.tar.zst (45 MB, every version's Parquet and manifest)
Questions
How do I download Daily water storage levels as a CSV file?
Open https://publicdata.au/d/au-water-storage-levels/latest/data.csv. It redirects to the newest dated version, which is https://publicdata.au/d/au-water-storage-levels/v/2026-10-01/data.csv today. The same path serves Parquet, SQLite, DuckDB, NDJSON, Arrow. A dated URL never changes, so use it when the file must stay the same.
Can I open Daily water storage levels in Excel?
Not as a workbook. Excel stops at 1,048,576 rows and this table has 6,476,491, so there is no data.xlsx. Load the CSV or the Parquet file with Power Query, or take one partition file at a time. https://publicdata.au/d/au-water-storage-levels/v/2026-10-01/data.csv.gz is the CSV at about a tenth of the size.
What years does Daily water storage levels cover?
The current version covers 1905 to 2025. Each release from BoM becomes a new dated version here, and earlier versions stay online.
How often is Daily water storage levels updated?
BoM releases it weekly. This site checks the portal every week and adds a dated version when the file changes.
Can I use Daily water storage levels commercially?
Yes. CC BY 3.0 AU allows commercial use, redistribution and derived works as long as the attribution is kept. The attribution string is in this page's side column and inside every file.
Is this the official source for Daily water storage levels?
No. The publisher is Bureau of Meteorology, and its page is https://www.bom.gov.au/waterdata/. This site republishes the publisher's file without changing its content. The original sits beside every version as source.csv with its SHA-256, so the two can be compared.
How do I get only the rows for one state?
Every version has one JSON file per value of state, 10 files in the current version, listed with row counts at https://publicdata.au/d/au-water-storage-levels/v/2026-10-01/by/state/index.json. For example https://publicdata.au/d/au-water-storage-levels/v/2026-10-01/by/state/vic.json holds the 1,476,117 rows where state is VIC.
What this site did to the data. Cells were typed, headers were renamed and the encoding was made UTF-8. Rows were left alone. The publisher's file sits beside every version as source.csv so the change can be checked.