# German Electricity Prices & Generation Mix (SMARD) (`opendata-souce2026/german-electricity-prices-smard`) Actor

Day-ahead electricity prices, generation by source, grid load and forecasts for Germany and its neighbours from the official Bundesnetzagentur SMARD data (CC BY 4.0). Today, tomorrow or any period back to 2015, in 15-minute to yearly steps.

- **URL**: https://apify.com/opendata-souce2026/german-electricity-prices-smard.md
- **Developed by:** [Taylor Ford](https://apify.com/opendata-souce2026) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## German Electricity Prices & Generation Mix (SMARD)

Get **German day-ahead electricity prices**, the **generation mix by source** (solar, wind, coal, gas, biomass…), **grid load** and **forecasts** as clean JSON, CSV or Excel — straight from the official **Bundesnetzagentur SMARD** data.

Ask for *today*, *tomorrow*, the last 7 days, or any custom period back to 2015, in **15-minute, hourly, daily, weekly, monthly or yearly** steps. No API key, no scraping, no login.

### What can I use it for?

- ⚡ **Cheapest hours tomorrow** – plan EV charging, heat pumps, batteries or industrial loads around day-ahead prices (published around 13:00 German time).
- 📊 **Energy reporting** – monthly solar/wind share, coal and gas generation, load curves for reports and dashboards.
- 🔁 **Dynamic tariffs** – feed hourly prices into dynamic tariff calculations or home automation.
- 🌍 **Cross-border comparison** – Germany/Luxembourg next to France, Netherlands, Austria, Poland, Denmark, Switzerland and more.
- 🤖 **AI agents** – call it as a tool via the Apify MCP server: *"What are the three cheapest hours for electricity in Germany tomorrow?"*

### Data you get

| Group | Series |
|---|---|
| Prices (EUR/MWh) | Germany/Luxembourg, Austria, Belgium, Czechia, Denmark 1 & 2, France, Hungary, Italy North, Netherlands, Norway 2, Poland, Slovenia, Switzerland, average of DE/LU neighbours |
| Generation (MWh) | Solar, wind onshore, wind offshore, biomass, hydro, other renewables, lignite, hard coal, natural gas, nuclear, pumped storage, other conventional |
| Consumption (MWh) | Total grid load, residual load, pumped-storage consumption |
| Forecasts (MWh) | Wind onshore/offshore, wind + solar, other, total generation |

Regions: Germany (`DE`), `DE-LU`, `DE-AT-LU`, Austria, Luxembourg, and the four German transmission grid areas (50Hertz, Amprion, TenneT, TransnetBW).

### How to use

1. Choose a **preset** (e.g. *Market overview*) or pick individual series.
2. Choose a **time period** – *Tomorrow*, *Last 30 days*, or *Custom dates*.
3. Choose a **resolution** (hourly is the default).
4. Run. Download the results as JSON, CSV, Excel or via the API.

#### Example input

```json
{
  "preset": "prices",
  "period": "tomorrow",
  "resolution": "hour"
}
```

#### Example output (wide format)

```json
{
  "timestamp": "2026-10-06T12:00:00.000Z",
  "localTime": "2026-10-06T14:00:00+02:00",
  "region": "DE",
  "resolution": "hour",
  "priceDeLu": 87.43,
  "consumptionTotal": 58234.5,
  "residualLoad": 31022.75,
  "genSolar": 17410.25,
  "genWindOnshore": 8301.5,
  "genWindOffshore": 1500.25
}
```

Choose **long format** if you want one row per time step and series (with label and unit) – ideal for databases and charting tools.

A **summary** (average, minimum, maximum with timestamps, and totals) is saved in the key-value store under `OUTPUT` – perfect for "cheapest hour" questions.

### Notes

- Times are given in UTC (`timestamp`) and German local time (`localTime`). Day boundaries follow German time, including the 23- and 25-hour days when clocks change.
- Values that are not yet published are left out, so recent hours or tomorrow's prices may be missing before publication.
- Not every series exists for every region and resolution; unavailable ones are skipped and listed in the summary.

### Pricing

You pay only for the rows you receive – no monthly fee.

### Source and license

Data: **Bundesnetzagentur | SMARD.de**, licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). Please keep this attribution when you publish the data. This tool is independent and not affiliated with or endorsed by the Bundesnetzagentur.

# Actor input Schema

## `preset` (type: `string`):

Quick choice of data series. Ignored if you pick individual series below.

## `series` (type: `array`):

Pick exact series instead of a preset.

## `period` (type: `string`):

Days follow German local time. Day-ahead prices for tomorrow are usually published around 13:00.

## `startDate` (type: `string`):

Format YYYY-MM-DD. Data goes back to 2015 for most series.

## `endDate` (type: `string`):

Format YYYY-MM-DD. Defaults to today.

## `resolution` (type: `string`):

Size of each time step. Day-ahead prices have been traded in 15-minute steps since October 2025.

## `region` (type: `string`):

Generation and consumption are available per country and per German transmission grid operator.

## `outputFormat` (type: `string`):

Wide: one row per time step with a column per series. Long: one row per time step and series.

## `maxRows` (type: `integer`):

Safety limit for very long 15-minute queries.

## Actor input object example

```json
{
  "preset": "marketOverview",
  "period": "last7Days",
  "resolution": "hour",
  "region": "DE",
  "outputFormat": "wide",
  "maxRows": 100000
}
```

# Actor output Schema

## `results` (type: `string`):

One row per time step (wide format) or per time step and series (long format).

## `summary` (type: `string`):

Average, minimum and maximum with timestamps, and totals for each series.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("opendata-souce2026/german-electricity-prices-smard").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("opendata-souce2026/german-electricity-prices-smard").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call opendata-souce2026/german-electricity-prices-smard --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,opendata-souce2026/german-electricity-prices-smard"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ESwYhl1sEewnOxWlL/builds/E1Bp91tLxozeRKh7V/openapi.json
