Data
All forecasts, prices and scores for download, updated daily. Data under CC BY 4.0, prices from Bundesnetzagentur | SMARD.de.
| File | Content | Rows | Size |
|---|---|---|---|
| forecasts.csv | All forecasts issued live, per quarter-hour | 17,664 | 2.4 MB |
| forecasts.parquet | All forecasts issued live, per quarter-hour | 17,664 | 422 kB |
| actuals.csv | Actual prices since 1 October 2025 (quarter-hour auction) | 36,960 | 1.7 MB |
| actuals_since_2023.parquet | Actual prices since 2023 (hourly values before October 2025) | 133,340 | 1.6 MB |
| scores.csv | Score of every quarter-hour, including missed forecasts | 18,720 | 4.0 MB |
| scores.parquet | Score of every quarter-hour, including missed forecasts | 18,720 | 939 kB |
| scores_daily.csv | Error per model, horizon and delivery day | 195 | 16 kB |
| cheapest.csv | Recommended cheapest 3 hours and how they turned out | 195 | 40 kB |
| data_dictionary.csv | Column dictionary for all tables | 29 | 3 kB |
| summary.json | Live track record metrics | 72 kB | |
| backtest_summary.json | Backtest metrics (not part of the track record) | 56 kB | |
| latest.json | Most recent forecast of all models, cheapest windows, scores | 189 kB |
Load into Power BI or Excel
CSV files are UTF-8, comma-separated, with a dot as decimal separator. In Power BI: Get data → Text/CSV → file origin '65001: Unicode (UTF-8)', delimiter comma. With a non-English locale use 'Change type → Using locale…' English (United States). Times are given in UTC and in German local time; use the local date column for daily views.
For programs
latest.json holds the most recent forecast of all models, the cheapest windows and the headline scores. The immutable original files are in the repository. forecasts/
Column dictionary
| Table | Column | Type | Unit | Description |
|---|---|---|---|---|
| forecasts | issue_date | date | Day D on which the forecast was issued (Europe/Berlin) | |
| forecasts | issued_at_utc | datetime | UTC | Exact issue time |
| forecasts | model_key | text | Model name and version, e.g. lear.v1 | |
| forecasts | horizon_days | integer | days | 1 = forecast for the next day (D+1), 2 = for the day after (D+2) |
| forecasts | target_date | date | Delivery day (Europe/Berlin) | |
| forecasts | delivery_start_utc | datetime | UTC | Start of the quarter-hour |
| forecasts | delivery_date_local | date | Delivery date in German local time | |
| forecasts | delivery_time_local | text | HH:MM | Start time in German local time (the repeated hour on the autumn switch appears twice) |
| forecasts | q10 | decimal | EUR/MWh | 10 % quantile: the price should be below this in about 1 of 10 cases |
| forecasts | q50 | decimal | EUR/MWh | Median, the point forecast |
| forecasts | q90 | decimal | EUR/MWh | 90 % quantile |
| actuals | delivery_start_utc | datetime | UTC | Start of the quarter-hour |
| actuals | delivery_date_local | date | Delivery date in German local time | |
| actuals | delivery_time_local | text | HH:MM | Start time in German local time |
| actuals | price_eur_mwh | decimal | EUR/MWh | Day-ahead price DE-LU (Bundesnetzagentur | SMARD.de) |
| scores | status | text | scored, missed (no forecast was issued) or incomplete | |
| scores | actual | decimal | EUR/MWh | Published price |
| scores | error | decimal | EUR/MWh | actual minus q50 |
| scores | abs_error | decimal | EUR/MWh | Absolute error; its mean is the MAE |
| scores | pinball | decimal | EUR/MWh | Mean pinball loss over q10, q50, q90 |
| scores | in_band | true/false | Actual price inside [q10, q90] | |
| scores_daily | mae | decimal | EUR/MWh | Mean absolute error of the day |
| scores_daily | rmse | decimal | EUR/MWh | Root mean squared error of the day |
| scores_daily | coverage_80 | decimal | share | Share of quarter-hours inside the 80 % band |
| cheapest | window_start_local | text | Start of the recommended 3-hour window | |
| cheapest | p_cheapest | decimal | share | Stated probability that the window is the cheapest |
| cheapest | p_near | decimal | share | Stated probability that it is within 5 EUR/MWh of the cheapest |
| cheapest | hit | true/false | The window was in fact the cheapest | |
| cheapest | regret_eur_mwh | decimal | EUR/MWh | Actual mean price in the window minus the cheapest window |