---
name: ecb-data-portal-ingestion
description: "How to get ECB Data Portal API (SDMX) data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load an ECB Data Portal SDMX series into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/ecb-data-portal
Provider: https://data.ecb.europa.eu/help/api/overview
Checked against the provider's documentation: 2026-10-30

## Access
- No account or key is needed for public data requests.
- Observed 2026-10-30: the CSV request completed without credentials.

## Request
```bash
curl 'https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A?format=csvdata&startPeriod=2026-10-01'
```

## Format
CSV data with SDMX dimensions, observation value, status and metadata columns. TIME_PERIOD is the observation date and OBS_VALUE is numeric.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""ECB Data Portal daily USD/EUR reference exchange rate -> pandas -> Parquet. No key."""
import io
import requests
import pandas as pd

URL = "https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A"
r = requests.get(URL, params={"format": "csvdata", "startPeriod": "2026-10-01"}, timeout=60)
r.raise_for_status()
df = pd.read_csv(io.BytesIO(r.content))
df["TIME_PERIOD"] = pd.to_datetime(df["TIME_PERIOD"])
df["OBS_VALUE"] = pd.to_numeric(df["OBS_VALUE"])
df.to_parquet("ecb_usd_eur_daily.parquet", index=False)
print(len(df), "daily rows", df["TIME_PERIOD"].min().date(), "to", df["TIME_PERIOD"].max().date(),
      "latest value", df.sort_values("TIME_PERIOD").iloc[-1]["OBS_VALUE"])
```
Run by us on 2026-10-30 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 22 daily rows 2026-10-01 to 2026-10-30 latest value 1.1172

## Limits
- Rate limit: Not stated.
- Numeric response limits are not stated on the pages read; use startPeriod and endPeriod.

## Quirks
- The SDMX key order is dataflow-specific. EXR.D.USD.EUR.SP00.A means daily U.S. dollars per euro, reference rate, average.
- Business-day series omit weekends and holidays.
- Keep OBS_STATUS and other metadata columns because observations can be corrected or qualified.

## Terms and attribution
- The Data Portal footer links to the ECB Disclaimer & Copyright page.
- Reproduce accurately, cite the ECB, state modifications, and apply the sold-document notice where relevant.
- Terms page: https://www.ecb.europa.eu/services/disclaimer/html/index.en.html

## Sources
- https://data.ecb.europa.eu/help/api/overview: "The ECB SDMX 2.1 RESTful web service offers programmatic access to the statistical data and metadata disseminated via the ECB Data Portal"
- https://data.ecb.europa.eu/help/api/overview: "Data retrieval mode enables you to access the specific data you want to retrieve."
- https://www.ecb.europa.eu/services/disclaimer/html/index.en.html: "When such information is distributed or reproduced, it must appear accurately and the ECB must be cited as the source."
- https://www.ecb.europa.eu/services/disclaimer/html/index.en.html: "If the information is modified by the user (e.g. by seasonal adjustment of statistical data or calculation of growth rates) this must be stated explicitly."

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
