Dúvidas ou problemas? Poste no GitHub Discussions.

A resposta do próprio Excel para cotações de câmbio é o tipo de dados Moedas do Microsoft 365: uma cotação combinada, atualizada automaticamente, que você não consegue fixar em uma fonte nem usar para buscar histórico. A combinação do Frankfurter é transparente e, quando a fonte precisa ser exata, você pode fixar uma única autoridade: a taxa de referência do BCE para o IVA da UE, o NBP da Polônia ou a PTAX do Brasil. O histórico de um provedor fixado fica exatamente como foi publicado. O Power Query faz o trabalho no Windows e no Mac. No Windows, há também uma fórmula de uma linha para conversões rápidas.

Power Query

O caminho principal, tanto no Windows quanto no Mac. Vá em Dados, Da Web, cole o endpoint CSV e carregue uma tabela date,base,quote,rate. Atualize quando quiser em Dados, Atualizar Tudo:

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

Peça várias moedas de cotação de uma vez, separadas por vírgula:

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

Converter um valor

O Power Query carrega a cotação, não o total convertido. Multiplique o valor pela célula da cotação carregada. Para uma conversão pontual sem consulta, o Microsoft 365 no Windows pode chamar a API direto na fórmula. Adicione uma função nomeada (Fórmulas, Gerenciador de Nomes, Novo) chamada FRANKFURTER com esta definição:

=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"":"), "}"), "."))

Depois, use em qualquer célula:

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

Passe uma data para obter uma cotação histórica:

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

WEBSERVICE só existe no Windows e, como as fórmulas do Excel não têm parser de JSON, a função lê a cotação direto do texto da resposta. NUMBERVALUE com ponto decimal explícito mantém a função funcionando em configurações regionais que usam vírgula. No Mac, multiplique por uma célula de cotação carregada pelo Power Query.

Fixar uma fonte oficial

Por padrão, você recebe a combinação de todas as fontes. Adicione providers à URL da consulta para fixar uma única autoridade. Isso importa para impostos e contabilidade: muitos países exigem a taxa publicada pelo próprio banco central na conversão de valores em moeda estrangeira.

https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur&providers=ecb
ECB
Taxa de referência do Banco Central Europeu, o padrão para IVA e alfândega na UE.
NBP
Narodowy Bank Polski. Na Polônia, o IVA e o imposto de renda das empresas (CIT) são convertidos pela taxa do NBP.
CNB
Fixing do Banco Nacional Tcheco, usado na contabilidade e nos impostos da República Tcheca.
BCB
PTAX do Banco Central do Brasil, a referência para contratos e tributos no Brasil.
BANXICO
Taxa FIX do Banco de México, usada para liquidar obrigações em dólar americano.

Veja todas as fontes. Uma fonte fixada segue o próprio calendário de publicação, então a cotação mais recente dela pode ficar um dia atrás da cotação combinada mais recente.

Séries históricas

Use from para um intervalo de datas e group=month para condensar tudo em uma linha por mês, pronto para virar gráfico. Carregue pelo Power Query e ele atualiza como qualquer outra consulta. O histórico combinado pode mudar um pouco quando chegam dados novos, então fixe um provedor quando os valores não puderem mudar.

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

Isso traz o dólar americano contra a libra desde 1949, direto do arquivo do Deutsche Bundesbank. Dá para ver a paridade fixa da libra em US$ 2,80 ficar estável por anos até ser rompida em 1967. O histórico mais antigo vem dos fixings do Bundesbank em Frankfurt: o dólar contra o marco desde 1948 e a maioria dos outros pares com o dólar de 1949 a 1970. O Banco Central Europeu assume a partir de 1999, então uma série moderna contínua usa a combinação padrão ou providers=ecb.