ECB Exchange Rates – Invoice Currency Converter avatar

ECB Exchange Rates – Invoice Currency Converter

Pricing

Pay per event

Go to Apify Store
ECB Exchange Rates – Invoice Currency Converter

ECB Exchange Rates – Invoice Currency Converter

Convert invoice amounts to EUR (or any ECB currency) with the official ECB euro reference rates for the invoice date. Weekend/holiday fallback flagged, rate day and source URL per row for audit. Batch conversion or daily rate tables. Pay per result row.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Fast Data

Fast Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Features

Limited permissions

Share

ECB Exchange Rates – Invoice Currency Converter (official euro reference rates)

Convert invoice amounts in foreign currencies to EUR (or any other ECB currency) with the official ECB euro foreign exchange reference rates for the invoice date. Every result row tells you which rate day was actually used, whether a weekend / TARGET-holiday fallback was applied, and gives the exact ECB API URL for that rate – so your bookkeeping stays traceable.

Two modes:

  • convert (default): a list of {amount, currency, date} rows → converted amounts, one row per input row
  • rates: daily ECB reference rates for a list of currencies and a date range → one row per currency and fixing day

Price: $0.001 per result row ($1 per 1,000 rows). Error rows (unknown currency, future date, …) are free. No start fee.

Who is it for?

  • Bookkeeping, accounts payable and controlling teams that receive invoices in USD, GBP, CHF, PLN … and need the EUR value at the invoice date
  • Developers and automation builders (n8n, Make, Zapier) who want a batch conversion step with the official ECB rates and no API key
  • AI agents (via MCP) that have to convert amounts reproducibly instead of guessing a rate
  • E-invoice workflows – combine it with our XRechnung & ZUGFeRD parser: take currency, grandTotal and issueDate from the parsed invoice and convert it here

What makes it useful

Data sourceOnly the public ECB Data Portal API, dataset EXR (D.<CUR>.EUR.SP00.A), the daily euro reference rates published by the European Central Bank for about 30 currencies
Exact ECB ratesRates are returned exactly as the ECB publishes them (units of foreign currency per 1 EUR), no markup, no mid-market estimate from another provider
Audit trailrateDate, fallbackUsed, daysShifted, fallbackRule and a sourceUrl that returns exactly the rate used
Weekend / holiday handlingNo ECB rate on weekends and TARGET holidays. fallback: previous (default, last earlier fixing day), next or none (error row)
Cross ratesUSD → GBP, CHF → PLN etc. are calculated via the euro (amount / rate(from) × rate(to)), both rates are returned
BatchHundreds of invoices in one run. One ECB request per currency covers all dates of the run (plus a small in-memory cache)
RoundingconvertedAmount rounded half-up to 2 decimals, convertedAmountUnrounded for your own rounding rules
FastDefault input (3 invoices) finishes in about 5 seconds on 256 MB

Input

FieldTypeDefaultDescription
modeconvert | ratesconvertWhat to do
itemsarray3 sample invoicesconvert mode: {"amount", "currency", "date", "id"?, "targetCurrency"?}; date in ISO format YYYY-MM-DD; amounts as numbers or strings ("1.234,56" and "1,234.56" are accepted)
targetCurrencystringEURconvert mode: currency to convert into (can be overridden per row)
fallbackprevious | next | nonepreviousconvert mode: rule for dates without an ECB rate
currenciesarrayUSD, GBP, CHF, JPY, PLNrates mode: currencies to list
startDate / endDateYYYY-MM-DDlast 30 daysrates mode: date range

Example (convert mode, the default input):

{
"mode": "convert",
"targetCurrency": "EUR",
"fallback": "previous",
"items": [
{ "id": "INV-1001", "amount": 1250.00, "currency": "USD", "date": "2026-11-07" },
{ "id": "INV-1002", "amount": 480.50, "currency": "GBP", "date": "2026-11-05" },
{ "id": "INV-1003", "amount": 2999.90, "currency": "CHF", "date": "2026-10-30" }
]
}

Example (rates mode):

