Answer first
Three CSVs, no signup
Three datasets are downloadable here as plain CSV: daily shielded pool balances, daily shield/deshield flows, and daily ZEC price candles. No account, no API key, no rate-limit contract — each one is a single HTTP GET, served as text/csv; charset=utf-8 with Content-Disposition: attachment, an hour of caching and an X-License: CC-BY-4.0 header — the files save as zecstats-pool-balances-daily.csv, zecstats-shielded-flows-daily.csv and zecstats-zec-price-daily.csv. Published under CC BY 4.0 with attribution to zecstats.org. The same figures are available live as JSON through the ZecStats API.
Daily shielded pool balances
Download: /api/zec/pools.csv
Columns: day,height,transparent,sprout,sapling,orchard,ironwood,lockbox,chain_supply
Cadence: one row per UTC day — the last observation of that day, with the block height it was taken at. Optional ?from=YYYY-MM-DD&to=YYYY-MM-DD.
Coverage: from 2026-07-30 onward — 8 days so far, growing by one row a day. Short, and we will not pretend otherwise: this series starts the day our own snapshot archive did.
Daily shield / deshield flows
Download: /api/zec/flows.csv
Columns: day,shield_zec,deshield_zec,net_zec,shield_tx,deshield_tx
Cadence: one row per UTC day: ZEC crossing into shielded pools, ZEC leaving them, the net, and the transaction counts behind each side. Optional ?from=YYYY-MM-DD&to=YYYY-MM-DD.
Coverage: from 2026-06-29 onward — 39 days. Every refresh persists the upstream flow series into our own table, so the record survives the upstream.
Daily price (OHLC)
Download: /api/zec/price.csv
Columns: day,open,high,low,close,volume,market_cap_usd
Cadence: one row per UTC day. Optional ?token=zec|bitcoin|ethereum (default zec) and ?from=YYYY-MM-DD&to=YYYY-MM-DD.
Coverage: ZEC from 2019-03-21 — the first daily close in our store — through yesterday. Bitcoin and Ethereum are available on the same endpoint via ?token= and start in March 2019, for normalising ZEC against the majors.
Honest coverage
How far back each file actually goes
Coverage is uneven, and pretending otherwise would make the files useless for research. Here is exactly what you get, as of 2026-08-06 16:54 UTC:
| Dataset | First UTC day | Rows/day | Origin |
|---|---|---|---|
| pools.csv — pool balances | 2026-07-30 | 1 | ZecStats snapshot archive |
| flows.csv — shield/deshield | 2026-06-29 | 1 | Upstream flow series, persisted to our own store |
| price.csv — ZEC OHLC | 2019-03-21 | 1 | Binance daily closes + our own price snapshots |
The pool-balance series is 8 days long and growing. That is short — but it is ours. Every successful refresh writes the consensus pool balances into a ZecStats-owned store, in exact zatoshi, precisely so the historical record does not depend on one upstream operator continuing to exist, continuing to expose the same endpoint, or continuing to compute deltas the same way. We started that archive on 2026-07-30; it lengthens by one row every day and is never rewritten.
The flow series has the same shape of guarantee: the upstream provides the daily series, and every refresh persists it locally, so the file keeps working even if the source disappears. The price series is the oldest because it could be backfilled from an exchange's public daily-close archive — the pool balances could not, because nobody was publishing them.
Read first
Using this responsibly
Four things to know before you plot or publish any of it.
Days are UTC days, and the date filters are inclusive.
Why / details
The day column is a UTC calendar day (YYYY-MM-DD), and the from / to query parameters are inclusive UTC days interpreted the same way (a malformed value is ignored, not rejected). If your analysis uses local-time days, re-bucket rather than assuming they line up — a Zcash day boundary in UTC will not match a US or Asian trading day.
A pool row is the last observation of that day, not a daily average.
Why / details
Pool balances are point-in-time snapshots. The row for a day is the last observation we took during that day, and the height column tells you which block it was taken at. It is not an average, not a close, and not an end-of-day chain state reconstructed after the fact.
That matters for differencing: a day-over-day change is the difference between two snapshots taken at whatever heights those columns say — so use height when you need the exact interval, especially around a reorg-adjacent or outage-adjacent day.
Amounts are ZEC, not zatoshi.
Why / details
Every ZEC-denominated column — pool balances, chain_supply, shield_zec, deshield_zec, net_zec — is ZEC as a decimal number, written to 8 decimal places (one zatoshi). The underlying store keeps exact zatoshi integers; multiply by 100,000,000 to recover them if you need integer arithmetic. The _tx columns are transaction counts, not amounts; price columns are USD (2 decimal places for volume and market_cap_usd).
An empty cell means “not observed” — never zero.
Why / details
If a value could not be observed for a day, the cell is empty. That is a deliberate choice: this project publishes null rather than a plausible-looking guess, on the site and in these files alike. Reading a blank as 0 will invent a collapse in a pool balance that never happened.
Missing rows are possible too — an outage day is simply absent, not interpolated. If you forward-fill or interpolate for a chart, say so in your methods. More on the withholding rules: methodology.
Licence
Licence, attribution & citation
These datasets are published under the Creative Commons Attribution 4.0 International licence (CC BY 4.0). Use them, reshape them, redistribute them, build a product on them — commercially or not — as long as you credit the source. The minimum credit line:
Data: ZecStats (https://zecstats.org), CC BY 4.0
For a paper, report or dataset citation:
ZecStats. (2026). Zcash shielded pool balances, shield/deshield flows, and ZEC daily price [Data set].
ZecStats. https://zecstats.org/data (accessed YYYY-MM-DD). Licensed CC BY 4.0.
Please cite the access date — the pool series grows daily, so the file you download tomorrow is longer than the one you download today. If you are automating the download, the API page documents the query parameters, headers and fair-use expectations. For what each number means and how it is sourced, read the methodology; for the pools themselves, the shielded pools page; and for how the Ironwood figures reconcile against Orchard, the Ironwood reconciliation.
Questions
Download FAQ
Where can I download historical Zcash shielded pool data?
Right here: /api/zec/pools.csv gives one row per UTC day with the transparent, Sprout, Sapling, Orchard, Ironwood and lockbox balances plus chain supply, as a plain CSV with no signup. It is the file this page exists to publish, because a clean daily pool-balance CSV was not otherwise available anywhere.
How far back does each dataset go?
Honestly: not equally far. ZEC daily price candles start 2019-03-21. Daily shield/deshield flows start 2026-06-29. Pool balances start 2026-07-30 — 8 days as of this page load — because that is when our own snapshot archive began accumulating. The pool series grows by one row every day and never gets rewritten.
Do I need an account or an API key?
No. There is no signup, no key and no rate-limit contract. The files are plain HTTP GETs, served with an hour of cache, and they are open to any origin so a browser page can read them directly.
Does an empty cell mean zero?
No. An empty or null cell means the value was not observed for that day — a source outage, or a field that did not exist yet. Zero means an actual observed zero. Never fill blanks with 0, and if you forward-fill for charting, say so in your methods.
Are the amounts in ZEC or zatoshi?
All amounts in these CSVs are ZEC as decimal numbers. Internally the snapshot store keeps exact zatoshi integers; multiply a CSV amount by 100,000,000 if you need the integer form.
Can I use this in a paper, an article, or a commercial product?
Yes, under CC BY 4.0 — including commercially. Credit ZecStats and link to zecstats.org so your readers can re-derive the numbers. A suggested citation line is on this page.