This release is a pre-release and may not be stable for production use.
nexa-marketdata
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
- Python 3.11+
- Poetry
- Make
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)
| File | Size | Uploaded | |
|---|---|---|---|
| nexa_marketdata-0.2.0b1.tar.gz | 12.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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