# ECB Exchange Rates

> Official euro foreign exchange reference rates, straight from the European Central Bank - the rates tax authorities, auditors and contracts cite. Convert an amount between any two of the currencies the ECB tracks, look up a rate for today or for the day an invoice was raised, pull the whole daily table, chart a rate over time, and read the ECB's own monthly, quarterly and yearly averages for month-end bookkeeping. Rates go back to 1999. No account or API key required.

App · Accounting & Finance · 7 actions. Web page: https://docs.lodol.com/docs/integrations/ecb-exchange-rates

## Actions

### Compare a rate between two dates

See how far a rate has moved between two dates, as a percentage and as a number. The step to put in front of a condition: alert when a currency has moved more than two per cent since a deal was quoted, or since the start of the quarter. No API key required.

**Inputs**

- From (`from_currency`, text): The currency being converted from. Defaults to the euro. Default: `EUR`.
- To (`to_currency`, text): The currency being converted into. Defaults to the US dollar. Default: `USD`.
- Start date (`start_date`, date, required): The earlier date to measure the move from. A weekend or holiday uses the last rate published before it.
- End date (`end_date`, date): Optional. The later date to measure the move to. Defaults to the latest published rate.

**Outputs**

- `change` (number): How much the rate moved in absolute terms.
- `change_percent` (number): How much the rate moved, as a percentage of where it started. Negative when it fell. This is the number to compare against a threshold.
- `direction` (text): Which way the rate moved: up, down or unchanged.
- `from_currency` (text): The source currency's three-letter code, such as USD.
- `from_currency_name` (text): The ECB's name for the source currency, such as US dollar.
- `from_rate` (number): The rate on the earlier date.
- `from_rate_date` (text): The day the earlier rate was published for.
- `summary` (text): The move as a sentence, ready to show someone.
- `to_currency` (text): The target currency's three-letter code, such as USD.
- `to_currency_name` (text): The ECB's name for the target currency, such as US dollar.
- `to_rate` (number): The rate on the later date.
- `to_rate_date` (text): The day the later rate was published for.

**Example output**

```json
{
  "change": -0.0129,
  "change_percent": -1.1,
  "direction": "down",
  "from_currency": "EUR",
  "from_currency_name": "Euro",
  "from_rate": 1.1721,
  "from_rate_date": "2026-01-02",
  "summary": "1 EUR bought 1.1592 USD on 2026-09-11, down 1.1% from 1.1721 on 2026-01-02",
  "to_currency": "USD",
  "to_currency_name": "US dollar",
  "to_rate": 1.1592,
  "to_rate_date": "2026-09-11"
}
```

### Convert an amount

Convert an amount of money from one currency to another at the European Central Bank's official reference rate - the rate tax authorities, auditors and contracts cite. Use the latest published rate, or the one in force on a date you name, which is what an invoice or an expense claim needs. Works between any two of the currencies the ECB publishes, not just to and from the euro. No API key required.

**Inputs**

- Amount (`amount`, number, required): How much to convert, in the 'From' currency.
- From (`from_currency`, text): The currency being converted from. Defaults to the euro. Default: `EUR`.
- To (`to_currency`, text): The currency being converted into. Defaults to the US dollar. Default: `USD`.
- Date (`on_date`, date): Optional. The day to use the rate from. The ECB publishes on weekdays only, so a weekend or a bank holiday uses the last rate published before it - the one still in force. Leave empty for the latest rate.

**Outputs**

- `amount` (number): The amount that was converted.
- `converted_amount` (number): The amount in the 'To' currency, to two decimal places.
- `from_currency` (text): The source currency's three-letter code, such as USD.
- `from_currency_name` (text): The ECB's name for the source currency, such as US dollar.
- `rate` (number): The rate used: how many of the 'To' currency one of the 'From' currency bought.
- `rate_date` (text): The day the rate was published for, as YYYY-MM-DD. Worth reading when a date was asked for: a weekend or holiday answers with the last weekday before it.
- `requested_date` (text): The date that was asked for, or empty when the latest rate was asked for. Compare it with the rate's own date to see whether the ECB published that day.
- `summary` (text): The conversion as a sentence, ready to show someone: '250 USD = 185.07 GBP'.
- `to_currency` (text): The target currency's three-letter code, such as USD.
- `to_currency_name` (text): The ECB's name for the target currency, such as US dollar.

**Example output**

```json
{
  "amount": 250,
  "converted_amount": 185.07,
  "from_currency": "USD",
  "from_currency_name": "US dollar",
  "rate": 0.740295,
  "rate_date": "2026-09-11",
  "requested_date": "",
  "summary": "250 USD = 185.07 GBP",
  "to_currency": "GBP",
  "to_currency_name": "UK pound sterling"
}
```