{ "mode": "rates", "currencies": ["USD", "JPY"], "startDate": "2026-11-02", "endDate": "2026-11-10" }

Output

Real result from the default input. 2026-11-07 is a Saturday, so the rate of Friday 2026-11-06 is used and flagged:

{
"id": "INV-1001",
"amount": 1250,
"currency": "USD",
"date": "2026-11-07",
"targetCurrency": "EUR",
"rateDate": "2026-11-06",
"rate": 1.1165,
"targetRateDate": null,
"targetRate": 1,
"crossRate": 0.8956560681,
"convertedAmount": 1119.57,
"convertedAmountUnrounded": 1119.57008509,
"fallbackUsed": true,
"daysShifted": -1,
"fallbackRule": "previous",
"source": "ECB euro foreign exchange reference rates",
"sourceUrl": "https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A?format=csvdata&startPeriod=2026-11-06&endPeriod=2026-11-06",
"targetSourceUrl": null,
"status": "ok",
"error": null
}

The other rows of the same run: 480.50 GBP on 2026-11-05 (rate 0.83393) → 576.19 EUR; 2,999.90 CHF on 2026-10-30 (rate 0.9194) → 3,262.89 EUR, both without fallback.

FieldMeaning
rateECB rate of currency: units of currency per 1 EUR (1 for EUR)
targetRate / targetRateDateSame for targetCurrency (date only for non-EUR targets)
crossRateUnits of targetCurrency per 1 unit of currency
rateDateECB fixing day actually used
fallbackUsed / daysShiftedtrue / negative days if an earlier day was used (positive with fallback: next)
status / errorok, or error with a message: unknown currency, invalid amount, date in the future, date before 1999-01-04 or before the ECB published that currency, no fixing within 10 days

Rates mode rows look like this (real values):

{ "date": "2026-11-02", "currency": "USD", "baseCurrency": "EUR", "rate": 1.1216, "inverseRate": 0.89158345, "source": "ECB euro foreign exchange reference rates", "sourceUrl": "https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A?format=csvdata&startPeriod=2026-11-02&endPeriod=2026-11-02", "status": "ok", "error": null }

inverseRate = EUR per 1 unit of the currency.

Good to know: EUR → EUR returns rate 1 without calling the ECB. The ECB publishes the rates on TARGET working days around 16:00 CET; for today's date before publication the previous fallback uses the last published day. Currencies the ECB no longer publishes (e.g. HRK, BGN) work for the periods in which they were published.

Pricing

Pay per event:

EventPrice
converted-row – one converted amount$0.001
rate-row – one daily rate (rates mode)$0.001

Rows with status: "error" are not charged. Platform usage is minimal (no browser, no proxy).

Usage via API, n8n and MCP

API (synchronous, returns the dataset items):

curl -X POST "https://api.apify.com/v2/acts/fast_data_asap~ecb-exchange-rates-invoice-converter/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"items":[{"amount":100,"currency":"USD","date":"2026-11-06"}]}'

n8n / Make / Zapier: use the Apify integration, actor fast_data_asap/ecb-exchange-rates-invoice-converter, and map your invoice rows to items.

AI agents (MCP): add https://mcp.apify.com?tools=fast_data_asap/ecb-exchange-rates-invoice-converter to Claude, Cursor or any MCP client. The agent can then convert amounts with the official ECB rates and cite rateDate and sourceUrl.

Important notes

  • Source: European Central Bank, euro foreign exchange reference rates (ECB Data Portal). This actor is not affiliated with or endorsed by the ECB.
  • The ECB states that its reference rates are published for information purposes only. Using them for transactions or bookkeeping is your decision.
  • No tax or legal advice. For VAT and other tax purposes, other rates may be required (in Germany, for example, the monthly average rates published by the Federal Ministry of Finance under § 16 (6) UStG). Check with your tax advisor which rate applies to you.
  • The actor only calls the public ECB API with an identifying User-Agent, respects robots.txt, uses no proxies and processes no personal data. Your input amounts are only used to compute the result.