Bank of Japan
BOJ Time-Series Data — Japan's policy rate, JGB yields, yen and money — as table CSVs from the Bank of Japan
For Japan's monetary picture from the source: the uncollateralised call rate, JGB yields the BOJ publishes, yen exchange rates, money stock, bank lending. Each 'main time-series' table has a stable CSV URL.
Reach for it when…
For Japan's monetary picture from the source: the uncollateralised call rate, JGB yields the BOJ publishes, yen exchange rates, money stock, bank lending. Each 'main time-series' table has a stable CSV URL.
Not for: Japanese CPI, GDP and jobs (e-Stat, the Statistics Bureau), stock indices (Nikkei Indexes), anything intraday.
Units, revisions, traps
Units. Rates in percent; yen per dollar for FX; money stock in ¥100 million. Monthly tables are monthly averages unless the title says end-of-month.
Revisions. Money stock and lending are revised; rates and FX are not.
- Two header rows and a title row above the data — skiprows and name the columns yourself.
- Some tables use Japanese fiscal periods (April–March); check the date column format.
- Table ids look like fm08_m_1_en; the site's 'main time-series statistics' page lists them.
Classic mistake: Treating the monthly-average yen rate as the month-end rate.
Three recipes
- Recipe 1 · Yen per dollar, monthly average
- Recipe 2 · The call rate and JGB yields
- Recipe 3 · Money stock and bank lending
Each recipe: Python · Excel · Sheets, with how to read the result. Python recipes run under pandas; recipe 1 is re-run by the weekly check where the source allows it.
How to use it in your own work
Copy the snippet, change the series id, read the result the way the footer says. Replace YOUR_…_KEY with your own key where one is needed.
Recipe 1Yen per dollar, monthly average
# main time-series table fm08: foreign exchange rates, monthly
import pandas as pd
u = "https://www.stat-search.boj.or.jp/ssi/mtshtml/csv/fm08_m_1_en.csv"
df = pd.read_csv(u, skiprows=2)
df = df.rename(columns={df.columns[0]: "period"})
print(df.head(3)); print(df.tail(3))- Data → From Web → the same URL → Load; remove the two title rows.
=IMPORTDATA with the same URL.Recipe 2The call rate and JGB yields
# main time-series table ir01: interest rates, monthly
import pandas as pd
u = "https://www.stat-search.boj.or.jp/ssi/mtshtml/csv/ir01_m_1_en.csv"
df = pd.read_csv(u, skiprows=2)
print(df.tail())- From Web with the same URL.
=IMPORTDATA with the same URL.Recipe 3Money stock and bank lending
# main time-series table md01: money stock; md02: loans and discounts
import pandas as pd
u = "https://www.stat-search.boj.or.jp/ssi/mtshtml/csv/md01_m_1_en.csv"
df = pd.read_csv(u, skiprows=2)
print(df.tail())- From Web with the same URL.
=IMPORTDATA with the same URL.Series → question map
The ids we use from BOJ Time-Series Data, each with the question it answers. The catalog's compare view reads the concept tags behind these rows.
| Series | Answers | Region | Concept |
|---|---|---|---|
| fm08_m_1 | Yen per dollar, monthly average | Japan | fx_usd |
| ir01_m_1 | What is the BOJ's overnight rate? | Japan | policy_rate |
| ir01_m_1 · JGB 10y | Where is the 10-year JGB yield? | Japan | yield_10y |
| md01_m_1 | Is Japan's money stock growing? | Japan | money_supply |
Compare with
Same question, different source: FRED, BOK ECOS, Nikkei Indexes. The compare view lines up coverage, frequency, history and access side by side and lists what the combination makes possible.
Questions readers ask
Is there an API?
Not a documented JSON API; the stable table CSV URLs serve the same purpose and need no key.
Where is Japanese CPI?
At e-Stat, the government statistics portal (free API key), or FRED's JPNCPIALLMINMEI mirror.
Why does the CSV start with a title line?
Every BOJ table carries its title and timestamp above the header; skip two rows.
From the paper
Educational only — we explain, we never advise · snippet licence: public domain · corrections to [email protected], fixed within a day and logged in the changelog.