Skip to content

Reference

Macro Education

FXMacroData vs Frankfurter: Free ECB Exchange Rate API vs FX Macro Data

A buyer-guide comparison of Frankfurter's free, open-source exchange-rate API and FXMacroData for developers and FX traders: ECB and 104-source rates, blending, the 16:00 CET fixing, limits, self-hosting, licence, and macro-driven FX workflow fit.

Share article X LinkedIn Email
Pip, the FXMacroData robot mascot, uses long tweezers to lift one glowing card out of a glass jar full of mixed rate cards, with a wall clock behind.
Frankfurter serves free official exchange rates from 104 sources; pin the ECB provider for the reference fixing. FXMacroData adds the timestamped macro releases that move the rate.

This comparison is for developers, FX traders, and analysts who have reached for Frankfurter to get exchange rates into code and are now asking whether they also need FXMacroData. Frankfurter is a free, open-source, keyless exchange-rate API. It began as a wrapper around the European Central Bank's daily euro reference rates and has grown into an aggregator of official rates from 104 central banks and official sources. FXMacroData is a paid FX macro data API: official reference rates sit alongside macro releases, calendars, positioning, and yields across 22 currencies.

The core finding: if the job is converting amounts or pulling daily official exchange rates at zero cost, Frankfurter is excellent and hard to beat. FXMacroData does not try to replace it as a 200-currency conversion feed. FXMacroData earns its fee when you need to know why a rate moved: second-level release timestamps on the macro data that drive EUR/USD, a release calendar, central-bank communication, COT positioning, and an MCP server for AI agents, with source-labelled official FX rates in the same API.

Decision snapshot

Choose Frankfurter when

You need free daily exchange rates for currency conversion, invoicing, reporting, or a side project, with no key, no quota, and the option to self-host.

Choose FXMacroData when

You trade or model currency pairs and need the macro drivers: timestamped releases, a release calendar, policy rates, COT, yields, and official FX rates in one schema.

Quick answer

Frankfurter answers "what is the rate?" for free. FXMacroData answers "what moved it, and when?" Always Free for USD data, $50/month Individual for all 22 currencies.

Takeaway: these tools overlap only on daily official FX rates. Many teams can use Frankfurter for conversion and FXMacroData for macro-driven FX research.

Pricing and access

Frankfurter costs nothing. Its homepage says there are no quotas, that requests are rate-limited only to prevent abuse, and that there are no monthly or daily caps. No API key or account is needed: a plain GET to api.frankfurter.dev returns JSON. The project's FAQ says it can be used commercially, while the rates themselves fall under each provider's terms. The code is MIT-licensed on GitHub and ships as a Docker image, so you can run your own instance if you would rather not depend on the public one.

FXMacroData publishes self-serve pricing. The Always Free tier needs no key and covers USD data only, at 100 requests/day, with USD announcements delayed 15 minutes. The Individual plan is $50/month or $500/year with a 14-day trial; it unlocks all 22 currencies, 1,000,000 requests/month, and bursts of up to 300/minute. Business is $250/month or $2,500/year for companies and teams of up to 10 people, with the same request allowance and priority support. Enterprise is by custom agreement. A self-serve Commercial Redistribution add-on costs $10/month per block of up to 100 measured users (or 1,000 public-feed followers).

What it costs to get rates and drivers into code

Frankfurter

Free, no key*

Daily official rates from 104 sources, no quotas, abuse rate-limiting only, MIT-licensed code, and a Docker image for self-hosting.

FXMacroData Always Free

$0

No key, USD data only, 100 requests/day, USD announcements delayed 15 minutes. Useful for testing the schema.

FXMacroData Individual

$50/month

22 currencies, 700+ indicator series, 14-day trial, 1,000,000 requests/month, calendar, FX, COT, yields, and MCP.

Takeaway: for exchange rates alone, Frankfurter's price cannot be beaten. The FXMacroData fee pays for the macro release data, timing, and FX tooling around the rate, not for the rate itself.

* Competitor pricing retrieved from the Frankfurter homepage and documentation in October 2026. No paid tier or API key requirement is described there.

Side-by-side comparison

