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.
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.
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.
Three recipes
- Recipe 1 · Nikkei 225 daily closes
- Recipe 2 · Year-on-year return in yen and in dollars
- Recipe 3 · Archive years
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())- Data → From Web → the same URL → Load.
=IMPORTDATA("https://indexes.nikkei.co.jp/nkave/historical/nikkei_stock_average_daily_en.csv")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))- Two From Web queries (Nikkei CSV, FRED DEXJPUS) merged by date.
- Two IMPORTDATA calls and a VLOOKUP.
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")- indexes.nikkei.co.jp/en/nkave/archives/data → download the year files.
- Import the downloaded files.
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.
| Series | Answers | Region | Concept |
|---|---|---|---|
| nikkei_stock_average_daily_en | Where is the Nikkei 225? | Japan | equity_index |
| Nikkei 225 PER | Is the Nikkei expensive? (index PER) | Japan | valuation |
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.