Free Exchange Rate API Without Code: n8n, Zapier, Make and Sheets
You do not need to write code to put live currency data into a workflow. A free exchange rate API works in any automation tool that can send an HTTP request with a header. This guide covers n8n, Zapier, Make and Google Sheets, then builds two workflows: converting new Stripe or Shopify orders to a reporting currency in a sheet, and a daily rate digest to Slack.
What you need
- An API key. Create one on the register page. Every request sends it as a header:
Authorization: Bearer YOUR_API_KEY. - One of two endpoints. For one pair,
GET https://allratestoday.com/api/rate?source=GBP&target=USDreturns a flat object,{"rate":1.2634,"source":"mid-market"}, which is easy to map in any tool. For several currencies at once,GET https://allratestoday.com/api/v1/rates?source=USD&target=EUR,GBP,JPY,CADreturns an array and costs one request.
Rates are mid-market, refreshed every 60 seconds on every plan. The free plan is meant for personal use, testing and prototypes. A workflow that runs your business's reporting needs a paid plan; the Small plan is €4.99 a month and allows commercial use. Details are on the pricing page.
n8n: the community node
n8n has a community node, n8n-nodes-allratestoday. In n8n, open Settings → Community Nodes → Install, enter n8n-nodes-allratestoday, and confirm. Then add an AllRatesToday API credential with your key.
The node has two groups of operations:
- Market Rate → Get Rates: live mid-market rates from a source currency to one, several or all currencies.
- Market Rate → Convert: an amount at the live rate, returning both amounts and the rate. Conversion uses the convert endpoint, which is on the Medium plan and above.
- Official Rate → Get Pair and Get Table: the official rate of a named central bank or tax authority, with its own rate date.
The node can also be used as a tool by n8n's AI Agent node.
n8n: the HTTP Request node
If you prefer not to install a community node, the built-in HTTP Request node works too:
- Method GET, URL
https://allratestoday.com/api/v1/rates. - Authentication: Generic Credential Type → Header Auth. Name
Authorization, valueBearer YOUR_API_KEY. - Send Query Parameters:
source=USD,target=EUR,GBP,JPY.
Because the response is an array, n8n outputs one item per currency. Each item has rate, source, target and time fields you can drag into the next node.
Zapier: Webhooks by Zapier
Use Webhooks by Zapier as an action step with the GET event. Webhooks by Zapier is a premium app on Zapier's paid plans at the time of writing.
- URL:
https://allratestoday.com/api/rate - Query String Params:
source= the order currency (mapped from the trigger),target=USD - Headers:
Authorization=Bearer YOUR_API_KEY
The step returns a rate field. Add a Formatter by Zapier → Numbers → Perform Math Operation step to multiply the order total by it. Use /api/rate here rather than the array endpoint, because the flat object maps to a single field without extra steps.
Make: the HTTP module
In Make, add HTTP → Make a request:
- URL:
https://allratestoday.com/api/rate - Method: GET
- Headers:
Authorization=Bearer YOUR_API_KEY - Query String:
sourceandtarget - Parse response: Yes
Make then exposes rate to later modules, where you can use it in a formula such as total * rate. If you call /api/v1/rates with several targets instead, Make parses the array and an Iterator module splits it into bundles, one per currency.
Google Sheets
For a sheet that refreshes on its own, see the guide to currency APIs for Google Sheets. It covers the add-on and the Apps Script options. For the workflows below, Sheets is just the destination: n8n, Zapier or Make append a row with the values they computed.
Workflow 1: new orders in a reporting currency
The goal: every new order lands in a sheet with its original amount and its value in your reporting currency, say USD.
In n8n:
- Trigger. Shopify Trigger on order created, or Stripe Trigger on a successful payment.
- IF node. If the order currency is already USD, skip the conversion branch.
- AllRatesToday node (Market Rate → Get Rates) or HTTP Request to
/api/v1/rates, withsourcemapped to the order currency andtarget=USD. - Google Sheets → Append Row with columns: order id, date, currency, amount, rate, rate time, amount in USD.
Two details matter:
- Stripe amounts are in minor units. A charge of
1999in USD is 19.99. Divide by 100 before converting, except for zero-decimal currencies such as JPY. Shopify'stotal_priceis already in major units. - Store the rate and its time, not just the result. The
timefield shows which one-minute snapshot you used, so anyone can check the row later.
In Zapier or Make, the shape is the same: the Shopify or Stripe trigger, a Filter for orders not in USD, the HTTP step to /api/rate, a math step, then Google Sheets Create Spreadsheet Row (Zapier) or Add a Row (Make).
Each order costs one request. If your accountant asks for a central bank rate for the order date rather than a live rate, swap step 3 for Official Rate → Get Pair in n8n, or for an HTTP call to https://allratestoday.com/api/v1/central-bank/ecb/latest?source=EUR&target=USD, and store the rate_date it returns. The central bank rates API lists 123 central banks and 6 tax authorities.
Workflow 2: a daily rate digest in Slack
The goal: a message in a Slack channel every weekday at 08:00 with the rates your team watches.
In n8n:
- Schedule Trigger, weekdays at 08:00.
- HTTP Request to
/api/v1/rateswithsource=USDandtarget=EUR,GBP,JPY,CAD. One request returns all four. - Aggregate node to collect
targetandratefrom the four items into one item. - Slack → Send Message with text built from the aggregated fields, for example one line per currency.
In Zapier, use Schedule by Zapier as the trigger, then one Webhooks GET step per pair to /api/rate, then Slack → Send Channel Message. That costs one request per pair per day. In Make, use the scheduler on the scenario, one HTTP request to /api/v1/rates, an Iterator and a Text aggregator to build the message, then Slack → Create a Message.
Add yesterday's rate if you want a change column: store each day's values in a sheet and read the previous row before posting.
Errors to handle
- 401: the key is missing or wrong. The body says
"A valid API key is required". Check the header value starts withBearerand a space. - 429: you are over your plan's limit. The response carries
X-Monthly-Limit,X-Monthly-UsedandX-Monthly-Resetsheaders. Rejected requests are not charged.
In n8n, turn on Continue On Fail for the rate step and send failures to a separate Slack message. In Zapier and Make, use the built-in error handling or a router so a failed rate never writes a blank amount to your sheet.
Choosing a tool
| Tool | How it connects | Notes |
|---|---|---|
| n8n | Community node or HTTP Request node | Splits arrays into items; self-hosted or cloud |
| Zapier | Webhooks by Zapier (GET) | Easiest with the flat /api/rate response |
| Make | HTTP Make a request | Iterator handles multi-currency arrays |
| Google Sheets | Add-on or Apps Script | Best as a live sheet, not a workflow step |
If you are still choosing a data source, the free currency API comparison compares the free tiers and their terms.
FAQ
How do I connect the API to Zapier or Make?
Use their HTTP modules. In Zapier that is Webhooks by Zapier with a GET request, and in Make the HTTP Make a request module. Both send the Authorization header and return the rate as fields you can map.
Can I use the free plan for my store's reporting?
The free plan is for personal use, testing and prototypes, and its allowance is one-off. Use it to build and test the workflow. A workflow that runs for a business needs a paid plan, which starts with the Small plan at €4.99 a month and allows commercial use.
How many requests does a daily rate digest use?
One a day if your tool can read a list. The /api/v1/rates endpoint accepts several targets, for example EUR,GBP,JPY,CAD, and returns them in one array for the cost of one request. Tools that cannot loop over a list can call /api/rate once per pair.
Why are my Stripe amounts 100 times too big?
Stripe sends amounts in the smallest currency unit, so 1999 means 19.99 dollars. Divide by 100 before converting. Zero-decimal currencies such as JPY are already whole units, so check the currency first.
Should I use a live rate or an official rate for bookkeeping?
A live mid-market rate shows what an order is worth now. If your accountant or a tax rule names a central bank, use that bank's official rate for the order date instead. The n8n node and the central bank endpoints return it with the bank's own rate date.
Start with a free API key
Mid-market rates for 160+ currencies refreshed every 60 seconds, and official tables from 123 central banks and 6 tax authorities. Works in n8n, Zapier, Make and any tool that can send an HTTP request.
Get a free API key