Attribute FXMacroData Frankfurter
Core job FX macro data API: timestamped macro releases, calendar, official FX reference rates, COT, yields, pair dashboards, and MCP. Free exchange-rate API for conversion and historical rates, built on official central-bank rates.
Entry pricing Individual $50/month or $500/year, 14-day trial; Business $250/month. Free*; no paid tier described.
Free tier Always Free: no key, USD data only, 100 requests/day, USD announcements delayed 15 minutes. The whole API is free*, with no key and no monthly or daily caps.
Coverage 22 currencies, 700+ macro indicator series, official FX reference rates (ECB, Federal Reserve H.10, Norges Bank, Riksbank, and others), COT, bond yields, commodities, press releases. Exchange rates only: 223 currencies from 104 central banks and official sources, per its homepage. No macro indicators.
Release timing Second-level announcement_datetime on every macro release; typically available within seconds of official publication, measured publicly. FX reference rates timestamped per source. Daily rates, dated by day. The ECB publishes its reference rates around 16:00 CET; Frankfurter does not publish a pickup latency figure.
API format REST JSON with OpenAPI, X-API-Key header, SSE streaming for release events, GraphQL, Python and JS SDKs. REST JSON (v2), plus CSV and NDJSON output. v1 is deprecated but remains available.
Rate limits 1,000,000 requests/month on Individual and Business; bursts 300/minute, 5,000/hour, 20 concurrent. No quotas; rate-limited to prevent abuse. Self-hosting removes the shared limit.
History Release history per macro series with source metadata; daily FX history with row-level source labels. Back to 1948 across all sources; ECB reference rates from 4 January 1999.
AI / MCP Official MCP server for Claude, ChatGPT, Cursor, and other clients. No official MCP server in its docs; several community-built MCP servers wrap the API.
Licence for programmatic and commercial use Commercial use on paid plans; redistribution to end users through the self-serve add-on. Commercial use allowed; rates fall under each provider's terms. Code is MIT-licensed.
Best fit FX traders, quant developers, event studies, trading bots, and AI agents that need macro drivers. Apps, e-commerce, accounting, dashboards, and scripts that need free daily conversion rates.

* Competitor pricing retrieved from the Frankfurter homepage and documentation in October 2026.

What Frankfurter actually serves in 2026

Older tutorials describe Frankfurter as "the ECB rates API" at frankfurter.app. That is out of date. The old host now redirects to frankfurter.dev, and the current v2 API aggregates rates from 104 providers. Calling /v2/providers returns each one with its rate type, pivot currency, start date, publish cadence, and a link to the official data page. The ECB is still there, labelled as a reference rate pivoting on the euro, with history from 4 January 1999 and 30 currencies including the euro on the 2 October 2026 fixing. The Federal Reserve's H.10 series appears through FRED, with a weekly publish cadence and daily observations.

The main v2 endpoints are /v2/rates (with base, quotes, date, from/to, group and providers parameters), /v2/rate/{base}/{quote}, /v2/currencies, and /v2/providers/{provider}/rates. The v1 API, with its familiar /v1/latest and date endpoints, is deprecated but remains available indefinitely and still returns ECB rates.

One detail matters for anyone who wants a specific official rate. By default, v2 blends rates across all providers. The documentation says that for compliance work you should filter by a specific provider to get official reference rates.

Same pair, two answers: blended versus ECB-only

/v2/rate/eur/usd (default blend)

Returned a rate of 1.1284 dated 5 October 2026, combining provider rates dated from late September to 5 October.

/v2/providers/ecb/rates?quotes=USD

Returned 1.1225 dated 2 October 2026, the ECB euro reference rate. The v1 /latest endpoint returned the same figure.

FXMacroData approach

/v1/fx/reference-rates/{base}/{quote} returns each official fixing labelled by source (ECB, Fed H.10, and others), so the rate you store is always traceable to one publisher.

Takeaway: Frankfurter can give you the ECB rate exactly, but you have to ask for it with providers=ecb. If an audit or contract names a specific reference rate, pin the provider.

The data itself: ECB EUR/USD reference rate

Both products ultimately serve the same official ECB number for EUR/USD. FXMacroData reads the ECB's euro reference rates directly from the official publication, alongside Federal Reserve H.10 and other central-bank fixings. Here are the last 30 ECB business days, fetched from Frankfurter's ECB provider endpoint.

EUR/USD, ECB euro reference rate (US dollars per euro)

24 August to 2 October 2026, 30 ECB business days. Hover a point for the exact value.

