ECB Currency Exchange Rates Scraper, Daily and Historical FX
Pricing
from $5.00 / 1,000 results
ECB Currency Exchange Rates Scraper, Daily and Historical FX
Get daily and historical foreign exchange rates from ECB reference feeds, filtered by base currency, target currencies and date range, priced per result.
What does ECB Currency Exchange Rates Scraper do?
It returns daily and historical foreign exchange rates published by the European Central Bank (via the open Frankfurter API), one record per date and currency pair. Each record has the rate, the inverse rate, the previous business day rate and the percent change. Filter by base currency, target currencies and date range so runs stay small. Pricing is per result.
Data source
Public JSON from the Frankfurter API (api.frankfurter.dev), which republishes ECB euro foreign exchange reference rates and other central bank feeds; rates update once per business day around 16:00 CET.
Why use it?
- Convert invoices, prices or ledgers at the official rate for a given day.
- Feed a dashboard or spreadsheet with a daily FX series through a Schedule.
- Backtest or research currency moves with a clean, deduplicated history.
- Replace manual downloads of ECB files and stale exports.
How to use it
- Open the Actor and set the filters.
- Click Start. Download results as JSON, CSV or Excel, or read them through the API.
- Add a Schedule and an Integration (Slack, Google Sheets, webhook) to get new records automatically.
Input
| Field | Description |
|---|---|
baseCurrency | ISO code to convert from. Default EUR. |
targetCurrencies | List of ISO codes to return. Empty returns every available currency. |
dateFrom | First day, YYYY-MM-DD. Empty means 14 days before dateTo. |
dateTo | Last day, YYYY-MM-DD. Empty means today (latest published rate). |
maxResults | Hard stop for the run. You are billed per result, so this caps the cost. |
proxyConfiguration | Apify proxy is optional, the API does not need it. |
Example input:
{ "baseCurrency": "EUR", "targetCurrencies": ["USD", "GBP", "JPY"], "dateFrom": "2026-09-01", "dateTo": "2026-09-30" }
Output
Every record has the same shape:
{"id": "2026-10-13:EUR:AUD","date": "2026-10-13","base": "EUR","quote": "AUD","pair": "EUR/AUD","rate": 1.6033,"inverseRate": 0.62371359,"previousDate": "2026-10-12","previousRate": 1.6032,"changePct": 0.0062,"source": "Frankfurter (ECB reference rates)","scrapedAt": "2026-10-14T08:26:12.461Z"}
| Field | Meaning |
|---|---|
id | Stable key (date:base:quote), safe for deduplication between runs |
rate | Units of quote per one unit of base |
inverseRate | Units of base per one unit of quote |
previousRate, previousDate | Rate on the prior business day in the data |
changePct | Percent change versus previousRate |
Pricing
Pay per event: a small fee when a run starts, then a fixed price per result returned. You only pay for records that pass your filters. Set maxResults to cap any run.
Limitations
- Business days only. Weekends and ECB holidays have no rate.
- Roughly 30 currencies are published, and history starts in 1999 for most of them.
- Reference rates, not tradable bid or ask quotes.
FAQ
Is this legal? The Actor reads public data the source publishes for any visitor without a login. You are responsible for how you use the data.
Something is missing or broken? Open an issue in the Issues tab; response time is usually under a day.