Generation by fuel type
5-minLast 24 hours
Half-hourly outturnInterconnector flows
INTOUTHH · half-hourlyWind — outturn vs forecast
FUELHH vs WINDFORCarbon intensity
NESO · half-hourlySystem frequency
FREQ · 15-secondWhat this is
A live read of the GB transmission system built entirely on Elexon's Insights (BMRS) API — the same public dataset that sits behind GB electricity settlement. Every fuel row except solar is BM-metered. Embedded (distribution-connected) generation is invisible to those feeds — it shows up instead as suppressed National Demand, which is why INDO on a sunny afternoon looks implausibly low and is the single most common misreading of this data. Embedded solar is filled in from PV_Live and counted (see below); embedded wind still is not, because no clean GB figure is published, so a little generation remains hidden inside demand. Biomass is counted as low-carbon by UK convention despite being combustion-based. Coal is not named as a fuel here: Ratcliffe-on-Soar, the last coal-fired station in GB, closed on 30 September 2024, and Elexon has published COAL = 0 every settlement period since. The code stays mapped so a residual could never be dropped silently, and the table view still shows the raw zero — but naming it in a label would imply the grid has an option it no longer has. Storage (pumped) and interconnectors go negative when pumping or exporting, and are excluded from the low-carbon denominator. No API key is required and no data leaves your browser.
“Other” is a residual, and cannot be broken down
The row labelled Other (unclassified) is not a fuel. Elexon's own definition, in the BMRA and SAA Interface Specification, is circular by design: “The other category contains all generation that cannot be placed within any of the other categories.” It is typically 0.2–3 GW, a low single-digit percent of transmission-connected output, and it peaks in the evening — at peak it can exceed hydro, pumped storage, OCGT, oil and coal put together, so it is not a rounding error. It cannot be decomposed from published data, and this page checked. FUELINST and FUELHH carry no BM unit field at all; B1610 gives half-hourly metered volumes per BM unit but its psrType is the literal string “Generation” on every record, with no fuel type; and /reference/bmunits/all does carry a fuel type, but it is self-declared at registration, by a different body, over a different population — units marked OTHER there include supplier units that are not transmission generators. Joining those two would be inventing a mapping nobody publishes. The richer ENTSO-E dataset AGPT splits wind onshore from offshore and adds solar, and still keeps its own Other bucket. So this page does not say what is in it. The usual guesses are worth naming as guesses: waste-to-energy is largely distribution-connected and therefore outside this feed's scope entirely, and Other never went negative on a day when pumped storage did — which is not what net-charging batteries would look like.
Embedded solar, and why it is drawn differently
GB solar is almost entirely distribution-connected, so it is absent from every Elexon metered feed. Two sources publish it and they disagree, so which one you are looking at depends on how you opened this page — the solar row names its own source, and the cross-check line under the fuel mix states it in words. Read that before quoting a solar figure.
Preferred: Sheffield Solar's PV_Live, the recognised measure of total GB PV outturn. In practice, usually Elexon AGWS — because PV_Live's API sends no CORS headers, so a page opened by double-clicking the file off disk cannot read it at all and falls back. AGWS is the ENTSO-E B1440 flow; it publishes each half hour about 2h30m late and has read 16–29% below PV_Live at every half hour compared. So the fallback figure is best treated as a floor rather than a reading, and it is the figure you will normally see. Serving the folder over http does not fix it: only a server-side fetch does, and a single file with no build step cannot perform one.
What the file does instead is leave a door open. An optional proxy is read from a single constant, PVLIVE_PROXY, empty by default. Left empty, the behaviour is exactly as described above and the file stays double-clickable off disk. Set — once this is hosted somewhere that can run one — PV_Live becomes readable without the file changing shape, and the fallback stays underneath it, because a proxy that is down should look no different from CORS: AGWS, named on screen.
Whichever source supplies it, embedded solar is counted in every total on this page, because it is real generation powering the country, but always drawn as a hatched band since it is modelled rather than BM-metered. Provenance is carried by the fill, not by leaving real megawatts out of the arithmetic. When both sources are readable the gap between them is shown rather than reconciled. Underlying demand adds embedded solar back to INDO; embedded wind is not added. Until v0.02 this page said that was because no clean GB figure is published, which overstated it: NESO publishes an Embedded Wind and Solar Forecasts dataset, and other tools use it. What it publishes is a forecast, not an outturn — a modelled expectation of what distributed wind will do, not a measurement of what it did. For a page built on metered outturn that is a different kind of number, and mixing it into a demand figure without saying so would undo the distinction the rest of this page is built on. So it stays out, and the gigawatts it represents stay hidden inside demand. The honest position is that this is a choice about what this tool is, not an absence of data. Daylight shading and the sunrise/sunset marks are computed, not fetched — NOAA's solar-position algorithm for a PV-weighted GB point (52.4°N, 1.5°W, roughly the Midlands). Sunset across GB spans about 45 minutes end to end, so read the marks as representative, not exact for your postcode.
Carbon intensity, and a ruler that moves
Carbon intensity comes from NESO's Carbon Intensity API, which is open, keyless and licensed CC BY 4.0. Two things about it are worth knowing before quoting a figure.
The band names are re-cut every 1 January. As the grid decarbonises NESO lowers the thresholds, so the same reading slides down the scale: 95 gCO2/kWh was low under 2025's cuts and is moderate under 2026's. The figure did not move — the ruler did. This page bands each reading on the row for the year that reading belongs to, so a 2025 half hour is still judged by 2025's thresholds when you look at it today, and the panel says which year it used. It computes the band from the figure rather than reading the API's own label, because settlement reruns revise the figure without always recomputing the label; where the two disagree, the panel says so instead of quietly choosing.
Half the time the headline number is a forecast. The settled actual for a half hour in progress does not exist yet, so any live carbon figure is a prediction until settlement catches up. The tile carries an actual or forecast chip on the face of the number for that reason — the same discipline the solar figure gets, for the same reason.
The band scale is drawn in ink rather than green-to-red, against the convention of every comparable tool. Every hue on this page belongs to the data and the fuel palette already owns them, so a green in a carbon ramp would read as biomass; and green-to-red is the worst possible ramp for the two colour-vision deficiencies this project's palette is validated against. The band has a name, the name is always written, and the tint only reinforces it.
System frequency, and two limits that are not the same
Frequency is Elexon's FREQ dataset at its native 15-second resolution — the fastest-moving figure on this page by a wide margin, next to a fuel mix that updates every five minutes and settlement data that updates every half hour.
The panel draws two pairs of lines and deliberately draws them differently. 49.5 and 50.5 Hz are statutory: the Electricity Safety, Quality and Continuity Regulations 2002 permit a variation not exceeding 1% either side of the declared frequency, and Grid Code CC.6.1.2 restates it. 49.8 and 50.2 Hz are operational — the band NESO works to by its own standard, which is not a legal limit. Drifting outside the operational band is ordinary and happens most hours; leaving the statutory range is not. A dashboard that drew both pairs the same way would be saying they mean the same thing.
Forecast convergence, and the split
The wind panel draws three series, all BM-metered wind on one MW axis: outturn, the latest forecast for each settlement period, and the first forecast ever published for it — typically about two days ahead. The interesting question about a forecast is not only how wrong it was but when it stopped being wrong, and the gap between the two dotted lines is that answer. Both vintages are scored on the same periods, so the improvement figure is like-for-like rather than an artefact of the two covering different windows. Some days the latest forecast is worse than the first; the panel says so when it happens, because that is the more interesting day.
The onshore / offshore split comes from the same AGWS call that supplies the fallback solar figure — one endpoint, one request, three quantities. It carries its own timestamp rather than the chart's, because AGWS lags and a split labelled with the current time would be claiming a currency it does not have.
What this deliberately does not show
Battery storage. Elexon reports storage discharging but not charging. Showing discharge alone would count the same energy twice — once when it was generated and again when it came back out — so it is left out entirely rather than shown as a half-truth. History. This page is a live read and holds 24 hours, an hour of frequency, and nothing further back. That is a consequence of being one file with no server rather than a judgement that history does not matter; tools that keep an archive answer questions this one cannot. Embedded wind, as above — including in all three wind series and in the onshore/offshore split, all of which are transmission-metered only. Wind curtailment. There is no published GB curtailment figure; deriving one means reconciling physical notifications, bid-offer acceptances and export limits per unit, integrating piecewise ramps and resolving acceptance amendments. It is a research problem rather than a panel, and a number this page could not defend is worse than no number.
Inspired by
GB Electricity takes inspiration from existing public GB grid dashboards, particularly GridWatch and Kilowatts.io. Their live generation, demand and interconnector views helped shape the scope of this dashboard.
The National Grid ECR Dashboard is a useful reference for a different kind of data product: clear filtering, explicit data coverage, connected versus accepted capacity, geographic breakdowns and downloadable data. Those ideas may inform future GB Electricity capacity and network views rather than the live system page itself.
Endpoints called
Data sources and attribution
Contains BMRS data © Elexon Limited copyright and database right 2026. Used under Elexon's Licence to use BMRS open data.
Carbon intensity data by the National Energy System Operator (NESO), from the Carbon Intensity API, licensed under CC BY 4.0 (terms of use).
PV_Live by Sheffield Solar is licensed under CC BY 4.0. solar.sheffield.ac.uk/pvlive
GB Electricity is an independent, non-commercial personal project. It is not affiliated with, endorsed by, or an official product of Elexon Limited, NESO, or the University of Sheffield. No logos or trade marks of any of them are used here.
All data is provided by its sources as-is and without warranty of accuracy. Solar figures are modelled estimates and are revised after publication; Sheffield Solar describe PV_Live as live research whose estimates may be inaccurate, and offer no guarantee of availability.
Source and status
Elexon Insights Solution (BMRS), base https://data.elexon.co.uk/bmrs/api/v1. Times are shown in Europe/London and settlement periods are on the BSC day. Built by Kyle Barnard. Forked from The National Desk v0.19 on 20 August 2026 and developed independently from there; the shared history up to that point is recorded in this project's changelog. The chrome is blue in two levels, and nothing that plots a number wears the chrome colour — the eight-series palette is unchanged from the fork point and remains validated for deuteranopia and protanopia in both themes. Working aid, not an authoritative source — where this and an official Elexon document disagree, the official document is right.