Data

forex-centuries

Exchange rates, precious metals, interest rates, commodity prices, inflation, GDP, real wages and sovereign debt, from 1 CE to 2026, assembled from 26 sources into one reproducible build.

Snapshot
f79a85b
Committed
26 February 2026
Code license
MIT (code and compilation)
Data terms
Each source keeps its own — see Provenance

forex-centuries is a long-run monetary and economic dataset: exchange rates from 1106, gold from 1257, commodity prices from 1260, real interest rates from 1311, GDP per capita from the year 1, and sovereign debt and crisis indices from 1800. Twenty-three automated fetchers and three manually maintained sources feed an eight-step build that normalizes everything into unified yearly and daily panels.

The point of the collection is duration. Modern exchange-rate theory is fitted on samples that begin in 1971, occasionally 1900, in a world where currency systems are a thousand years old. Most of the interesting behaviour — regime collapse, debasement, the end of a reserve currency — is outside the window.

Status

This page documents the repository snapshot committed on 26 February 2026. Observation dates vary by source; the commit date does not establish data freshness. Cite the snapshot rather than the branch: main moves, and a citation pointing at a moving branch does not identify what anyone used.

The repository runs a scheduled Weekly Data Update. Every run recorded in the GitHub Actions history has failed — thirty of thirty, most recently on 21 September 2026, at the “Update sources” step. That is the observed state of the refresh job. It says nothing either way about whether the committed data is sound, and it does mean no automated refresh has landed since the last manual commit.

The repository currently has no DOI, and no tags or releases, so the citation below pins a commit hash. Minting a DOI through Zenodo would give a stable identifier per release; a hash is the substitute until then.

Coverage

CategoryWhatCountries / seriesPeriod
GDP per capitaReal GDP per person178 countries1 CE – 2022
Exchange ratesBilateral FX vs USD, GBP, and cross rates~243 countries1106 – 2026
GoldGold prices in GBP and USDGlobal1257 – 2025
SilverSilver prices and the gold/silver ratioGlobal1687 – 2025
Commodity prices973 historical plus ~70 modern seriesEuropean and Asian cities, then global1260 – 2026
Interest ratesReal and nominal, short and long term8 countries historical; UK and US nominal1311 – 2025
Inflation / CPIConsumer price indices~180 countries1500 – 2025
Real wagesLabourers’ real wage in subsistence ratios~40 countries1820 – 2000+
Sovereign debtPublic debt-to-GDP191 countries1800 – 2016
FX regimes and crisesPeg/float classifications; banking, currency and debt crisis indices~190 countries1800 – 2021
Real effective exchange ratesTrade-weighted, CPI-deflated178 countries1960s – 2026
Swedish historical macroFX, CPI, wages, GDP, money supply, stocks, bondsSweden1277 – 2026
Historical financial statisticsOfficial and market FX, rates, money supply, central bank balance sheetsVarious~1500 – 1950
Macroeconomic panel59 variables across FX, CPI, rates, GDP, credit, housing, equities18 advanced economies1870 – 2017

End dates are the last observation in the provider’s file at this commit, not the provider’s current coverage — World Bank exchange rates stop at 2024 here and World Bank commodity prices at January 2026, both of which have moved on upstream since.

Depth by series: 2,000+ years for GDP (Maddison, from 1 CE), 900 for medieval exchange rates (MEMDB, 1106), 768 for gold (MeasuringWorth, 1257), 707 for real interest rates (Schmelzing, 1311), 654 for commodity prices (Allen-Unger, 1260), 526 for exchange-rate panels (Clio Infra, 1500), 55 for daily FX (FRED, 1971).

Provenance

Raw files land in data/sources/<provider>/ untouched, exactly as the provider published them, and build.py derives the panels from there. Nothing in data/derived/ is hand-edited, so any number can be traced back to a provider file and re-derived from it.

Licensing is two separate questions. The repository’s LICENSE is MIT, and it covers the code and the compilation — the fetchers, the build, the structure. It does not and cannot relicense the underlying data. Each provider below sets its own terms, and they differ: some are open, some require attribution, some restrict redistribution or commercial use, and a few are gated. Check the terms of any source you rely on, and cite that source in addition to this dataset.

Automated