Takeaway: the reference rate fell from 1.1669 on 26 August to 1.1225 on 2 October, a drop of about 3.8%. A daily fixing records that move; it does not say which releases or policy signals drove it.

Source: European Central Bank euro reference rates, retrieved via the Frankfurter API (/v2/providers/ecb/rates) in October 2026.

Release timing: daily fixings versus timestamped releases

The ECB says its euro reference rates are usually updated at around 16:00 CET on every working day except TARGET closing days. They are based on a daily concertation procedure between central banks that normally takes place around 14:10 CET. The ECB also states that the rates are published for information purposes only and that using them for transactions is strongly discouraged. Frankfurter passes those rates on as daily, date-stamped observations. Its documentation says rates update daily but gives no pickup time, and it publishes no latency figure. For conversion, accounting, and reporting, that is all you need.

FX trading around news needs a different clock. A US CPI print or a non-farm payrolls report lands at a specific second, and the pair reacts within moments. FXMacroData stores each macro release with a second-level announcement_datetime. Releases are typically available within seconds of official publication, against a target of one second, and the measured record, including every release that took longer, is published at /release-speed. The release calendar lists what is due next, and SSE streaming pushes release events to a bot as they arrive.

One trading day, two clocks

Morning: macro releases

European data prints at fixed times. FXMacroData records each one with its second-level announcement time.

Around 14:10 CET: concertation

Central banks agree the ECB reference rates. The day's FX moves up to that point are already in the number.

Around 16:00 CET: ECB publishes

The reference rates go out, and Frankfurter serves them as that day's ECB observation.

US afternoon: more releases

US data and Fed events land after the ECB fixing. They show up in the next day's rate; FXMacroData timestamps them as they happen.

Takeaway: a daily fixing is one snapshot a day. Release-driven FX research needs the event time of each driver, which is the clock FXMacroData keeps.

API format and developer ergonomics

Frankfurter is one of the simplest finance APIs to use. There is no key, no signup, and no SDK to install; the v2 responses are flat JSON arrays of date, base, quote, and rate. Appending .csv to a path returns CSV, and an Accept: application/x-ndjson header returns NDJSON for streaming large ranges. The group parameter downsamples a range to weekly or monthly points. The homepage also says the API does not collect or log personal data, IP addresses, or request URLs.

FXMacroData takes an API key in the X-API-Key header and returns flat JSON rows with an OpenAPI description, so the shape is predictable across currencies and indicators. A release row looks like this:

curl -H "X-API-Key: YOUR_API_KEY" "https://api.fxmacrodata.com/v1/announcements/usd/non_farm_payrolls"

Example response (abridged and illustrative; announcement_datetime is epoch seconds, here 4 September 2026 at 12:30:00 UTC):

{
  "currency": "USD",
  "indicator": "non_farm_payrolls",
  "data": [
    {
      "date": "2026-08-31",
      "val": 159015000.0,
      "change": 162000.0,
      "announcement_datetime": 1788525000
    }
  ]
}

The same key reaches /v1/calendar/{ccy} for upcoming releases, /v1/forex/{base}/{quote} for the daily FX series, /v1/fx/reference-rates/{base}/{quote} for source-labelled official fixings, and /v1/cot/{ccy} for CFTC positioning. If your code already calls Frankfurter for conversion, it can call FXMacroData for drivers without changing its HTTP client.

Rate limits, history, and self-hosting

Frankfurter has no quotas, and its rate limiting exists only to prevent abuse. If you need guaranteed throughput, you can run your own instance from the lineofflight/frankfurter Docker image; the deploy guide covers production setup and API key configuration for your own copy. History is deep: back to 1948 across providers, and back to January 1999 for the ECB series. For backtesting conversion rates or building a long FX history cheaply, that depth is a real asset.

FXMacroData's paid plans include 1,000,000 requests a month, with bursts of 300 per minute, 5,000 per hour, and 20 concurrent requests. FXMacroData is a hosted service and cannot be self-hosted. Its history is organised around releases: each macro series keeps its release record with source metadata, and FX rates carry row-level source labels.

Licence for programmatic and commercial use

Frankfurter's FAQ says commercial use is allowed and that the rates themselves fall under each provider's terms. The provider listing links each source's terms page where one exists; the ECB entry, for example, points to the ECB's disclaimer. The software is MIT-licensed. If you redistribute rates, check the terms of the specific providers you rely on.

