← Market overview

NEM Battery Storage — Capture Rate & Profile Dashboard

Energy-arbitrage timing skill · capture = actual ÷ perfect-timing revenue · monthly & quarterly · all NEM regions · data to 14 Jul 2026 · rebuilt 2026-07-14 15:45

📊 Rankings
⚡ Daily Profiles (MW)
📐 Normalised Profiles (%)
💰 Revenue & SOC
🗺️ Map
🔋 Fleet Summary
Region
Period
Month
Trend view
Duration
How capture rate is measured

Capture rate = actual net revenue ÷ perfect-timing revenue, both computed from AEMO 5-minute dispatch SCADA priced at the unit's own regional RRP. Actual is what the battery earned with the dispatch it actually ran (discharge revenue minus charging cost). Perfect timing re-times that same day's energy — identical MWh discharged and charged, same day — into the best and worst priced intervals. It is a mathematical upper bound, so capture is always ≤ 100%: the score isolates timing skill from fleet size, weather and price level. The benchmark deliberately ignores intra-day state-of-charge ordering, so the ceiling is slightly generous and scores are conservative — verified against the exact assignment optimum.

Caveats: energy arbitrage only — FCAS revenue is excluded, and for several units FCAS is the larger income stream, so $ figures are a floor. State of charge is estimated by integrating dispatch at 87% round-trip efficiency, anchored to each day's minimum — it is not metered telemetry.

Capture rate over time

Ranking

Sorted by capture rate. Duration colour-coded. Tracked units outlined in black.

Detail table

Click any column header to sort.

Region
Time view
Day
Resolution

Batteries

Toggle to overlay. Duration badge per unit. Price shown is the unit's own region.

Profile

Region
Time view
Day
Resolution

Batteries

MW ÷ rated power → shows behaviour independent of size. Toggle to overlay.

Normalised profile

Region
Period
Month

Revenue per MW — league table

Net arbitrage margin (discharge revenue − charging cost, own-region RRP) ÷ observed MW ÷ active days. Energy-only — excludes FCAS, which for some units is the larger revenue stream — so treat as a floor on total revenue.

Realized spread vs available TB2

Bar = the unit's realized spread (energy-weighted average sell price − average buy price). Tick = its region's TB2 benchmark, the spread a perfectly timed 2-hour battery could earn from daily shape. Bars past the tick mean the unit beat the day-shape benchmark — usually by monetising spikes.

Value efficiency — capture vs cycles

Each bubble is a battery (size = MW). Up = better price-timing; right = harder worked. Top-left = high skill, low wear; bottom-right = high throughput, lower skill.

State of charge (estimated)

Reconstructed by integrating dispatch with ~87% round-trip efficiency, anchored so each day's minimum = 0%. An estimate of stored energy, not metered SOC.

Day

💥 Extreme-price capture — the money & the cheap charging

Most BESS revenue is made in a few high-price intervals; the cheapest charging is in negative-price intervals. Bars show each battery's capacity factor (avg power ÷ rated MW) during those intervals. Uses the period selected above.

Mode
Colour by
Region

NEM battery fleet — map

Bubble size = rated MW · position = registered site. Hover/tap a bubble for detail. Coordinates from Open Electricity (build_geo.py).

Region

NEM BESS fleet — registered units

Duration = Energy ÷ Power: 1h <1.5h · 2h <2.5h · 3h <3.5h · 4h otherwise. Daily SOC swing = average depth of cycle (estimated). Tracked units highlighted.

Duration class breakdown

Count of batteries by storage duration.