Skip to content

Repository files navigation

FXMacroData Python SDK 🐍📊

PyPI VersionPython VersionsLicenseBuild

The FXMacroData Python SDK provides a simple and efficient interface for fetching macroeconomic indicators, forex prices, release calendars, COT positioning, and commodity prices from FXMacroData.

It includes both synchronous and asynchronous clients, and USD macro endpoints work without an API key.


🌟 Features

  • Fetch:
    • Macroeconomic indicators — policy rates, inflation, GDP, unemployment, bond yields, and more: 97 distinct indicators across 656 endpoints
    • FX spot rates with optional technical indicators (SMA, RSI, MACD, Bollinger Bands)
    • Release calendars — upcoming economic data release dates
    • Data catalogue — discover available indicators per currency
    • COT data — CFTC Commitment of Traders positioning
    • Commodity prices — gold, silver, platinum
  • Free access to USD macro data, covering the most recent 90 days. An API key lifts the window to full history.
  • FX spot-rate history through get_fx_price.
  • API key required for protected datasets, including non-USD indicators, FX spot-rate history, COT, and commodities.
  • Full support for:
    • Synchronous client
    • Asynchronous client
  • Lightweight: depends only on requests and aiohttp.

📦 Installation

Install from PyPI:

pip install fxmacrodata

Or install the latest version from GitHub:

pip install git+https://github.com/fxmacrodata/fxmacrodata.git

🔧 Usage

Synchronous

fromfxmacrodataimportClientclient=Client(api_key="YOUR_API_KEY")
# Fetch macroeconomic indicatorsdata=client.get_indicator(
"aud", "policy_rate",
start_date="2023-01-01",
end_date="2023-11-01"
)
print(data)
# Forex price endpointfx=client.get_fx_price("usd", "gbp", start_date="2025-01-01")
print(fx)
# Forex with technical indicatorsfx=client.get_fx_price("eur", "usd", indicators="sma_20,rsi_14,macd")
print(fx)
# Release calendarcalendar=client.get_calendar("usd")
print(calendar)
# Data catalogue — discover available indicatorscatalogue=client.get_data_catalogue("usd")
print(catalogue)
# COT positioning datacot=client.get_cot("eur", start_date="2025-01-01")
print(cot)
# Commodity pricesgold=client.get_commodities("gold", start_date="2026-01-01")
print(gold)

Asynchronous

importasynciofromfxmacrodataimportAsyncClientasyncdefmain():
asyncwithAsyncClient(api_key="YOUR_API_KEY") asclient:
# Fetch macroeconomic indicatorsdata=awaitclient.get_indicator("eur", "inflation")
print(data)
# Forex price endpointfx=awaitclient.get_fx_price("usd", "jpy")
print(fx)
# Release calendarcalendar=awaitclient.get_calendar("usd")
print(calendar)
# Data cataloguecatalogue=awaitclient.get_data_catalogue("usd")
print(catalogue)
# COT positioningcot=awaitclient.get_cot("jpy")
print(cot)
# Commodity pricesgold=awaitclient.get_commodities("gold")
print(gold)
asyncio.run(main())

OpenBB Integration

