Live in preview. The
/api/v2/intelligence/* endpoints and their MCP tools require the can_use_intelligence entitlement. Readings are labeled provisional while the baseline matures.Atlas GPR
What it is
Atlas GPR answers one question: how geopolitically tense is this place right now, compared with its own normal? It is a deviation index. A reading of100 means a place is running at its own typical level of geopolitical tension. 180 means 1.8× that level. Crucially, each place is measured against itself — never against a global average and never against a leaderboard — so the index is not dominated by the countries that simply generate the most news.
Why you should care
Raw counts are a trap. The United States and India produce enormous volumes of coded events every day because they are large, media-dense, and heavily covered; Chad does not. Rank countries by event volume and you rebuild a map of media attention, not of risk. Normalizing against a place’s own baseline removes that. A GPR spike in a quiet country is visible precisely because it is unusual there — which is the signal a monitoring desk actually wants, and the one raw volume buries.What it is useful for
- Monitoring and tripwires. “Tell me when this place moves materially above its own norm” is a well-posed query against a deviation index, and a meaningless one against raw counts.
- A macro risk-premium input. Geopolitical risk indices are established inputs to oil, defense, and risk-premium models. Atlas GPR provides a multilingual, per-country, drill-through version.
- Narrative triage. The Attention lens tells you what the world is preoccupied with; the Events lens tells you what actually happened. The gap between them is itself informative.
- Evidence gathering. Every reading drills to the underlying narratives and coded events, so an index move becomes a reading list rather than an alert you have to go re-research.
Two lenses on the same question
Atlas GPR is served through two independent lenses, switchable on the page and via thevariant parameter.
Both lenses produce a
tension_share in [0,1], normalized identically:
baseline_mean is that place’s own average tension_share over the trailing ~90-day baseline window.
The Attention lens
Plain language: of all the news attention on this place, how much is about war, threats, and conflict? This is the lens most faithful to the original GPR.Numerator = the total article count of the narratives whose headline is tension-bearing (matched against a war/threat keyword dictionary).Denominator = the total article count of all narratives for the place.
- Inputs: the Stories primitive —
GET /api/v2/stories. Each Story is a cluster of articles about one narrative and carries anarticle_count(its media footprint). A 300-article narrative counts 300× a single wire brief. - What counts as tension: a GPR-style keyword dictionary (war, strike, missile, sanction, blockade, incursion, …) applied to each narrative’s headline — the same idea as the Fed’s GPR, run over our multilingual stream.
- Geography: country readings use narratives that name that country, exactly how the Fed builds GPRC. The world reading uses every narrative, so it is the most robust reading Atlas produces.
The Events lens
Plain language: of all the events we coded for this place, how much of the coded activity is conflict? Grounded in structured events, so you can drill from the index straight to incidents.Numerator = the sum of event significance over tension-bearing coded events.Denominator = the sum of event significance over all coded events for the place.
Two constructions: construction=own_coverage and construction=world_corpus
Both are served. own_coverage is the default and is unchanged; world_corpus is the
field’s reference construction, added as a parallel index rather than a replacement.
They are named by their denominator, not by a version number — this endpoint already
lives under /api/v2, so a v1/v2 value here would read as which API rather than
which index.
own_coverage printed its monthly low, because its non-qualifying coverage grew faster.
Why fourteen days. Corpus normalization does not remove the weekday cycle. Two whole
weeks contain each weekday exactly twice, so the artifact cancels by construction rather
than by correction — measured day-of-week amplitude 35.0% → 3.7%.
Why no severity weighting. Tested four ways. C&I’s own intensity-weighted AI-GPR
correlates r = 0.97 with binary counts; fatalities exists only on conflict events,
so 72% of qualifying events structurally cannot carry one; a fitted severity weight
collapses to one free parameter (R² 0.949 on 14.24·acts + 5.03·threats); and Goldstein
is documented magnitude-blind by both GDELT and ICEWS — “two riots, one with 10 people
and one with 10,000, will both receive the same score.”
How to read a reading
- ×norm.
100= normal for that place;150= 1.5× its usual;<100= quieter than usual. - Bands. Subdued · Normal · Elevated · Surging · Extreme — anchored so the global top-decile of material conflict can never band as merely “Normal.”
- NULL, not
0. Below the floor the reading isinsufficient_datawith aninsufficient_reason.own_coverage’s floor is coverage events on the day (world 0 · continent 80 · region 40 · country 20);world_corpus’s is 100 qualifying events in the base window, andprecision.base_eventsreports where a series sits relative to it whether or not it clears. - Fixed baseline. The reference window is frozen, not trailing. A rolling baseline re-anchors a country in sustained crisis to its own crisis, so the index decays toward 100 at the peak of what it exists to detect. Each re-freeze mints a new
baseline_version; the old one stays readable. - A coder change is an instrument change. Baselines are frozen per coder generation and every reading is normalized against its own —
baseline_coder_versiontells you which. A series spanning a coder change is not one comparable series. - Provisional. Labeled provisional throughout; comparable only within a fixed methodology + coder version.
Status and honest limits
The floor reads one day, and the week is not flat
Two properties of the daily series shape what you can do with a country reading. The coverage floor is applied to a single day. A country producing a handful of events a day never clears it, even when a week of its events comfortably would — soinsufficient_data on a given day means
“not enough evidence that day”, not “nothing happened there”. Aggregate before you conclude.
The corpus is not flat across the week. A Sunday carries far less news than a Wednesday, and a share
measured over one day inherits that. Measured on the live series, the p90 band fires on 4.7–6.6% of
Monday–Friday days but 20.0% of Sundays, and p98 on 7.1% of Sundays against a promised ~2%. A
“Surging” reading is three to four times more likely on a Sunday for calendar reasons alone. Do not
compare a weekend reading to a weekday one, and do not alert on a single day’s band without a
day-of-week control.
Both are properties of measuring over one day, and both dissolve under a whole-week window — the
construction the original Caldara–Iacoviello GPR uses, and the direction this index is moving.
Two further limits worth stating plainly:
- History is short. Consistently coded events begin in March 2026, and the index itself starts 2026-04-05. Any time-series study of Atlas GPR is capped at a few months, which is not enough to establish predictive power. We are accruing history rather than claiming it.
- Validation is concurrent, not predictive. Against the published GPR daily series, our Attention lens tracks moderately (roughly 0.5 on weekly movements) and the Events lens intentionally measures a different quantity — conflict intensity rather than media attention. We have not demonstrated that Atlas GPR forecasts market or macro outcomes, and we do not claim it.
What we are trying to do
The goal is a geopolitical risk index that is multilingual, per-country, drillable to evidence, and composable with asset and entity data — the things the classic GPR, by design, is not. The near-term roadmap is coverage and history, in that order: deepen per-country coverage until the floor stops suppressing most of the map, and accrue enough consistent history to replace the provisional baseline with a real one and publish splice factors.How Atlas differs from the classic GPR
Frequently asked questions
Is this the Federal Reserve's GPR?
Is this the Federal Reserve's GPR?
No. Atlas GPR is inspired by the Caldara–Iacoviello GPR and built in the same spirit, but it is an independent index computed from GDELT Cloud’s own multilingual Stories and Events. We do not use or redistribute the Fed’s series.
Attention or Events — which should I use?
Attention or Events — which should I use?
Use Attention for the GPR-style “how preoccupied is the world” barometer, comparable to the classic index. Use Events for a grounded, drill-to-incident measure of coded conflict, or when you need to pivot from the index into the specific events driving it.
Why is my country blank?
Why is my country blank?
Below the coverage floor, Atlas withholds the reading rather than emit a misleading
0. Given the coverage reality above, this is the expected outcome for most countries today. Broaden to region or continent for a reliable reading.Can I use it as a trading signal?
Can I use it as a trading signal?
Not on our evidence. We have shown concurrent tracking against the published GPR, not predictive power, and our history is too short to establish it. Treat Atlas GPR as a monitoring and evidence-gathering tool until a real backtest exists.
API
GET /api/v2/intelligence/gpr
Parameters include
construction (own_coverage | world_corpus), level, geo, variant (attention | fullspectrum), component, window, and date_*. own_coverage returns the reading, band, tension_share, coverage and the baseline used; world_corpus returns gpr, corpus_share, world_events and a precision block carrying days_in_window and base_events. Either returns insufficient_data with a reason rather than a number. component is validated per lens: Attention publishes only all, and the GPR lens has no verbal/material, so an unsupported pair returns 400 INVALID_ENUM listing what that lens does have. Try it in the API Arena.Atlas Posture
Preview.
GET /api/v2/intelligence/posture is available on the Intelligence tier. Like the rest of Atlas the index is labeled provisional while its reference window is short, and the structural axis is the newest part. Response shape and coverage may still change.What it is
Atlas Posture answers a different question from Atlas GPR, and the difference is the entire point.- GPR asks: how hot is this place running versus its own norm? A deviation.
- Posture asks: what state is this place actually in? A condition.
The two axes
Dynamic axis
Moves with events. Conflict & Security, Systemic Gravity, Markets & Economy, Flows & Contagion — computed from our own coded events over a rolling window. This is what changes week to week.
Structural axis
Moves with institutions. Governance, democracy, development, economy, and militarization — annual, lagged, and slow. This is the condition a shock lands on.
Why you should care
Deviation indices systematically under-report chronic crises. This is the single most important thing Posture fixes. If your monitoring is built only on “what changed,” it will go quiet on Yemen, Myanmar, and Sudan exactly as those situations become entrenched — because entrenchment is the absence of change. Structural condition is the best available predictor of instability, and it is not in the news. The political-instability forecasting literature — most prominently the Political Instability Task Force — consistently finds regime characteristics, not event counts, to be the strongest predictors. That information is annual and public, and it is invisible to any pipeline that only reads today’s headlines. A condition index is comparable across places; a deviation index is not. “Which of the 40 countries I operate in is in the worst condition” is a well-posed question against Posture and an ill-posed one against GPR.What it is useful for
- Exposure screening. Rank an actual country footprint by condition rather than by news volume.
- Chronic-crisis monitoring. Keep entrenched situations visible after they stop being novel.
- Context for a GPR spike. The two indices are designed to be read together: GPR says something is happening, Posture says here is what it is happening to.
- Due diligence and country risk memos. A decomposable score with named, citable inputs is defensible in a way a proprietary black-box rating is not.
How it is scored
The dynamic axis
A 0–100 composite of four pillars with fixed, published weights: Conflict & Security (0.35), Systemic Gravity (0.25), Markets & Economy (0.25), Flows & Contagion (0.15). Each pillar is the mean of its sub-indicators. Each sub-indicator is a share or per-event mass computed over a window — 30 days by default — by summing numerators and denominators across the window and dividing once, never by averaging daily figures. Fatality intensity is deliberately scored against absolute anchors on the scale the conflict-research field recognizes (25 deaths/year, 1,000 deaths/year), so a war reads as a war regardless of how the rest of the world is doing that quarter. Because our fatality counts come from our own conflict-event coding, they cover a broader set of deaths than battle-related-death datasets; the anchors are reference points, not a claim of equivalence. Every pillar is also computed twice more — split by whether an event’s actors are entirely internal to the country or span a border — giving an internal and external reading beside the headline.The structural axis
Five dimensions, built from public annual indicators:Governance and democracy are kept separate on purpose. The World Bank measures whether a state is effective; V-Dem measures whether it is democratic. These come apart constantly — China scores far better on governance effectiveness than on democracy, and collapsing them into one “institutions” number would erase exactly the distinction that predicts instability.
Absolute anchors, not a leaderboard
Every structural indicator is scored against fixed good/bad reference points on its own scale — not against the live field of other countries. This is a correctness requirement rather than a preference, and it is worth being explicit about why, because the first implementation got it wrong: Anchoring each indicator to fixed reference points fixes all three: a country’s score depends only on its own condition, and an aggregate becomes a real number that can move. With absolute anchors the GDP-weighted world scores 19.8 — decomposing into governance 29.5, democracy 37.8, development 8.9, economy 6.7, and militarization 16.3 — against Europe at 10.4. Under the old ranking approach that world number was, necessarily, about 50 no matter what was happening on Earth. Indicators whose meaningful range is multiplicative rather than additive — GDP per capita, for instance — are anchored on a log scale.Status and honest limits
- Structural inputs are annual and lagged. V-Dem v16 carries a 2025-03-10 vintage and World Bank indicators trail by one to two years. This axis describes standing condition and cannot move on the news. That is the design, not a defect — but it means Posture is not a real-time product on that axis.
- Dynamic-axis coverage is limited by the same event history as GPR. Roughly 60 countries clear the dynamic coverage floor over a 30-day window; the rest return null.
- A fifth pillar is deliberately unshipped. Narrative & Information is specified but not published: the inputs it needs do not exist at the density a daily country panel requires, and publishing it on what does exist would manufacture a number. Responses name it as deferred rather than quietly omitting it.
- Point estimates only. V-Dem publishes uncertainty intervals for its expert-coded indices; we currently store the point estimate.
What we are trying to do
Posture is meant to be the answer to “your risk index went quiet on a country that is still on fire.” The end state is a decomposable, citable condition score for every country with adequate coverage, published beside GPR so a user can always ask both what changed and what is it changing on top of. The work between here and there is coverage on the dynamic axis, a public endpoint, and — eventually — treating the non-monotonic instability signal in regime type (the “anocracy in the middle” finding from the PITF literature) as a forecast feature rather than a condition score.Influences and references
Political Instability Task Force — Goldstone et al. (2010)
“A Global Model for Forecasting Political Instability,” American Journal of Political Science 54(1). Found partial democracy with factionalism to be the single strongest predictor of instability, using a strikingly small set of variables. The reason Posture carries a democracy dimension at all.
Varieties of Democracy (V-Dem)
Coppedge et al., V-Dem Country-Year Dataset v16 (2026). Expert-coded democracy indices — electoral (polyarchy), liberal, civil liberties, and freedom of expression. Free to use with citation requested; we load v16 for 176 countries, 1990–2025.
Worldwide Governance Indicators — World Bank
Kaufmann & Kraay. Six governance dimensions as standardized scores. CC-BY-4.0.
Fragile States Index — Fund for Peace
A well-established country-condition index and a useful sanity check on face validity. Not ingested — an influence and a comparator only.