FXMacroData's paid plans cover commercial use. Showing data to your own users or customers is handled by the self-serve Commercial Redistribution add-on: $10/month per block of up to 100 measured users, or 1,000 public-feed followers, with no sales process.

Where Frankfurter is genuinely stronger

Frankfurter is a well-built public utility, and for its job it is the better choice. It is stronger when you need:

  • free exchange rates with no key, no signup, and no monthly cap;
  • wide currency breadth: 223 currencies from 104 official sources, far beyond FXMacroData's 22;
  • long history, back to 1948 across sources and 1999 for the ECB;
  • open-source code you can audit and self-host with Docker;
  • CSV and NDJSON output for spreadsheets and bulk loads;
  • privacy, with no logging of IP addresses or request URLs, according to the project.

If your app converts prices, reconciles invoices, or shows a currency widget, Frankfurter does the job at zero cost, and FXMacroData would be the wrong purchase.

Where FXMacroData is stronger

FXMacroData's advantage starts where the exchange rate stops. A EUR/USD model needs the drivers: the Fed policy rate and the ECB policy rate, statements from the Federal Reserve and the ECB, inflation and labour data such as US unemployment, CFTC positioning on the COT dashboard, and the bond-yield spread. Frankfurter does not carry any of these.

FXMacroData pros

  • 700+ macro series across 22 currencies in one schema.
  • Second-level release timestamps and a public speed record.
  • Calendar, COT, yields, source-labelled FX rates, SSE, and MCP.

FXMacroData tradeoffs

  • Paid beyond USD data: $50/month Individual.
  • 22 currencies, not 200+; not a conversion feed.
  • Hosted only; no self-hosted option.

Frankfurter pros

  • Free, keyless, no quotas.
  • 223 currencies, 104 official sources, history to 1948.
  • MIT-licensed and self-hostable with Docker.

Frankfurter tradeoffs

  • Exchange rates only; no macro releases or calendar.
  • Daily, date-level observations; no event timestamps.
  • Default v2 rates are blended; pin a provider for an official fixing.

Takeaway: Frankfurter is the stronger free rates utility. FXMacroData is the stronger choice when the rate is the output you are trying to explain, not the input you are converting with.

For AI workflows, FXMacroData's official MCP server lets Claude, ChatGPT, Cursor, and other clients query release rows, calendars, and FX rates directly; the AI trading guide shows how. Trading-platform guides cover MetaTrader, TradingView, and NinjaTrader, and pair dashboards such as USD/JPY, GBP/USD, and AUD/USD put the macro rows next to price.

Explaining a 3.8% EUR/USD drop

The move

Frankfurter's ECB series shows the pair falling from 1.1669 on 26 August to 1.1225 on 2 October.

The releases

FXMacroData lists every US and euro-area print in the window, each with its announcement second, value, and prior.

The policy path

Policy rates, central-bank statements, and the yield spread show how the rate gap shifted.

The positioning

Weekly COT data shows whether speculators were long or short the euro going in.

Takeaway: the rate tells you what happened. The timestamped drivers tell you why, and in what order.

Decision matrix

Your situation Better fit Why
Currency conversion in an app or store Frankfurter Free, keyless, 223 currencies, no quotas.
Accounting or invoices at the ECB reference rate Frankfurter Query providers=ecb for the official fixing at no cost.
Air-gapped or self-hosted rates service Frankfurter MIT-licensed code and a Docker image.
Event study of EUR/USD around CPI or NFP FXMacroData Second-level announcement_datetime on every release.
Automated trading bot reacting to releases FXMacroData Release calendar, SSE streaming, and measured release speed.
AI agent that explains currency moves FXMacroData Official MCP server with macro rows, calendars, COT, and FX rates.
Research desk that converts and explains Both Frankfurter for long-tail conversion; FXMacroData for drivers on the 22 main currencies.

Recommendation

If you need exchange rates for conversion, reporting, or a long free FX history, use Frankfurter. It is free, open source, and well documented, and the v2 provider endpoints let you pin the exact official source you need. Remember that the default v2 rate is a blend, so request providers=ecb when a contract or audit names the ECB reference rate.

