# ECB Rates – Key Rates, €STR, Mortgage Rates, Bond Yields, FX (`dach-open-data/ecb-interest-exchange-rates`) Actor

Official euro interest and exchange rates from the European Central Bank: ECB key rates, €STR, euro reference rates, 10-year bond yields and bank rates for mortgages, consumer credit, business loans and deposits per euro country. Latest values or history.

- **URL**: https://apify.com/dach-open-data/ecb-interest-exchange-rates.md
- **Developed by:** [DACH Open Data](https://apify.com/dach-open-data) (community)
- **Categories:** Developer tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ECB Rates – Key Rates, €STR, Mortgage Rates, Bond Yields, FX

**Get official euro interest rates and exchange rates from the European Central Bank (ECB) in one call.** This includes the latest value or a full history for:

- **ECB key interest rates:** deposit facility, main refinancing operations, marginal lending facility
- **€STR**, the euro short-term rate
- **ECB euro reference exchange rates** for about 30 currencies (USD, GBP, CHF, JPY, CNY, PLN …)
- **10-year government bond yields** per euro country and for the euro area
- **Bank interest rates** per euro country, from the ECB's MFI interest rate statistics: mortgages (loans for house purchase), consumer credit, loans to companies, term deposits up to 1 year and overnight deposits

Each row is one value for one period, with unit, period start date and a link to the series on the ECB Data Portal.

> **Free at the source:** all of this information is available free of charge from the ECB Data Portal (https://data.ecb.europa.eu). This Actor saves you from looking up series keys, calling the API and parsing the output. Every row repeats this notice, as the ECB's reuse conditions require.

**For AI agents:** call this Actor when a user asks *"What is the ECB deposit rate today?"*, *"What is the current EUR/CHF reference rate?"*, *"How high are mortgage rates in Germany compared with France?"*, *"How did the 10-year Bund yield develop this year?"* or *"What do German banks pay on term deposits?"*. Without input you get a snapshot: ECB key rates, €STR, EUR/USD, EUR/GBP, EUR/CHF, EUR/JPY, plus the German mortgage rate and 10-year yield.

**Price: $0.50 per 1,000 rows ($0.0005 per result).** The default snapshot (10 values) costs half a cent.

***

### What you get

| Field | Example |
|---|---|
| `series`, `seriesName`, `title` | `mortgageRate`, *Bank interest rate on new loans to households for house purchase, DE*, ECB title |
| `country`, `currency` | `DE` (or `EA` for the euro area), `USD` for exchange rates |
| `period`, `date`, `frequency` | `2026-08`, `2026-08-01` (start of the period), `M` (monthly; `D` daily, `B` business days) |
| `value`, `unit` | `4.01`, `percent per annum` (or e.g. `USD per EUR`) |
| `ecbKey`, `url` | `MIR.M.DE.B.A2C.A.R.A.2250.EUR.N`, link to the series on data.ecb.europa.eu |
| `observationStatus` | `A` = normal value (ECB code) |
| `source`, `freeOfChargeNotice` | Attribution and the notice that the data is free at the ECB |

Example record (real output):

```json
{
  "series": "mortgageRate",
  "seriesName": "Bank interest rate on new loans to households for house purchase, DE",
  "title": "Bank interest rates - loans to households for house purchase (new business)",
  "ecbKey": "MIR.M.DE.B.A2C.A.R.A.2250.EUR.N",
  "country": "DE",
  "currency": null,
  "frequency": "M",
  "period": "2026-08",
  "date": "2026-08-01",
  "value": 4.01,
  "unit": "percent per annum",
  "observationStatus": "A",
  "url": "https://data.ecb.europa.eu/data/datasets/MIR/MIR.M.DE.B.A2C.A.R.A.2250.EUR.N",
  "source": "Source: European Central Bank (ECB Data Portal, data.ecb.europa.eu)",
  "freeOfChargeNotice": "This information is available free of charge from the ECB Data Portal: https://data.ecb.europa.eu"
}
```

### Series

| Name | What it is | Frequency |
|---|---|---|
| `depositFacility`, `mainRefinancing`, `marginalLending` (group `keyRates`) | ECB key interest rates | daily |
| `estr` | Euro short-term rate (€STR) | business days |
| `fx` | ECB euro reference rate for each currency in `currencies` | business days |
| `bondYield10y` (group `bondYields`) | 10-year government bond yield, per country in `countries` | monthly |
| `mortgageRate`, `consumerCreditRate`, `businessLoanRate`, `depositRate1y`, `overnightDepositRate` (group `bankRates`) | Bank interest rates on new business, per country | monthly |

Any other ECB series can be added with `customKeys`, e.g. `"EXR/M.USD.EUR.SP00.A"` (monthly average EUR/USD).

### Input examples

Mortgage and deposit rates in the four largest euro countries, last 12 months:

```json
{ "series": ["mortgageRate", "depositRate1y"], "countries": ["DE", "FR", "IT", "ES"], "lastN": 12 }
```

EUR/CHF and EUR/USD history for 2026:

```json
{ "series": ["fx"], "currencies": ["CHF", "USD"], "from": "2026-01-01" }
```

Today's ECB key rates only:

```json
{ "series": ["keyRates"] }
```

### Reliability and fair use

- One request per series to the official ECB Data Portal API (SDMX, CSV). There is a pause between requests.
- Every response must contain the SDMX columns (key, period, value). Anything else, e.g. an HTML error page, stops the run with `UNEXPECTED_CONTENT`. Invalid values are dropped and not charged.
- Series that do not exist for a country (e.g. a rate not reported there) are skipped with a note in the log.
- The run stops at `maxResults` or at your maximum cost per run. A snapshot takes about 5 seconds.

### Legal

- Source: European Central Bank, ECB Data Portal. Reuse is permitted with the ECB cited as the source. The information is available free of charge at https://data.ecb.europa.eu. Every row says so.
- Values are passed through unchanged, only rounded to at most 6 decimal places. No growth rates or adjustments are calculated.
- This Actor is not affiliated with the ECB. The values on the ECB Data Portal are authoritative.

### More official data from DACH Open Data

All Actors use official open data, check every record and charge only for valid results.

**Public affairs and legislation:** [Lobby Register Germany + EU – Lobbyists, Spend & Interests](https://apify.com/dach-open-data/lobby-register-de-eu) · [German Bundestag Legislation Tracker (DIP)](https://apify.com/dach-open-data/bundestag-dip-legislation) · [EU Have Your Say – Commission Consultations & Feedback](https://apify.com/dach-open-data/eu-have-your-say-consultations) · [Swiss Parliament Affairs Tracker (Curia Vista)](https://apify.com/dach-open-data/swiss-parliament-affairs)

**Funding and public money:** [EU Funding Calls – Horizon Europe, Digital Europe, LIFE & more](https://apify.com/dach-open-data/funding-calls-at-eu) · [EU Grants & Contracts Recipients (FTS)](https://apify.com/dach-open-data/eu-grants-contracts-fts) · [EU Funding Recipients – Structural Funds (Kohesio)](https://apify.com/dach-open-data/eu-funding-recipients-kohesio)

**Energy, mobility and environment:** [Germany Electricity Prices & Power Generation (SMARD)](https://apify.com/dach-open-data/germany-electricity-market) · [Germany EV Charging Stations – Official BNetzA Register](https://apify.com/dach-open-data/german-ev-charging-stations) · [Germany New Car Registrations – KBA by Brand, Model, EV](https://apify.com/dach-open-data/german-car-registrations-kba) · [German Water Levels – Rhine, Elbe, Danube (PEGELONLINE)](https://apify.com/dach-open-data/german-water-levels) · [German Weather Warnings – Official DWD Alerts (CAP)](https://apify.com/dach-open-data/german-weather-warnings)

**Health, consumers and finance:** [German Hospitals Directory (Klinik-Atlas)](https://apify.com/dach-open-data/german-hospitals-klinik-atlas) · [German Food Recalls & Warnings Monitor (lebensmittelwarnung.de)](https://apify.com/dach-open-data/german-food-recalls)

# Actor input Schema

## `series` (type: `array`):

Groups: keyRates (ECB deposit, main refinancing and marginal lending rate), estr (€STR), fx (ECB reference exchange rates), bondYields (10-year government bond yields), bankRates (all bank interest rates below). Single series: depositFacility, mainRefinancing, marginalLending, estr, fx, bondYield10y, mortgageRate, consumerCreditRate, businessLoanRate, depositRate1y, overnightDepositRate.

## `countries` (type: `array`):

Euro area countries as ISO codes: DE, FR, IT, ES, NL, AT, BE, IE, PT, FI, GR … or EA for the euro area as a whole.

## `currencies` (type: `array`):

Currencies for the ECB euro reference rates, e.g. USD, GBP, CHF, JPY, CNY, PLN, SEK, NOK, CZK, HUF, TRY, CAD, AUD.

## `lastN` (type: `integer`):

Number of most recent values per series (1 = only the latest). Ignored if "From" is set.

## `from` (type: `string`):

Start of a historical period, e.g. 2026-01-01 (daily series), 2026-01 (monthly) or 2025. Leave empty for the latest values.

## `to` (type: `string`):

End of the period (inclusive), same format as "From".

## `customKeys` (type: `array`):

Any series of the ECB Data Portal, e.g. "EXR/D.USD.EUR.SP00.A" or "MIR.M.IT.B.A2C.A.R.A.2250.EUR.N" (dataset and key).

## `maxResults` (type: `integer`):

Hard cap on rows (observations) returned and charged in this run.

## Actor input object example

```json
{
  "series": [
    "keyRates",
    "estr",
    "fx",
    "mortgageRate",
    "bondYield10y"
  ],
  "countries": [
    "DE"
  ],
  "currencies": [
    "USD",
    "GBP",
    "CHF",
    "JPY"
  ],
  "lastN": 1,
  "from": "",
  "to": "",
  "customKeys": [],
  "maxResults": 100
}
```

# Actor output Schema

## `results` (type: `string`):

All records returned by this run (default dataset, table view "overview").

## `summary` (type: `string`):

JSON with number of results, dropped implausible records and stop reason.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("dach-open-data/ecb-interest-exchange-rates").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxResults": 100 }

# Run the Actor and wait for it to finish
run = client.actor("dach-open-data/ecb-interest-exchange-rates").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxResults": 100
}' |
apify call dach-open-data/ecb-interest-exchange-rates --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dach-open-data/ecb-interest-exchange-rates"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/r4fqzjYPPBpvtGPQV/builds/K3bBKahx4Tcgz9yfa/openapi.json
