Questions or problems? Post in GitHub Discussions.

Excel's own answer to exchange rates is the Currencies data type in Microsoft 365: a live blended rate you can't pin to a source or pull history from. Frankfurter's blend is inspectable, and when the source has to be exact you can pin one authority: the ECB reference rate for EU VAT, Poland's NBP, or Brazil's PTAX. A pinned provider's history stays as published. Power Query does the work on Windows and Mac. Windows also gets a one-line formula for quick conversions.

Power Query

The main path on both Windows and Mac. Go to Data, From Web, paste the CSV endpoint, and load a date,base,quote,rate table. Refresh it any time with Data, Refresh All:

https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur

Ask for several quotes at once by separating them with commas:

https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur,gbp,jpy

Convert an Amount

Power Query loads the rate, not a converted total. Multiply your amount by the loaded rate cell. For a one-off conversion without a query, Microsoft 365 on Windows can call the API inline. Add a named function (Formulas, Name Manager, New) called FRANKFURTER with this definition:

=LAMBDA(amount, from, to, [date], amount * NUMBERVALUE(TEXTBEFORE(TEXTAFTER(WEBSERVICE("https://api.frankfurter.dev/v2/rate/" & from & "/" & to & IF(ISOMITTED(date), "", "?date=" & YEAR(date) & "-" & TEXT(MONTH(date), "00") & "-" & TEXT(DAY(date), "00"))), """rate"":"), "}"), "."))

Then call it from any cell:

=FRANKFURTER(100, "usd", "eur")

Pass a date for a historical rate:

=FRANKFURTER(100, "usd", "eur", DATE(2020, 1, 2))

WEBSERVICE is Windows-only, and since Excel has no JSON parser in formulas the function reads the rate straight out of the response text. NUMBERVALUE with an explicit decimal point keeps it working in locales that use a comma. On Mac, multiply against a Power Query rate cell instead.

Pin an Official Provider

By default you get the blend across every provider. Add providers to the query URL to pin a single authority. This matters for tax and accounting: many countries require their own central bank's published rate when converting foreign-currency amounts.

https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur&providers=ecb
ECB
European Central Bank reference rate, the standard for EU VAT and customs.
NBP
Narodowy Bank Polski. Polish VAT and CIT convert at the NBP rate.
CNB
Czech National Bank fixing, used for Czech accounting and tax.
BCB
Banco Central do Brasil PTAX, the reference for Brazilian contracts and tax.
BANXICO
Banco de México FIX rate for settling US dollar obligations.

Browse all providers. A pinned provider follows its own publishing schedule, so its latest rate can trail the blended latest by a day.

Historical Series

Use from for a date range and group=month to collapse it to one row per month, ready to chart. Load it through Power Query and it refreshes like any other query. Blended history can shift slightly as new data comes in, so pin a provider when figures must stay fixed.

https://api.frankfurter.dev/v2/rates.csv?from=1949-12-01&base=usd&quotes=gbp&providers=bbk&group=month

That pulls the US dollar against the pound back to 1949 from the Deutsche Bundesbank archive. You can watch the $2.80 cable peg hold flat for years, then break in 1967. Deep history runs through the Bundesbank's Frankfurt fixings: the dollar against the mark from 1948, most other dollar crosses from 1949 to 1970. The European Central Bank takes over from 1999, so a continuous modern series uses the default blend or providers=ecb.