If you trade or model currency pairs and need the macro data that moves them, FXMacroData is the better fit. You get second-level release timestamps, a measured speed record at /release-speed, 700+ indicator series across 22 currencies, source-labelled official FX rates, COT, yields, and MCP access in one API. Compare plans at /pricing, read the endpoint reference at /documentation/reference, or start the 14-day Individual trial from the subscribe page.

Bottom line

Frankfurter is a free, open-source rates API for converting money at official rates, and for that job it is the right choice. FXMacroData is the FX macro layer that explains the rate: timestamped releases, calendars, policy, positioning, and official fixings for traders, quants, and AI agents. Use Frankfurter to know the rate; use FXMacroData to know what moved it.

Sources checked

Sources checked (October 2026)

Takeaway: every Frankfurter figure on this page comes from its own homepage, docs, repository, or live API responses, and the ECB timing comes from the ECB.

FXMacroData API data

Data endpoints used in this article

No FXMacroData API data endpoint is attributed to this article. Its evidence base is identified in the article and source links.

Explore the FXMacroData API reference

Frequently asked

Questions about this topic

Is the Frankfurter API free?

Yes. Frankfurter needs no API key or account, and its homepage says there are no quotas: requests are rate-limited only to prevent abuse, with no monthly or daily caps. Its FAQ says commercial use is allowed, with the rates themselves under each provider's terms.

Does Frankfurter still use ECB exchange rates?

Yes, but no longer only the ECB. The v2 API aggregates 104 central banks and official sources and blends them by default. To get the ECB euro reference rate, call /v2/providers/ecb/rates or add providers=ecb. The deprecated v1 API still returns ECB rates.

Why did Frankfurter's default EUR/USD differ from the ECB rate?

Because v2 blends providers by default. When checked in October 2026, /v2/rate/eur/usd returned 1.1284 dated 5 October, while the ECB provider returned 1.1225 for 2 October. Pin the provider when you need a specific official fixing.

When does the ECB publish its euro reference rates?

The ECB says the rates are usually updated at around 16:00 CET on every working day except TARGET closing days, based on a concertation procedure around 14:10 CET. It also says they are for information purposes only and discourages using them for transactions.

Can I self-host Frankfurter?

Yes. The code is MIT-licensed on GitHub and published as the lineofflight/frankfurter Docker image, and the project provides a deploy guide for production setup.

When is FXMacroData the better choice than Frankfurter?

When you need the macro drivers behind a currency move rather than just the rate: second-level announcement timestamps typically available within seconds of publication (measured at /release-speed), a release calendar, 700+ series across 22 currencies, COT, yields, source-labelled official FX rates, and MCP access from $50/month.

Keep reading

Blogroll

AI Answer-Ready

Key Facts

Page
FXMacroData vs Frankfurter: Free ECB Exchange Rate API vs FX Macro Data
Section
Articles
Canonical URL
https://fxmacrodata.com/articles/fxmacrodata-vs-frankfurter-api
Source
FXMacroData editorial and official publisher references
Last Updated
2026-10-05 14:55 UTC

Provenance And Trust

Cite the canonical URL and source field above. Where available, this page maps to official publisher releases and timestamped updates.

Quick Q&A

Is the Frankfurter API free? Yes. Frankfurter needs no API key or account, and its homepage says there are no quotas: requests are rate-limited only to prevent abuse, with no monthly or daily caps. Its FAQ says commercial use is allowed, with the rates themselves under each provider's terms.

Does Frankfurter still use ECB exchange rates? Yes, but no longer only the ECB. The v2 API aggregates 104 central banks and official sources and blends them by default. To get the ECB euro reference rate, call /v2/providers/ecb/rates or add providers=ecb. The deprecated v1 API still returns ECB rates.

Why did Frankfurter's default EUR/USD differ from the ECB rate? Because v2 blends providers by default. When checked in October 2026, /v2/rate/eur/usd returned 1.1284 dated 5 October, while the ECB provider returned 1.1225 for 2 October. Pin the provider when you need a specific official fixing.

When does the ECB publish its euro reference rates? The ECB says the rates are usually updated at around 16:00 CET on every working day except TARGET closing days, based on a concertation procedure around 14:10 CET. It also says they are for information purposes only and discourages using them for transactions.

Prompt Packs

Use these in ChatGPT, Claude, Gemini, Mistral, Perplexity, or Grok for consistent source-aware outputs.

Share page X LinkedIn Email