{
 "generatedAt": "2026-07-29T05:55:45.647Z",
 "sources": {
  "worldbank": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "Monthly averages published with ~1 month lag.",
   "lastRun": "2026-07-29T05:44:31.634Z",
   "lastSuccess": "2026-07-29T05:44:33.054Z",
   "lastObservation": "2026-06",
   "rows": 1980,
   "seriesCount": 10,
   "cadence": "monthly",
   "sourceName": "World Bank — Commodity Markets (Pink Sheet)"
  },
  "portwatch": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "PortWatch history begins in 2019 (satellite AIS data); charts show a shorter history than other series. | PortWatch estimates update with a few days' lag. | PortWatch port calls are satellite-based estimates of ship activity, not official customs data — ship traffic slows weeks to months before official trade statistics do, which is what makes them an early signal. | PortWatch ports (one exact PortWatch port per series, never a mix): port_ningbo → \"Ningbo\" (port824); port_shenzhen → \"Shekou (Shenzhen)\" (port1189); port_busan → \"Busan\" (port1065); port_kaohsiung → \"Kaohsiung\" (port541); port_singapore → \"Singapore\" (port1201), the most active of 2 PortWatch ports matching \"Singapore\"; the others (\"Singapore - Offshore Oil Terminal 1\" (fso161)) are NOT included. | PortWatch ports: port_shanghai skipped this run — no rows whose \"portname\" contains \"Shanghai\" (attempts: server-side UPPER LIKE '%SHANGHAI%': ArcGIS error from https://services9.arcgis.com/weJ1QsnbMYJlCHdG/ArcGIS/rest/services/Daily_Ports_Data/FeatureServer/0/query: 40…",
   "lastRun": "2026-07-29T05:44:33.054Z",
   "lastSuccess": "2026-07-29T05:54:05.991Z",
   "lastObservation": "2026-07-26",
   "rows": 30388,
   "seriesCount": 11,
   "cadence": "daily",
   "sourceName": "IMF PortWatch"
  },
  "taiwan": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "Parsed from https://web02.mof.gov.tw/njswww/webMain.aspx?sys=220&ym=10401&ymt=11507&kind=21&type=1&funid=i8201&cycle=41&outmode=12 (statistical-database CSV export, outmode=12); 138 monthly rows, 2015-01 to 2026-06. | Published monthly around the 7th–9th of the following month. | Upstream file reports thousand US$ (the \"總計\" column carries no unit label; scale verified against known Taiwan monthly export totals) — converted to US$ million for readability (divided by 1,000). | Dates are published in the ROC (Minguo) calendar (ROC year + 1911 = western year, so \"104年 1月\" = 2015-01); annual \"104年/ 全球\" total rows are skipped. | Imports series omitted: the njswww i8201 table is exports-by-region only; it has no imports column",
   "lastRun": "2026-07-29T05:54:05.991Z",
   "lastSuccess": "2026-07-29T05:54:07.666Z",
   "lastObservation": "2026-06",
   "rows": 138,
   "seriesCount": 1,
   "cadence": "monthly",
   "sourceName": "Taiwan Ministry of Finance"
  },
  "china": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "Direct NBS API blocks automated cloud access; china_pmi via DBnomics' mirror of official NBS releases. | china_pmi: the mirror only holds the most recent year or so of NBS data and updates with a lag of a few months — charts show this short history honestly, and the series joins the GSSI only once enough history accumulates. | china_pmi: DBnomics NBS/M_A0B01, series A0B0101 (\"Manufacturing Purchasing Managers' Index\"). | china_exports: IMF Direction of Trade Statistics (DOTS), via DBnomics mirror, series M.CN.TXG_FOB_USD.W00 (\"Monthly – China – Goods, Value of Exports, Free on board (FOB), US Dollars – All Countries, excluding the IO, Millions\"). | china_exports: switched from the DBnomics NBS mirror (which only held ~13 months) to IMF Direction of Trade Statistics (DOTS), via DBnomics mirror — verified live: 125 rows back to 2015-01, the same source and pattern already used for South Korea's exports. | china_exports: this mirror currently runs about 14 month(s) behind the present — verified across several countries, so it's a mirror-wide refresh gap, not specific to China. Older months are genuine official IMF data; nothing is backfilled or guessed. | china_cpi_yoy/china_cpi_food_yoy/china_ppi_yoy/china_income_pc/china_spending_pc: same DBnomics mirror of official NBS releases as china_pmi — it holds only a rolling recent window (roughly the last year, ~6 quarters for the household series) per dataset and lags the official release by a few months. Whatever exists is stored honestly; gaps stay gaps, nothing is interpolated. | china_cpi_yoy/china_cpi_food_yoy/china_ppi_yoy: NBS publishes these as \"same month last year = 100\" (102.1 = prices up 2.1% on a year earlier); stored as the difference from 100 so the numbers read directly as % change vs a year earlier. | china_cpi_yoy: headline CPI assembled from the NBS era-window dataset(s) M_A01010G/A01010G01 + M_A01010J/A01010J01 — M_A01010G/A01010G01: 11 month(s); M_A01010J/A01010J01: 2 month(s); stored 2025-02 → 2026-02. | china_cpi_yoy: 13 month(s) marked \"NA\" by the mirror were skipped, never filled (each era dataset only carries its own era's months). | china_cpi_food_yoy: DBnomics NBS/M_A010103, series A01010301 (2025-02 → 2026-02). | china_ppi_yoy: DBnomics NBS/M_A010801, series A01080101 (2025-02 → 2026-02). | china_income_pc: DBnomics NBS/Q_A0501/A050101 (\"Per Capita Disposable Income Nationwide, Accumulated\"), 6 quarter(s) 2024-09 → 2025-12. | china_income_pc: values are cumulative year-to-date (Q2 = the first-half total, Q4 = the full year), stored under each quarter's closing month (\"2026-Q2\" → 2026-06) — compare a quarter with the same quarter a year earlier, never with the previous quarter. | china_spending_pc: DBnomics NBS/Q_A0504/A050401 (\"Per Capita Consumption Expenditure Nationwide, Accumulated\"), 6 quarter(s) 2024-09 → 2025-12. | china_spending_pc: values are cumulative year-to-date (Q2 = the first-half total, Q4 = the full year), stored under each quarter's closing month (\"2026-Q2\" → 2026-06) — compare a quarter with the same quarter a year earlier, never with the previous quarter. | china_spending_breakdown: 8 of 8 official NBS categories resolved from DBnomics NBS/Q_A0504 (china_spend_food=A050403, china_spend_clothing=A050405, china_spend_housing=A050407, china_spend_daily=A050409, china_spend_transport=A05040B, china_spend_education=A05040D, china_spend_health=A05040F, china_spend_other=A05040H), quarters 2024-09 → 2025-12. | china_spending_breakdown: same rolling mirror window and lag as china_spending_pc — the mirror holds only ~6 recent quarters and runs a few months behind the official release. Values are yuan per person, cumulative year-to-date, stored under each quarter's closing month — compare a quarter with the same quarter a year earlier, never with the previous quarter. Gaps stay gaps; nothing is interpolated. | china_income_breakdown: 4 of 4 official NBS categories resolved from DBnomics NBS/Q_A0501 (china_income_wages=A050105, china_income_business=A050107, china_income_property=A050109, china_income_transfer=A05010B), quarters 2024-09 → 2025-12. | china_income_breakdown: same rolling mirror window and lag as china_income_pc — the mirror holds only ~6 recent quarters and runs a few months behind the official release. Values are yuan per person, cumulative year-to-date, stored under each quarter's closing month — compare a quarter with the same quarter a year earlier, never with the previous quarter. Gaps stay gaps; nothing is interpolated. | china_cpi_categories: 7 of 7 CPI category series assembled from the same NBS era-window dataset(s) as china_cpi_yoy (M_A01010G + M_A01010J) — the mirror holds only a rolling ~13 recent months per dataset and lags the official release by a few months; NBS publishes these as \"same month last year = 100\", stored as the difference from 100 so they read as plain % change vs a year earlier. | china_cpi_categories: the combined \"Food & Tobacco (& Liquor)\" category is deliberately NOT stored — china_cpi_food_yoy already tracks pure Food from NBS/M_A010103, and publishing two differently-defined \"food\" numbers side by side would mislead.",
   "lastRun": "2026-07-29T05:54:07.666Z",
   "lastSuccess": "2026-07-29T05:54:20.412Z",
   "lastObservation": "2026-02",
   "rows": 352,
   "seriesCount": 26,
   "cadence": "monthly",
   "sourceName": "China National Bureau of Statistics (via DBnomics mirror)"
  },
  "japan": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "Data via the official e-Stat API (METI's own site blocks automated cloud access). | METI revises recent months; published ~6 weeks after month end. | e-Stat table 0004052177: 鉱工業生産・出荷・在庫指数 — 鉱工業生産・出荷・在庫指数 2020年基準時系列データ（2018年１月～） — 業種別季節調整済指数【月次】 付加価値額生産（2020＝100.0） | History starts 2018-01, later than this site's usual 2015 baseline: METI's currently connected series on the latest index base only reaches back this far; older base-year vintages exist but use a table format this pipeline can't yet filter safely. | Japan trade series still deferred (needs a verified e-Stat table for monthly total exports).",
   "lastRun": "2026-07-29T05:54:20.412Z",
   "lastSuccess": "2026-07-29T05:54:49.290Z",
   "lastObservation": "2026-03",
   "rows": 99,
   "seriesCount": 1,
   "cadence": "monthly",
   "sourceName": "Japan Ministry of Economy, Trade and Industry (METI), via e-Stat"
  },
  "eia": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "EIA publishes these daily spot prices with a lag of roughly 1-3 business days. | Weekends and U.S. market holidays have no trading, so those dates are absent by design; gaps are not filled. | WTI spot genuinely traded below zero in April 2020 — negative values around that date are real data, not errors.",
   "lastRun": "2026-07-29T05:54:58.348Z",
   "lastSuccess": "2026-07-29T05:55:00.419Z",
   "lastObservation": "2026-07-20",
   "rows": 12515,
   "seriesCount": 3,
   "cadence": "daily",
   "sourceName": "U.S. Energy Information Administration (EIA)"
  },
  "fred": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "Sahm rule updates monthly with the US jobs report.",
   "lastRun": "2026-07-29T05:55:00.419Z",
   "lastSuccess": "2026-07-29T05:55:07.582Z",
   "lastObservation": "2026-07-28",
   "rows": 34772,
   "seriesCount": 22,
   "cadence": "daily",
   "sourceName": "FRED — Federal Reserve Bank of St. Louis"
  },
  "korea": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "Switched from Bank of Korea ECOS to IMF Direction of Trade Statistics (DOTS), via DBnomics mirror: ECOS membership requires Korean-carrier mobile identity verification, which has no path for a non-Korean resident (verified live 2026-07-16). | This mirror currently runs about 14 month(s) behind the present — verified across several countries, so it's a mirror-wide refresh gap, not specific to Korea. The chart's \"last updated\" date shows this honestly; older months are genuine official IMF/Bank of Korea data. | This series no longer has the near-real-time, 10-day-flash-figure advantage ECOS offered — it strengthens the historical record more than it serves as a live early-warning signal.",
   "lastRun": "2026-07-29T05:55:07.582Z",
   "lastSuccess": "2026-07-29T05:55:08.452Z",
   "lastObservation": "2025-05",
   "rows": 125,
   "seriesCount": 1,
   "cadence": "monthly",
   "sourceName": "IMF Direction of Trade Statistics (DOTS), via DBnomics mirror"
  },
  "bls": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "Prices are BLS city-average shelf prices, published monthly with ~2-6 weeks lag. | Tax treatment (verified against BLS's own Average Price Data documentation): grocery item prices are published WITHOUT sales tax — most US states don't tax groceries at all, so this is the real shelf-to-register cost for most readers, but it understates the true cost in the roughly nine states that do tax groceries. Gasoline, electricity, and piped-gas prices already include all applicable taxes and surcharges — nothing to add there. | No state-level average prices exist — BLS publishes US, 4 census regions, and large metros only. | Stored 125 of 336 possible item-area series — BLS doesn't publish the rest (most metro food items, a few region gaps); that's normal, not an error. | The national and 4 census-region items also carry full monthly history back to 2015 (used for the basket-cost-over-time chart); the 23 metros carry only the 2019-baseline and recent-window snapshots, to stay within BLS's free daily query limits.",
   "lastRun": "2026-07-29T05:54:49.290Z",
   "lastSuccess": "2026-07-29T05:54:56.364Z",
   "lastObservation": "2026-06",
   "rows": 8742,
   "seriesCount": 125,
   "cadence": "monthly",
   "sourceName": "U.S. Bureau of Labor Statistics — Average Price Data"
  },
  "oews": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "OEWS is ANNUAL data (May vintages) — the pipeline checks nightly but new vintages appear once a year (spring). | Census regions have no OEWS aggregate — the site uses the US median for regions, labeled. | Vintage(s) stored: 2015-05, 2019-05, 2025-05. | May 2019 vintage already cached — the BLS archive files are not re-downloaded. | No 2019 wage available for S11A (suppressed or absent in the May 2019 files) — their history starts at the first available vintage.",
   "lastRun": "2026-07-29T05:54:56.364Z",
   "lastSuccess": "2026-07-29T05:54:56.627Z",
   "lastObservation": "2025-05",
   "rows": 60,
   "seriesCount": 24,
   "cadence": "monthly",
   "sourceName": "U.S. Bureau of Labor Statistics — OEWS wages"
  },
  "ces": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "Averages are per 'consumer unit' (≈ household, ~2.5 people), over ALL households — including e.g. car-free households in transportation and uninsured households in health insurance. | Annual survey data with a long lag: a year's figures are released around September of the following year. Dates are stored as bare years — no month is ever invented. | CES measures out-of-pocket spending only. In particular, the health-insurance line is what households themselves pay in premiums; employers' much larger share of job-based coverage never passes through a household budget and is not in this data. | Homeowners' insurance and property taxes are inside the shelter line; vehicle insurance is inside transportation. | Grocery breakdown: cereals & bakery, meat/poultry/fish/eggs, dairy, and other food at home are each their own BLS series; fruits & vegetables has no findable BLS series id and is instead computed as the exact residual (food-at-home total minus the other four) — validated every run to fall in a plausible range. | Regional essentials + comfortable total: the 5 essential categories (groceries, housing, healthcare, transportation, education) plus the 3 extra categories the fuller comfortable-living total needs (food total, entertainment, apparel) are fetched per census region (Northeast/Midwest/South/West) from BLS's region-of-residence cross-tabs — the finest official geography for spending data; no metro- or state-level CES breakdown exists. Each regional value is validated against its national counterpart every run.",
   "lastRun": "2026-07-29T05:54:56.627Z",
   "lastSuccess": "2026-07-29T05:54:57.973Z",
   "lastObservation": "2024",
   "rows": 480,
   "seriesCount": 48,
   "cadence": "monthly",
   "sourceName": "U.S. Bureau of Labor Statistics — Consumer Expenditure Survey"
  },
  "cpi": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "These are helper price indexes, not consumer-facing series on their own — they exist only to advance the Consumer Expenditure Survey's 2024 (or newer) dollars to a current-month estimate on /your-money, and to advance the OEWS median wage the same way. | CPI-U, U.S. city average, NOT seasonally adjusted (BLS's own escalation guidance recommends unadjusted series for exactly this use — seasonally adjusted series are revised every year for 5 years, which would silently rewrite past estimates). | Health insurance is deliberately NOT escalated by CPI's own health-insurance index — that index uses an accounting method (insurer retained earnings) that has swung wildly and diverged sharply from actual premium growth; see your-money.ts / the methodology page for detail. | Regional CPI (4 census regions × food at home / housing / medical care / transportation) escalates the regional CES essentials with each region's own price movement. BLS publishes NO regional education index (probe-confirmed empty for all four regions) — regional education estimates use the national education index instead, a disclosed approximation.",
   "lastRun": "2026-07-29T05:54:57.973Z",
   "lastSuccess": "2026-07-29T05:54:58.348Z",
   "lastObservation": "2026-06",
   "rows": 1284,
   "seriesCount": 32,
   "cadence": "monthly",
   "sourceName": "U.S. Bureau of Labor Statistics — CPI & median earnings"
  },
  "eurostat": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "HICP: dataset prc_hicp_minr (classification dimension \"coicop18\", headline code TOTAL), unit I25 — index base 2025=100 (\"Index, 2025=100\"); euro-area aggregate EA20; latest month 2026-06. Monthly; Eurostat publishes full figures ~2-3 weeks after each month ends (flash estimate earlier). | HICP sub-indices (same single request, dataset and unit as the headline series): bread_cereals=CP0111, meat=CP0112, fish=CP0113, dairy=CP0114, oils_fats=CP0115, fruit=CP0116, vegetables=CP0117, sugar_confectionery=CP0118, ready_made_food=CP0119, juices=CP0121, coffee=CP0122, tea=CP0123, water=CP0125, soft_drinks=CP0126, alcohol_tobacco=CP02, clothing=CP03, housing=CP04, furnishings=CP05, health=CP06, transport=CP07, communication=CP08, recreation=CP09, education=CP10, restaurants=CP11, insurance_financial=CP12, personal_care_misc=CP13, electricity_idx=CP0451, gas_idx=CP0452. All are price indexes (base 2025=100) showing how prices move — never euro shelf prices — and each is best-effort: one failing skips just that series with a note, never the headline series. | GROUPS: ea_hicp_all=Headline; ea_hicp_food=Headline; ea_hicp_energy=Headline; ea_hicp_rent=Housing; ea_hicp_fuel=Transport; ea_hicp_bread_cereals=Food; ea_hicp_meat=Food; ea_hicp_fish=Food; ea_hicp_dairy=Food; ea_hicp_oils_fats=Food; ea_hicp_fruit=Food; ea_hicp_vegetables=Food; ea_hicp_sugar_confectionery=Food; ea_hicp_ready_made_food=Food; ea_hicp_juices=Food; ea_hicp_coffee=Food; ea_hicp_tea=Food; ea_hicp_water=Food; ea_hicp_soft_drinks=Food; ea_hicp_alcohol_tobacco=Alcohol & tobacco; ea_hicp_clothing=Clothing; ea_hicp_housing=Housing; ea_hicp_furnishings=Furnishings; ea_hicp_health=Health; ea_hicp_transport=Transport; ea_hicp_communication=Communication; ea_hicp_recreation=Recreation; ea_hicp_education=Education; ea_hicp_restaurants=Restaurants & hotels; ea_hicp_insurance_financial=Insurance & financial; ea_hicp_personal_care_misc=Personal care & misc; ea_hicp_electricity_idx=Housing; ea_hicp_gas_idx=Housing; de_hicp_all=Headline; de_hicp_food=Headline; de_hicp_energy=Headline; de_hicp_rent=Housing; de_hicp_fuel=Transport; de_hicp_bread_cereals=Food; de_hicp_meat=Food; de_hicp_fish=Food; de_hicp_dairy=Food; de_hicp_oils_fats=Food; de_hicp_fruit=Food; de_hicp_vegetables=Food; de_hicp_sugar_confectionery=Food; de_hicp_ready_made_food=Food; de_hicp_juices=Food; de_hicp_coffee=Food; de_hicp_tea=Food; de_hicp_water=Food; de_hicp_soft_drinks=Food; de_hicp_alcohol_tobacco=Alcohol & tobacco; de_hicp_clothing=Clothing; de_hicp_housing=Housing; de_hicp_furnishings=Furnishings; de_hicp_health=Health; de_hicp_transport=Transport; de_hicp_communication=Communication; de_hicp_recreation=Recreation; de_hicp_education=Education; de_hicp_restaurants=Restaurants & hotels; de_hicp_insurance_financial=Insurance & financial; de_hicp_personal_care_misc=Personal care & misc; de_hicp_electricity_idx=Housing; de_hicp_gas_idx=Housing | Wage index: lc_lci_r2_q (labour cost index, wages & salaries component D11, NACE B-S, seasonally & calendar adjusted, 2020=100). Quarterly with ~2.5 months publication lag; each quarter is stored under its first month (\"2026-Q1\" → \"2026-01\"), the same convention as the US quarterly earnings tracker. | Household electricity prices: nrg_pc_204 (band KWH2500-4999, all taxes and levies included, EUR per kWh; euro-area aggregate EA). Published twice a year with ~4 months lag; each half-year price is stored under its first month (\"2025-S1\" → \"2025-01\", \"2025-S2\" → \"2025-07\"). | Household natural gas prices: nrg_pc_202 (band GJ20-199, all taxes and levies included, EUR per kWh; euro-area aggregate EA). Published twice a year with ~4 months lag; each half-year price is stored under its first month (\"2025-S1\" → \"2025-01\", \"2025-S2\" → \"2025-07\").",
   "lastRun": "2026-07-29T05:55:08.452Z",
   "lastSuccess": "2026-07-29T05:55:11.075Z",
   "lastObservation": "2026-06",
   "rows": 10094,
   "seriesCount": 72,
   "cadence": "monthly",
   "sourceName": "Eurostat — EU statistics office"
  },
  "india": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "India's own data portals block automated access; figures travel MOSPI → OECD → DBnomics, so they can lag the domestic release by a few weeks. | india: index base detected from the data — 2015 = 100, rebased by the OECD from MOSPI's 2012=100 series. Rebasing changes the level labels only; every percentage move is identical to MOSPI's official series. | india_cpi_all: DBnomics OECD/DSD_PRICES@DF_PRICES_ALL, series IND.M.N.CPI.IX._T.N._Z (\"India – Monthly – National – Consumer price index – Index – Total – Neither seasonally adjusted nor calendar a…\") — 136 rows 2015-01 → 2026-04. | india_cpi_food: DBnomics OECD/DSD_PRICES@DF_PRICES_ALL, series IND.M.N.CPI.IX.CP01.N._Z (\"India – Monthly – National – Consumer price index – Index – Food and non-alcoholic beverages – Neither seasona…\") — 53 rows 2015-01 → 2019-05. | india_cpi_clothing: DBnomics OECD/DSD_PRICES@DF_PRICES_ALL, series IND.M.N.CPI.IX.CP03.N._Z (\"India – Monthly – National – Consumer price index – Index – Clothing and footwear – Neither seasonally adjuste…\") — 53 rows 2015-01 → 2019-05. | india_cpi_housing: DBnomics OECD/DSD_PRICES@DF_PRICES_ALL, series IND.M.N.CPI.IX.CP04.N._Z (\"India – Monthly – National – Consumer price index – Index – Housing, water, electricity, gas and other fuels –…\") — 53 rows 2015-01 → 2019-05. | india_cpi_health: DBnomics OECD/DSD_PRICES@DF_PRICES_ALL, series IND.M.N.CPI.IX.CP06.N._Z (\"India – Monthly – National – Consumer price index – Index – Health – Neither seasonally adjusted nor calendar …\") — 53 rows 2015-01 → 2019-05. | india_cpi_transport: DBnomics OECD/DSD_PRICES@DF_PRICES_ALL, series IND.M.N.CPI.IX.CP07.N._Z (\"India – Monthly – National – Consumer price index – Index – Transport – Neither seasonally adjusted nor calend…\") — 53 rows 2015-01 → 2019-05. | india_cpi_education: DBnomics OECD/DSD_PRICES@DF_PRICES_ALL, series IND.M.N.CPI.IX.CP10.N._Z (\"India – Monthly – National – Consumer price index – Index – Education – Neither seasonally adjusted nor calend…\") — 53 rows 2015-01 → 2019-05. | india_cpi_misc: DBnomics OECD/DSD_PRICES@DF_PRICES_ALL, series IND.M.N.CPI.IX.CP12.N._Z (\"India – Monthly – National – Consumer price index – Index – Miscellaneous goods and services – Neither seasona…\") — 53 rows 2015-01 → 2019-05. | india_cpi_food is the CPI basket's own \"food & non-alcoholic beverages\" category (COICOP CP01) — not India's separately published Consumer Food Price Index (CFPI), which is a related but not identical series. | There is deliberately no india_cpi_fuel_light series: COICOP has no \"fuel & light\" category (that grouping is MOSPI's own, and no such label exists in the OECD dataset — fixture-verified) — its items live inside india_cpi_housing (\"housing & utilities\", COICOP CP04). | india_cpi_food: only 53 monthly rows since 2015-01 (a full 2015+ history would have 100+) — stored as-is and charted with its honestly shorter history, never padded. | india_cpi_clothing: only 53 monthly rows since 2015-01 (a full 2015+ history would have 100+) — stored as-is and charted with its honestly shorter history, never padded. | india_cpi_housing: only 53 monthly rows since 2015-01 (a full 2015+ history would have 100+) — stored as-is and charted with its honestly shorter history, never padded. | india_cpi_health: only 53 monthly rows since 2015-01 (a full 2015+ history would have 100+) — stored as-is and charted with its honestly shorter history, never padded. | india_cpi_transport: only 53 monthly rows since 2015-01 (a full 2015+ history would have 100+) — stored as-is and charted with its honestly shorter history, never padded. | india_cpi_education: only 53 monthly rows since 2015-01 (a full 2015+ history would have 100+) — stored as-is and charted with its honestly shorter history, never padded. | india_cpi_misc: only 53 monthly rows since 2015-01 (a full 2015+ history would have 100+) — stored as-is and charted with its honestly shorter history, never padded. | india: STALE MIRROR — newest month available is 2026-04, about 86 months behind today; the OECD/DBnomics mirror is running roughly 85 months behind India's own release (MOSPI publishes each month's CPI about two weeks after the month ends). Data kept and shown with its honest dates; nothing is presented as fresher than it is. | india: the series end on different months (india_cpi_all 2026-04, india_cpi_food 2019-05, india_cpi_clothing 2019-05, india_cpi_housing 2019-05, india_cpi_health 2019-05, india_cpi_transport 2019-05, india_cpi_education 2019-05, india_cpi_misc 2019-05) — each is stored to its own honest end date.",
   "lastRun": "2026-07-29T05:55:11.075Z",
   "lastSuccess": "2026-07-29T05:55:13.033Z",
   "lastObservation": "2026-04",
   "rows": 507,
   "seriesCount": 8,
   "cadence": "monthly",
   "sourceName": "India Ministry of Statistics (MOSPI), via OECD/DBnomics mirrors"
  },
  "oecd": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "The OECD's own SDMX endpoint (sdmx.oecd.org) returned HTTP 500 for this dataflow when live-tested (2026-07-17), so the data comes from the DBnomics open mirror of the same official OECD dataset — the same trusted pattern this site already uses for China and Korea. | Purpose: a genuinely current reading (~2-month publication lag) of the same official exports the IMF-DOT mirror (china_exports/korea_exports) reports with a ~year lag — the IMF mirror keeps the deep history, these series carry the latest months. | oecd_exports_cn: OECD/DSD_IMTS@DF_IMTS series CHN.W.X.C.M.USD_EXC.Y.N (\"China (People’s Republic of) – World – Exports – Commodities – Monthly – US dollars, excha…\") — 137 rows 2015-01 → 2026-05, ~2 month(s) behind the present; calendar- and seasonally adjusted. | oecd_exports_cn: values stored exactly as published, in billion US dollars — the mirror's unit text carries no scale, so the scale was decided from the data's own magnitude (median 248.6885 vs China's known monthly-export range), never assumed. | oecd_exports_kr: OECD/DSD_IMTS@DF_IMTS series KOR.W.X.C.M.USD_EXC.Y.N (\"Korea – World – Exports – Commodities – Monthly – US dollars, exchange rate converted – Ca…\") — 136 rows 2015-01 → 2026-04, ~3 month(s) behind the present; calendar- and seasonally adjusted. | oecd_exports_kr: values stored exactly as published, in billion US dollars — the mirror's unit text carries no scale, so the scale was decided from the data's own magnitude (median 50.287475 vs South Korea's known monthly-export range), never assumed. | oecd_exports_jp: OECD/DSD_IMTS@DF_IMTS series JPN.W.X.C.M.USD_EXC.Y.N (\"Japan – World – Exports – Commodities – Monthly – US dollars, exchange rate converted – Ca…\") — 136 rows 2015-01 → 2026-04, ~3 month(s) behind the present; calendar- and seasonally adjusted. | oecd_exports_jp: values stored exactly as published, in billion US dollars — the mirror's unit text carries no scale, so the scale was decided from the data's own magnitude (median 59.77524 vs Japan's known monthly-export range), never assumed.",
   "lastRun": "2026-07-29T05:55:13.033Z",
   "lastSuccess": "2026-07-29T05:55:29.896Z",
   "lastObservation": "2026-05",
   "rows": 409,
   "seriesCount": 3,
   "cadence": "monthly",
   "sourceName": "OECD — international merchandise trade (via DBnomics mirror)"
  },
  "japanliving": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "cpi: \"総合\" appears 2× in 2020年基準品目 (0001, 0201); using the lowest code 0001. | cpi: table 0003427113 (2020年基準消費者物価指数), whole-country 指数; items 0001→jp_cpi_all, 0002→jp_cpi_food, 0167→jp_cpi_energy. Published ~3 weeks after month end. | retail prices: this survey publishes city-level prices only; using \"特別区部\" (code 13100, Tokyo's ward area) as the reference city — every series is labeled accordingly. | retail: jp_price_pork — the survey priced the loin cut until December 2014 and the belly cut (バラ) from January 2015 onward — the stored window starts 2015-01, so every stored value is the belly cut. | retail: jp_price_tofu SKIPPED — jp_price_tofu: 138 of 138 values outside the plausible yen (yen per 100 g) band 15-80 (e.g. 2015-01=266, 2015-02=264, 2015-03=264) — wrong series or unit basis; refusing to store it | retail: jp_price_coffee — the survey prices its standard specified jar (基本銘柄, 瓶入り); the exact gram size is set — and occasionally revised — by the survey, so the unit is stated as one standard jar rather than a gram count the API metadata cannot confirm. | retail: jp_price_salted_mackerel SKIPPED — jp_price_salted_mackerel: only 18 monthly rows stored (need >= 60); full table coverage 2025-01 … 2026-06 | retail: jp_price_shiitake SKIPPED — jp_price_shiitake: 138 of 138 values outside the plausible yen (yen per 100 g) band 60-600 (e.g. 2015-01=1814, 2015-02=1858, 2015-03=1760) — wrong series or unit basis; refusing to store it | retail: jp_price_enoki SKIPPED — jp_price_enoki: 138 of 138 values outside the plausible yen (yen per 100 g) band 30-400 (e.g. 2015-01=630, 2015-02=570, 2015-03=513) — wrong series or unit basis; refusing to store it | retail: jp_price_shimeji SKIPPED — jp_price_shimeji: 138 of 138 values outside the plausible yen (yen per 100 g) band 40-500 (e.g. 2015-01=854, 2015-02=794, 2015-03=713) — wrong series or unit basis; refusing to store it | retail: the API metadata states no quantity basis for any 銘柄, so units for 78 published item(s) come from the survey's published item specification (調査品目及び基本銘柄) — fresh meat and seafood per 100 g, fresh vegetables and fruit per 1 kg, and container/piece sizes as labeled — and every stored value passed that item's plausibility band for its documented basis. | retail: the survey currently collects 219 active food 銘柄; 77 staples with a confirmable quantity basis are published here and 142 are omitted (no provable quantity basis in the API metadata or the survey spec, strongly seasonal short histories, or niche items). Restaurant (外食) and school-lunch items are out of scope — these are shop prices. | GROUPS: jp_price_rice=Grains & bread; jp_price_bread=Grains & bread; jp_price_milk=Dairy & eggs; jp_price_eggs=Dairy & eggs; jp_price_gasoline=Fuel; jp_price_chicken=Meat & fish; jp_price_pork=Meat & fish; jp_price_cabbage=Vegetables & soy; jp_price_onions=Vegetables & soy; jp_price_coffee=Beverages & alcohol; jp_price_beer=Beverages & alcohol; jp_price_rice_koshihikari=Grains & bread; jp_price_flour=Grains & bread; jp_price_mochi=Grains & bread; jp_price_cup_noodles=Grains & bread; jp_price_tuna=Meat & fish; jp_price_horse_mackerel=Meat & fish; jp_price_sardines=Meat & fish; jp_price_salmon=Meat & fish; jp_price_mackerel=Meat & fish; jp_price_saury=Meat & fish; jp_price_sea_bream=Meat & fish; jp_price_yellowtail=Meat & fish; jp_price_squid=Meat & fish; jp_price_octopus=Meat & fish; jp_price_shrimp=Meat & fish; jp_price_bonito=Meat & fish; jp_price_clams=Meat & fish; jp_price_scallops=Meat & fish; jp_price_salted_salmon=Meat & fish; jp_price_cod_roe=Meat & fish; jp_price_shirasu=Meat & fish; jp_price_dried_horse_mackerel=Meat & fish; jp_price_shishamo=Meat & fish; jp_price_beef=Meat & fish; jp_price_beef_imported=Meat & fish; jp_price_pork_imported=Meat & fish; jp_price_ham=Meat & fish; jp_price_sausages=Meat & fish; jp_price_bacon=Meat & fish; jp_price_butter=Dairy & eggs; jp_price_spinach=Vegetables & soy; jp_price_napa_cabbage=Vegetables & soy; jp_price_green_onions=Vegetables & soy; jp_price_lettuce=Vegetables & soy; jp_price_bean_sprouts=Vegetables & soy; jp_price_broccoli=Vegetables & soy; jp_price_asparagus=Vegetables & soy; jp_price_sweet_potatoes=Vegetables & soy; jp_price_potatoes=Vegetables & soy; jp_price_taro=Vegetables & soy; jp_price_daikon=Vegetables & soy; jp_price_carrots=Vegetables & soy; jp_price_burdock=Vegetables & soy; jp_price_lotus_root=Vegetables & soy; jp_price_nagaimo=Vegetables & soy; jp_price_pumpkin=Vegetables & soy; jp_price_cucumbers=Vegetables & soy; jp_price_eggplant=Vegetables & soy; jp_price_tomatoes=Vegetables & soy; jp_price_peppers=Vegetables & soy; jp_price_apples=Fruit; jp_price_mandarins=Fruit; jp_price_oranges=Fruit; jp_price_strawberries=Fruit; jp_price_bananas=Fruit; jp_price_kiwi=Fruit; jp_price_avocados=Fruit; jp_price_sugar=Seasonings & oils; jp_price_salt=Seasonings & oils; jp_price_soy_sauce=Seasonings & oils; jp_price_onigiri=Prepared & other; jp_price_bento=Prepared & other; jp_price_karaage=Prepared & other; jp_price_eel=Prepared & other; jp_price_green_tea=Beverages & alcohol; jp_price_soy_milk=Beverages & alcohol; jp_price_happoshu=Beverages & alcohol | retail: table 0003421913, 78 of 83 items published; monthly survey, published ~7 weeks after the survey month. | Japan's official wage indexes (Monthly Labour Survey) are frozen at 2015 in e-Stat's API database — the household income side of the Family Income & Expenditure Survey serves as the income signal instead, and the wage indexes can be added if a live table surfaces. | income: jp_household_income = 実収入 (019) × \"二人以上の世帯のうち勤労者世帯(2000年~)\" from table 0002070001; pre-tax, includes bonuses — the plausibility gate therefore applies to the median month (350000-800000 yen), with hard per-value bounds 150000-2000000. | spending: table 0002070001 (家計調査 用途分類, 二人以上の世帯), average per household; 11 of 11 categories published; published ~5 weeks after month end. Survey averages, not a fixed-price basket. | All data via the official e-Stat API (api.e-stat.go.jp) with the same free ESTAT_APP_ID as the japan source.",
   "lastRun": "2026-07-29T05:55:29.896Z",
   "lastSuccess": "2026-07-29T05:55:43.809Z",
   "lastObservation": "2026-06",
   "rows": 12502,
   "seriesCount": 93,
   "cadence": "monthly",
   "sourceName": "Japan official statistics — living costs (via e-Stat)"
  },
  "indiaprices": {
   "state": "ok",
   "ok": true,
   "error": null,
   "note": "Method: national monthly MEDIAN retail price across all reporting WFP-monitored Indian markets. Median (not mean) so the figure is robust to which markets reported. This aggregates real observations only — a month with no reporting market is absent, never interpolated. | Filtered to retail prices quoted in INR with priceflag \"actual\" or blank; WFP \"aggregate\"/\"forecast\" rows were excluded so every stored value is an observed market price. | 23 commodities published (>= 60 monthly medians in the 2015-01+ window). | GROUPS: in_price_onions=Vegetables & fruits; in_price_potatoes=Cereals & tubers; in_price_rice=Cereals & tubers; in_price_sugar=Miscellaneous food; in_price_wheat=Cereals & tubers; in_price_wheat_flour=Cereals & tubers; in_price_oil_mustard=Oil & fats; in_price_lentils=Pulses & nuts; in_price_lentils_masur=Pulses & nuts; in_price_milk_pasteurized=Milk & dairy; in_price_salt_iodised=Miscellaneous food; in_price_tea_black=Miscellaneous food; in_price_tomatoes=Vegetables & fruits; in_price_oil_palm=Oil & fats; in_price_oil_soybean=Oil & fats; in_price_lentils_moong=Pulses & nuts; in_price_lentils_urad=Pulses & nuts; in_price_oil_groundnut=Oil & fats; in_price_oil_sunflower=Oil & fats; in_price_sugar_jaggery_gur=Miscellaneous food; in_price_ghee_vanaspati=Oil & fats; in_price_chickpeas=Pulses & nuts; in_price_milk=Milk & dairy | Skipped the HDX/HXL tag row (any row beginning with \"#\") and 0 malformed/truncated rows; dropped 0 price quote(s) outside the 1-5000 rupee sanity band. | Newest month 2026-05 (~2 month(s) behind today); WFP updates monthly with a typical 1-3 month lag.",
   "lastRun": "2026-07-29T05:55:43.809Z",
   "lastSuccess": "2026-07-29T05:55:45.647Z",
   "lastObservation": "2026-05",
   "rows": 2895,
   "seriesCount": 23,
   "cadence": "monthly",
   "sourceName": "World Food Programme (WFP) — India retail food prices, via HDX"
  }
 }
}
