Tutorial/Power Automate quickstart

Refresh exchange rates in Excel with Power Automate

Build a scheduled Power Automate cloud flow that fetches exchangerate.dev JSON, parses source-aware rates, and appends one row to an Excel table.

ERexchangerate.dev·Sep 29, 2026·7 min read

Use a Scheduled cloud flow → HTTP → Parse JSON → Excel Online (Business) chain. Keep the API host and response fields explicit, store the key as a protected flow value, and write source, market_session, and data_updated_at beside each rate so the workbook does not lose freshness context.

Key points
Create an Excel table named FxRates in OneDrive for Business or SharePoint.
Use a Scheduled cloud flow and one HTTP request for all required symbols.
Parse the JSON envelope before mapping rates into Excel columns.
Keep source, market session, and data_updated_at in the table.
Verify the HTTP action entitlement in your Power Automate tenant; do not assume Free or Microsoft 365 access. Logic Apps has a separate service and billing model.

Prepare the Excel workbook

Create an .xlsx workbook in OneDrive for Business or a SharePoint document library. Add a worksheet table named FxRates with these columns: CheckedAtUtc, Base, EUR, GBP, JPY, EURSource, GBPSource, JPYSource, MarketSession, DataUpdatedAt, EUREffectiveAt, GBPEffectiveAt, and JPYEffectiveAt. Power Automate’s Excel Online (Business) connector writes rows to a named table, not an arbitrary range.

Create the scheduled cloud flow

In Power Automate, choose Create → Scheduled cloud flow. Set the recurrence to the reporting cadence and choose the correct timezone. Add an HTTP action with GET and this URL:

HTTP · GETcopy
https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP,JPY

Authorization: Bearer <value from a protected flow variable>

Keep the key out of the URL. For a production flow, use a secret environment variable or approved connection-reference pattern, and enable secure inputs/outputs on actions that carry the value. The downloadable flow recipe contains the exact action names, Parse JSON schema, and Excel mappings without pretending to be an environment-ready import package.

Parse the response before writing

Add Parse JSON with the HTTP body as its content. Require result, base, rates, sources, effective_at, market_session, and data_updated_at. A successful response has one rates object and a per-currency sources object; do not infer freshness from the flow’s run time.

Parse JSON · minimum schemacopy
{"type":"object","required":["result","base","rates","sources","effective_at","market_session","data_updated_at"],"properties":{"result":{"type":"string","enum":["success"]},"base":{"type":"string"},"rates":{"type":"object","additionalProperties":{"type":"number"}},"sources":{"type":"object","additionalProperties":{"type":"string"}},"effective_at":{"type":"object","additionalProperties":{"type":"string"}},"market_session":{"type":"string"},"data_updated_at":{"type":"string"}}}

Append one row to Excel

Add Excel Online (Business) → Add a row into a table. Select the workbook and FxRates, then map rates.EUR, rates.GBP, and rates.JPY to their rate columns. Map each sources entry, each effective_at entry, and the envelope’s market_session and data_updated_at as well. data_updated_at is the oldest contributing observation for compatibility; use the per-currency effective_at columns when judging an individual rate. Use utcNow() only for CheckedAtUtc; it is when the flow ran, not when the market observation occurred.

One writer per workbook table
Microsoft documents delays of up to 30 seconds for committed Excel connector changes and warns against concurrent modifications from multiple clients. Keep this flow as the writer for FxRates, and do not run overlapping refreshes.

Handle HTTP and Excel failures

Add a failure branch that records the run link and HTTP status in an operations table or sends an internal alert. Do not append a row after Parse JSON fails, and do not replace a missing rate with zero. For 429, respect the response’s retry guidance and reduce the schedule or requested symbols before adding more retries. Set recurrence concurrency to 1 and cap retry attempts. One daily request uses about 30 API requests in a 30-day month; hourly uses 720, before retries. Multiple requested symbols stay in the same request, while Power Automate actions have their own licensing limits.

Verify licensing and connector limits

Microsoft’s Power Automate licensing FAQ says Free and Microsoft 365 plans access standard connectors, while premium connectors require the appropriate Premium or Process context. Check the HTTP action card and your tenant policy in the Power Automate designer before promising that this flow is deployable; this recipe makes no free-plan promise. The Excel Online (Business) reference documents throttling, 25 MB workbook size, and concurrency limitations. Azure Logic Apps is a separate product with its own hosting and billing model; its pricing does not determine Power Automate entitlement.

Indicative rates only
These values support reporting, planning, estimates, and analytics. They are not executable quotes and must not settle a regulated transaction.
ER
exchangerate.dev
Integration guides for developers building with FX data.

Keep reading

TutorialLive exchange rates in Excel with Power QueryRead ReferenceHistorical exchange rate APIRead TutorialGet exchange rates in n8nRead
More ComparisonsFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.devWise vs exchangerate.devCurrencylayer vs ExchangeRate-API
LearnReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
Live RatesEUR/USDGBP/USDUSD/JPY