Bundesbank APIstatistiken.bundesbank.de ↗
Access Deutsche Bundesbank macroeconomic time series: exchange rates, interest rates, financial stats. Search, browse topics, and retrieve historical observations.
What is the Bundesbank API?
The Bundesbank Statistics API exposes 3 endpoints for querying the Deutsche Bundesbank's official time series database, covering exchange rates, interest rates, and macroeconomic indicators. The get_time_series_data endpoint returns timestamped observations alongside metadata such as unit, unit multiplier, and frequency. Use search_time_series to find series by keyword or topic code, and list_topics to navigate the full subject hierarchy.
curl -X GET 'https://api.parse.bot/scraper/f4ba6c4a-e90e-465e-b61d-0da467f458b7/search_time_series?limit=5&query=Wechselkurs&topic=W1&offset=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace statistiken-bundesbank-de-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Bundesbank Statistics SDK — search time series, fetch data, browse topics."""
from parse_apis.statistiken_bundesbank_de_api import Bundesbank, SeriesNotFound
client = Bundesbank()
# Browse the topic tree to discover available categories
for topic in client.topic_indexes.list(limit=3):
print(f"Topic: {topic.id} — {topic.title}")
# Search for exchange rate time series across all topics
for ts in client.topic_indexes.search(query="Wechselkurs", limit=3):
print(f"Series: {ts.id} — {ts.title}")
# Drill into a specific topic and search within it
euro_topic = client.topic(id="W133")
result = euro_topic.search(query="USD", limit=1).first()
if result:
# Fetch the actual observation data for this series
data = result.data(last_n_observations="5")
print(f"Dataflow: {data.dataflow}")
for series in data.series:
print(f"Unit: {series.metadata.get('BBK_UNIT', 'N/A')}")
for obs in series.observations[:3]:
print(f" {obs.period}: {obs.value}")
# Handle not-found errors gracefully when fetching a bad series
try:
bad = client.topic(id="W1").search(query="USD", limit=1).first()
if bad:
bad_data = bad.data(last_n_observations="1")
except SeriesNotFound as exc:
print(f"Series not found: {exc}")
print("exercised: topic_indexes.list / topic_indexes.search / topic.search / series.data")
Full-text search across Bundesbank time series. Returns matching series metadata with pagination. When topic is provided, results are scoped to that topic branch (e.g. 'W1' for Außenwirtschaft). The default query '**' returns all series within the topic. Each item carries the dataflow and series key needed to fetch observations via get_time_series_data.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return per page. |
| query | string | Search query text. Use '**' to match all series within the topic scope. |
| topic | string | Topic code to scope search results (e.g. 'W1' for Außenwirtschaft, 'W12' for Banken). Obtain codes from list_topics. When omitted, searches across all topics. |
| offset | integer | Number of results to skip for pagination. |
{
"type": "object",
"fields": {
"limit": "integer",
"total": "integer",
"offset": "integer",
"results": "array of time series summaries",
"root_topic": "string or null"
},
"sample": {
"data": {
"limit": 5,
"total": 366,
"offset": 0,
"results": [
{
"id": "BBEE1.D.I10.AAA.XZE012.A.AABAN.M00",
"key": "D.I10.AAA.XZE012.A.AABAN.M00",
"url": "/statistiken-de/zeitreihen/BBEE1/D.I10.AAA.XZE012.A.AABAN.M00",
"type": "BBK_ITS",
"title": "Nominaler effektiver Wechselkurs des Euro gegenüber den Währungen des Erweiterten EWK-Länderkreises",
"flow_ref": "BBEE1"
}
],
"root_topic": null
},
"status": "success"
}
}About the Bundesbank API
What the API Covers
The API surfaces structured access to the Deutsche Bundesbank's statistical publication database. Data spans exchange rates (dataflow BBEX3), international investment positions (BBFI1), banking aggregates, money supply figures, interest rates, and broader macroeconomic indicators. Each time series is identified by a dataflow identifier and a dot-separated series_key such as D.USD.EUR.BB.AC.000, which encodes dimensions like frequency, currency pair, and methodology.
Endpoints and Parameters
search_time_series accepts a free-text query and an optional topic code to scope results to a branch of the subject tree — for example, W1 for Außenwirtschaft (foreign trade and payments) or W12 for Banken. Pagination is controlled via limit and offset, and the response includes a total count alongside a results array of series summaries and the matched root_topic. list_topics returns the complete nested topic tree, where each node carries an id and title, with children arrays for subcategories — the IDs from this response feed directly into search_time_series.
Retrieving Observations
get_time_series_data requires both a dataflow and a series_key. The response contains a series array where each element includes the time series title, unit, unit multiplier, frequency, and an ordered list of timestamped observation values. The optional last_n_observations parameter limits the response to the most recent N data points, which is useful for monitoring dashboards that only need current values rather than the full historical record stretching back decades.
Source and Official API
The Deutsche Bundesbank publishes statistics at statistiken.bundesbank.de and provides an official SDMX-based data portal. The Parse API wraps this source into a consistent, developer-friendly interface with predictable JSON responses, no SDMX parsing overhead, and simple keyword search across the time series catalog.
The Bundesbank API is a managed, monitored endpoint for statistiken.bundesbank.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when statistiken.bundesbank.de changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official statistiken.bundesbank.de API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track daily EUR/USD exchange rates using the BBEX3 dataflow with last_n_observations to pull only recent data points
- Build an interest rate dashboard by searching for 'Leitzins' or 'Zinssatz' series and plotting historical observations
- Monitor Germany's international investment position by querying the BBFI1 dataflow for quarterly balance-of-payments figures
- Enumerate all available banking statistics by using list_topics to find the W12 Banken branch, then searching within it
- Feed macroeconomic indicators into an econometric model by retrieving full historical time series with all observations
- Alert on money supply changes by periodically fetching M1/M2/M3 series and comparing the latest observation values
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does the Deutsche Bundesbank offer an official developer API?+
What does get_time_series_data actually return, and how granular is the data?+
series array where each object carries the series title, unit, unit multiplier, and frequency (daily, monthly, quarterly, annual, etc.), plus an ordered array of timestamped observation values. Frequency depends on the specific series — exchange rates like D.USD.EUR.BB.AC.000 are daily, while investment position data is typically quarterly.How do I find the correct dataflow and series_key for a time series I want?+
results array includes the dataflow identifier and series_key needed to call get_time_series_data. The root_topic field in the search response also confirms which topic branch the results belong to.