Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

nexa-marketdata

CI codecov

Work in progress. This library is under active development. APIs may change without notice.

A unified Python client for European power market data sources: Nord Pool, EPEX SPOT, ENTSO-E Transparency Platform, and EEX.

🇳🇴 🇸🇪 🇩🇰 🇫🇮 🇪🇪 🇱🇻 🇱🇹 🇩🇪 🇱🇺 🇫🇷 🇧🇪 🇳🇱 🇦🇹 🇨🇭 🇪🇸 🇵🇹 🇨🇿 🇸🇰 🇭🇺 🇷🇴 🇧🇬 🇸🇮 🇭🇷 🇵🇱 🇷🇸 🇧🇦 🇲🇪 🇲🇰 🇦🇱 🇽🇰 🇲🇩 🇮🇹 🇬🇧 🇮🇪 🇨🇾 🇲🇹 🇮🇸 🇬🇪 🇧🇾 🇺🇦 🇹🇷

Handles 15-minute MTU resolution, rate limiting, response caching, timezone normalisation, and format differences across exchanges. Part of the Phase Nexa ecosystem.

Features

  • Unified interface — one client, four exchanges
  • MTU-aware — supports both hourly and 15-minute resolution (EU transition: 30 Sept 2025)
  • Rate limiting — per-source limits respected automatically
  • Caching — repeated historical requests served from local cache
  • Timezone normalisation — all outputs in timezone-aware UTC or local exchange time
  • Type-safe — strict mypy compliance, Pydantic v2 models
  • No floats for money — all prices and volumes use Decimal

Status

Component
Nord Pool — day-ahead prices ✅
Core types & exceptions ✅
Unified NexaClient 🚧
ENTSO-E client ✅
EPEX SPOT client ⬜
EEX client ⬜
Response caching ⬜
Rate limiting ⬜
Timezone normalisation ⬜

Installation

pip install nexa-marketdata

Or with Poetry:

poetry add nexa-marketdata

Quickstart

from nexa_marketdata import NexaClient
from nexa_marketdata.types import BiddingZone
import datetime

client = NexaClient()

# Day-ahead prices for NO2 (Southern Norway)
prices = client.day_ahead_prices(
    zone=BiddingZone.NO2,
    start=datetime.date(2025, 1, 1),
    end=datetime.date(2025, 1, 7),
)
print(prices.head())

Configuration

Set API credentials as environment variables:

export NORDPOOL_USERNAME="your-username"
export NORDPOOL_PASSWORD="your-password"
export ENTSOE_API_KEY="your-key-here"

Or use a .env file (see .env.example).

Development

Prerequisites

Setup

git clone https://github.com/phasenexa/nexa-marketdata.git
cd nexa-marketdata
poetry install
make ci

Common tasks

make test             # run tests with coverage
make lint             # ruff linting
make format           # ruff formatting
make type-check       # mypy
make ci               # full check suite (lint + format + types + tests)
make execute-notebooks  # re-execute example notebooks

Running tests

make test

Unit tests use mocked HTTP responses — no live API calls or credentials required.

Integration tests that call live APIs are excluded from the default run. To run them:

export ENTSOE_API_KEY="your-key-here"
poetry run pytest -m live

Contributing

See CONTRIBUTING.md for the full contribution guide.

Licence

MIT — see LICENSE.

Release files for nexa-marketdata 0.2.0b1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nexa-marketdata 0.2.0b1
File Size Uploaded
nexa_marketdata-0.2.0b1.tar.gz 12.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nexa-marketdata 0.2.0b1
File Interpreter ABI Platform
nexa_marketdata-0.2.0b1-py3-none-any.whl Python 3 none any Details

Total release size: 26.3 kB

Release files / nexa_marketdata-0.2.0b1.tar.gz

Download URL nexa_marketdata-0.2.0b1.tar.gz
Size 12.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d2790fedc68a651ae234b4f2742d3913a9ea6a8e50b478fc8052688429839adf
BLAKE2b-256 checksum
How to use checksums
bc151fe49f533a5545933ee051f710fe48f06c9f29cadc27c041ee5aeba47935
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 29, 2026.

Transparency log

Release files / nexa_marketdata-0.2.0b1-py3-none-any.whl

Download URL nexa_marketdata-0.2.0b1-py3-none-any.whl
Size 14.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
61f2d95df3ea7d6abbf07a4e226d30bd861a0bc295aa8d779544f45f8c04f215
BLAKE2b-256 checksum
How to use checksums
baf01195bf46c295a0f8cbb068965f3182ac62b699221f61d93c6a489b583468
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 29, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0b1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page