Comparison/Alternatives

Open Exchange Rates alternatives, once the free plan hits USD-only

The free Open Exchange Rates plan gives you 1,000 requests a month, but every one of them is priced in USD. No conversion endpoint, no time series, no other base currency, until you pay $12 a month or more. Here is what that actually costs you, and four other places to look.

ERexchangerate.dev·Aug 1, 2026·7 min read

You can still build EUR/GBP or any other cross from a USD-base free plan. Fetch the USD rates, divide one by the other, and you have your cross. It works. It also means an extra request field to track, an extra division in your code, and a small compounding rounding error on the third decimal that most invoicing use cases will never notice and some reconciliation jobs will.

Key points
Open Exchange Rates free tier: 1,000 requests/month, USD base only, no conversion endpoint, no time series.
Cross rates from a USD base are computable by hand — divide two USD quotes — but paid plans start at $12/month for native base switching.
Frankfurter is free with no key and no quota, but ECB-only: one fix a day, nothing on weekends.
ExchangeRate-API open access needs no key either, but updates once daily and requires visible attribution.
Fixer free tier is EUR-only and caps at 100 calls a month, tighter than Open Exchange Rates on both axes.
Limits above were checked in August 2026 and vendors change them without much notice — verify before you build against a number here.

Where the free plan stops

Open Exchange Rates gives free-tier accounts 1,000 requests a month with hourly rate updates and daily historical data. The catch: every response comes back priced against USD, with no way to change that on the free plan. Ask for base=EUR and the API ignores it or errors, depending on the endpoint.

The free tier also excludes /convert and the time-series call entirely. Both are gated to paid plans, which start at $12 a month and unlock the base parameter outright, plus conversion and time series, for any number of base currencies at no extra charge.

The USD-base workaround, honestly

If you are stuck on the free plan and need a EUR/GBP rate, you do not need to pay yet. Every currency in the response is quoted against USD, so EUR/GBP is just rates.GBP / rates.EUR — you do the division the API would otherwise do for you.

python · deriving a cross rate from a USD-base free responsecopy
import requests

resp = requests.get(
    "https://openexchangerates.org/api/latest.json",
    params={"app_id": "YOUR_FREE_APP_ID"},
).json()

usd_rates = resp["rates"]

# EUR/GBP is not in the response directly — derive it
eur_gbp = usd_rates["GBP"] / usd_rates["EUR"]
print(eur_gbp)

Two things to budget for. Code: every non-USD pair now needs a division step and a guard against a missing or zero value. Rounding: dividing two already-rounded USD quotes introduces a small compounding error versus a rate fetched directly against that base — invisible for a dashboard, not for a reconciliation job checking figures to the fourth decimal.

What you cannot work around
Time series and /convert have no clean do-it-yourself substitute the way base currency does. Time series means looping a historical endpoint call per day, burning through the 1,000-request budget fast — a harder wall than the base-currency one.

Four places to look instead

Frankfurter — free, open-source, no key, ECB only

Frankfurter wraps European Central Bank reference rates in a JSON API. No API key, no enforced quota, and it is open source. The trade-off is the data: ECB rates publish once per business day, around 16:00 CET, with no weekend data at all. If a once-daily fix on business days covers your use case, Frankfurter costs nothing and needs no signup.

ExchangeRate-API open access — free, no key, daily update

ExchangeRate-API runs a genuinely keyless endpoint at open.er-api.com. No signup, no API key. It updates once a day, the same freshness bucket as Frankfurter. Two conditions attach: visible attribution ("Rates By Exchange Rate API" linking to exchangerate-api.com) and no redistributing the raw data, though caching it is fine. Exceeding the limit returns an HTTP 429 that clears after 20 minutes; a keyed free tier above open access gives 1,500 requests a month.

Fixer — free, keyed, EUR-only, 100 calls

Fixer requires a key even on its free plan, and that plan is EUR-based only — every other base currency, plus conversion, is gated to the Basic tier and above. The quota is 100 calls a month, tighter than Open Exchange Rates by an order of magnitude. The free plan does include hourly updates, SSL, and full historical data.

exchangerate.dev — free, keyed, any base, intraday

The free tier here runs 465 pairs at 10,000 calls a month, 12 requests a minute, no credit card. There is no base-currency restriction on any tier — EUR base and USD base cost the same nothing — and full daily history back to 1999 is included free. Major pairs update roughly every 60 seconds on trading days; the rest are backed by ECB or FRED daily reference rates. Anonymous, keyless calls work too for quick evaluation, capped per IP.

bash · a keyless evaluation callcopy
curl "https://api.exchangerate.dev/v1/latest/EUR?symbols=USD,GBP,JPY"

# {
#   "base": "EUR",
#   "rates": { "USD": 1.0821, "GBP": 0.8547, "JPY": 162.4 },
#   "source": "live",
#   "market_session": "open",
#   "timestamp": "...",
#   "data_updated_at": "...",
#   "notice": "..."
# }
PlanFree quotaBase currency on free
Open Exchange Rates1,000 req/monthUSD only — cross rates must be derived
FrankfurterNo enforced quotaAny base, ECB-daily only, no weekend data
exchangerate.dev10,000 calls/month, 465 pairsAny base on every tier, no restriction

Matching the plan to the job

A batch job that only needs a Monday-through-Friday closing rate has three free, no-signup options: Frankfurter, ExchangeRate-API open access, or the USD workaround above. A project that needs a Saturday rate, or the base parameter to just work, has to look past the ECB-only sources. Quoting live prices through the trading day needs a source that updates intraday.

The USD-base workaround is not a bug you have to route around forever — it is a division you can ship today and revisit once the rounding actually matters.

ER
exchangerate.dev
Comparison guides for developers picking an FX data provider.

Keep reading

GuideComing from Frankfurter? Here is the mappingRead ComparisonHow to compare free exchange-rate APIs in 2026Read ComparisonOpen Exchange Rates vs exchangerate.devRead DocsAPI referenceRead
More ComparisonsFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer 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