▸Overnight summary ✦ AI-generated ⓘ
Price, demand and renewables Observed
Wholesale price — MID for GB, day-ahead auction for European zones — against demand and combined wind + solar output.
Generation mix — period share Observed
Share of supply over the selected window, interconnector imports included.
Residual load Estimated
Demand minus transmission wind — what thermal, hydro and imports must cover. Solar is not subtracted: INDO demand is already net of embedded generation. ⓘ
Wholesale power price Observed
GB: Market Index price (volume-weighted APX + N2EX). European zones: ENTSO-E day-ahead auction price. Toggle drivers to overlay (GB data). ⓘ
Price distribution Observed
Half-hourly price histogram for the selected window.
Intraday shape Observed
Average price by time of day (UTC) across the window.
Price vs net load Estimated
Observed price against net load = demand − wind (derived) — system tightness vs price. Solar is not subtracted again: INDO demand is already net of embedded generation. Each point is one half-hour in the selected window. ⓘ
Generation stack Observed
Output by fuel type. GB: solar from PV_Live, all other fuels from Elexon transmission metering. European zones: ENTSO-E actual generation per production type. ⓘ
Low-carbon share Estimated
Wind + solar + nuclear + hydro + biomass as a share of total supply. ⓘ
Wind and solar output Observed
Renewable output; the faint band marks the window's demand range (half-hourly min to max), for scale.
Merit order curve — latest Estimated
Conventional merit-order stack: every technology's SRMC range is split into 0.5 GW tranches (efficient units first) and all tranches are sorted by cost, so blocks are contiguous and the curve only rises; technologies interleave where cost ranges overlap. Capacity is a proxy — p98 of observed output for dispatchables, latest output for must-run wind and solar — not registered capacity. Hover any block for its inputs. ⓘ
Observed dispatch by unit (beta) Observed Est. costs
Dispatch curve built from observed physical notifications (PN): each block is one BM Unit — width is its notified output for the most recent complete settlement period (Observed), height is its technology cluster's SRMC midpoint (Estimated — PN carries no prices, so unit-level costs do not exist in free data). Sorted cheapest-first, same axes as the modelled merit-order curve above, so the two can be compared directly. PN is notified intent, not metered output. Units without an SRMC benchmark are counted below but not plotted; charging/pumping and interconnector units are excluded. ⓘ
python etl/build_bmu_snapshot.py to fetch the latest
settlement period.
CCGT marginal cost vs price over time Estimated
The shaded band is the CCGT SRMC range implied by the efficiency spread; the line is the observed daily average price. Price above the band ⇒ efficient gas plant earning margin.
Assumptions Assumption
These sliders drive every estimate on this tab and the Spreads tab.
Clean spark spread Estimated
Margin of a reference CCGT after gas and carbon costs, daily. Formula: price − gas/η − (EF/η)·carbon. ⓘ
CCGT cost decomposition Estimated
Daily average price split into implied fuel cost, carbon cost and residual margin for the reference CCGT.
Clean dark spread Proxy / Derived
Coal cost from a futures-derived proxy: World Bank monthly average of Newcastle 6,000 kcal/kg futures, converted to £/MWh thermal — API2 (CIF ARA) itself is commercial data. Enter a price below to override the proxy. ⓘ
No coal benchmark available.
The futures proxy could not be built in the last ETL run and no manual price is set. Clean dark spread = price − coal/η − (EF/η)·carbon, with η and EF set on the Merit order tab. Enter a coal price above to render this panel.
Interconnector flows Observed
Positive = import to GB, negative = export. Per-cable detail in the tooltip. ⓘ
Net imports vs price Observed
Each point is one half-hour in the window.
Import dependency Observed
Net imports as a share of demand, daily.
Utilisation ranking Observed Proxy / Derived
Cables ranked by how often flow ran near a practical limit in the selected range. GB publishes no per-cable limits and no flow-based shadow prices: the working ceiling per direction is the highest flow sustained ≥2 h over the trailing 90 days (Proxy — self-adjusts to de-ratings, and single-period metering spikes don't set it), with operator nameplate as cited reference context only. Near-capacity = |flow| ≥ 90% of that ceiling. Δ compares GB MID with the counterparty day-ahead price (Derived £, indicative only — different market segments). Moyle, East-West and Greenlink share the all-island SEM day-ahead series; each row's Δ is averaged over its own near-capacity periods, so the three still differ. The congestion proxy column flags half-hours at ceiling and with a wide spread in the direction the flow earns — an approximation, not a shadow price (GB's cables are explicitly allocated; no congestion rent is published). Wide spread with slack flow, and at-ceiling flow against the price signal, are deliberately not flagged. ⓘ
Counterparty context Observed Derived £
What was happening in the zone on the other end of the selected cable: the cable's flow (GB side), GB price against the zone's day-ahead price — converted to £ at the daily BoE EUR/GBP rate and indicative only (day-ahead auction vs within-day MID, different market segments) — and the zone's generation mix below. The mix is zone-wide context, not attribution: it does not trace the cable's electrons. Zone history accumulates daily (append-only — FR from 16 May 2026, the other zones from 30 May), so longer ranges show only the overlap — which deepens over time. The flow chart marks the cable's per-direction operational ceilings (dashed) and nameplate (dotted; the flow axis spans the design envelope), and shades congestion-proxy half-hours in amber — same definitions as the Utilisation ranking above; an approximation, not a shadow price. ⓘ
Daily stress metrics Observed Derived flags
One row per day: seconds spent below 49.8 Hz (bars), the day's maximum settlement system price (line), and amber markers on flagged days. The price here is SSP, not MID: SSP is the settlement price of the balancing actions NESO actually took — the realised cost of real-time scarcity, which is the signal this detector exists to catch — where MID measures traded wholesale sessions rather than what balancing cost. A day is flagged by deterministic rules on observed metrics — frequency-excursion seconds above the trailing-year 99th percentile (with a 60 s floor), max SSP above its trailing-year 99th percentile, an Electricity Margin Notice issued, or loss-of-load probability at/above the trailing 99th percentile with a 1% floor — computed at build time, never in the browser. Flags mark notable days; they are not a security-margin model. Hover any day for its full metrics and the exact value-vs-threshold of each flag. ⓘ
python etl/fetch_stress.py --backfill 365 to build
the trailing-year metrics.
Event viewer — 15 s system frequency Observed
Raw 15-second system frequency for every flagged day in the selected range (the day list follows the 7D–1Y presets; every flagged day keeps a slice regardless) — the trace is frequency whatever the flag type, so a price- or adequacy-flagged day can (and often does) show a calm grid. Dashed lines mark the 49.8/50.2 Hz operational band and the 49.5 Hz statutory floor. Implausible feed readings (outside 45–55 Hz) are shown as gaps, not excursions.
System warnings Observed
NESO transmission-system warnings, filtered to Electricity Margin Notices and emergency instructions, verbatim. Publish stamps are UTC; times quoted inside notice bodies are UK local time — the dashboard never converts or interprets them. EMN cancellations are shown but do not count as issuances.
GB battery fleet — accepted BM volumes Observed Derived ID Beta
Signed stack of accepted Balancing Mechanism volumes for the identified GB battery fleet. Offer acceptances stack upward (the unit is instructed above its notified position, so it discharges more or charges less); bid acceptances stack downward (below the position, so it charges more or discharges less); the line is their net. The series is instructed deviation from each unit's own plan, not delivered energy or state of charge, and can therefore exceed metered throughput. One bar per stored day. ⓘ
python etl/build_bess_activity.py --backfill 400 to
build the trailing window.
Observable revenue stack Observed Beta
Stacked signed £/MW/day (display only — the underlying payload and the CSV export stay £/kW/day) for the twelve EAC availability products NESO auctions to the identified battery fleet, one bar per stored day filtered to the selected range (the hh/hour/day resolution toggle is not applied here, only the date range is, same reasoning as the activity chart above). Bands are coloured by service family (Dynamic Containment, Dynamic Moderation, Dynamic Regulation, Balancing Reserve, Quick Reserve, Slow Reserve), light for the low/negative leg and dark for the high/positive leg, and legended by product code. The two legs of a service are never netted into one band: Dynamic Regulation High and Low routinely clear opposite signs on the same day, and collapsing them would hide two large, real, offsetting flows behind a small net figure, so a negative band (commonly DRH) is expected and renders below zero rather than being clipped. The view toggle below collapses the twelve products into four service-group bands (Response, Reserve), each split into a positive-legs and a negative-legs series so the no-netting rule holds in both views. The shaded band and its centre line are the p10-p90 spread and median of the same total £/kW/day figure split across identified units, the peer-group comparison, with no unit named. ⓘ
python etl/build_bess_revenue.py --backfill
to build the trailing window.
Balancing Mechanism cashflow (gross, includes the energy leg)
The other half of this card's story: what the identified fleet was paid (offer) and paid out (bid) in Balancing Mechanism settlement, from Elexon's indicative Bid-Offer Cashflow (EBOCF, the II settlement run), with the net MWh that produced it on the right-hand axis. The BM cashflow is deliberately never added to the revenue stack above: it is the energy-purchase leg of BM participation, not margin. Its sign follows whichever way the fleet happened to charge or discharge that day, so a day of heavy charging settles deep negative, and its scale runs to several times the availability stack's. The offsetting wholesale trade is not publicly attributable per unit and stays out of frame. ⓘ
Identified fleet Observed Derived ID Beta
Every BM Unit currently in the identified GB battery fleet, sorted by registered MW descending (see Methodology for the identification rule). Owner is the registered BSC party as of the last refresh and can lag a real-world sale. This table has no CSV export: name and owner are free text, and the house rule keeps every exported data cell numeric, dated, or a fixed code, so they never appear there; the numeric columns behind the other Batteries cards do. ⓘ
python etl/build_bess_activity.py --backfill 400 to
build the fleet list.
Profitability calculator Assumption Estimated Beta
Illustrative economics from the assumptions you enter, anchored on what comparable units observably earned. Not investment advice, not a valuation, and not a forecast. You describe a battery, the calculator anchors the revenue side on the published record for real units, and reports a simple annual cash flow with NPV, IRR, DPI, a discounted payback period and an indicative LCOS. Once a tolled share or gearing is set, an equity IRR and debt service cover appear beside them. Every figure below the inputs is your own assumption arithmetic. ⓘ
Results
LDES cap and floor — Window 1 (reference) Reference
Ofgem's long-duration storage regime, the regulated counterpart to the Batteries calculator's toll: a guaranteed revenue floor (a debt-like return) in exchange for a soft cap (an equity-like return, with 30% retained above it), both on the project's regulatory asset value. This card is a vendored reference table of the 16 projects Ofgem is minded to award, the regime's published parameters, and the capacity mix — not final awards, and no per-project £ floor or cap levels, which Ofgem withholds as commercially sensitive, so none are shown or estimated here. Click a column heading to sort the table. ⓘ
python3 etl/build_ldes_capfloor.py to build the
vendored reference table.
Mini cap-and-floor calculator (indicative) Assumption
Where would the building blocks put a floor and cap for an asset like yours — and does the corridor bite? You describe the build and its costs, the calculator runs Ofgem's published building-blocks arithmetic (RAV with interest during construction, straight-line depreciation, a return at the floor and cap rates, annuitised flat) and holds your gross-margin scenarios against the resulting corridor: floor top-ups below it, the 70% consumer clawback above it, and the Financial Assessment ratio Ofgem screens with. The regime rates are prefilled from the published indicative parameters and badged Reference; every cost and margin input is yours, blank until you type it. ⓘ
every figure is your own assumption arithmetic on Ofgem's published building-blocks method; ex-tax; not the CFFM, not a valuation
Results
Glossary
Every term and abbreviation used on this dashboard, in plain language, alphabetically — a lookup, not an explanation of how anything is computed (that lives on the Methodology tab; entries link across where relevant). Terms tagged GB market term are specific to the GB market this dashboard is built around — they stay listed on other zones because the GB panels and comparisons still reference them. Where a term has a formal BSC definition, the entry links to Elexon's glossary; the wording here is deliberately our own.
Methodology & data provenance
Every series, formula, unit and limitation. Generated partly from the ETL metadata so it cannot drift from the data.