Currency Exchange Rates Scraper: ECB Daily & Historical
Pricing
from $1.00 / 1,000 results
Currency Exchange Rates Scraper: ECB Daily & Historical
Currency exchange rates from the free ECB euro reference rates (optional Frankfurter API): latest, a date or a date range, any base currency via EUR cross rates, amount conversion. About 30 currencies, keyless, official sources.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Aadam Ahmed
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Security
Limited permissionsShare
Currency Exchange Rates Scraper: ECB Daily and Historical Rates
Get euro foreign exchange reference rates from the European Central Bank, latest, for one date or a date range, converted to any base currency via EUR cross rates, with optional amount conversion. Free, keyless official source; optional Frankfurter API (ECB-based). One row per date and currency pair.
What you get
Rows of {date, base, quote, rate, amount, converted, source} for about 30 currencies. For a date that has no publication, date is the previous business day actually used and requested_date shows what you asked for.
Use cases
- Convert invoices, prices or reports into a reporting currency at the official ECB reference rate of a given day.
- Pull historical rate series for a base currency (for example USD to EUR, GBP, JPY) for accounting, research or dashboards.
- Give an AI agent a trustworthy, source-labelled exchange rate (callable through Apify's MCP server, https://mcp.apify.com).
- Schedule a daily run to keep a spreadsheet or database of rates current.
What it does
- Primary source,
ecb: reads the ECB's public fileseurofxref-daily.xml(latest),eurofxref-hist-90d.xml(last 90 days) andeurofxref-hist.xml(full history since 4 January 1999) fromhttps://www.ecb.europa.eu/stats/eurofxref/. The ECB's files are euro-based: each rate is units of currency per 1 EUR. - Cross rates: for another base, rate(base to quote) = rate(EUR to quote) / rate(EUR to base). The conversion is calculated here, not published by the ECB, and is rounded to 10 significant digits.
- Optional source,
frankfurter: the free Frankfurter API (https://api.frankfurter.app), which republishes ECB data and converts bases server-side. For long ranges it may return sampled (weekly or monthly) points; see its documentation. - Polite by design: sequential requests at most 1 per second, an identifying User-Agent, retries with exponential backoff on HTTP 429 and 5xx, and clear failure messages. No proxies or workarounds.
Input
| Field | Meaning |
|---|---|
mode | latest (default), date or range |
base | ISO 4217 code to convert from (default EUR) |
targets | Codes to convert to; empty means every currency published that day |
date | Date mode, YYYY-MM-DD (previous business day is used if none was published) |
startDate, endDate | Range mode; empty end date means up to the latest day |
amount | Amount of base currency to convert (default 1) |
source | ecb (default) or frankfurter |
maxRows | Safety cap on rows (default 1,000) |
Example input and output
Input (bundled test-input.json): USD base, targets EUR, GBP and JPY, range 2026-09-01 to 2026-09-05, amount 100.
The record below uses illustrative values only (not a real quote); real rates are whatever the ECB published for that day. Our tests use synthetic files in the ECB XML format.
{"date": "2026-09-01", "requested_date": null, "base": "USD", "quote": "GBP","rate": 0.75, "amount": 100, "converted": 75, "source": "ecb"}
Limitations (read before relying on it)
- Publication schedule: the ECB publishes around 16:00 CET on TARGET business days. There are no rates for weekends and TARGET holidays, so a range returns only business days and a single date falls back to the previous one. Rates for "today" do not exist before the afternoon publication.
- About 30 currencies only. The set is the ECB's and changes over time (some currencies were discontinued). A requested currency that the ECB does not publish makes the run fail with the list of available codes; nothing is estimated.
- The UAE dirham (AED) is not published by the ECB, nor are the other Gulf currencies. This actor does not fake them and does not compute AED from the USD peg; if you need AED, use a source that publishes it.
- Reference rates are for information only, not for transactions or settlement. They are not tradeable, bid/ask or intraday rates, and cross rates are derived. Check the ECB's terms of use for reuse and attribution; this is not financial advice.
- Rounding: rates carry up to 10 significant digits; converted amounts are the rate times the amount, with the same precision.
- Not affiliated with the European Central Bank or Frankfurter.
Pricing (pay per result)
Pay-per-event with Apify's built-in dataset-item event: each row (one date and currency pair) is one result. The live price is set in Apify Console and shown on the Store page. Planning figure in our notes: USD 1.00 per 1,000 results (not yet published).
FAQ
Do I need an API key? No.
Why is the date different from the one I asked for? The ECB did not publish that day (weekend or holiday), so the previous business day is returned; requested_date keeps your date.
Can I get AED, SAR or other Gulf currencies? Not from the ECB. See limitations.
How is USD to GBP calculated? (GBP per EUR) / (USD per EUR) on the same date.
Which source should I use? ecb is the primary and reads the official files. Use frankfurter if you prefer its server-side conversion.