Comparison/Comparison

Hit Fixer's 100-call limit? Here is the rest of the field

Fixer's free plan gives 100 calls a month, locks the base currency to EUR, and leaves out the conversion endpoint until you pay. None of that is hidden in fine print, but it surprises people who only read the headline "free tier" line. Here is what else is out there.

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

Two things catch developers on Fixer's free plan: the call budget runs out fast at 100 calls a month, and every rate comes back based off EUR because "any base currency" only unlocks at the BASIC paid tier and up. There is also no /convert endpoint until then, so converting USD to IDR means fetching EUR-based rates and doing the arithmetic yourself. Below is an honest look at what replaces Fixer, and what each replacement costs you instead.

Key points
Fixer free plan: 100 calls/month, EUR base only, no conversion endpoint until BASIC tier.
Frankfurter has no call cap and no key at all, but only a once-daily ECB rate — no base restriction either, since ECB rates are published against all quoted currencies.
ExchangeRate-API's open-access endpoint is keyless too, once a day, with a mandatory attribution line.
Open Exchange Rates gives 1,000 free calls a month, an improvement over Fixer's 100, but its own free plan is pinned to USD.
exchangerate.host now sits behind an APILayer key at 100 requests/month free — the same ceiling as Fixer, worth knowing so you don't trade one 100-call wall for another.
All limits below were checked in August 2026; providers revise free tiers without notice, so confirm current numbers before you build against them.

The two walls on Fixer's free plan

A hundred calls a month works out to about three a day — fine for testing once, not for a live app checking even one pair daily. That call cap is the wall most people hit first.

The second wall: the free plan quotes everything from EUR. USD-to-IDR means fetching EUR rates for both currencies and dividing, since a non-EUR base and /convert both require the BASIC tier.

Verify before you build on this
Free-tier terms in this space shift often. Every number here was read off the provider's own pricing or docs page in August 2026 — check the current page before writing code against a specific quota.

What replaces a 100-call, EUR-only plan

The right replacement depends on which wall mattered more. Few providers solve both for free.

ProviderFree tierBase currency
Fixer (for reference)100 calls/monthEUR only; any base needs BASIC tier
FrankfurterNo cap, no keyAny currency — ECB rates quote broadly, not locked to one base
ExchangeRate-API (open access)No key, once/day, attribution requiredAny currency
Open Exchange Rates1,000 requests/monthUSD only on free plan
exchangerate.host (APILayer)100 requests/month, key requiredAny currency, but same 100-call ceiling as Fixer

Frankfurter: no cap, no key, once a day

If the call limit is what pushed you off Fixer and a once-daily rate is acceptable, Frankfurter removes the cap entirely. Open-source, no API key, ships its own MCP server at mcp.frankfurter.dev. It wraps ECB reference rates published around 16:00 CET on business days, with no weekend publication — Saturday returns Friday's close. For a report or nightly job that only needs one official rate a day, that closes both of Fixer's gaps at once.

ExchangeRate-API: also keyless, comes with attribution terms

ExchangeRate-API's open-access endpoint at open.er-api.com needs no signup, updating once a day like Frankfurter. The terms differ: show "Rates By Exchange Rate API" with a link back, and do not redistribute the raw response. Exceed the limit and get a 429 that clears in 20 minutes. A keyed tier exists too, at 1,500 requests a month.

Open Exchange Rates: ten times the calls, still one base

Open Exchange Rates raises the ceiling to 1,000 free requests a month, a real step up from Fixer's 100. But the free plan is fixed to USD rather than EUR, and time-series and conversion requests are excluded too. Paid plans start at $12 a month and remove the base restriction entirely.

exchangerate.host: same 100-call ceiling, now behind a key

Worth naming so nobody trades one wall for an identical one: exchangerate.host now runs behind an APILayer key, capped at 100 requests a month on the free plan — the exact number Fixer gives you. Moving from Fixer to exchangerate.host solves the EUR-base problem but not the call-count problem.

Where exchangerate.dev fits

exchangerate.dev's free tier gives 10,000 calls a month at 12 requests a minute, a hundred times Fixer's cap, with no card required to sign up. There is no base-currency restriction on any tier — any of the 465 pairs in the catalog can be queried from either side. Daily history back to 1999 is free on every plan, not gated behind an upgrade.

Major pairs update roughly every 60 seconds through the trading week, backed by ECB and FRED reference data for the rest. Each response includes source, market_session, and a notice field, so code can tell a live rate from a daily fix directly. A /v1/convert endpoint ships free, closing the gap Fixer leaves until BASIC.

curl · exchangerate.dev conversion, USD to IDRcopy
curl "https://api.exchangerate.dev/v1/convert/USD/IDR/250" \
  -H "Authorization: Bearer exr_live_..."

# {
#   "from": "USD",
#   "to": "IDR",
#   "amount": 250,
#   "rate": 16412.3,
#   "converted": 4103075,
#   "derived": false,
#   "source": "live",
#   "market_session": "open",
#   "data_updated_at": "2026-08-01T09:13:58Z",
#   "notice": "Indicative rates for reference and analytics; not a dealing quote."
# }

No EUR intermediate step, no client-side multiplication. derived: false means the pair is quoted directly rather than triangulated through a third currency.

Notes on the actual migration

Swapping providers is rarely a one-line change. Response field names differ — some return rates, others nest the same numbers under quotes or conversion_rates — so a fixed key path can fail silently instead of erroring.

Retry logic matters more at a low call ceiling than a high one. Burning a monthly budget of 100 or 1,000 requests on an unthrottled retry loop after one timeout is a common way to run out of quota by the 10th of the month. Cache responses and treat any reset window as a hard constraint.

Matching the fix to the wall

If the call count was the problem, Frankfurter or ExchangeRate-API's open endpoint remove the cap for nothing. If the EUR base was the problem, Open Exchange Rates solves that gap at 1,000 calls. If both walls matter, that combination is what the keyed alternatives, including exchangerate.dev, are built around.

Indicative rates only
Every provider named here, including exchangerate.dev, publishes rates for reference and analytics. None are a dealing quote and none should settle a trade.
ER
exchangerate.dev
Notes for developers moving off a free tier that stopped fitting the project.

Keep reading

GuideComing from Frankfurter? Here is the mappingRead ComparisonHow to compare free exchange-rate APIs in 2026Read CompareFixer vs exchangerate.devRead PricingPlans and quotasRead
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