📈 Battery revenue with our forecast simulated:See tomorrow’s forecast →
progrunners / Open data and tools

Open data and tools, with the workings shown

We build market data pipelines for a living. The parts that are useful on their own we publish — the datasets, the lookup tables, and the mistakes we made getting them right. Here are the open data sets and tools, each with the workings shown.

· Six repositories: code under MIT, our own tables and results under CC0. Four work without any key; the two ENTSO-E clients need a free ENTSO-E token.
On this page
  1. Start here if you need data today
  2. The one thing worth reading even if you take nothing else
  3. When each document actually arrives
  4. Why we publish any of this
  5. What we do for money

Start here if you need data today

Everything below is on GitHub and free. The datasets and lookup tables need no registration; entsoe-quickstart and nordpool-day-ahead query ENTSO-E directly and need a free ENTSO-E security token. Pick by what you are trying to do rather than by name.

You wantTake thisFormat
To query ENTSO-E yourself without fighting the XMLentsoe-quickstartone Python file, no dependencies, ENTSO-E token needed
Nord Pool day-ahead prices without a Nord Pool subscriptionnordpool-day-aheadone Python file, all 15 Nordic and Baltic zones, ENTSO-E token needed
The zone code a query needseic-codesCSV and JSON
Czech data from ČEPS and OTE without a tokenceps-oteone Python file
To understand what the imbalance price actually doesimbalance-price-anatomymeasured on 92 018 quarter hours with data
To know which source has what, across Europeawesome-european-energy-dataan annotated list

If you only want the numbers and not the plumbing, the live prices for 38 bidding zones are on this site at European electricity prices, updated through the day.

The one thing worth reading even if you take nothing else

ENTSO-E compresses its price curves. When consecutive quarter hours clear at the same price it publishes the first one and omits the rest, and nothing in the response says so. Parse the points one at a time and those intervals disappear silently.

We had this bug for months. It had removed 10.8 % of our own published dataset — 324 394 rows across 1 718 of 1 725 days — and the README blamed the source for it. A single French day came out 11 % too expensive because the gap fell in the cheap midday solar hours.

There is a script that checks your own data in one command. It fetches one day twice, once naively and once correctly, and prints both. If your own parser has the bug, the two numbers will not match. It is ninety lines of standard library and it is in the write-up.

The full account — what curveType A03 is, the second trap of several price series arriving in one response, and how to verify a series against something that is not ENTSO-E — is in curveType A03: the gap that eats 10 % of your prices.

When each document actually arrives

No document on the Transparency Platform records when it was published — only which period it describes. That second timestamp is the one that decides whether a feature in your model is legitimate or look-ahead, so we measured it instead of guessing.

The imbalance price is out under three minutes after the quarter hour ends, which makes the balancing feed the fastest thing on the platform rather than the slowest. Actual load arrives in hourly blocks, so its staleness sawtooths between about five and sixty-five minutes depending on when you ask.

A forced outage reaches the platform a median of eight minutes after the unit is already down — measured on 378 unplanned outages out of 2 900 messages across 52 weeks. Only a third are published before the outage starts. That is fast enough to react to a price spike and far too slow to anticipate one.

Worse for anyone backtesting: the API serves only the current revision of a message, and two thirds of outage messages have been revised. We checked 612 of them and not one came back in an older version, so the history you download is a tidied-up account nobody had at the time.

The numbers, the method and a script that runs the same probe against your own bidding zone are in When ENTSO-E data actually arrives. The rest of how the API behaves is in our practical guide to the ENTSO-E API.

Why we publish any of this

Partly because the work is already done. A dataset that updates itself daily costs nothing extra to share, and the lookup tables were built because we needed them.

Mostly because it is the honest version of a portfolio. Anyone can claim to know a market. Publishing the data, the parser and the bug we shipped for months lets you judge that for yourself before you talk to us.

The licences are permissive on purpose: MIT for the code, CC0 for our own tables and aggregated results (eic-codes, the awesome list, the imbalance statistics). The day-ahead prices themselves are ENTSO-E data and stay under the ENTSO-E Transparency Platform terms. MIT lets you use the code in a commercial product; it only asks you to keep the copyright notice and the licence text. The only thing we ask is that you check the numbers against a second source before you rely on them — which is exactly the lesson that produced the article above.

What we do for money

We build the things that sit on top of this data: trading dashboards, market data pipelines, backtests against real published values, imbalance settlement reconciliation. Mostly for utilities, traders and aggregators in Central Europe and DACH.

If something here is close to what you need but not quite it — a zone we do not cover, a source we have not touched, a series that will not reconcile — that is the conversation we are interested in. Examples of finished work are in a balancing market dashboard and rebuilding an intraday order book.

Frequently asked questions

Do I need an ENTSO-E account to use these?
Not for the datasets or the lookup tables — they are plain files on GitHub. The entsoe-quickstart client talks to ENTSO-E directly, so for that you need a security token, which is free but arrives by e-mail a few days after you ask for it.
Can I use the data commercially?
The code is MIT, so yes — keep the copyright notice and licence text with it. Our own tables and aggregated results are CC0, public domain. The price data comes from ENTSO-E and stays under the ENTSO-E Transparency Platform terms, which apply to redistribution.
How often does the price dataset update?
Once a day, automatically. It also re-fetches the last few days on every run, so a value the platform corrects after publication gets corrected in the dataset too.
Why publish a bug you had in production?
Because it is the useful part. The fix is four lines; knowing the failure exists is what saves someone a week. It also silently affected a dataset we had told people to trust, and saying so is the minimum.
I found something wrong in one of these.
Open an issue on the repository, or write to info@progrunners.com. A reproducible case — zone, day, what you expected — is worth more than a description, and we will usually have an answer the same day.

Need this shaped to your market?

We build market data pipelines and dashboards for European power — ENTSO-E, national TSOs, imbalance settlement, backtesting. Tell us what you are trying to see and we will tell you what it takes and what it costs.

info@progrunners.com