Nordpoolgroup APIdata.nordpoolgroup.com ↗
Access Nord Pool day-ahead prices, system prices, intraday OHLC stats, and market area configs across European bidding zones via a structured JSON API.
What is the Nordpoolgroup API?
This API exposes 6 endpoints covering Nord Pool electricity market data, including day-ahead prices at 15-minute resolution, system price with turnover figures, and intraday OHLC statistics. The get_day_ahead_prices endpoint returns per-area interval prices, block aggregates for Peak and Off-peak windows, and area averages for a given date and bidding zone. Area codes, supported currencies, and valid date ranges are discoverable via get_market_areas.
curl -X GET 'https://api.parse.bot/scraper/b76f029f-4825-4c3f-9266-e5925a267245/get_day_ahead_prices?area=AT&date=2026-07-07&market=DayAhead¤cy=EUR' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace data-nordpoolgroup-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Nord Pool Energy Market SDK — bounded, re-runnable; every call capped."""
from parse_apis.nord_pool_energy_market_api import NordPool, Currency, AreaNotFound
client = NordPool()
# Fetch today's day-ahead prices for Austria in EUR
prices = client.dayaheadprices.get(area="AT", currency=Currency.EUR)
print(f"Day-ahead prices for {prices.delivery_date}: {prices.currency}, {len(prices.multi_area_entries)} intervals")
# Get system price (reference market clearing price)
sys_price = client.systemprices.get(currency=Currency.EUR)
for entry in sys_price.multi_data_entries[:3]:
print(f" System price {entry.delivery_start}: {entry.price} EUR/MWh, turnover={entry.turnover}")
# Fetch intraday trading statistics for an area
intraday = client.intradaystatses.get(area="NO1")
for stat in intraday.hourly_statistics[:2]:
print(f" Hour {stat.delivery_start}: OHLC {stat.open_price}/{stat.high_price}/{stat.low_price}/{stat.close_price}, vol={stat.volume}")
# List all available market areas (single-page)
for ma in client.marketareas.list(limit=3):
print(f" Market: {ma.market_display_name}, areas: {len(ma.areas)}, currencies: {len(ma.currencies)}")
# Typed error handling
try:
client.dayaheadprices.get(area="INVALID_AREA")
except AreaNotFound as exc:
print(f"Area not found: {exc}")
print("exercised: dayaheadprices.get / systemprices.get / intradaystatses.get / marketareas.list")
Fetch day-ahead electricity prices for a specific date and market area. Returns 15-minute interval prices with per-area values, block price aggregates (Peak, Off-peak 1, Off-peak 2), and area averages. Defaults to today's date if not specified. Data availability is typically recent (~12 days).
| Param | Type | Description |
|---|---|---|
| area | string | Delivery area code (e.g. NO1, SE1, AT, FI, DK1, DK2, EE, LT, LV, DE-LU) |
| date | string | Date in YYYY-MM-DD format. Defaults to today. |
| market | string | Market name (e.g. DayAhead) |
| currency | string | Currency for price display (EUR, NOK, SEK, DKK, GBP) |
{
"type": "object",
"fields": {
"market": "string, market name",
"version": "integer, data version",
"currency": "string, currency code",
"updatedAt": "string, ISO timestamp of last update",
"areaAverages": "array of objects with areaCode and price",
"deliveryAreas": "array of area code strings",
"deliveryDateCET": "string, delivery date in CET timezone",
"multiAreaEntries": "array of 15-min interval price entries with deliveryStart, deliveryEnd, entryPerArea",
"blockPriceAggregates": "array of block price summaries (Peak, Off-peak 1, Off-peak 2)"
}
}About the Nordpoolgroup API
Day-Ahead and Index Prices
The get_day_ahead_prices endpoint accepts area (e.g. NO1, SE1, DK1, FI, DE-LU), date in YYYY-MM-DD format, and currency (EUR, NOK, SEK, DKK, GBP). It returns multiAreaEntries — an array of 15-minute interval objects with deliveryStart, deliveryEnd, and entryPerArea price values — alongside blockPriceAggregates for Peak, Off-peak 1, and Off-peak 2 windows, and areaAverages summarizing each bidding zone for that day. get_day_ahead_indices follows the same parameter shape but returns multiIndexEntries with configurable resolution (15 or 60 minutes), useful for peak/base index comparisons.
Multi-Day Ranges and System Price
get_hourly_prices_by_date_range accepts start_date and end_date with a maximum span of 31 days, returning a daily_results array where each element is a full day-ahead price object. The get_system_price endpoint returns the unconstrained Nord Pool system price — the pre-area-splitting equilibrium — as multiDataEntries with price and turnover per 15-minute interval, plus blockDataAggregates carrying averagePrice, maxPrice, minPrice, and turnover per block window.
Intraday Statistics and Market Configuration
get_intraday_stats returns hourlyStatistics for a delivery area and date, with fields highPrice, lowPrice, openPrice, closePrice, averagePrice, volume, buyVolume, and sellVolume per delivery hour, in labeled units (priceUnit, volumeUnit). For discovery, get_market_areas requires no parameters and returns all available markets with their areas, currencies, and validFrom dates — the reliable starting point for building valid requests to other endpoints.
The Nordpoolgroup API is a managed, monitored endpoint for data.nordpoolgroup.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when data.nordpoolgroup.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official data.nordpoolgroup.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Displaying real-time day-ahead electricity prices per bidding zone for energy dashboards
- Backtesting electricity procurement strategies using 31-day historical price ranges
- Monitoring intraday OHLC and volume data for short-term trading analysis
- Comparing system price to area prices to quantify grid congestion effects
- Building price alerts for Peak vs Off-peak block price differentials
- Aggregating multi-currency price views across Nordic and Central European markets
- Populating market area pickers in energy apps using live area and currency configs
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Nord Pool have an official developer API?+
What does `get_system_price` return, and how does it differ from day-ahead area prices?+
price and turnover entries via multiDataEntries, plus block aggregates. Day-ahead area prices in get_day_ahead_prices split this into per-bidding-zone values once congestion is accounted for, so the two will diverge when grid bottlenecks exist.Does the API cover historical data beyond 31 days?+
get_hourly_prices_by_date_range endpoint supports a maximum window of 31 days per request. For longer historical series, you would need to make multiple requests with adjacent date ranges. You can fork this API on Parse and revise it to implement automatic pagination or stitching across multi-month ranges.Are flow-based market coupling or cross-border capacity data available?+
How fresh is the day-ahead price data, and how do I check when it was last updated?+
get_day_ahead_prices includes an updatedAt ISO timestamp field indicating the last update time. Day-ahead prices for a given delivery date are typically published around midday CET the prior day, so data for today's delivery date may not yet be available early in the morning.