Financial Literature

Nikkei Inc.

Nikkei Indexes — The Nikkei 225's daily closes from the index publisher, as a CSV

When the question is the Nikkei 225 itself — closes, the index's published PER and dividend yield — and you want the publisher's numbers rather than a vendor's mirror.

equitiesJapan
Asset classesequities
Frequencydaily
History1949 → today
Limit · costNo key · recent daily CSV; longer history by year from the archive page
KeyNo key
Formats · pull withcsv · browser — python, excel, sheets
LicenceNikkei's terms allow personal use; republishing index values requires a licence from Nikkei.
RedistributeNo — link and pull, do not republish
Best for“Nikkei 225 daily closes without a market-data account” · “The index's own valuation figures (PER, dividend yield)”
When to use it

Reach for it when…

When the question is the Nikkei 225 itself — closes, the index's published PER and dividend yield — and you want the publisher's numbers rather than a vendor's mirror.

Not for: Constituent prices (a market-data API), TOPIX (JPX), intraday data, anything you intend to republish.

How to read it

Units, revisions, traps

Units. Index points; the CSV has Date, Close, Open, High, Low. The valuation page gives PER and dividend yield for the index.

Revisions. Not revised.

  • The daily CSV covers recent years only; earlier years are separate files on the archive page.
  • Dates are YYYY/MM/DD strings — parse them.
  • The Nikkei 225 is price-weighted (like the Dow); high-priced stocks dominate.
  • The site refuses generic script user-agents (Cloudflare error 1010); send one that names you.

Classic mistake: Comparing the Nikkei's PER to the S&P 500's without noting the different accounting and weighting.

How to use it in your own work

Three recipes

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 1Nikkei 225 daily closes

# the publisher's daily CSV; identify yourself — generic script user-agents are refused (Cloudflare 1010)
import requests, pandas as pd, io
H = {"User-Agent": "Your Name [email protected]"}   # identify yourself; generic script user-agents are refused
u = "https://indexes.nikkei.co.jp/nkave/historical/nikkei_stock_average_daily_en.csv"
df = pd.read_csv(io.StringIO(requests.get(u, headers=H, timeout=30).text))
df = df.rename(columns={df.columns[0]: "date"})
df["date"] = pd.to_datetime(df.date, errors="coerce")
s = df.dropna(subset=["date"]).set_index("date")["Close"].astype(float)
print(s.tail())
How to read the resultThe last row of the file is a note line — drop rows without a parseable date.

Recipe 2Year-on-year return in yen and in dollars

import requests, pandas as pd, io
H = {"User-Agent": "Your Name [email protected]"}   # identify yourself; generic script user-agents are refused
nk = pd.read_csv(io.StringIO(requests.get("https://indexes.nikkei.co.jp/nkave/historical/nikkei_stock_average_daily_en.csv", headers=H, timeout=30).text))
nk = nk.rename(columns={nk.columns[0]: "date"}); nk["date"] = pd.to_datetime(nk.date, errors="coerce")
nk = nk.dropna(subset=["date"]).set_index("date")["Close"].astype(float)
jpy = pd.read_csv("https://fred.stlouisfed.org/graph/fredgraph.csv?id=DEXJPUS", index_col="observation_date", parse_dates=True, na_values=".")["DEXJPUS"]
usd = (nk / jpy).dropna()
print(pd.DataFrame({"yen": nk.pct_change(250), "usd": usd.pct_change(250)}).dropna().tail(3).round(3))
How to read the resultA yen-denominated rally with a falling yen can be flat in dollars — the 2023–24 story.

Recipe 3Archive years

# the archive page lists yearly files; read one year
import requests, pandas as pd, io
H = {"User-Agent": "Your Name [email protected]"}   # identify yourself; generic script user-agents are refused
u = "https://indexes.nikkei.co.jp/nkave/historical/nikkei_stock_average_daily_en.csv"   # recent; older years from the archive page
df = pd.read_csv(io.StringIO(requests.get(u, headers=H, timeout=30).text))
print(len(df), "rows")
How to read the resultSplice yearly files on the date; there are no gaps between them.

Series → question map

The ids we use from Nikkei Indexes, each with the question it answers. The catalog's compare view reads the concept tags behind these rows.

SeriesAnswersRegionConcept
nikkei_stock_average_daily_enWhere is the Nikkei 225?Japanequity_index
Nikkei 225 PERIs the Nikkei expensive? (index PER)Japanvaluation

Compare with

Same question, different source: Stooq, BOJ Time-Series Data, FRED. The compare view lines up coverage, frequency, history and access side by side and lists what the combination makes possible.

Open compare: Nikkei Indexes · Stooq · BOJ Time-Series Data →

Questions readers ask

Is the Nikkei CSV free?

For personal use, yes. Republishing values needs a Nikkei data licence.

Where is TOPIX?

Japan Exchange Group (jpx.co.jp) publishes TOPIX; FRED does not carry either index.

How far back does the CSV go?

The daily file is recent years; the archive page has a file per year back to 1949.

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.