---
type: "firecrawl-provider"
description: "Official European Central Bank statistics from the ECB Data Portal's keyless SDMX API: euro foreign exchange reference rates (latest, one day or a range, with derived cross rates between two non-euro currencies), any ECB time series by dataflow and key (euro short-term rate €STR, key policy rates, HICP inflation, M3 and other monetary aggregates, bank interest rates, yield curves, balance of payments) with decoded titles, units and frequency, and dataflow search with dimension codes for building series keys."
use_when: "Official European Central Bank statistics from the ECB Data Portal's keyless SDMX API: euro foreign exchange reference rates (latest, one day or a range, with derived cross rates between two non-euro currencies), any ECB time series by dataflow and key (euro short-term rate €STR, key policy rates, HICP inflation, M3 and other monetary aggregates, bank interest rates, yield curves, balance of payments) with decoded titles, units and frequency, and dataflow search with dimension codes for building series keys."
categories: "Public records"
capabilities: 3
credits_per_call: 5
---
# European Central Bank (ECB Data Portal) on Firecrawl Alexandria

Official European Central Bank statistics from the ECB Data Portal's keyless SDMX API: euro foreign exchange reference rates (latest, one day or a range, with derived cross rates between two non-euro currencies), any ECB time series by dataflow and key (euro short-term rate €STR, key policy rates, HICP inflation, M3 and other monetary aggregates, bank interest rates, yield curves, balance of payments) with decoded titles, units and frequency, and dataflow search with dimension codes for building series keys.

- Categories: Public records
- Category index: [Public records category](https://firecrawl.dev/alexandria/agents/categories/public-records)
- Provider key: `ecb-europa-eu`
- Access: Firecrawl credits
- Cost: 5 credits per call

## More

- [Human guide](https://firecrawl.dev/app/alexandria/ecb-europa-eu)
- [OpenAPI spec](https://firecrawl.dev/alexandria/agents/providers/ecb-europa-eu/openapi.json)

## Capabilities

- [Fx rates](https://firecrawl.dev/alexandria/agents/providers/ecb-europa-eu/economic-data/fx_rates): Euro foreign exchange reference rates from the ECB (EXR dataflow, series D.{CUR}.EUR.SP00.A): units of each currency per 1 EUR for the latest business day (default), one date or a date range, each row with its actual observation date. Optionally derives a cross rate between two non-euro currencies (base/quote) from the EUR legs on the same date, flagged derived:true with its formula. ECB rates are published around 16:00 CET on TARGET business days, so 'latest' is often the previous business day.
- [Search dataflows](https://firecrawl.dev/alexandria/agents/providers/ecb-europa-eu/economic-data/search_dataflows): List or keyword-search the ECB Data Portal's dataflows (about 100: EXR, EST, FM, ICP, BSI, MIR, YC, BOP, ...) by id, name and description; or, with `flow`, describe one dataflow's dimensions in key order with the codes that currently carry data (optionally narrowed by a partial key and a code text filter) so a series key can be built for `series`.
- [Series](https://firecrawl.dev/alexandria/agents/providers/ecb-europa-eu/economic-data/series): Fetch any ECB Data Portal time series by dataflow and SDMX key (wildcards and '+' alternatives allowed): per series the full key, title, unit, unit multiplier, frequency, decimals, decoded dimensions and attributes, and observations normalised to {date, value, status} with null values preserved. Filter by start/end period or take the last N observations.

## 1. Choose this provider when

Official European Central Bank statistics from the ECB Data Portal's keyless SDMX API: euro foreign exchange reference rates (latest, one day or a range, with derived cross rates between two non-euro currencies), any ECB time series by dataflow and key (euro short-term rate €STR, key policy rates, HICP inflation, M3 and other monetary aggregates, bank interest rates, yield curves, balance of payments) with decoded titles, units and frequency, and dataflow search with dimension codes for building series keys.

## 2. Minimal request

Call `POST https://api.firecrawl.dev/v2/scrape` with `{ alexandria: { provider, capability, options } }`. For a batch, send `{ alexandria: [...] }` with up to 10 calls.

```json
{
  "provider": "ecb-europa-eu",
  "capability": "economic-data/fx_rates",
  "options": {
    "currencies": [
      "USD",
      "JPY"
    ]
  }
}
```

## 3. Add provider options

Use only the options needed for the task:

- `base` (string): With quote: also derive the cross rate quote-per-base (e.g. base USD, quote JPY gives JPY per 1 USD) from the two EUR legs on each common date. Non-EUR. Pattern: ^[A-Za-z]{3}$. Example: `<base>`
- `currencies` (string[]): ISO 4217 codes of the currencies to quote against the euro, e.g. ["USD", "JPY", "GBP"]. Case-insensitive. EUR itself is not a series (every rate is per 1 EUR). Optional when base/quote is given. Example: `[]`
- `date` (string): One day, YYYY-MM-DD. Weekends and TARGET holidays have no rates (not_found). Mutually exclusive with start_date/end_date. Pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$. Example: `<date>`
- `end_date` (string): Last day of a range, YYYY-MM-DD (inclusive). Pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$. Example: `<end_date>`
- `quote` (string): With base: the currency the cross rate is expressed in. Non-EUR, different from base. Pattern: ^[A-Za-z]{3}$. Example: `<quote>`
- `start_date` (string): First day of a range, YYYY-MM-DD (inclusive). Pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$. Example: `<start_date>`

## 4. Request through your preferred interface

### JavaScript

```javascript
const result = await firecrawl.scrape({
  alexandria: {
    provider: "ecb-europa-eu",
    capability: "economic-data/fx_rates",
    options: {
      currencies: [
        "USD",
        "JPY",
      ],
    },
  },
});
```

### Python

```python
result = firecrawl.scrape_alexandria({
  "provider": "ecb-europa-eu",
  "capability": "economic-data/fx_rates",
  "options": {
    "currencies": [
      "USD",
      "JPY"
    ]
  }
})
```

### cURL

```sh
curl https://api.firecrawl.dev/v2/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "alexandria": {
    "provider": "ecb-europa-eu",
    "capability": "economic-data/fx_rates",
    "options": {
      "currencies": [
        "USD",
        "JPY"
      ]
    }
  }
}'
```

### CLI

```sh
firecrawl scrape 'ecb-europa-eu/economic-data/fx_rates' \
  --options '{"currencies":["USD","JPY"]}'
```


### MCP

Call the FCX MCP retrieve tool with this object:

```json
{
  "provider": "ecb-europa-eu",
  "capability": "economic-data/fx_rates",
  "options": {
    "currencies": [
      "USD",
      "JPY"
    ]
  }
}
```

Ask for only the returned fields needed by the task.

## 5. Full request shape

```json
{
  "provider": "ecb-europa-eu",
  "capability": "economic-data/fx_rates",
  "options": {
    "currencies": [
      "USD",
      "JPY"
    ]
  }
}
```

## 6. Response data

The response includes `success`, `provider`, `capability`, `creditsCost` and `data`. This example shows the provider payload in `data`:

```json
{
  "attribution": "Source: European Central Bank (ECB Data Portal)",
  "cross_rates": [],
  "end_date": null,
  "missing_currencies": [],
  "mode": "latest",
  "modifications": null,
  "observed_at_ms": 1791674450661,
  "publication_note": "ECB euro foreign exchange reference rates are units of currency per 1 EUR, set at the 14:15 CET concertation and published around 16:00 CET on TARGET business days only. There are no rates for weekends or TARGET holidays, so the latest rate is often the previous business day's; every row carries its actual observation date.",
  "rates": [
    {
      "currency": "USD",
      "currency_name": "US dollar",
      "date": "2026-10-09",
      "obs_status": "A",
      "rate": 1.1206,
      "series_key": "D.USD.EUR.SP00.A"
    },
    {
      "currency": "JPY",
      "currency_name": "Japanese yen",
      "date": "2026-10-09",
      "obs_status": "A",
      "rate": 177.34,
      "series_key": "D.JPY.EUR.SP00.A"
    }
  ],
  "source_url": "https://data-api.ecb.europa.eu/service/data/EXR/D.USD+JPY.EUR.SP00.A?format=jsondata&lastNObservations=1",
  "start_date": null,
  "terms_url": "https://www.ecb.europa.eu/services/disclaimer/html/index.en.html"
}
```

## API reference-derived contract

The following capability contract is generated from the same normalized Alexandria API reference exposed in the API spec.

### Fx rates

- Capability: `economic-data/fx_rates`
- Description: Euro foreign exchange reference rates from the ECB (EXR dataflow, series D.{CUR}.EUR.SP00.A): units of each currency per 1 EUR for the latest business day (default), one date or a date range, each row with its actual observation date. Optionally derives a cross rate between two non-euro currencies (base/quote) from the EUR legs on the same date, flagged derived:true with its formula. ECB rates are published around 16:00 CET on TARGET business days, so 'latest' is often the previous business day.
- Instructions: Official ECB EUR exchange rates (e.g. EUR/USD reference rate on a date, latest EUR/JPY, a month of EUR/GBP), or a cross rate such as USD/JPY computed from ECB reference rates.
- Cost: 5 credits per call
- Capability file: [Fx rates](https://firecrawl.dev/alexandria/agents/providers/ecb-europa-eu/economic-data/fx_rates)

Accepted options:
- `base` (string): With quote: also derive the cross rate quote-per-base (e.g. base USD, quote JPY gives JPY per 1 USD) from the two EUR legs on each common date. Non-EUR. Pattern: ^[A-Za-z]{3}$. Example: `<base>`
- `currencies` (string[]): ISO 4217 codes of the currencies to quote against the euro, e.g. ["USD", "JPY", "GBP"]. Case-insensitive. EUR itself is not a series (every rate is per 1 EUR). Optional when base/quote is given. Example: `[]`
- `date` (string): One day, YYYY-MM-DD. Weekends and TARGET holidays have no rates (not_found). Mutually exclusive with start_date/end_date. Pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$. Example: `<date>`
- `end_date` (string): Last day of a range, YYYY-MM-DD (inclusive). Pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$. Example: `<end_date>`
- `quote` (string): With base: the currency the cross rate is expressed in. Non-EUR, different from base. Pattern: ^[A-Za-z]{3}$. Example: `<quote>`
- `start_date` (string): First day of a range, YYYY-MM-DD (inclusive). Pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$. Example: `<start_date>`

Response schema example:
```json
{
  "attribution": "Source: European Central Bank (ECB Data Portal)",
  "cross_rates": [],
  "end_date": null,
  "missing_currencies": [],
  "mode": "latest",
  "modifications": null,
  "observed_at_ms": 1791674450661,
  "publication_note": "ECB euro foreign exchange reference rates are units of currency per 1 EUR, set at the 14:15 CET concertation and published around 16:00 CET on TARGET business days only. There are no rates for weekends or TARGET holidays, so the latest rate is often the previous business day's; every row carries its actual observation date.",
  "rates": [
    {
      "currency": "USD",
      "currency_name": "US dollar",
      "date": "2026-10-09",
      "obs_status": "A",
      "rate": 1.1206,
      "series_key": "D.USD.EUR.SP00.A"
    },
    {
      "currency": "JPY",
      "currency_name": "Japanese yen",
      "date": "2026-10-09",
      "obs_status": "A",
      "rate": 177.34,
      "series_key": "D.JPY.EUR.SP00.A"
    }
  ],
  "source_url": "https://data-api.ecb.europa.eu/service/data/EXR/D.USD+JPY.EUR.SP00.A?format=jsondata&lastNObservations=1",
  "start_date": null,
  "terms_url": "https://www.ecb.europa.eu/services/disclaimer/html/index.en.html"
}
```

### Search dataflows

- Capability: `economic-data/search_dataflows`
- Description: List or keyword-search the ECB Data Portal's dataflows (about 100: EXR, EST, FM, ICP, BSI, MIR, YC, BOP, ...) by id, name and description; or, with `flow`, describe one dataflow's dimensions in key order with the codes that currently carry data (optionally narrowed by a partial key and a code text filter) so a series key can be built for `series`.
- Instructions: Finding which ECB dataflow holds a statistic, or which dimension codes make up a series key, before calling series.
- Cost: 5 credits per call
- Capability file: [Search dataflows](https://firecrawl.dev/alexandria/agents/providers/ecb-europa-eu/economic-data/search_dataflows)

Accepted options:
- `code_query` (string): With flow: keep only codes whose id or name contains this text, e.g. "dollar". Example: `<code_query>`
- `flow` (string): Describe this dataflow instead of listing: its dimensions in key order with the codes that currently carry data, so a series key can be built. Example: `<flow>`
- `key` (string): With flow: a partial key that narrows the description, e.g. D..EUR.SP00.A for daily euro reference rates. Example: `<key>`
- `max_codes` (number): With flow: maximum codes listed per dimension. Example: `50`
- `query` (string): Case-insensitive words that must all appear in the dataflow id, name or description, e.g. "exchange", "interest rate", "HICP". Empty lists all ECB dataflows. Example: `<query>`

Response schema example:
```json
{
  "attribution": "Source: European Central Bank (ECB Data Portal)",
  "dataflows": [
    {
      "agency": "ECB",
      "description": null,
      "id": "EXR",
      "name": "Exchange Rates",
      "portal_url": "https://data.ecb.europa.eu/data/datasets/EXR",
      "structure_id": "ECB_EXR1",
      "version": "1.0"
    }
  ],
  "match_count": 1,
  "mode": "list",
  "observed_at_ms": 1791674454009,
  "query": "exchange rates",
  "source_url": "https://data-api.ecb.europa.eu/service/dataflow/ECB",
  "structure": null,
  "terms_url": "https://www.ecb.europa.eu/services/disclaimer/html/index.en.html",
  "total_dataflows": 105
}
```

### Series

- Capability: `economic-data/series`
- Description: Fetch any ECB Data Portal time series by dataflow and SDMX key (wildcards and '+' alternatives allowed): per series the full key, title, unit, unit multiplier, frequency, decimals, decoded dimensions and attributes, and observations normalised to {date, value, status} with null values preserved. Filter by start/end period or take the last N observations.
- Instructions: Euro area statistics from the ECB: €STR (EST B.EU000A2X2A25.WT), key ECB interest rates (FM B.U2.EUR.4F.KR.MRR_FR.LEV, DFR, MLFR), HICP inflation (ICP M.U2.N.000000.4.ANR), M3 (BSI M.U2.Y.V.M30.X.1.U2.2300.Z01.E), bank lending rates (MIR), yield curves (YC), or any other ECB series key.
- Cost: 5 credits per call
- Capability file: [Series](https://firecrawl.dev/alexandria/agents/providers/ecb-europa-eu/economic-data/series)

Accepted options:
- `end_period` (string): End of the period range, inclusive. SDMX period: 2025, 2025-03, 2025-03-31, 2025-Q1, 2025-S1 or 2025-W09. Example: `<end_period>`
- `flow` (string, required): ECB dataflow id, e.g. EXR (exchange rates), EST (euro short-term rate), FM (financial markets incl. key policy rates), ICP (HICP inflation), BSI (monetary aggregates such as M3), MIR, YC. search_dataflows lists them. Example: `<flow>`
- `key` (string, required): SDMX series key: one code per dimension in order, separated by '.'; join alternatives with '+'; leave a position empty for any code. Examples: EST B.EU000A2X2A25.WT (€STR), FM B.U2.EUR.4F.KR.MRR_FR.LEV (main refinancing rate), FM B.U2.EUR.4F.KR.DFR.LEV (deposit facility rate), ICP M.U2.N.000000.4.ANR (euro area HICP annual rate), BSI M.U2.Y.V.M30.X.1.U2.2300.Z01.E (M3). search_dataflows with `flow` lists each dimension's codes. Example: `<key>`
- `last_n` (number): Only the last N observations of each series (within the range, when given). Without a range or last_n the full history is returned. Example: `10`
- `max_series` (number): Maximum series returned for a wildcard key; more is reported as partial with total_series. Example: `25`
- `start_period` (string): Start of the period range, inclusive. SDMX period: 2025, 2025-03, 2025-03-31, 2025-Q1, 2025-S1 or 2025-W09. Example: `<start_period>`

Response schema example:
```json
{
  "attribution": "Source: European Central Bank (ECB Data Portal)",
  "end_period": null,
  "flow": "FM",
  "flow_name": "Financial market data",
  "key": "B.U2.EUR.4F.KR.MRR_FR.LEV",
  "last_n": 3,
  "observed_at_ms": 1791674451792,
  "series": [
    {
      "attributes": [
        {
          "code": null,
          "id": "TIME_FORMAT",
          "name": "Time format code",
          "value": "P1D"
        },
        {
          "code": "E",
          "id": "COLLECTION",
          "name": "Collection indicator",
          "value": "End of period"
        },
        {
          "code": "4F0",
          "id": "COMPILING_ORG",
          "name": "Compiling organisation",
          "value": "European Central Bank (ECB)"
        },
        {
          "code": "7",
          "id": "DECIMALS",
          "name": "Decimals",
          "value": "Seven"
        },
        {
          "code": null,
          "id": "TITLE",
          "name": "Title",
          "value": "Main refinancing operations - fixed rate tenders (fixed rate) (date of changes) - Level"
        },
        {
          "code": null,
          "id": "TITLE_COMPL",
          "name": "Title complement",
          "value": "Euro area (changing composition) - Key interest rate - Main refinancing operations - fixed rate tenders (fixed rate) (date of changes) - Level - Euro, provided by ECB"
        },
        {
          "code": "PCPA",
          "id": "UNIT",
          "name": "Unit",
          "value": "Percent per annum"
        },
        {
          "code": "0",
          "id": "UNIT_MULT",
          "name": "Unit multiplier",
          "value": "Units"
        }
      ],
      "decimals": 7,
      "dimensions": [
        {
          "code": "B",
          "id": "FREQ",
          "label": "Daily - businessweek",
          "name": "Frequency"
        },
        {
          "code": "U2",
          "id": "REF_AREA",
          "label": "Euro area (changing composition)",
          "name": "Reference area"
        },
        {
          "code": "EUR",
          "id": "CURRENCY",
          "label": "Euro",
          "name": "Currency"
        },
        {
          "code": "4F",
          "id": "PROVIDER_FM",
          "label": "ECB",
          "name": "Financial market provider"
        },
        {
          "code": "KR",
          "id": "INSTRUMENT_FM",
          "label": "Key interest rate",
          "name": "Financial market instrument"
        },
        {
          "code": "MRR_FR",
          "id": "PROVIDER_FM_ID",
          "label": "Main refinancing operations - fixed rate tenders (fixed rate) (date of changes)",
          "name": "Financial market provider identifier"
        },
        {
          "code": "LEV",
          "id": "DATA_TYPE_FM",
          "label": "Level",
          "name": "Financial market data type"
        }
      ],
      "frequency": {
        "code": "B",
        "name": "Daily - businessweek"
      },
      "observation_count": 3,
      "observations": [
        {
          "date": "2025-06-11",
          "status": "A",
          "value": 2.15
        },
        {
          "date": "2026-06-17",
          "status": "A",
          "value": 2.4
        },
        {
          "date": "2026-09-16",
          "status": "A",
          "value": 2.65
        }
      ],
      "portal_url": "https://data.ecb.europa.eu/data/datasets/FM/FM.B.U2.EUR.4F.KR.MRR_FR.LEV",
      "series_key": "B.U2.EUR.4F.KR.MRR_FR.LEV",
      "title": "Main refinancing operations - fixed rate tenders (fixed rate) (date of changes) - Level",
      "title_complement": "Euro area (changing composition) - Key interest rate - Main refinancing operations - fixed rate tenders (fixed rate) (date of changes) - Level - Euro, provided by ECB",
      "unit": {
        "code": "PCPA",
        "name": "Percent per annum"
      },
      "unit_multiplier": {
        "code": "0",
        "name": "Units"
      }
    }
  ],
  "series_count": 1,
  "source_url": "https://data-api.ecb.europa.eu/service/data/FM/B.U2.EUR.4F.KR.MRR_FR.LEV?format=jsondata&lastNObservations=3",
  "start_period": null,
  "terms_url": "https://www.ecb.europa.eu/services/disclaimer/html/index.en.html",
  "total_series": 1,
  "truncated": false
}
```
