Open infrastructure

Data

All series are open data under CC BY 4.0. Attribution required; no other restrictions. Not investment advice.

Data day
See latest published payload
Freshness
Source-by-source status
Need a research-ready slice, not the whole archive? Use the Research Workbench to select exact dates and channels, inspect coverage, and download CSV/JSON plus a source- and subset-hashed citation manifest. Everything runs locally in your browser. For interoperable evidence, event, universe and exposure bundles, see the machine-testable OGES public draft and its exact served schemas. The Sensor Fusion test vector shows how eight unlike evidence lanes remain separate and how missing lanes are exposed; the Exposure DNA test vector shows how direct dependencies retain their original units, coverage denominators, freshness and signed change history; and the Shock Compiler test vector shows how hypothetical ranges compile through signed paths without becoming forecasts, probabilities, causal claims or advice. The synthetic L0 traversal and shared-world certificate bind those Max records to one fixture release and expose identity drift; they do not establish any real event, entity, source, right, dependency, exposure, forecast, utility or adoption.

How to read the data

Every file reduces to one idea: each row is one day, and each number answers "how loud is the world's press about this topic today, compared with this topic's own last two years?", 0 means the quietest day in two years, 100 the loudest, 50 a typical day. The five channel columns are the five topics; composite is their simple average. Nothing here is a price, probability, or prediction. Full column-by-column definitions, units, and construction: the codebook.

IGRM keeps its established name, but its construct is geopolitical salience. It is distinct from the Caldara-Iacoviello GPR family. See the standing comparison, including the exact benchmark series, the registered AI-GPR result, and the permanent Divergence Register.

Preview: the last ten days of history.csv

Loading preview…

This is exactly what downloads, no cleaning needed; it loads directly into Excel, pandas (pd.read_csv(url, index_col="date")), or R.

Published files

FileWhat it is
history.csv (view)The primary research artifact: full daily percentile scores, one row per day, 2017-present.
vintages panel (recipe payload)Point-in-time research artifact: reconstruct each published daily series as it stood that morning, verified value-exact against its public git commit.
episodes.csv (view)Research artifact: every detected episode, channel, start, end, peak date, peak coverage share, spike days.
event_study.csv (view)Research artifact: the event study flattened, one row per channel × outcome × window, with means, 95% CIs, and n.
latest.json (raw)Today's composite and per-channel percentile scores, with the definition line.
history.json (raw)Full daily score history per channel and composite (the wikipedia block carries the demand-side second source).
episodes.json (raw)Detected coverage episodes: channel, start, end, peak date, peak volume share, spike-day count.
event_study.json (raw)Mean cumulative relative returns after episode starts with bootstrapped 95% CIs, plus per-episode raw window returns.
validation.json (raw)Hit-rate against the pre-registered episode list, placebo-channel overlap, dictionary-robustness correlations, cross-source agreement, coverage-drift diagnostics.
ai_gpr_benchmark.jsonCode-frozen external benchmark: aggregate and rank-only comparison with the Iacoviello-Tong AI-GPR India series, including the full eligible-month list, registered bootstrap intervals, exploratory matrix, event-month ranks and five largest divergences. No raw AI-GPR values are redistributed.
divergence_register.jsonAppend-only inspection record: dated, receipt-linked rank gaps against AI-GPR and IMF PortWatch, with a claim limit on every row. Disagreement is recorded, not explained away.
sensor_fusion_demo.jsonSynthetic executable foundation: one signed eight-lane structural matrix and one deliberately partial window. It demonstrates semantic separation and explicit missingness, not live sensor coverage.
exposure_dna_demo.jsonSynthetic executable foundation: two signed non-scalar exposure fingerprints plus an exact release delta. It demonstrates original-unit preservation, declared-universe coverage, freshness and explicit gaps—not real entity exposure.
shock_compiler_demo.jsonSynthetic executable foundation: one release-bound hypothetical scenario compiled through a signed exposure path into conservative ranges, substitutions, buffers, source freshness and an assumption ledger. It is not a real disruption, forecast, probability, causal estimate or recommendation.
exposure_traversal_demo.jsonSynthetic L0 conformance vector: a bounded typed-edge traversal from the shared Max fixture release, with exact lineage and explicit missingness. It is not a real dependency, exposure, propagation, forecast, causal, advice or adoption claim.
max_state_join_demo.jsonSynthetic shared-world certificate: four Max engine records agree on one fixture release, object identities, rights position, temporal boundary and coverage denominators. Agreement is not accuracy, observation, production readiness or external utility.
shares.csv (metadata)The published quantity beneath the percentile transform: daily matched-article shares with the measuring instrument named on every row.
splice_sensitivity.json (raw)Calibration audit: the frozen primary scores beside a recomputation under the independently estimated splice ratios, with daily and 7-day shifts. It is a sensitivity series, not a replacement.
alt_specs.json (raw)Secondary specifications: alternative composite weightings, episode thresholds (1.5σ/2.5σ), percentile windows (365/1095 days), each with its correlation to the primary.
seasonality.json (raw)Anniversary-effect quantification: day-of-year partial R² per channel, top recurring dates, deseasonalized-variant correlation.
priced_risk.json (raw)The attention-pricing gap vs India VIX, largest divergence episodes in both directions, and the attention/VIX lead-lag cross-correlation with bootstrap bands.
chokepoints.json (raw)Per-chokepoint weekly press salience vs IMF PortWatch transit calls (both percentiles of own 2019-present history), weekly Spearman on levels, latest gap. Sub-dictionary series; never in the composite.
stress_gauge.json (raw)Experimental: a registered four-component design with per-date available components, effective weights, missing-component disclosure, the published 2/29 hit rate, and a 365-day history. Not a validated headline measure.
receipts.json (raw)The evidence behind the latest day's scores: exact queries plus a tier-ranked, aptness-ordered article sample per channel, with the tier 1-2 share.
receipt_identity.json (raw)Independent source-link status: exact D-1 title, URL and domain records only when separately signed rights permit them. The current inactive form is value-free; it never blocks or enters a score.
expert_shelf.json (raw)Latest think-tank roster publications, channel-tagged, titles and links only.
precision.json (raw)Machine labels and founder calibration under the versioned rubric; uncalibrated and not independent external coding. Blind-audit v2 was invalidated before coding after frame and estimand defects were found. Prospective v3 has a frozen 42-day initial cohort (v3a) and a disjoint 48-day holdout (v3b), but source-frame collection is paused before its first attestation pending a current signed retained-identity rights decision; it remains a protocol, not a precision result.
reliability.json (raw)The morning contract scored from git evidence; misses stay listed forever.
predictions.json (raw)The Prediction Archive registry: dated falsifiable expectations, graded at horizon.
nowcast.json (raw)PROVISIONAL today-so-far scores from a partial-day NGrams sample, replaced about every two hours and superseded by the daily run. Sample size disclosed in the payload. Not part of the historical series; treat as volatile.
receipts.json (raw)Per-channel receipts for the latest published day: the exact GDELT query and a tier-sorted sample of matched articles (source_tiers.json), plus the tier 1-2 spike-quality share. Latest day only, not a historical archive; tiers never enter any score.