FXMacroData supports all practical OpenBB integration paths from this package:

  • OpenBB Python: installable provider/router extension for obb.fxmacrodata.*.
  • OpenBB REST API: /api/v1/fxmacrodata/* routes through openbb-api.
  • OpenBB Workspace, generated: widgets generated by openbb-api from inline metadata.
  • OpenBB Workspace, custom: standalone backend serving widgets.json, apps.json, and data endpoints.
  • OpenBB MCP: tools exposed through openbb-mcp.
  • OpenBB CLI: commands available after openbb-build.

OpenBB packages require Python 3.10+. Install the OpenBB Python extra:

pip install "fxmacrodata[openbb]"
openbb-build

Then use FXMacroData from the OpenBB Python interface:

fromopenbbimportobbobb.user.credentials.fxmacrodata_api_key="YOUR_API_KEY"catalogue=obb.fxmacrodata.data_catalogue(
currency="USD",
provider="fxmacrodata",
).to_df()
inflation=obb.fxmacrodata.macro_indicators(
currency="USD",
indicator="inflation",
start_date="2020-01-01",
provider="fxmacrodata",
).to_df()
eurusd=obb.fxmacrodata.fx_historical(
base="EUR",
quote="USD",
start_date="2024-01-01",
provider="fxmacrodata",
).to_df()

Run the OpenBB REST API and generated Workspace backend:

pip install "fxmacrodata[openbb-api]"
openbb-build
fxmacrodata-openbb-api --host 127.0.0.1 --port 6900

Workspace can be connected to http://127.0.0.1:6900. The generated /widgets.json uses FXMacroData's inline OpenBB widget metadata.

Run the OpenBB Workspace custom backend:

pip install "fxmacrodata[workspace]"
fxmacrodata-openbb-backend

Default backend URL:

http://127.0.0.1:7779

Workspace exposes /widgets.json, /apps.json, /catalogue, /release_calendar, /macro_indicator, /forex, /cot, and /commodity. Swagger/OpenAPI docs are disabled by default for this backend. For local debugging only, set FXMACRODATA_OPENBB_ENABLE_DOCS=1 before starting it.

Run OpenBB MCP:

pip install "fxmacrodata[mcp]"
openbb-build
fxmacrodata-openbb-mcp --default-categories fxmacrodata --host 127.0.0.1 --port 8001

Run OpenBB CLI:

pip install "fxmacrodata[openbb-cli]"
openbb-build
openbb

See docs/openbb-integration.md for the full integration matrix and the separate upstream OpenBB repository contribution path.


📘 API Overview

get_indicator(currency, indicator, start_date=None, end_date=None)

Fetches macroeconomic indicator time series data.

  • currency: "usd", "aud", "eur", "gbp", "cad", "nok", "nzd", "jpy", "brl", "cny", "dkk", "pln", "sek", "sgd", etc.
  • indicator: "policy_rate", "inflation", "gdp", "unemployment", "trade_balance", "current_account_balance", "gov_bond_10y", etc.
  • API key required for non-USD.

get_fx_price(base, quote, start_date=None, end_date=None, indicators=None)

Fetches daily FX spot rates between two currencies.

  • indicators: Optional comma-separated technical indicators — "sma_20", "sma_50", "sma_200", "rsi_14", "macd", "ema_12", "ema_26", "bollinger_bands", or "all".
  • API key required.

get_calendar(currency, indicator=None)

Fetches upcoming economic data release dates for a currency.

  • indicator: Optional filter to a specific indicator slug.
  • Returns announcement_datetime (Unix timestamp) and release (indicator slug).

get_data_catalogue(currency, include_capabilities=False, include_coverage=False, indicator=None)

Discovers available macroeconomic indicators for a given currency.

  • Returns a dict keyed by indicator slug with name, unit, frequency, and has_official_forecast.
  • API key required for non-USD.

get_cot(currency, start_date=None, end_date=None)

Fetches CFTC Commitment of Traders (COT) positioning data.

  • Supported currencies: AUD, CAD, CHF, EUR, GBP, JPY, NZD, USD.
  • API key required for non-USD.

get_commodities(indicator, start_date=None, end_date=None)

Fetches commodity price time series.

  • indicator: "gold", "silver", or "platinum".
  • API key required.

💹 Supported Currencies & Indicators

18 currencies supported: AUD, BRL, CAD, CHF, CNH, CNY, DKK, EUR, GBP, ILS, JPY, NGN, NOK, NZD, PEN, SEK, THB, USD.

The table below shows a sample of indicator coverage across four major currencies. Use get_data_catalogue() to discover the full list for any currency.

CategoryMetricUSDEURAUDGBP
EconomyGDP Growth
Inflation Rate
Trade Balance
Current Account Balance
Retail Sales
Industrial Production
Labor MarketUnemployment Rate
Employment Level
Full-Time Employment
Part-Time Employment
Participation Rate
Non-Farm Payrolls
Monetary PolicyPolicy Rate
Risk-Free Rate
Central Bank Assets
Government Bond Yields2-Year Govt Bond
5-Year Govt Bond
10-Year Govt Bond
Inflation-Linked Bond

📄 License

MIT License © FXMacroData


🌐 Links

About

Python client library to give traders, quants, and analysts access to forex macroeconomic data via the FXMacroData API.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages