Two acronyms that decide what imbalance costs. Most explanations stop at what the letters stand for. This one goes to how often they are actually activated, what they are paid, and which endpoint gives you the data.
Grid frequency has to stay at 50 Hz. When generation and consumption drift apart, reserves close the gap — in layers, each slower and cheaper than the one before it.
| Reserve | Full name | Activated | Controlled by |
|---|---|---|---|
| FCR | Frequency Containment Reserve | within 30 s, fully by 30 s | automatically, by local frequency |
| aFRR | automatic Frequency Restoration Reserve | seconds, full within 5 min | automatically, by a signal from the TSO |
| mFRR | manual Frequency Restoration Reserve | within 12.5 min | manually, dispatcher calls it |
| RR | Replacement Reserve | 30 min and beyond | manually, to free up the faster layers |
FCR stops the fall, aFRR restores the frequency, mFRR relieves aFRR so it is free again. That sequencing is the whole point: the fast product is scarce and expensive, so the system keeps handing the load down to slower ones.
Definitions make aFRR sound like an emergency measure. It is not — it runs almost constantly. These are the Czech control area figures for August 2026, 2 977 quarter hours:
| Product | Share of quarter hours with activation | Median when active | Peak |
|---|---|---|---|
| aFRR upward | 76.3 % | 3.6 MW | 131.3 MW |
| aFRR downward | 71.1 % | −3.5 MW | −100 MW range |
| mFRR upward | 31.9 % | 2.0 MW | 55.7 MW |
| mFRR downward | 6.0 % | −2.8 MW | rare |
Both directions of aFRR are active in roughly three quarters of all quarter hours, and often both within the same quarter hour — the imbalance flips sign inside fifteen minutes and the controller follows it. Anyone modelling a quarter hour as "short" or "long" is already simplifying.
mFRR is a different animal: upward five times more often than downward. Downward mFRR means telling plants to produce less, and systems are short far more often than long.
Czech regulating energy prices for the same month, 44 641 minute values:
| Product | Median | p95 | Maximum |
|---|---|---|---|
| aFRR | 135.5 EUR/MWh | 221.8 EUR/MWh | 6 688 EUR/MWh |
| mFRR | 75 EUR/MWh (administrative) | — | — |
The median is unremarkable and the maximum is fifty times higher. That gap is the entire economics of balancing. Reserve revenue is not a steady stream with occasional noise — it is a flat line with a handful of hours that pay for the year.
The same shape shows up in the imbalance settlement price, which is built from these activations. We measured that on five years of data: the tail is 18.6 % of quarter hours but 35.9 % of total magnitude.
Until recently every TSO balanced alone. Now the energy side of each product clears on a shared European platform, which is why a German activation can be served by a Czech unit:
| Platform | Product | What it does |
|---|---|---|
| PICASSO | aFRR energy | Continuous cross-border exchange of aFRR energy, 4-second cycle. |
| MARI | mFRR energy | Quarter-hourly auction for mFRR energy across participating TSOs. |
| TERRE | RR energy | Replacement reserve exchange. Fewer members than the other two. |
| IN/IF | imbalance netting | Nets opposing imbalances between areas before anything is activated at all — the cheapest balancing there is. |
Practical consequence: your local activation price is no longer a local variable. It is set by the marginal bid across a coupled area, which is why prices in neighbouring zones move together until the border congests, and then abruptly do not.
Every TSO publishes this, but nowhere the same way.
| Market | Source | Access |
|---|---|---|
| Pan-European | ENTSO-E Transparency — accepted and activated volumes, prices, per area | free, token by e-mail request |
| Germany | Regelleistung.net — capacity and energy auctions, merit order lists, the most detailed in Europe | free REST API |
| Czechia | ČEPS AktivaceSVRvCR and AktualniCenaRE — the figures on this page | free SOAP, no key |
| Austria | APG Markttransparenz | free, CSV export |
| Nordics | Fingrid and Energinet open data | free REST APIs |
| Britain | Elexon BMRS — bid-offer acceptances | free REST API, no key |
# Czech aFRR and mFRR activation, no API key needed
from ceps_ote import Ceps
ceps = Ceps()
akt = ceps.balancing_activation("2026-08-01", "2026-09-01")
for t, row in list(akt.items())[:3]:
print(t, row["aFRR+ [MW]"], row["mFRR+ [MW]"])That client is on GitHub: ceps-ote, one file, no dependencies. For everything else there is entsoe-quickstart and the ENTSO-E API guide.
We build market data pipelines and dashboards for exactly this kind of data — activation feeds, imbalance settlement, backtesting against real published values. Tell us what you are trying to see.
info@progrunners.com