SourceDataPeriod
FRED23 daily FX pairs, 2 USD indices1971 – 2025
IMF IFS via Code for IATI173 currencies vs USD, monthly1955 – 2025
BISBilateral and effective rates, ~190 economies1957 – 2026
Sveriges Riksbank53 SEK bilateral series, daily1900 – 2026
World Bank FXOfficial rates, all members1960 – 2024
World Bank Commodities~70 commodity prices1960 – Jan 2026
JST Macrohistory18 economies, 59 variables1870 – 2017
Penn World Table185 countries, FX and PPP1950 – 2023
MeasuringWorthFX, gold, interest rates, US CPI1257 – 2025
Clio InfraFX, inflation, bonds, debt, GDP, real wages1500 – 2016
FreeGoldAPIGold, silver, gold/silver ratio1258 – 2025
LBMADaily gold and silver, USD/GBP/EUR1968 – 2025
DataHub GoldMonthly gold, USD1833 – 2025
IRR (Ilzetzki–Reinhart–Rogoff)De facto FX regime classifications1940 – 2021
Bank of EnglandMillennium dataset: $/£, rates, prices, GDP1791 – 2016
Schmelzing (BoE)Real interest rates, 8 countries1311 – 2018
Maddison ProjectGDP per capita, 178 countries1 CE – 2022
Allen-Unger GCPD973 commodity price series1260 – 1914
Bruegel / Darvas REERReal effective exchange rates, 178 countries1960s – 2026
IMF HPDDSovereign debt-to-GDP, 191 countries1800 – 2015
CFS Historical Financial StatisticsFX, rates, money supply, central bank balance sheets~1500 – 1950
Riksbank Historical Monetary StatisticsSwedish FX, CPI, wages, GDP, money, securities1277 – 2020
Reinhart–RogoffRegimes, debt/GDP, inflation, crisis indices1800 – 2016

Manual

Committed to the repository because the provider offers no programmatic export.

SourceDataPeriodWhy manual
MEMDB Spufford13,197 medieval exchange quotations, 521 places1106 – 1500No export API
MEMDB Metz50,559 records, Lower Rhine and comparisons1350 – 1800No export API
Global Macro Database243 countries, USD FX and REER1960 – 2024Email-gated

Downloads

Both archives are the pinned snapshot, not the current branch:

The built panels sit in data/derived/normalized/: yearly_unified_panel.csv (long, ~24,700 observations across 243 countries, 1500–2025), yearly_unified_wide.csv, fred_daily_normalized.csv (13,802 dates × 23 currencies) and its wide form.

Loading it

Clone at the pinned commit, so the files match this page:

git clone https://github.com/unbalancedparentheses/forex-centuries
cd forex-centuries
git checkout f79a85bf6ae0dbad8d79ea56902caef43c7bd947

The yearly panel is long-format with four columns — year, country, rate_per_usd, source — and needs no dependencies to read:

import csv
from collections import defaultdict

series = defaultdict(list)
with open("data/derived/normalized/yearly_unified_panel.csv") as f:
    for row in csv.DictReader(f):
        series[row["country"]].append((int(row["year"]), float(row["rate_per_usd"])))

gb = sorted(series["United Kingdom"])
print(f"{len(gb)} years, {gb[0][0]}{gb[-1][0]}")

Or with pandas, taking one country’s series:

import pandas as pd

panel = pd.read_csv("data/derived/normalized/yearly_unified_panel.csv")
gb = panel[panel.country == "United Kingdom"].set_index("year").rate_per_usd
print(gb.describe())

The source column records which provider supplied each observation, so a series assembled from more than one source can be split back apart — worth doing before drawing conclusions from a join, since providers disagree about the same year more often than you would like.

Citing it

No DOI yet, so cite the snapshot by hash:

@misc{forex-centuries,
  author       = {Federico Carrone},
  title        = {forex-centuries: Twenty Centuries of Exchange Rate, Gold,
                  Silver, Interest Rate, and Commodity Price Data (1 CE--2026)},
  year         = {2026},
  howpublished = {\url{https://github.com/unbalancedparentheses/forex-centuries/tree/f79a85bf6ae0dbad8d79ea56902caef43c7bd947}},
  note         = {Snapshot f79a85bf6ae0dbad8d79ea56902caef43c7bd947,
                  committed 2026-02-26}
}

Federico Carrone, forex-centuries: Twenty Centuries of Exchange Rate, Gold, Silver, Interest Rate, and Commodity Price Data (1 CE–2026), 2026. Snapshot f79a85b, committed 26 February 2026. https://github.com/unbalancedparentheses/forex-centuries/tree/f79a85bf6ae0dbad8d79ea56902caef43c7bd947

Cite the underlying providers too. The compilation is a convenience; the measurements are theirs.

Written from this data