LearnTutorial

Get exchange rates in n8n with the HTTP Request node

Build a small n8n workflow that fetches current FX rates, exposes each rate as an expression, and runs on a schedule. No community node is required.

6 Aug 2026 · 4 min read

The useful n8n setup is only three nodes: a Schedule Trigger, an HTTP Request, and whatever should receive the rates next. Start with an anonymous request so you can see the payload, then add a free API key as a header credential before you activate the workflow. The example below fetches EUR, GBP, and JPY against USD.

  • Use n8n’s built-in HTTP Request node. There is nothing extra to install.
  • A single /v1/latest/USD?symbols=EUR,GBP,JPY request returns all three rates.
  • Read values with expressions such as {{$json.rates.EUR}} and keep the freshness fields beside them.
  • Store the API key in a Header Auth credential instead of typing it into every node.
  • An hourly workflow makes about 720 calls in a 30-day month, well inside the 5,000-call free tier.

Create the three-node workflow

Add Schedule Trigger → HTTP Request → Edit Fields. During setup, Manual Trigger is handy because you can run the flow on demand. Edit Fields is optional, but it gives the next node a tidy set of names instead of the full API payload.

Configure the HTTP Request node

Choose GET, paste the URL below, and set the response format to JSON. The symbols query asks for three currencies in one call. Click Execute step and inspect the output before wiring up the destination.

curl
curl "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP,JPY"

Turn the response into named fields

In Edit Fields, switch each value to Expression and add the fields below. Keep source and data_updated_at; they are what explain a weekend value or a daily-reference currency later.

n8n · expressions
EUR  {{$json.rates.EUR}}GBP  {{$json.rates.GBP}}JPY  {{$json.rates.JPY}}source  {{$json.source}}updated  {{$json.data_updated_at}}

Add the API key as a credential

Create a free key at exchangerate.dev/signup, then add a Header Auth credential in n8n. Use Authorization as the name and Bearer exr_live_your_key_here as the value. Select that credential in the HTTP Request node.

Keep credentials out of workflow exports

n8n credentials are stored separately from node parameters. That matters when you export a workflow JSON or send it to a teammate: the workflow keeps the credential reference, not the secret value.

Choose a schedule that matches the job

For a daily finance sheet, run once a day. For an operational dashboard, hourly is often enough and uses about 720 calls in a 30-day month. Put every needed currency in one symbols list instead of creating one HTTP Request node per currency.

Indicative rates, not a settlement price

Use these values for automations, estimates, reporting, and analytics. Do not use them as an executable dealing quote or to settle a regulated transaction.

Questions

Does n8n need a special exchangerate.dev node?

No. Use the built-in HTTP Request node with a GET request. The response is JSON, so n8n can read its fields directly.

How do I read a rate in an n8n expression?

For a request that returns EUR against USD, use {{$json.rates.EUR}} in the next node. Use the same pattern for any symbol you requested.

Where should I store the API key in n8n?

Create a Header Auth credential with the name Authorization and a value of Bearer followed by your key. Select that credential in the HTTP Request node.

Can I run a daily exchange-rate cron job on the free tier?

Yes. Put every currency in one symbols request. A job that runs once a day uses about 30 calls in a 30-day month; an hourly job uses about 720. Both fit within the 5,000-call free tier.

Keep reading

Start with a free API key

5,000 requests a month on the free plan. No credit card.

Get a free key