---
name: deutsche-boerse-mifid-delayed-ingestion
description: "How to get Deutsche Börse MiFID II delayed data (Xetra, Börse Frankfurt, Eurex) data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Read a Xetra delayed post-trade minute file into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/deutsche-boerse-mifid-delayed
Provider: https://mds.deutsche-boerse.com/mds-en/real-time-data/Delayed-data
Checked against the provider's documentation: 2026-11-05

## Access
- No account or key; the file service page shows Terms of Use.
- The Xetra post-trade page (https://mfs.deutsche-boerse.com/DETR-posttrade) loads its file list from https://mfs.deutsche-boerse.com/api/DETR-posttrade; each file downloads from /api/download/<name>, which redirects to a short-lived signed link.

## Request
```bash
curl 'https://mfs.deutsche-boerse.com/api/DETR-posttrade'
```

## Format
File list: JSON with SourcePrefix, FileCount, GenerationDatetime and CurrentFiles (names like DETR-posttrade-2026-11-05T12_00.json.gz, plus a daily file). Each file is gzipped newline-delimited JSON, one trade per line (instrumentIdentificationCode, price, quantity, priceCurrency, tradingDateAndTime, venueOfExecution and MMT flags).

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""Deutsche Boerse MiFID II delayed Xetra post-trade (one minute file) -> pandas -> Parquet. No key."""
import gzip, json
import requests
import pandas as pd

BASE = "https://mfs.deutsche-boerse.com/api/"
listing = requests.get(BASE + "DETR-posttrade", timeout=60).json()
# Minute files are named DETR-posttrade-YYYY-MM-DDTHH_MM.json.gz (UTC); pick one inside trading hours.
name = next(f for f in listing["CurrentFiles"] if "daily" not in f and "T12_00" in f)
raw = requests.get(BASE + "download/" + name, timeout=120).content  # follows a short-lived signed redirect
records = [json.loads(line) for line in gzip.decompress(raw).decode("utf-8").splitlines() if line.strip()]
df = pd.DataFrame(records)
df.to_parquet("dbg_xetra_posttrade.parquet", index=False)
print(name, len(df), "trades;", df["venueOfExecution"].iloc[0], df["instrumentIdentificationCode"].nunique(), "ISINs")
```
Run by us on 2026-11-05 (python 3.13 | pandas | pyarrow | requests (box probe)). Result: DETR-posttrade-2026-11-05T12_00.json.gz 1223 trades; XETA 410 ISINs

## Limits
- 15-minute delay; files remain available until midnight of the following business day, so collect them yourself for history.
- No request or download limit stated.

## Quirks
- Minute files outside trading hours can be empty; the snippet picks 12:00 UTC.
- Other venues use other prefixes on the same service (for example DETR-pretrade, Börse Frankfurt, Tradegate, Eurex, EEX); see the Delayed data page for links.
- Do not use the deprecated Deutsche Börse Public Dataset on AWS.

## Terms and attribution
- Free, non-exclusive, non-transferable licence only if you do not commercialise the data.
- Onward dissemination for a fee or value-added services sold for a fee need a licence under the Market Data Dissemination Agreement.
- Terms page: https://mfs.deutsche-boerse.com/DETR-posttrade

## Sources
- https://mds.deutsche-boerse.com/mds-en/real-time-data/Delayed-data: "The Market Data is provided with a 15 minutes time delay. Information is provided once per minute and remains available until midnight of the following business day."
- https://mfs.deutsche-boerse.com/DETR-posttrade: "Any access to and use of the Delayed Data is subject to a licence which is only granted free of charge if the Delayed Data User does not commercialize the Delayed Data."

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