# Currency Exchange Rates API (ECB, no key) (`mangudai/currency-exchange-rates`) Actor

Live and historical foreign exchange rates from the European Central Bank feed. Get the latest rates, rates on any date back to 1999, daily time series, and currency conversion. Any base currency, no API key, no sign up.

- **URL**: https://apify.com/mangudai/currency-exchange-rates.md
- **Developed by:** [Mangudäi](https://apify.com/mangudai) (community)
- **Categories:** Open source, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 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.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Currency exchange rates API (ECB, no key)

Live and historical foreign exchange rates, straight from the European Central Bank. Get the latest rates, rates on any date back to 1999, a daily time series across a range, or a straight amount conversion. Pick any base currency. No API key, no sign up, no rate limit to trip over.

The data comes from the ECB euro foreign exchange reference rates, the same feed central banks and accountants use. The ECB publishes it on every TARGET working day, so the source stays put and the actor needs no upkeep.

### What it does

Four modes, one actor:

- Latest rates. The newest published rates, quoted against the base currency you choose.
- Rates on a date. The rates for any single day. If markets were closed that day, you get the nearest earlier working day.
- Time series. Daily rates across a start and end date, for the currencies you pick.
- Convert an amount. Turn a number in one currency into another, at the latest rate or a past one.

Rates for a non-euro base are worked out as cross rates from the euro figures, so USD to JPY, GBP to CHF, and any other pair all come out correctly.

### Input

Set these in the input form or pass them as JSON.

- `mode`: `latest`, `historical`, `timeseries`, or `convert`. Default `latest`.
- `base`: three letter code the rates are quoted against, such as `EUR`, `USD`, `GBP`. Default `EUR`.
- `symbols`: the currencies to return. Leave empty for every currency in the feed.
- `date`: the day to price, format `YYYY-MM-DD`. Used by `historical` and by `convert` for a past rate.
- `startDate`, `endDate`: the range for `timeseries`. Leave `endDate` empty to run through today.
- `convertFrom`, `convertTo`, `amount`: the pair and size for `convert`.

Example, the latest euro rates for a handful of currencies:

```json
{
  "mode": "latest",
  "base": "EUR",
  "symbols": ["USD", "GBP", "JPY", "CHF"]
}
````

Example, convert 250 US dollars to yen at today's rate:

```json
{
  "mode": "convert",
  "convertFrom": "USD",
  "convertTo": "JPY",
  "amount": 250
}
```

### Output

Each dataset row is one rate:

```json
{ "date": "2026-07-08", "base": "EUR", "currency": "USD", "rate": 1.1404 }
```

Convert rows add the amount and the result:

```json
{ "date": "2026-07-08", "base": "USD", "currency": "JPY", "amount": 250, "rate": 162.48685, "result": 40621.71 }
```

### Currencies

The feed carries the euro plus about 30 major currencies, including USD, GBP, JPY, CHF, CAD, AUD, NZD, CNY, HKD, SGD, SEK, NOK, DKK, PLN, CZK, HUF, RON, BGN, ISK, ILS, INR, KRW, MXN, BRL, ZAR, TRY, MYR, IDR, PHP, and THB. History runs back to 4 January 1999.

### Notes

The ECB posts one set of reference rates per working day, around 16:00 CET, and does not publish on weekends or TARGET holidays. There is no intraday or tick data here, and these are reference rates rather than tradable quotes. For accounting, reporting, and analytics that is exactly what you want.

### License

Open source under the MIT license. The source files ship with the actor.

# Actor input Schema

## `mode` (type: `string`):

latest: newest published rates. historical: rates on one date. timeseries: daily rates across a range. convert: turn an amount into another currency.

## `base` (type: `string`):

Three letter code the rates are quoted against, for example EUR, USD, GBP. Used by latest, historical, and timeseries.

## `symbols` (type: `array`):

Currencies to return, one per line. Leave empty to get every currency in the feed. Used by latest, historical, and timeseries.

## `date` (type: `string`):

The day to price. If markets were closed that day, the nearest earlier working day is used. Used by historical, and by convert when you want a past rate.

## `startDate` (type: `string`):

First day of the range. Used by timeseries.

## `endDate` (type: `string`):

Last day of the range. Leave empty to run through today. Used by timeseries.

## `convertFrom` (type: `string`):

Currency you are converting out of. Used by convert.

## `convertTo` (type: `string`):

Currency you are converting into. Used by convert.

## `amount` (type: `integer`):

How much of the from currency to convert. Used by convert.

## Actor input object example

```json
{
  "mode": "latest",
  "base": "EUR",
  "symbols": [
    "USD",
    "GBP",
    "JPY",
    "CHF",
    "CAD",
    "AUD",
    "CNY"
  ],
  "date": "2015-06-01",
  "startDate": "2024-01-01",
  "endDate": "2024-03-31",
  "convertFrom": "USD",
  "convertTo": "EUR",
  "amount": 100
}
```

# Actor output Schema

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

Each dataset item is one rate: the date it applies to, the base currency, the target currency, and the rate. Convert rows also carry the input amount and the converted result.

# 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 = {
    "symbols": [
        "USD",
        "GBP",
        "JPY",
        "CHF",
        "CAD",
        "AUD",
        "CNY"
    ],
    "date": "2015-06-01",
    "startDate": "2024-01-01",
    "endDate": "2024-03-31"
};

// Run the Actor and wait for it to finish
const run = await client.actor("mangudai/currency-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 = {
    "symbols": [
        "USD",
        "GBP",
        "JPY",
        "CHF",
        "CAD",
        "AUD",
        "CNY",
    ],
    "date": "2015-06-01",
    "startDate": "2024-01-01",
    "endDate": "2024-03-31",
}

# Run the Actor and wait for it to finish
run = client.actor("mangudai/currency-exchange-rates").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "symbols": [
    "USD",
    "GBP",
    "JPY",
    "CHF",
    "CAD",
    "AUD",
    "CNY"
  ],
  "date": "2015-06-01",
  "startDate": "2024-01-01",
  "endDate": "2024-03-31"
}' |
apify call mangudai/currency-exchange-rates --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=mangudai/currency-exchange-rates",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Currency Exchange Rates API (ECB, no key)",
        "description": "Live and historical foreign exchange rates from the European Central Bank feed. Get the latest rates, rates on any date back to 1999, daily time series, and currency conversion. Any base currency, no API key, no sign up.",
        "version": "0.0",
        "x-build-id": "kDRAS1H4Qv29za6a3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/mangudai~currency-exchange-rates/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-mangudai-currency-exchange-rates",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/mangudai~currency-exchange-rates/runs": {
            "post": {
                "operationId": "runs-sync-mangudai-currency-exchange-rates",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/mangudai~currency-exchange-rates/run-sync": {
            "post": {
                "operationId": "run-sync-mangudai-currency-exchange-rates",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "What to do",
                        "enum": [
                            "latest",
                            "historical",
                            "timeseries",
                            "convert"
                        ],
                        "type": "string",
                        "description": "latest: newest published rates. historical: rates on one date. timeseries: daily rates across a range. convert: turn an amount into another currency.",
                        "default": "latest"
                    },
                    "base": {
                        "title": "Base currency",
                        "type": "string",
                        "description": "Three letter code the rates are quoted against, for example EUR, USD, GBP. Used by latest, historical, and timeseries.",
                        "default": "EUR"
                    },
                    "symbols": {
                        "title": "Target currencies",
                        "type": "array",
                        "description": "Currencies to return, one per line. Leave empty to get every currency in the feed. Used by latest, historical, and timeseries.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "date": {
                        "title": "Date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "The day to price. If markets were closed that day, the nearest earlier working day is used. Used by historical, and by convert when you want a past rate."
                    },
                    "startDate": {
                        "title": "Start date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "First day of the range. Used by timeseries."
                    },
                    "endDate": {
                        "title": "End date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Last day of the range. Leave empty to run through today. Used by timeseries."
                    },
                    "convertFrom": {
                        "title": "Convert from",
                        "type": "string",
                        "description": "Currency you are converting out of. Used by convert.",
                        "default": "USD"
                    },
                    "convertTo": {
                        "title": "Convert to",
                        "type": "string",
                        "description": "Currency you are converting into. Used by convert.",
                        "default": "EUR"
                    },
                    "amount": {
                        "title": "Amount",
                        "type": "integer",
                        "description": "How much of the from currency to convert. Used by convert.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
