---
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."

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab-jet.vercel.app/agent-suggestions

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.