### Get a rate over time

Get a rate between two currencies across a stretch of time - for a chart, a trend, or a loop over each day. Choose the daily published rate or the ECB's monthly, quarterly or yearly averages. Comes back with the high, the low and the average over the range as well as the rates themselves. With no dates filled in it covers roughly the last month of daily rates, and the range it used is always reported back. No API key required.

**Inputs**

- From (`from_currency`, text): The currency being converted from. Defaults to the euro. Default: `EUR`.
- To (`to_currency`, text): The currency being converted into. Defaults to the US dollar. Default: `USD`.
- Start date (`start_date`, date): Optional. The first day to include. Defaults to a window that suits the chosen rate: about a month back for daily rates, a year for monthly, two years for quarterly and ten for yearly.
- End date (`end_date`, date): Optional. The last day to include. Defaults to today.
- Rate to show (`frequency`, text): Which rate to return for the range. The daily rate is the one the ECB publishes each weekday; the other three are its own averages over each month, quarter or year. One of: `D` (Daily rate), `M` (Monthly average), `Q` (Quarterly average), `A` (Yearly average). Default: `D`.

**Outputs**

- `average` (number): The mean of the rates in the range. For a month's official average, use 'Get an average rate' - the ECB publishes that one itself.
- `count` (number): How many rates came back.
- `end_date` (text): The last period that had a rate.
- `first_rate` (number): The rate at the start of the range.
- `frequency` (text): Which rate was returned: D, M, Q or A.
- `frequency_label` (text): The same thing in words, such as Monthly average.
- `from_currency` (text): The source currency's three-letter code, such as USD.
- `high` (number): The highest rate in the range.
- `high_date` (text): When the highest rate was.
- `last_rate` (number): The rate at the end of the range.
- `low` (number): The lowest rate in the range.
- `low_date` (text): When the lowest rate was.
- `rates` (list): Every rate in the range, oldest first.
- `start_date` (text): The first period that had a rate.
- `to_currency` (text): The target currency's three-letter code, such as USD.

**Example output**

```json
{
  "average": 1.16153,
  "count": 3,
  "end_date": "2026-09-11",
  "first_rate": 1.1638,
  "frequency": "D",
  "frequency_label": "Daily rate",
  "from_currency": "EUR",
  "high": 1.1638,
  "high_date": "2026-09-09",
  "last_rate": 1.1592,
  "low": 1.1592,
  "low_date": "2026-09-11",
  "rates": [
    {
      "date": "2026-09-09",
      "rate": 1.1638
    },
    {
      "date": "2026-09-10",
      "rate": 1.1616
    },
    {
      "date": "2026-09-11",
      "rate": 1.1592
    }
  ],
  "start_date": "2026-09-09",
  "to_currency": "USD"
}
```

### Get an average rate

Get the ECB's own published average rate for a calendar month, quarter or year - the figure month-end bookkeeping, revaluation and tax filings are done at. Pick any date inside the period you want and the step works out which period that is. The ECB publishes a period's average once the period has ended, so this defaults to the last completed one. No API key required.

**Inputs**

- From (`from_currency`, text): The currency being converted from. Defaults to the euro. Default: `EUR`.
- To (`to_currency`, text): The currency being converted into. Defaults to the US dollar. Default: `USD`.
- Average over (`period`, text): Which period to average across. One of: `month` (A calendar month), `quarter` (A calendar quarter), `year` (A calendar year). Default: `month`.
- Any date in the period (`in_date`, date): Optional. Any day inside the month, quarter or year you want - 14 March 2026 means March 2026, or Q1 2026, or 2026. Defaults to the most recently completed period.

**Outputs**

- `average_rate` (number): The ECB's average rate over the period: how many of the 'To' currency one of the 'From' currency bought, on average.
- `from_currency` (text): The source currency's three-letter code, such as USD.
- `from_currency_name` (text): The ECB's name for the source currency, such as US dollar.
- `period` (text): The period averaged, as 2026-08, 2026-Q3 or 2026.
- `period_end` (text): The period's last day, as YYYY-MM-DD.
- `period_label` (text): The same period in words, such as August 2026.
- `period_start` (text): The period's first day, as YYYY-MM-DD.
- `summary` (text): The average as a sentence: '1 EUR = 1.15931 USD on average over August 2026'.
- `to_currency` (text): The target currency's three-letter code, such as USD.
- `to_currency_name` (text): The ECB's name for the target currency, such as US dollar.

**Example output**

```json
{
  "average_rate": 1.15931,
  "from_currency": "EUR",
  "from_currency_name": "Euro",
  "period": "2026-08",
  "period_end": "2026-08-31",
  "period_label": "August 2026",
  "period_start": "2026-08-01",
  "summary": "1 EUR = 1.15931 USD on average over August 2026",
  "to_currency": "USD",
  "to_currency_name": "US dollar"
}
```

