Methodology, data pipeline & sources · all figures from public disclosures
Everything derives from public disclosures. The pipeline (in /scripts of the repo) is reproducible end-to-end; each step below names its source.
① Holdings. GPIF publishes a full securities list (保有全銘柄) once a year, each July, for the fiscal year ended in March. Twelve files (FY2014→FY2025) are parsed into one dataset (~183k rows) by parse_holdings.py. Bonds are issuer-level before FY2019 and ISIN-level from FY2019; foreign-bond names embed coupon and maturity from FY2019 onward.
② Security master. 10,536 bond ISINs (the whole domestic book + foreign lines lacking a maturity in their name) are mapped through the OpenFIGI API (openfigi_enrich.py). The FIGI ticker carries coupon, maturity and — for JGBs — the issue number: JGB 1.5 06/20/35 379. 36 ISINs (private placements) found no match.
③ Risk (v2 — priced from the disclosure). GPIF discloses each line's market value and face quantity. risk_engine.py therefore implies each bond's price directly — price = MV ÷ (face × FX), using ECB reference exchange rates at each fiscal year-end — solves the semi-annual YTM from that price, and evaluates modified duration and DV01 at the implied yield. Portfolio-level implied yields validate against market levels (FY2025: JGB book 2.2%, USTs 4.0%, gilts 4.9%). Lines with no usable quantity, unidentifiable currency (XS-prefix supranationals) or an implausible implied price (outside 40–250, e.g. amortising MBS pools whose current face ≠ original) fall back to the previous par assumption (yield = coupon); the fallback carries 0.4–25% of MV depending on year and is flagged per line in the pipeline output. Floaters 0.15y; perpetuals 60y. DV01 = MV × modDur × 10⁻⁴.
④ Ownership vs outstanding. For JGBs, MOF's 普通国債の銘柄別現在高 (issue-by-issue outstanding, end-Mar 2026) is joined on maturity date + issue number. For US Treasuries, the Treasury FiscalData MSPD "detail of marketable securities" table is joined by CUSIP at each of the seven fiscal year-ends, so UST ownership is a timeseries. GPIF's disclosed quantity is face value in the bond's currency; share = face ÷ outstanding. Lines computing above 100% are suppressed as data errors. Other sovereigns don't publish joinable issue-level outstanding, so their lines show "—".
⑤ Equity comparison. iShares MSCI ACWI ETF holdings (July 2026) proxy MSCI ACWI; ex-Japan weights are renormalized after removing Japan. GPIF holdings join by normalized name (88.8% of MV; GPIF truncates names at ~22 characters, so a unique-prefix fallback is used). Countries come from ISIN prefixes (XS = supranational).
⑥ Allocation & policy. The FY2001→FY2025 asset-mix history is GPIF's own table (file 06 on each fiscal-year page). Policy portfolios and deviation bands: Apr-2006 67/8/11/9(+5 cash) → Jun-2013 60/11/12/12 → Oct-2014 35/15/25/25 (±10/4/9/8) → Apr-2020 25×4 (±7/6/8/7) → Apr-2025 25×4 (±6/5/6/6).
GPIFFull holdings, annual — latest fiscal year · past fiscal years
GPIFAsset amounts & composition (運用資産額・資産構成割合), FY2001→FY2025
GPIFPolicy portfolio — basic portfolio · Apr 2020 detail · Apr 2025 detail · policy history (capital-markets review No.478)
FIGIOpenFIGI API v3 — ISIN → ticker/name/type security master
MOF普通国債の銘柄別現在高 (JGB outstanding by issue, Excel)
USTFiscalData MSPD — detail of marketable securities by CUSIP (API)
MSCIiShares MSCI ACWI ETF holdings CSV (ACWI proxy)
ECBECB reference exchange rates (SDMX API) — fiscal-year-end FX for implied pricing
Annual update loop: each July, add the new GPIF file, re-run the pipeline (only new ISINs hit OpenFIGI thanks to the cache), refresh the MOF/MSPD joins, and regenerate /data. See the repo README.