East Africa FX Rates — Official Central Bank Exchange Rates API
Pricing
from $0.10 / full market snapshot
East Africa FX Rates — Official Central Bank Exchange Rates API
The only API pulling official daily FX rates directly from East African central banks — not World Bank annual releases. Covers Kenya (KES), Tanzania (TZS), Uganda (UGX) and Rwanda (RWF). Every record source-attributed with legal basis documented.
Pricing
from $0.10 / full market snapshot
Rating
0.0
(0)
Developer
Simon M
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
East African FX Rates — Daily Central Bank Exchange Rates
Official USD exchange rates published daily by East African central banks, normalised into one consistent schema. Covers Tanzania (BoT), Rwanda (BNR), Ethiopia (NBE), Burundi (BRB), Comoros (ECB-derived), and Djibouti (USD currency board) — 6 countries in total.
Unlike the World Bank, IMF, or ECB datasets already on Apify — which publish African macro data annually with a 6–12 month lag — this actor pulls fresh, daily rates straight from the issuing institutions.
Part of a regional family: West African FX Rates · East African FX Rates (this actor) · Southern and North African actors in the same normalised schema.
Modes
Choose a mode to match your use case:
| Mode | What you get | When to use it |
|---|---|---|
usd-core (default) | One USD rate per country, latest available date | Daily monitoring, dashboards, FX baskets |
all-currencies | Every currency each central bank publishes, latest date | Multi-currency exposure, FX desks |
historical | USD rate per country, every trading day in a date range | Backtesting, time-series analysis, academic research |
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | usd-core | See modes table above. |
countries | array | all 6 | ISO 3166-1 alpha-2 codes to include. TZ Tanzania, RW Rwanda, ET Ethiopia, BI Burundi, KM Comoros, DJ Djibouti. |
dateFrom | string | — | Start date (YYYY-MM-DD). Required in historical mode. |
dateTo | string | — | End date (YYYY-MM-DD). Required in historical mode. |
maxItems | integer | 5000 | Hard cap on output rows. |
Output
One record per country per run (in usd-core), per country-currency (in all-currencies), or per country-day (in historical).
Rwanda (BNR) example:
{"id": "RW:USD:2026-06-02:official","country": "RW","centralBank": "BNR","baseCurrency": "USD","quoteCurrency": "RWF","pair": "USD/RWF","date": "2026-06-02","buying": 1459.015,"selling": 1469.015,"mid": 1464.015,"midMethod": "published","inverseMid": 0.000683,"rateType": "official","warnings": [],"source": {"name": "National Bank of Rwanda","url": "https://www.bnr.rw/USD","retrievedAt": "2026-06-02T08:00:00.000Z","asOfDate": "2026-06-02","licenseNote": "Factual exchange rate data reproduced from the BNR public website. No redistribution prohibition found."}}
Read it as: 1 USD = 1464.02 RWF (buying: 1459.02, selling: 1469.02).
Comoros (KMF — ECB-derived) example:
{"id": "KM:USD:2026-06-02:derived","country": "KM","centralBank": "BCC","baseCurrency": "USD","quoteCurrency": "KMF","pair": "USD/KMF","date": "2026-06-02","buying": null,"selling": null,"mid": 422.34,"midMethod": "published","inverseMid": 0.002368,"rateType": "derived","warnings": [],"source": {"name": "BCC / ECB (derived daily)","url": "https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A","retrievedAt": "2026-06-02T08:00:00.000Z","asOfDate": "2026-06-02","licenseNote": "EUR/USD source: ECB Statistical Data Warehouse (free reuse with attribution). USD/KMF derived using the fixed EUR/KMF peg of 491.96775.","derivationNote": "USD/KMF = 491.96775 ÷ ECB daily EUR/USD reference rate. The EUR/KMF peg is fixed by French Treasury / EU treaty; derivation is exact, not estimated."}}
Field reference
| Field | Meaning |
|---|---|
country / centralBank | ISO 3166-1 alpha-2 country code + issuing bank abbreviation |
baseCurrency / quoteCurrency / pair | ISO 4217 codes. pair = base/quote. Read as: "price of 1 baseCurrency in quoteCurrency." |
date | The rate's as-of date (ISO 8601, YYYY-MM-DD) |
buying / selling / mid | Rates as published. null where the source doesn't publish that leg. BoT, BNR, NBE, and BRB publish all three. Comoros and Djibouti rates are derived from a fixed peg — no bid/ask spread exists, so buying and selling are always null for those rows; use mid. |
midMethod | How the mid was obtained: published (bank's own figure), midpoint (computed as (buy+sell)/2), or unavailable |
inverseMid | 1/mid — units of base per 1 quote (e.g. ETB per USD) |
rateType | official (BNR, NBE), interbank (BoT), derived (KMF/DJF — see below). Rates of different types are not directly comparable. |
warnings | Data-quality flags, e.g. buying_gt_selling, mid_out_of_range |
id | Deterministic natural key (country:baseCurrency:date:rateType) — safe to use for upsert/dedup |
source | Full attribution and provenance block: bank name, URL, retrieval timestamp, as-of date, licence note |
Coverage and source notes
| Country | Bank | Rate type | buying / selling | Historical depth |
|---|---|---|---|---|
| Tanzania (TZ) | Bank of Tanzania (BoT) | interbank — daily HTML table | ✓ published | Available; arbitrary date range via POST form |
| Rwanda (RW) | National Bank of Rwanda (BNR) | official — JSON API, 71+ currencies | ✓ published | USD back to 2015+ via BNR's own history endpoint |
| Ethiopia (ET) | National Bank of Ethiopia (NBE) | official — JSON API, 19 currencies | ✓ published | Per-date API — any date with data (~1 req/sec, long ranges take proportional time) |
| Burundi (BI) | Banque de la République du Burundi (BRB) | official — HTML table | ✓ published | None (historical mode skips BRB gracefully) |
| Comoros (KM) | BCC / ECB | derived — see note | null (EUR peg, no spread) | Back to 1999-01-04 (ECB EUR/USD series start) |
| Djibouti (DJ) | BCD (USD currency board) | derived — see note | null (USD peg, no spread) | Any date (constant value — 177.721 DJF/USD) |
Why are Comoros and Djibouti rows derived? Both currencies have fixed pegs with no independent bid/ask spread:
- KMF (Comoros): permanently pegged to EUR at 491.96775 by French Treasury / EU treaty. USD/KMF is derived as
491.96775 ÷ ECB daily EUR/USD. Back-history available to 1999. - DJF (Djibouti): USD currency board peg at 177.721 DJF/USD (confirmed on BCD homepage). The rate is constant for any date;
buyingandsellingare alwaysnull.
BNR all-currencies note: BNR's API lists 71 currency codes, but most are legacy/inactive slots — only ~5 (USD, EUR, GBP, and a few others) typically have current data. Inactive codes silently return empty arrays and are skipped.
Delayed data. Rates are scraped from each institution's published page — not a real-time feed. Expect a few hours' lag after a central bank publishes its daily figure.
Cost
Pay-per-event pricing:
| Mode | Charge | Typical cost |
|---|---|---|
usd-core | One fx-snapshot per run | $0.10 per run |
all-currencies | One fx-country-day per unique (currency, country, date) row | $0.015 per row |
historical | One fx-country-day per unique (currency, country, date) row | $0.015 per country-day |
Examples:
- Daily
usd-corefor all 6 countries: $0.10/day (~$2.20/month) - 1 year of
historicalfor Rwanda + Ethiopia: 2 × ~252 trading days =504 events → **$7.56** - 1 year of
historicalfor all 6 countries: ~252 × 6 =1,512 chargeable events → **$22.68**
Legality & disclaimers
Is the data real-time? No — it is delayed. We scrape each bank's published web page; publishing lag varies by institution.
Legal basis. Official exchange rates are factual data. Copyright protects creative expression, not facts. These central-bank sites carry only a general copyright notice with no contractual restriction on reusing the published rate figures. Comoros and Djibouti rates are derived using publicly stated pegs; the EUR/USD component comes from the ECB Statistical Data Warehouse (free reuse with attribution). Every output record carries the issuing bank's name, URL, and a licence note — we reproduce values exactly as published without alteration.
Resilience. Each source is fetched independently. If one central bank's site is down, the run still returns data from the others and logs a per-source summary. BRB (Burundi) does not support historical mode and is gracefully skipped when historical is selected.
Accuracy. Values are reproduced as published. If a bank revises a figure, re-run to pick up the change; use asOfDate and retrievedAt to track versions.
Issues / feedback: use the Issues tab on the actor page.
This is not legal or financial advice. Verify rates against the issuing central bank before acting on them.