### Get an exchange rate

Get the European Central Bank's exchange rate between two currencies, the latest one or the one in force on a date you name. Comes back with the rate both ways round, so you never have to divide one into the other. No API key required.

**Inputs**

- From (`from_currency`, text): The currency being converted from. Defaults to the euro. Default: `EUR`.
- To (`to_currency`, text): The currency being converted into. Defaults to the US dollar. Default: `USD`.
- Date (`on_date`, date): Optional. The day to use the rate from. The ECB publishes on weekdays only, so a weekend or a bank holiday uses the last rate published before it - the one still in force. Leave empty for the latest rate.

**Outputs**

- `from_currency` (text): The source currency's three-letter code, such as USD.
- `from_currency_name` (text): The ECB's name for the source currency, such as US dollar.
- `inverse_rate` (number): The rate the other way round, for when the answer is needed as 'how many euros to the dollar'.
- `rate` (number): How many of the 'To' currency one of the 'From' currency bought.
- `rate_date` (text): The day the rate was published for, as YYYY-MM-DD. Worth reading when a date was asked for: a weekend or holiday answers with the last weekday before it.
- `requested_date` (text): The date that was asked for, or empty when the latest rate was asked for. Compare it with the rate's own date to see whether the ECB published that day.
- `summary` (text): The rate as a sentence: '1 EUR = 1.1592 USD'.
- `to_currency` (text): The target currency's three-letter code, such as USD.
- `to_currency_name` (text): The ECB's name for the target currency, such as US dollar.

**Example output**

```json
{
  "from_currency": "EUR",
  "from_currency_name": "Euro",
  "inverse_rate": 0.862664,
  "rate": 1.1592,
  "rate_date": "2026-09-11",
  "requested_date": "",
  "summary": "1 EUR = 1.1592 USD",
  "to_currency": "USD",
  "to_currency_name": "US dollar"
}
```

### Get every rate for a day

Get the whole table of euro reference rates the ECB published on one day - every currency it tracks, in one step. The rates are how much of each currency one euro bought, exactly as published, which is what makes them citable. For a rate against something other than the euro, use 'Get an exchange rate'. No API key required.

**Inputs**

- Date (`on_date`, date): Optional. The day to use the rate from. The ECB publishes on weekdays only, so a weekend or a bank holiday uses the last rate published before it - the one still in force. Leave empty for the latest rate.

**Outputs**

- `base_currency` (text): Always EUR: every rate here is per one euro.
- `currency_count` (number): How many currencies were published.
- `date` (text): The day these rates were published, as YYYY-MM-DD.
- `rates` (list): One entry per currency, in alphabetical order by code - the shape to loop over or put in a table.
- `rates_by_currency` (object): The same rates keyed by currency code, for looking one up without searching the list.
- `requested_date` (text): The date that was asked for, or empty when the latest rate was asked for. Compare it with the rate's own date to see whether the ECB published that day.

**Example output**

```json
{
  "base_currency": "EUR",
  "currency_count": 3,
  "date": "2026-09-11",
  "rates": [
    {
      "currency": "GBP",
      "currency_name": "UK pound sterling",
      "rate": 0.85815
    },
    {
      "currency": "JPY",
      "currency_name": "Japanese yen",
      "rate": 178.56
    },
    {
      "currency": "USD",
      "currency_name": "US dollar",
      "rate": 1.1592
    }
  ],
  "rates_by_currency": {
    "GBP": 0.85815,
    "JPY": 178.56,
    "USD": 1.1592
  },
  "requested_date": ""
}
```

### List currencies

List every currency the ECB publishes a euro reference rate for right now, with the ECB's own name for each. Takes nothing. Use it to check a currency code before converting, or to give an AI step the list to choose from. No API key required.

**Inputs**: None.

**Outputs**

- `codes` (list): Just the codes, for checking whether one is in the list.
- `count` (number): How many currencies there are, the euro included.
- `currencies` (list): The euro first, then the rest alphabetically by code.
- `date` (text): The publication this list was read from, as YYYY-MM-DD.

**Example output**

```json
{
  "codes": [
    "EUR",
    "GBP",
    "JPY",
    "USD"
  ],
  "count": 4,
  "currencies": [
    {
      "code": "EUR",
      "name": "Euro"
    },
    {
      "code": "GBP",
      "name": "UK pound sterling"
    },
    {
      "code": "JPY",
      "name": "Japanese yen"
    },
    {
      "code": "USD",
      "name": "US dollar"
    }
  ],
  "date": "2026-09-11"
}
```
