Contents

About IntraDB

IntraDB is a research data platform operated by the Institute for Finance and Banking at LMU Munich. It provides tick-level intraday market data for European and international equity markets.

The database covers more than 25 trading venues, including Xetra, Tradegate, Nasdaq, and regional German exchanges. For each venue, data is available as Pretrade (order book snapshots) or Posttrade (trade reports), depending on the exchange. Data is identified by ISIN and can be queried for custom date ranges.

Access is available to authorised members of LMU Munich and partner institutions. Authentication is handled through your university’s identity provider (Shibboleth/SAML).

Web app or API?

Web appAPI
Best forManual, one-off data retrievalAutomated, scripted or repeated queries
OutputZIP file with Parquet filesStreaming data response
Tools neededWeb browserPython, MATLAB, R or any HTTP client
AuthenticationUniversity login (Shibboleth)Personal API token

Web app

Using the web app

The web app is the easiest way to get market data. No programming required — just fill in the form and download a ZIP file.

  1. Sign in at /app.php with your university credentials.
  2. Choose your symbols — enter ISINs manually, upload a file, or select an index.
  3. Select the exchange and data type — pick the trading venue and choose between Pretrade (order book) or Posttrade (trade reports).
  4. Set the date range for the period you need.
  5. Click “Download data” — the ZIP file will start downloading automatically.
About the download format The ZIP file contains one Parquet file per ISIN. Parquet is a standard columnar data format that can be opened in Python (pandas), R, MATLAB, or any tool that supports Apache Parquet.

For large Pretrade queries, the download may be split into several files covering shorter periods. These are delivered one after another automatically.

Web app

Uploading ISINs from a file

If you have a large number of ISINs, you can upload them as a text file instead of typing them one by one. The app will recognise valid ISINs automatically.

Example file (.txt):

isins = [
  DE000A1EWWW0,
  DE0008404005,
  DE0007236101,
]

The format is flexible — any text file containing valid ISIN codes will work. Duplicates are removed automatically. Up to 100 ISINs per request.

Download sample file

Web app

Index-based queries

Instead of entering individual ISINs, you can select a stock index (e.g. DAX, Euro Stoxx 50) and a time period. The app will automatically look up all constituents of that index during the selected period and download data for all of them.

Reference

Available exchanges

The following trading venues are available. Each exchange offers either Pretrade data (order book snapshots), Posttrade data (trade reports), or both.

ExchangeDescriptionPretradePosttrade
Parkett Frankfurt floor trading
Tradegate Tradegate equities and ETFs
Xetra Xetra equities and ETFs
EIX EIX equities and ETFs
Bloomberg Bloomberg
Duesseldorf_DUSA Boerse Duesseldorf regulated market
Duesseldorf_DUSB Boerse Duesseldorf Freiverkehr
Duesseldorf_DUSC Quotrix regulated market
Duesseldorf_DUSD Quotrix MTF/Freiverkehr
Hamburg_HAMA Boerse Hamburg regulated market
Hamburg_HAMB Boerse Hamburg Freiverkehr
Hannover_HANA Boerse Hannover regulated market
Hannover_HANB Boerse Hannover Freiverkehr
Cboe_APA Cboe APA
Cboe_BXE Cboe BXE
Cboe_CXE Cboe CXE
Cboe_DXE Cboe DXE
Muenchen_MUNC Boerse Muenchen, MUNC
Muenchen_MUND Boerse Muenchen, MUND
LSX LS Exchange
Nasdaq Nasdaq Nordic equities and ETFs
Wien_OTC Vienna OTC
Wien_Exchange Vienna Exchange
Equiduct Equiduct equities and ETFs
Aquis Aquis equities and ETFs

API

Using the API

The API lets you retrieve market data programmatically from Python, MATLAB, R, or any HTTP client. You authenticate with a personal token that you generate through the web interface.

Step 1: Generate your API token

  1. Sign in with your university credentials.
  2. Go to the API token page and click Generate token.
  3. Copy the token immediately — it is shown only once.

Your token is valid for 30 days. If you lose it, simply generate a new one on the same page. Previously issued tokens remain valid until they expire.

Keep your token secure Your API token is a personal credential. Do not share it, commit it to version control, or embed it in publicly visible code. Store it in an environment variable (e.g. INTRADB_API_TOKEN) and read it from there in your scripts.

Step 2: Make a request

Pass your token in the Authorization header and specify the symbols, exchange, data type, and date range as URL parameters:

GET /download-json.php?symbols=DE000A1EWWW0&exchange=Tradegate&library=Pretrade&start_date=2026-04-01&end_date=2026-04-08
Authorization: Bearer <your_token>

Step 3: Process the response

The response contains your data grouped by ISIN. Each ISIN maps to an array of tick-level records with timestamps, prices, and volumes:

{
  "data": {
    "DE000A1EWWW0": [
      {"index": "2026-04-01T09:00:00.000000000", "Price": 248.30, "Volume": 1200},
      {"index": "2026-04-01T09:00:01.000000000", "Price": 248.35, "Volume": 500}
    ]
  },
  "message": "",
  "start_date": "2026-04-01",
  "end_date": "2026-04-08"
}

Rate limiting

The server allows up to 3 simultaneous downloads across all users. If the server is busy, your request will receive an HTTP 429 response with a Retry-After header telling you how many seconds to wait before trying again.

Python

Python example

Fetch market data and convert it to a pandas DataFrame. Generate your token first on the API token page.

import os
import requests
import pandas as pd

TOKEN = os.getenv("INTRADB_API_TOKEN")
URL = "https://intradb.lmu.de.devweb.mwn.de/download-json.php"

response = requests.get(URL, params={
    "symbols":    "DE000A1EWWW0,DE0008404005",
    "exchange":   "Tradegate",
    "library":    "Pretrade",
    "start_date": "2026-04-01",
    "end_date":   "2026-04-08",
}, headers={"Authorization": f"Bearer {TOKEN}"})

if response.status_code == 429:
    retry = response.json().get("retry_after", 60)
    print(f"Server busy. Try again in {retry} seconds.")
else:
    response.raise_for_status()
    result = response.json()

    for isin, records in result["data"].items():
        df = pd.DataFrame(records)
        df["index"] = pd.to_datetime(df["index"])
        df = df.set_index("index")
        print(f"{isin}: {len(df)} records")
        print(df.head())
Reproducible research When using API data in a research project, record the query parameters, database version, and access date alongside your results to ensure reproducibility.
MATLAB

MATLAB example

Fetch market data using MATLAB's webread. Generate your token first on the API token page.

token = getenv('INTRADB_API_TOKEN');
baseUrl = 'https://intradb.lmu.de.devweb.mwn.de';

opts = weboptions( ...
    'HeaderFields', {'Authorization', ['Bearer ' token]}, ...
    'Timeout', 300 ...
);

data = webread([baseUrl '/download-json.php'], ...
    'symbols',    'DE000A1EWWW0', ...
    'exchange',   'Tradegate', ...
    'library',    'Pretrade', ...
    'start_date', '2026-04-01', ...
    'end_date',   '2026-04-08', ...
    opts);

isins = fieldnames(data.data);
for i = 1:numel(isins)
    records = data.data.(isins{i});
    fprintf('%s: %d records\n', isins{i}, numel(records));
end

For large downloads (many ISINs or Pretrade data over long periods), use websave instead of webread to save the data directly to a file without holding it in memory.


Technical

API technical reference

Detailed specification for developers building integrations against the IntraDB API.

Request parameters

ParameterFormatRequiredDescription
symbolsComma-separated ISINsYesMaximum 100 per request.
exchangeString (case-sensitive)YesMust match a supported exchange name exactly.
libraryPretrade or PosttradeYesPretrade = order book (larger). Posttrade = trade reports (smaller).
start_dateYYYY-MM-DDYesInclusive start. Cannot be in the future.
end_dateYYYY-MM-DDYesInclusive end. Max 90-day window.

Response fields

FieldTypeDescription
dataObjectMap of ISIN → array of tick records. Each record has index (nanosecond timestamp), Price, Volume, etc.
messageStringStatus information. Empty if no issues.
start_dateStringActual start date used (may be adjusted).
end_dateStringActual end date used.
changed_start"0" / "1"Whether the start date was adjusted.
changed_end"0" / "1"Whether the end date was adjusted.
Date adjustment If your requested dates fall outside the available data range, the backend adjusts them automatically. Always check changed_start and changed_end in the response to detect adjustments.

The response is streamed and may not include a Content-Length header. For large queries, stream the response to disk rather than buffering it in memory. Individual symbols exceeding 2 GB are omitted and noted in message.

Authentication

All requests require a bearer token in the Authorization header. Tokens are generated on the API token page and are valid for 30 days. There are no separate token scopes — every token has the same permissions. To rotate a token, generate a new one; the old token continues to work until it expires.

Authorization: Bearer <your_token>

HTTP status codes

StatusMeaningAction
400Invalid parametersCheck symbols, exchange, library, and dates.
401Not authenticatedToken missing or expired. Generate a new one on the API token page.
404No dataNo data for the requested symbols, exchange, and period.
429Server busyWait for Retry-After seconds, then retry.
502Backend errorTry again in a few minutes.

Rate limiting

Maximum 3 concurrent downloads across all users. When busy, the API returns:

HTTP/1.1 429 Too Many Requests
Retry-After: 60

{"detail": "Server busy.", "active": 3, "limit": 3, "retry_after": 60}

You can check availability before starting a download:

GET /download-queue-status.php
→ {"active": 1, "limit": 3, "available": true, "estimated_wait_seconds": 0}

Citation & contact

If you use IntraDB data in academic work, please cite it as:

Institute for Finance and Banking, LMU Munich.
IntraDB — Intraday Market Data Platform.
https://intradb.lmu.de.devweb.mwn.de
Accessed: YYYY-MM-DD.

For questions, data issues or access requests, contact the IntraDB team at the Institute for Finance and Banking, LMU Munich.