Exchange Rates Scraper: ECB Official Rates avatar

Exchange Rates Scraper: ECB Official Rates

Pricing

from $0.50 / 1,000 rates

Go to Apify Store
Exchange Rates Scraper: ECB Official Rates

Exchange Rates Scraper: ECB Official Rates

Official European Central Bank reference rates for 30 currencies: latest, any historical date, or a full time series. The figure European accounting and tax rules cite. Weekends and holidays are flagged rather than silently filled. No key, no quota.

Pricing

from $0.50 / 1,000 rates

Rating

0.0

(0)

Developer

Daniel Meshulam

Daniel Meshulam

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Official European Central Bank reference rates. Latest, any historical date, or a full time series.

{ "mode": "latest", "baseCurrency": "USD", "targetCurrencies": ["EUR", "ILS", "GBP"] }

No key. No quota. No attribution string buried in the response.

Why ECB rates and not a "free FX API"

There are a dozen free FX services and they mostly aggregate from unnamed sources. ECB reference rates are published by a central bank, once per working day around 16:00 CET, and they are the figure European accounting and tax rules actually cite. If a number has to survive an audit, provenance is the feature.

Every row says so: source: "ECB reference rate".

The weekend problem, handled properly

The ECB publishes on working days only. Ask most FX APIs for a Sunday and they hand back Friday's number stamped with Sunday's date. That is a quiet fabrication, and it compounds when you build a time series out of it.

Here, date is always the date the ECB actually published. When that differs from what you asked for, the row says so:

{
"date": "2026-01-16",
"requestedDate": "2026-01-18",
"currency": "ILS",
"rate": 3.61,
"note": "no rate published on the requested date (weekend or holiday); this is the previous working day"
}

You can still use it. You just are not misled about what it is.

Three modes

{ "mode": "latest", "baseCurrency": "EUR" }
{ "mode": "range", "startDate": "2026-01-01", "endDate": "2026-06-30",
"baseCurrency": "USD", "targetCurrencies": ["ILS"] }
{ "mode": "dates", "specificDates": ["2026-01-15", "2026-04-01"],
"baseCurrency": "USD" }

Leave targetCurrencies empty for all 30 currencies the ECB publishes.

Use cases

  • Invoicing and accounting: the rate on the invoice date, from a citable source
  • Multi-currency reporting: one row per date and currency, ready to join
  • Backtesting: a full daily series in one run
  • E-commerce pricing: scheduled daily refresh of your conversion table
  • Expense and travel tools: historical rate on the transaction date

Pricing

Charged per rate returned. A date the ECB never published for, or a currency it does not track, produces an error row and costs $0.00.

Three modes, and which one you want

Backed by the ECB's official daily reference rates, served through Frankfurter. No key, no quota, no sign-up.

modeReturnsUse it for
latesttoday's rate for each target currencya dashboard, an invoice, a price list
rangeevery working day between startDate and endDatecharting a currency pair, backtesting
datesonly the specific dates in specificDatesconverting a list of historical transactions

dates is the one people build badly by hand. Accounting exports carry a transaction date each, and looking up one rate per date sequentially is a request per row; this batches them.

All 30 currencies: EUR, USD, GBP, JPY, CHF, AUD, CAD, NZD, SEK, NOK, DKK, PLN, CZK, HUF, RON, TRY, ILS, INR, IDR, KRW, CNY, HKD, SGD, MYR, PHP, THB, ZAR, BRL, MXN, ISK.

BGN is not in that list any more: Bulgaria adopted the euro, so the ECB stopped publishing a lev reference rate.

History runs back to 1999, when the ECB series begins.

Set baseCurrency to anything in the list. The ECB quotes against EUR and any other base is computed by exact division rather than a lossy round trip, so a USD base is as accurate as a EUR one.

Notes

  • Daily reference rates, not tick data. The ECB publishes once per working day around 16:00 CET. Do not price a live trade off this; that is not what these rates are.
  • The ECB quotes against EUR. Any other base is computed by exact division server-side, so a USD base is not a lossy round trip.
  • Coverage is the ~30 currencies in the ECB reference set, with history back to 1999.

FAQ

Do I need an API key or have I got a request quota?

No key, no quota. The ECB publishes its reference rates openly.

Which exchange rate should I use on an invoice?

For anything inside the EU, the ECB reference rate for the invoice date is the figure European accounting and tax rules cite. That provenance is the reason to use this rather than a free FX aggregator that does not name its source. Every row carries source: "ECB reference rate".

What happens if I ask for a weekend or a holiday?

You get the previous working day's rate, and the row tells you so: date is when the ECB actually published, requestedDate is what you asked for, and note explains the difference. Most FX APIs hand back Friday's number stamped with Sunday's date, which is a quiet fabrication that compounds across a time series.

Can I get a full historical series in one run?

Yes. mode: "range" with startDate and endDate returns one row per date and currency. History goes back to 1999.

Can I use a base currency other than EUR?

Yes. The ECB quotes against EUR, and any other base is computed by exact division server-side, so a USD base is not a lossy round trip through two roundings.

Which currencies are covered?

The roughly 30 currencies in the ECB reference set. Leave targetCurrencies empty to get all of them.

Can I use this for live trading?

No. These are daily reference rates published once per working day around 16:00 CET, not tick data. Do not price a live trade off them. That is not what they are.

How do I keep an e-commerce conversion table current?

Schedule mode: "latest" daily, shortly after 16:00 CET. That is when the day's rates land.