loading data…
loading month…

European power grid

Oct 2025 – Sep 2026 · day-ahead prices, cross-border flows and the grid constraints that split the market, every 15 minutes
CB ↗
——
Layers & legend
Colour zones by
Flows
Layers
Day-ahead price, €/MWh
price not public binding constraint 380–400 kV 220 kV HVDC model miss
000306091215182124

A year of Europe's power market, every 15 minutes

Every day at noon, one auction sets tomorrow's electricity price for most of Europe, one price per zone per quarter-hour. When the grid between zones has room, prices converge. When it doesn't, they split, sometimes by hundreds of euros.

This map replays that auction from October 2025 to September 2026. You can see the zone prices, the cross-border trades it scheduled, and the specific power lines and transformers that were full at each moment, drawn on the real transmission grid.

Click a zone for details · ←/→ step 15 min · [ ] step a day · space to play · works best on a laptop

About this map

How to read it

Bidding zones and the day-ahead price
Europe's power market is split into bidding zones, mostly countries (Norway, Sweden, Denmark and Italy are split into several). Each day at 12:00 CET the Single Day-Ahead Coupling (SDAC) auction clears all zones at once and sets one price per zone for each quarter-hour of the next day, in €/MWh. The price is set by the most expensive power plant (or demand bid) needed. It can go negative when inflexible or subsidised generation exceeds demand. The harmonised floor is −€500/MWh.
Flow-based market coupling (Core)
In the Core region (Benelux, France, Germany, Austria, Central-Eastern Europe), cross-border capacity is not a fixed number per border. The auction models how each trade physically spreads over the meshed AC grid (power takes every parallel path), and only accepts the combination of trades that keeps every monitored line within its limits. That is why a trade between France and Germany can be limited by a line inside Belgium.
Binding constraints (CNECs) and shadow prices
The red lines are critical network elements: lines and transformers, each checked against an outage elsewhere (the "contingency"), that were at their limit in that quarter-hour. Their shadow price (€/MW) is what one extra MW of capacity on that element would have been worth to the market as a whole. Big price differences between zones are the sum of shadow prices times how strongly each zone's trades load the element. Thicker and redder means more valuable.
Net position
The number under a Core zone's price is its net position: + means the zone exports on balance, − means it imports.
Scheduled vs physical flows
Scheduled arrows are the commercial exchanges the day-ahead auction scheduled between zones. For AC borders they are drawn as arcs between zone labels, for HVDC links along the real cable. Physical flows (Dutch borders only) are what the meters measured, after intraday trading and loop flows. They often differ: physical power entering NL from Germany frequently continues to Belgium.
Why does power sometimes flow from expensive to cheap?
Under flow-based coupling, a "counter-intuitive" exchange can free up capacity on a congested line that a more valuable trade elsewhere needs. The auction maximises total welfare across Europe, not each border separately.
Model price and "model misses" (⚑)
For NL, Germany and Belgium the zone panel and the timeline also show a model price (dashed). It comes from my own zonal market model (see below). The ⚑ markers are the quarter-hours where the real price differed most from the model, labelled with the regime the model was in (scarcity, renewable surplus, …). Use ⚑‹ ⚑› or the n / p keys to jump between them.

The year in numbers

Oct 2025 – Sep 2026, 15-minute day-ahead prices; zones whose prices are licensed for publication only. Median daily range = typical gap between the day's highest and lowest quarter-hour price, which is what a battery earns its living on.

The model behind the dashed line

The model price comes from a zonal market model I built: a linear program (linopy + HiGHS) that clears NL, Germany and Belgium every quarter-hour against data-driven supply curves, using the published flow-based grid constraints and the HVDC links to the Nordics. It replays history with observed demand and renewables, so it is a fundamentals replay, not a day-ahead forecast. Over Nov 2025 – Sep 2026 its mean absolute error is €13/MWh for NL (€8 DE, €18 BE), against €34–37 for a naive same-time-last-week baseline. It misses most in solar months and in scarcity hours, which is what the ⚑ markers show.

The same project includes a day-ahead wind forecast for the Netherlands (gradient-boosted trees on day-before weather forecasts) that beats the recalibrated TSO forecast: 8.2% vs 11.7% normalised error offshore, 5.7% vs 12.0% onshore, plus a study of whether Dutch imbalance prices can be predicted a few hours ahead. Mostly they can't, beyond what persistence already gives.

Data & licences

Only data that may be republished is shown. Zones in grey have no public price: their day-ahead prices come from the power exchanges (EPEX SPOT, Nord Pool) and are licensed for private use only, so they are left out, along with anything derived from them.

All series were resampled to a common 15-minute UTC grid (hourly values forward-filled) and are shown without warranty. Data built .

Who made this

I'm Cormac Berkery, a data scientist in Amsterdam working on power-market modelling and forecasting. This map is the visual front end of a larger project: data pipelines for European market and grid data, the market model above, and forecasting experiments. Feedback is welcome.