Raw inputs (GDELT volume shares, chunk cache, market closes) are versioned in the repository under data/raw/.

For integrators

Dashboards, agents, and pipelines can consume IGRM directly; no key, no signup, no rate limit beyond ordinary politeness. The endpoints below are stable URLs served over HTTPS with open CORS (Access-Control-Allow-Origin: *), refreshed once daily by 6:30 AM IST (01:00 UTC), scoring the news day that closed at 5:30 AM IST; a provisional nowcast refreshes every two hours after.

EndpointContract
data/latest.jsonSmallest useful payload: date, composite, five channel scores with labels, and a _meta block stating the definition and generation time. Poll once daily.
data/history.jsonFull daily series per channel and composite since 2017, date-aligned arrays.
data/history.csvThe same series as CSV, one row per day.
data/episodes.jsonDetected coverage episodes with channel, dates, and peak share.
feed.xmlRSS for the weekly analytical notes.

Schema promise: fields are added, never renamed or removed, within a major version; breaking changes bump the version in the citation and are announced in the methodology changelog. All endpoints resolve under https://igrm.in/. Attribution per CC BY 4.0: "India Geopolitical Risk Monitor (Ishan Krishna)" with a link. The five endpoints above are the quick-start set; the full frozen v2 API contract lists every endpoint this project serves, its promised fields, and the deprecation policy, machine-readable at data/api_contract.json. Tooling can ingest the generated OpenAPI 3.1 description; researchers and reviewers can inspect the companion Datasheet for Datasets.

Codebook

Column-by-column definitions, units, and construction for every file live in the codebook (also on GitHub).

Per-channel quick sheets

Working on one channel? Everything that carries it, in one place. The same files serve every channel; only the key changes.

The reliability record

The morning contract, scored from git commit timestamps rather than self-reporting: day D final by 6:30 AM IST on D+1. Misses stay listed forever. reliability.json carries the full per-day record; the corrections ledger carries every cause.

Embed a live chart

Any page can carry a live IGRM chart with one iframe. Charts: composite, pakistan_west, china_east, gulf_energy, us_trade, shipping, gauge; optional days=90..1095. The salience-not-risk label is part of the widget and cannot be removed.

<iframe src="https://igrm.in/embed.html?chart=composite&days=365"
        width="100%" height="220" frameborder="0" loading="lazy"
        title="India Geopolitical Risk Monitor, composite salience"></iframe>

Corrections and incident ledger: every error this project caught, dated, append-only.

Citation

BibTeX ready for your reference manager.

If you use the data, cite it:

Krishna, Ishan (2026). India Geopolitical Risk Monitor: a category-decomposed press-salience index for India. Version 1.11.0. https://igrm.in/ (data: CC BY 4.0)

BibTeX:

@misc{krishna2026igrm,
  author = {Krishna, Ishan},
  title  = {India Geopolitical Risk Monitor: a category-decomposed
            press-salience index for India},
  year   = {2026},
  url    = {https://igrm.in/},
  note   = {Version 1.11.0. Data: CC BY 4.0}
}

No DOI is currently assigned. Add one only after a clean tagged release and a verified deposit exist.