Kostenlose Strompreis-API
Die Börsenstrompreise von heute und morgen als JSON-Datei. Ohne Anmeldung, ohne API-Key, CORS offen. Gedacht für Home Assistant, ioBroker, Shelly, evcc und eigene Skripte.
Endpunkte
| URL | Inhalt |
|---|---|
| /api/v1/heute.json | alle Viertelstunden von heute, Tagesmittel, Minimum, Maximum, günstigste Fenster für 1 bis 4 Stunden |
| /api/v1/morgen.json | dasselbe für morgen. Vor der Veröffentlichung steht dort "verfuegbar": false |
| /api/v1/preise.json | heute und (sobald da) morgen in einer Liste, praktisch für Automationen über Mitternacht |
Die Preise für morgen erscheinen meist zwischen 13 und 14 Uhr, um Mitternacht rückt morgen auf heute. Die Dateien werden dabei neu geschrieben, mehr als einmal pro Viertelstunde abzufragen bringt nichts. Alle Preise sind Börsenpreise netto in ct/kWh, ohne Netzentgelt, Steuern und Umlagen. Zeiten stehen in UTC (start, ende) und als Unix-Sekunden (ts).
Beispiel
{
"quelle": "Bundesnetzagentur | SMARD.de, Lizenz CC BY 4.0 (https://www.smard.de)",
"info": "https://strompreis-morgen.de/api/",
"zone": "DE-LU",
"einheit": "ct/kWh (Börsenpreis netto, ohne Netzentgelt, Steuern, Umlagen)",
"stand": "2026-11-12T08:32:52.538Z",
"datum": "2026-11-12",
"verfuegbar": true,
"aufloesung_min": 15,
"mittel": 19.904,
"min": 12.224,
"max": 25.025,
"guenstigste_fenster": [
{
"dauer_min": 60,
"start": "2026-11-12T22:00:00Z",
"ende": "2026-11-12T23:00:00Z",
"start_ts": 1794520800,
"ende_ts": 1794524400,
"ct_kwh": 14.025
}
],
"preise": [
{
"start": "2026-11-11T23:00:00Z",
"ende": "2026-11-11T23:15:00Z",
"ts": 1794438000,
"ct_kwh": 22.49
},
{
"start": "2026-11-11T23:15:00Z",
"ende": "2026-11-11T23:30:00Z",
"ts": 1794438900,
"ct_kwh": 21.723
}
]
}
Home Assistant: EPEX-Spot-Preis als Sensor
Ein Sensor mit dem aktuellen Preis und ein Schalter, der während der günstigsten drei Stunden des Tages an ist. Damit lassen sich Wallbox, Wärmepumpe oder Spülmaschine automatisch steuern.
# configuration.yaml
rest:
- resource: https://strompreis-morgen.de/api/v1/preise.json
scan_interval: 900
sensor:
- name: "Börsenstrompreis"
unique_id: strompreis_morgen_aktuell
unit_of_measurement: "ct/kWh"
value_template: >
{% set p = value_json.preise
| selectattr('ts', 'le', now().timestamp())
| list | last %}
{{ p.ct_kwh if p else none }}
- resource: https://strompreis-morgen.de/api/v1/heute.json
scan_interval: 900
binary_sensor:
- name: "Strom günstig (3 h)"
unique_id: strompreis_morgen_guenstig_3h
value_template: >
{% set f = value_json.guenstigste_fenster
| selectattr('dauer_min', 'eq', 180) | first %}
{{ f.start_ts <= now().timestamp() < f.ende_ts }}
ioBroker
Skript für den JavaScript-Adapter. Es legt den Datenpunkt 0_userdata.0.strompreis.aktuell an und hält ihn aktuell.
// ioBroker, JavaScript-Adapter: aktueller Börsenpreis als Datenpunkt
const URL = 'https://strompreis-morgen.de/api/v1/preise.json';
const DP = '0_userdata.0.strompreis.aktuell';
createState(DP, null, { name: 'Börsenstrompreis', unit: 'ct/kWh', type: 'number', read: true, write: false });
let preise = [];
function laden() {
httpGet(URL, { timeout: 15000 }, (err, res) => {
if (err || res.statusCode !== 200) return log('Strompreis: ' + (err || res.statusCode), 'warn');
preise = JSON.parse(res.data).preise;
aktualisieren();
});
}
function aktualisieren() {
const jetzt = Date.now() / 1000;
const p = preise.filter((x) => x.ts <= jetzt).pop();
if (p) setState(DP, p.ct_kwh, true);
}
laden();
schedule('2 * * * *', laden); // stündlich neu laden
schedule('*/15 * * * *', aktualisieren); // jede Viertelstunde aktuellen Wert setzen
Shelly
Für Shelly Plus und Pro (Gen2 und neuer), unter „Scripts“ einfügen. Schaltet das Relais jeden Tag im günstigsten Fenster ein, zum Beispiel für einen Heizstab oder eine Steckdose mit Ladegerät.
// Shelly Plus/Pro (Gen2+), Skript: Relais im günstigsten Fenster des Tages einschalten
let URL = "https://strompreis-morgen.de/api/v1/heute.json";
let DAUER = 180; // Minuten: 60, 120, 180 oder 240
let von = 0, bis = 0;
function laden() {
Shelly.call("HTTP.GET", { url: URL, timeout: 15 }, function (r) {
if (!r || r.code !== 200) return;
let f = JSON.parse(r.body).guenstigste_fenster;
for (let i = 0; i < f.length; i++) {
if (f[i].dauer_min === DAUER) { von = f[i].start_ts; bis = f[i].ende_ts; }
}
});
}
function pruefen() {
let jetzt = Shelly.getComponentStatus("sys").unixtime;
Shelly.call("Switch.Set", { id: 0, on: jetzt >= von && jetzt < bis });
}
laden();
Timer.set(3600 * 1000, true, laden);
Timer.set(60 * 1000, true, pruefen);
evcc
evcc plant das Laden des E-Autos nach dem günstigsten Zeitpunkt. Mit dieser Einstellung nimmt es unsere Preise als Tarif. charges ist dein fester Aufschlag je kWh netto, er steht auf deiner Stromrechnung oder im Tarifblatt.
# evcc.yaml: Börsenpreis als dynamischer Tarif
tariffs:
currency: EUR
grid:
type: custom
interval: 1h
charges: 0.18 # Netzentgelt, Umlagen, Steuern, Marge in EUR/kWh netto (deinen Wert eintragen)
tax: 0.19
forecast:
source: http
uri: https://strompreis-morgen.de/api/v1/preise.json
jq: '[.preise[] | {start: .start, end: .ende, value: (.ct_kwh / 100)}] | tostring'
Bedingungen
Die Nutzung ist kostenlos, auch kommerziell. Die Preisdaten stammen von der Bundesnetzagentur (SMARD.de) und stehen unter CC BY 4.0: Bitte nenne als Quelle „Bundesnetzagentur | SMARD.de“. Über einen Link auf strompreis-morgen.de freuen wir uns. Es gibt keine Garantie auf Verfügbarkeit. Für Steuerungen, bei denen viel Geld auf dem Spiel steht, solltest du einen Ausfall abfangen (zum Beispiel: kein Preis = normal laden).
Wie die Preise entstehen und wie wir rechnen, steht auf der Seite Methodik.