# EU Electricity Prices API: Day-Ahead Power Prices & Cheap Hours (`euroscrape/eu-electricity-prices`) Actor

Electricity prices scraper & API: hourly (or 15-minute) day-ahead spot prices of the European electricity market (Strompreise, prix de l'électricité), 40+ bidding zones, official data — energy prices, cheapest hours, negative-price and spike alerts, history. For Home Assistant, Slack, webhooks.

- **URL**: https://apify.com/euroscrape/eu-electricity-prices.md
- **Developed by:** [EuroScrape](https://apify.com/euroscrape) (community)
- **Categories:** Business, Automation, Integrations
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.14 / 1,000 price rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## EU Electricity Prices (Day-Ahead): All Zones & Cheap Hours

**Tomorrow's electricity prices for 40+ European bidding zones — with the cheapest hours computed for you.** Hourly (or native 15-minute) day-ahead spot prices from official market data, plus a free day summary per zone: the cheapest 3-hour window, negative-price intervals, min/max with their exact times.

![Day-ahead prices and the cheapest 3-hour window, real data](https://raw.githubusercontent.com/EuroScrape/apify-actors/main/assets/demo-eu-electricity-prices.gif)

- ⚡ **Every European zone**: France, Germany-Luxembourg, all 4 Swedish and 5 Norwegian zones, both Danish zones, all Italian zones, Iberia, the Baltics, the Balkans… Type a country name and get all its zones.
- 🕐 **Cheapest window, of the length you need**: 3 hours by default, 1 to 12 with `windowHours` — the single answer smart-home and EV owners actually want: when to charge, heat or run heavy loads.
- 🔔 **Daily alerts**: schedule it after the 13:00 CET auction and get tomorrow's summary on Telegram, Slack, Discord or a webhook (Home Assistant friendly) — with negative-price and spike alerts.
- 📜 **History included**: the same data goes back years, for backtesting a dynamic tariff or sizing a battery.

### ✨ Why this Actor

| | |
|---|---|
| 🌍 **One input, a continent** | `"zones": ["all"]` = every European bidding zone in one dataset, same format. |
| 🧮 **Both units** | Every row carries `priceEurMwh` and `priceCtKwh` — no mental division when comparing with your tariff. |
| ⏱️ **Market-native resolution** | The EU switched to 15-minute pricing; get hourly averages (default) or the raw quarter-hours. |
| 🆓 **Summaries free** | Averages, extremes with times, cheapest/priciest windows (with start and end), hours of negative prices, daily spread. |
| 🔌 **Automation-ready** | JSON/CSV via the Apify API, plus webhook pushes — drop it into Home Assistant, Node-RED, Make or n8n. |

### 🎯 Use cases

- **Smart home & EV**: charge in the cheapest window every night, automatically.
- **Small businesses on spot tariffs**: shift consumption, get spike warnings before an expensive day.
- **Energy analysts & journalists**: compare zones, track negative-price frequency, pull years of history in one run.
- **Solar & battery owners**: spot the negative-price intervals when exporting costs you money.

### 🚀 Examples

**Today and tomorrow for France and Germany:**

```json
{
  "zones": ["FR", "DE-LU"]
}
```

**Tomorrow's cheap hours on Telegram, every day at 13:30 CET:**

```json
{
  "zones": ["France"],
  "monitorName": "fr-spot",
  "alertBelowEurMwh": 0,
  "telegramBotToken": "123456:ABC…",
  "telegramChatId": "123456789"
}
```

**Tomorrow's cheapest 5 hours to charge an EV, pushed to Home Assistant:**

```json
{
  "zones": ["FR"],
  "windowHours": 5,
  "monitorName": "ev-charge",
  "webhookUrl": "https://your-home-assistant/api/webhook/…"
}
```

**A year of 15-minute history for the whole Nordics:**

```json
{
  "zones": ["Norway", "Sweden", "Denmark", "FI"],
  "dateFrom": "2025-10-01",
  "dateTo": "2026-10-01",
  "resolution": "quarter"
}
```

### 📦 Output

**A price row** (real data):

```json
{
  "type": "price",
  "zone": "FR",
  "zoneName": "France",
  "country": "France",
  "date": "2026-10-02",
  "timeCet": "2026-10-02T00:00",
  "timeUtc": "2026-10-01T22:00Z",
  "priceEurMwh": 176.41,
  "priceCtKwh": 17.641,
  "resolution": "hour"
}
```

**The free day summary** (real data — note the solar dip: the day averages 172 € but the early-afternoon window costs less than half the evening peak):

```json
{
  "type": "daySummary",
  "zone": "FR",
  "zoneName": "France",
  "date": "2026-10-03",
  "marketResolution": "15min",
  "averageEurMwh": 172.52,
  "minEurMwh": 63.94,
  "minTimeCet": "2026-10-03T13:30",
  "maxEurMwh": 243.06,
  "maxTimeCet": "2026-10-03T18:45",
  "negativeQuarterHours": 0,
  "negativeHours": 0,
  "cheapestWindow": { "hours": 3, "startCet": "2026-10-03T12:15", "averageEurMwh": 81.95, "endCet": "2026-10-03T15:15" },
  "priciestWindow": { "hours": 3, "startCet": "2026-10-03T18:15", "averageEurMwh": 229.93, "endCet": "2026-10-03T21:15" },
  "cheapest3hWindow": { "startCet": "2026-10-03T12:15", "averageEurMwh": 81.95 },
  "priciest3hWindow": { "startCet": "2026-10-03T18:15", "averageEurMwh": 229.93 },
  "spreadEurMwh": 179.12,
  "source": "Bundesnetzagentur | SMARD.de via api.energy-charts.info (CC BY 4.0)"
}
```

### 💰 Pricing

| Event | Price |
|---|---|
| Run start | $0.003 |
| Price row (one hour, one zone) | $0.0002 |
| Day summaries | free |

A daily "France + Germany, today + tomorrow" run ≈ $0.02. A full year of hourly history for one zone ≈ $1.75. Apify subscribers pay less: −10% (Starter), −20% (Scale), −30% (Business). Set a **maximum cost per run** in the run options and the Actor stops cleanly when it's reached.

### ❓ FAQ

**When is tomorrow published?** The day-ahead auction clears around 12:45 CET; prices are available shortly after 13:00 CET. Schedule your daily run at 13:30 CET and you'll always catch them.

**Which time zone are the times in?** `timeCet` is market time (CET/CEST) — the clock the European power market runs on — and `timeUtc` is included for your automations.

**Why 15 minutes?** European day-ahead markets moved from hourly to 15-minute products in 2025. The default output averages them into hourly rows; set `resolution: "quarter"` for the native data.

**Are all zones and dates in 15 minutes?** No. Dates before the market switched, and a few zones such as Switzerland, are hourly. `marketResolution` tells you which one you got, and the windows and negative-price durations are computed on real time either way.

**Is this my home tariff?** It's the wholesale day-ahead price — the basis of dynamic tariffs (Tibber, aWATTar, Octopus…). Your supplier adds taxes, grid fees and margin on top; the *shape* of the day (cheap and expensive hours) is what this data gives you.

**Where does the data come from?** Official market data (Bundesnetzagentur | SMARD.de) served by the Fraunhofer ISE energy-charts.info API, licence CC BY 4.0 — the source is credited in every summary. If that API is down, the prices of Germany-Luxembourg, France, Austria, the Netherlands, Czechia, Denmark (DK1, DK2), southern Norway (NO2) and southern Sweden (SE4) are read directly from SMARD, the same data at its origin; Spain and Portugal from OMIE, the Iberian market operator; Finland, Estonia, Latvia and Lithuania from Elering, the Estonian grid operator; central Sweden (SE3) from Energinet. Each backup was checked hour by hour against a second source. The other zones wait for the API to come back.

**Great Britain?** GB left the EU day-ahead coupling; it's not in this dataset (the Actor tells you if you ask for it).

### 🔌 API, AI agents and integrations

- **API**: one call runs the Actor and returns the results, `POST https://api.apify.com/v2/acts/euroscrape~eu-electricity-prices/run-sync-get-dataset-items` (see the API tab for Python, JavaScript and cURL).
- **AI agents (MCP)**: add `https://mcp.apify.com?tools=euroscrape/eu-electricity-prices` to Claude, Cursor, VS Code or any MCP client, and the Actor becomes a tool your agent can call.
- **No-code automation**: start runs and pass the results on with Apify's integrations for n8n, Make and Zapier, or with a webhook when a run ends.
- **Exports**: every result set downloads as JSON, CSV, Excel or XML, and can be sent to Google Sheets.

### ⭐ Your feedback

If this Actor saves you time, a short review on Apify Store helps other users find it. Missing a zone or a statistic? Say it in your review: the most requested features are added first.

### 🔗 More from EuroScrape

- [France Fuel Prices: Cheapest Stations Near You & Alerts](https://apify.com/euroscrape/france-fuel-prices): live official prices of all ~10,000 French stations — cheapest Diesel, E10, E85 or LPG around any point, with distances and price-drop alerts.
- [EU Public Tenders Scraper: TED, BOAMP & Awards](https://apify.com/euroscrape/eu-public-tenders): open tenders and contract awards from all of Europe (TED) and France (BOAMP, DECP), with winners per lot, values in € and daily alerts.
- [EU VAT Number Validator (VIES): Bulk Check, Proof & Alerts](https://apify.com/euroscrape/vat-validator): validate VAT numbers in bulk against the EU's official registry, with consultation proof for tax audits and alerts when a customer's number becomes invalid.
- [France Real Estate Sold Prices (DVF): €/m², Sales & Trends](https://apify.com/euroscrape/france-property-prices): every property sale registered by the French State — real prices, €/m², addresses, GPS, market trends per city and alerts on new sales.
- [France Energy Ratings (DPE): Homes, Energy Sieves & Alerts](https://apify.com/euroscrape/france-energy-ratings): official energy certificates of French homes — class, address, consumption, yearly bill — with the F/G energy sieves of any city and alerts on new certificates.
- [France Building Permits (Sitadel): Projects, Builders & Alerts](https://apify.com/euroscrape/france-building-permits): official register of French building permits — housing programmes and commercial buildings with the developer (name, SIREN), address, size and status, and alerts when works start.
- [Google Flights Scraper: Cheapest Dates, Prices & Price History](https://apify.com/euroscrape/google-flights-prices): flight prices for any route and dates, cheapest day to fly, typical price range and price-drop alerts.
- [Ryanair Low Fare Finder: Cheapest Days, Anywhere & Alerts](https://apify.com/euroscrape/ryanair-low-fares): Ryanair fare calendars months ahead, every destination under your price cap from any airport, and alerts on drops and new deals.
- [Google Hotels Scraper: Prices from Every Booking Site](https://apify.com/euroscrape/google-hotels-prices): hotel prices for any destination and dates, with the price on every booking site, rate parity, price calendars and alerts.
- [Vinted Scraper: 26 Countries, Deals, Alerts & Seller Data](https://apify.com/euroscrape/vinted-scraper): search Vinted across 26 countries, prices with buyer fees, seller ratings and instant alerts on new listings.
- [EU Second-Hand Marketplaces Scraper: Vinted, OLX & More](https://apify.com/euroscrape/eu-marketplace-deals): one search on the top second-hand marketplaces of 18 European countries, prices in €, cheapest country and resale margin.
- [Kleinanzeigen Scraper: Deal Finder & Price-Drop Alerts](https://apify.com/euroscrape/kleinanzeigen-scraper): German classifieds with view counts, full seller details and instant alerts.
- [Website Tech Stack Detector: 280+ Technologies, Leads & Signals](https://apify.com/euroscrape/website-intelligence): technologies, company identity, contacts and sales signals for any website.
- [French Companies Scraper (SIRENE)](https://apify.com/euroscrape/france-companies): every French company by activity, area and size, with verified websites and emails.
- [UK Companies House Scraper](https://apify.com/euroscrape/uk-companies): UK companies by SIC code and location, with directors, websites and emails.
- [App Store Reviews Scraper + Google Play Reviews](https://apify.com/euroscrape/app-reviews): reviews from both stores in 58 countries, rating by version and country, alerts on new negative reviews.
- [Impressum & Legal Notice Scraper (EU)](https://apify.com/euroscrape/company-identity): legal identity, registry numbers and VAT IDs from any website, registry-verified.

# Actor input Schema

## `zones` (type: `array`):

Zone codes (FR, DE-LU, SE3, IT-North…) or country names ("Germany", "Denmark" = all its zones) — or "all" for every European zone.

## `dateFrom` (type: `string`):

Default: today. Historical data goes back years.

## `dateTo` (type: `string`):

Default: tomorrow (published around 13:00 CET).

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

Hourly rows (average of the four 15-minute prices) or the raw 15-minute market prices.

## `includeSummary` (type: `boolean`):

Average, min/max with times, cheapest and priciest window, hours of negative prices, daily spread.

## `windowHours` (type: `integer`):

Each day summary finds the cheapest and the most expensive consecutive block of this length: 3 h for a washing cycle or a water heater, 4 to 6 h for an EV charge.

## `monitorName` (type: `string`):

Set a name and schedule the Actor daily (e.g. 13:30 CET): each run flags newly published days and can alert you with tomorrow's summary.

## `alertBelowEurMwh` (type: `integer`):

0 = alert on negative prices.

## `alertAboveEurMwh` (type: `integer`):

Spot price spike alert.

## `telegramBotToken` (type: `string`):

Alerts on Telegram: create a bot with @BotFather and paste its token.

## `telegramChatId` (type: `string`):

Your chat ID (send a message to your bot, then open api.telegram.org/bot<token>/getUpdates).

## `discordWebhookUrl` (type: `string`):

Alerts in a Discord channel: Channel settings → Integrations → Webhooks.

## `slackWebhookUrl` (type: `string`):

Alerts in Slack: create an Incoming Webhook for your channel.

## `webhookUrl` (type: `string`):

Receives one POST per run with the day summaries (Make, Zapier, n8n, Home Assistant…).

## `maxNotifications` (type: `integer`):

Maximum number of alert messages per run.

## Actor input object example

```json
{
  "zones": [
    "FR",
    "DE-LU"
  ],
  "resolution": "hour",
  "includeSummary": true,
  "windowHours": 3,
  "maxNotifications": 30
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per hour and zone.

## `days` (type: `string`):

One summary per zone and day.

## `runSummary` (type: `string`):

Counters for this run (items found, output, errors).

# 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 = {
    "zones": [
        "FR",
        "DE-LU"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("euroscrape/eu-electricity-prices").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 = { "zones": [
        "FR",
        "DE-LU",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("euroscrape/eu-electricity-prices").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 '{
  "zones": [
    "FR",
    "DE-LU"
  ]
}' |
apify call euroscrape/eu-electricity-prices --silent --output-dataset

```

## MCP server setup

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

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/CpJqaxPGZD0EWJ4UB/builds/DATXhZ7WK4na8PvtZ/openapi.json
