/ writing / finance

Free FX data that won't get you rate-limited or sued

2026-07-27 · cynix · 3 min read

Most "free FX API" services are a funnel: free tier, key required, 100 requests a month, then a sales email. Meanwhile the European Central Bank publishes daily reference rates for ~30 currencies — free, keyless, and explicitly redistributable. For invoices, dashboards, backtests, and reporting, it's all you need.

The catch was never the data, it was the plumbing: parsing feeds, handling weekends and ECB holidays, building timeseries, doing cross-rate conversion through EUR. FX Rates & History packages that plumbing as an actor with four modes:

// latest rates
{ "mode": "latest", "base": "USD", "symbols": ["EUR","GBP","JPY"] }

// one historical date
{ "mode": "historical", "date": "2020-03-16", "base": "EUR" }

// a full timeseries (one record per currency per day)
{ "mode": "timeseries", "base": "EUR", "symbols": ["USD"],
  "startDate": "2026-01-01", "endDate": "2026-06-30" }

// conversion at a given date's rate
{ "mode": "convert", "amount": 2500, "base": "USD", "symbols": ["EUR"] }

Output is one flat record per rate — base, currency, rate, date, fetchedAt — which means it drops straight into a spreadsheet, a Postgres table, or a pandas DataFrame with zero reshaping. Schedule it daily and you have an FX warehouse that maintains itself.

When this is enough (and when it isn't)

ECB reference rates are daily fixings — one value per currency per business day. Perfect for accounting, invoicing, analytics, unit-price normalization, and historical backtesting at daily resolution. Not for intraday trading — if you need tick data you're in paid-feed territory and you know it.

The honest pitch: for the 90% of products that just need "what was EUR/USD on the 14th?", this is the cheapest reliable answer that exists.

Try it: FX Rates & History on Apify — keyless, typed, schedulable.