Live exchange rates in Excel with Power Query
Pull live FX rates into Excel with a Power Query M query against exchangerate.dev. Works on Mac and Windows, no add-in. Free tier: 10,000 calls a month, no card.
The cleanest way to get live exchange rates into Excel is a Power Query M query that calls /v1/latest/USD and loads the rates onto a worksheet. It refreshes on workbook open or a manual click, runs the same on Mac and Windows, and needs no add-in. A free key covers 10,000 calls a month. This is the live-data feed an FX-linked financial model wants — DCF inputs, hedging sheets, a multi-currency P&L that updates when you open it.
WEBSERVICE(), which is Windows-only and breaks on Mac./v1/latest/{base} returns every rate; split the base URL from RelativePath so scheduled refresh keeps working.Authorization: Bearer exr_live_..., or X-API-Key if a connector cannot set the Authorization header.Get a free API key
Sign up at exchangerate.dev/signup. After email confirmation your dashboard shows a key starting with exr_live_. Copy it — you will paste it into the query as a parameter. The free tier is 10,000 calls a month, no card required.
Open the Power Query editor
From the Excel ribbon, click Data → Get Data → Launch Power Query Editor. Inside the editor, click Home → New Source → Blank Query, then View → Advanced Editor. You will paste the M query into that box in the next step.
Paste the M query
Replace the editor contents with the query below and click Done, then rename the query FxRates in the right rail. The RelativePath argument is not optional — without it, scheduled refresh in Microsoft 365 fails with a credentials error.
Load to a worksheet, choose Anonymous
Click Home → Close & Load. Excel drops a two-column table — currency and rate — onto a new sheet. On first run Excel asks how to authenticate the https://api.exchangerate.dev source: choose Anonymous. Your key travels in the header, not the URL, so Anonymous is correct. Press Ctrl+Alt+F5 any time to refresh.
Switch the base or filter to a few pairs
Change the Base to re-base every rate, or add a symbols query to return only the pairs you need — fewer rows, same single call:
llms.txt, so Claude, Cursor, or ChatGPT can read the live schema and write this query for you. Ask it: "write an Excel Power Query M query that pulls USD rates from exchangerate.dev with my key in the Authorization header, using RelativePath so refresh works." See the MCP guide.Refresh and free-tier fit
Excel does not poll on its own. The table refreshes when you open the workbook, click Refresh All, or set a periodic refresh under Data → Queries & Connections → Properties. The math stays well inside the free tier:
- 10,000 calls a month, 12 requests a minute, no card
- A typical model fires a handful of calls a day (open + a few manual refreshes)
- Even a 5-minute auto-refresh during market hours lands near 100 calls a day
- Covers
/v1/latest,/v1/convert,/v1/range, and/v1/{date}/{base}
notice field.