Event metrics · published contract

Four numbers on every event. Here is exactly how each one is calculated.

We publish the formula, the inputs, the reason recorded for each input, and the measured error bars for every score. Ours are computed by published formulas from named inputs — and, on events coded from 28 July 2026, the reason the coder gave for each input is recorded and returned by the API, so you can re-derive any value by hand, disagree with a specific input, and know precisely what the number does and does not claim.

The model reads facts. A formula does the arithmetic.

We separate the two jobs, which is how canonical event datasets have always worked — the lineage runs from KEDS and TABARI through PETRARCH to ICEWS and GDELT. A language model reads one event and extracts a small set of concrete sub-factors, recording why it chose each value. A fixed, versioned function then turns those facts into a score.

01
Extract

The coder reads the source cluster and fills named sub-factors — deaths, how substitutable the touched node is, whether a barrier broke — with a written reason for each.

02
Compute

A published, versioned formula turns those values into the score. The same function runs in production and in every benchmark, so they cannot drift apart.

03
Audit

You get the inputs, the reasons and the arithmetic. Re-do it yourself, or reject one input and see what changes.

Why bother? Because the alternative — letting a model emit a number directly — gives you nothing to check. When our own coder produced a magnitude we could not reconstruct, we had no way to tell a judgement we disagreed with from a bug. Now every value has a paper trail.

Sanity-checked against events you already have intuitions about

A rubric that only works on the events in our corpus is not a rubric. These are scored the same way any event is, and each is one you can check against your own judgement — the conflict rows are recomputable from the death count shown beside them.

EventYearMagnitudeReading
Powell's semiannual testimony to Congress20241economic tier 1 — routine, no new policy signal
Macron dissolves the French parliament20245economic tier 5 — a genuine shock, stocks and the euro sold off
October 7 attacks in Israel20238.2conflict path — 2 + 2·log₁₀(1,200 deaths)
Attempted assassination at a Trump rally20242.6conflict path — 2 + 2·log₁₀(2 deaths)

The last row is the one worth dwelling on. An assassination attempt on a US presidential candidate scores 2.6 — because magnitude measures physical intensity, not importance. Two casualties are two casualties. Its importance lives in the other three metrics and in significance. If that split feels wrong, you now have the formula to argue with.

See it on a real event

Every metric on this page comes back on GET /api/v2/events. The Arena runs the same serve functions the public endpoints use, so what you see there is exactly what your integration receives.

magnitude

0–10 · null when unknown

How intense was this event, for its own type?

Most events have no death toll, so magnitude is not one formula — it is four ladders, and the coder picks which one applies before scoring. In a 136-event sample of recent corpus events the coder chose verbal 41%, economic 40%, conflict 12%, hazard 7% — so the fatality path, the one with the deepest academic pedigree and usually the only one explained, accounts for about one event in eight.

when the event has a death toll
magnitude = min(10, 2 + 2 · log10(deaths))
otherwise
magnitude = value on the path ladder

Only the conflict path is arithmetic. The other three are anchored ladders the coder places the event on, using that domain’s rubric. All four land on 0–10, but compare magnitude within a domain, not across — a 7 on the verbal ladder and a 7 on the hazard ladder are not the same claim. To rank across domains, use significance.

The variables
path
Which ladder applies — conflict (people were killed), hazard (physical damage or disruption, no deaths needed), verbal (a statement, threat or coercive act with no physical effect), or economic (money, contracts, licences or legal obligations move). Chosen first and recorded, because the four are not measured the same way.
deaths
The death toll. The only numeric input to any magnitude formula, and it applies to the conflict path alone.
value
On the other three paths, the rung the coder places the event on — how severe the disruption, how coercive the act, or how large and binding the economic change — judged against the anchors in that domain's rubric.
The anchors
verbal path · POLITICAL · 0–10
1De-escalation or aidPeace, truce, ceasefire, retreat, signed agreement, easing sanctions (087, 057, 07x, 081–086)
2Cooperative intentAppeal, consultation, cooperative meeting, mediation (02x, 03x, 04x, 06x)
3Neutral statementComment, symbolic act, acknowledgement or denial (01x)
4AccusationAccuse, criticise, denounce, complain, sue, investigate (09x, 11x)
5Demand or refusalDemand, reject, refuse to yield, defy, veto (10x, 12x)
6ThreatAny threat, including to use military force, or an ultimatum (13x) — a speech act, not force
7–8Coercion imposedSanctions or embargo imposed, relations broken, expulsion or deportation, curfew or martial law, parties banned (15x, 161–166, 172x)
9–10Seizure or forceSeize, confiscate or destroy property (171x). Acts of force are ACLED-scope, so 171x is normally the top rung available here.

This is the ladder for one path in one domain — every domain ships its own, and the coder picks a rung rather than inventing a number. On the verbal path the rungs map to CAMEO verb codes, so the rung follows from the action coded, not from a sense of how big the story felt. Within a two-value band, the higher value goes to the broader imposed scope — more targets, national rather than local, indefinite rather than time-limited. The prompt also forbids deriving it from goldstein_scale, which is a fixed per-verb constant and so cannot express intensity at all.

The anchors
economic path · 0–10
0–2Routine releaseA surprise CPI miss that is not crisis-level; a minor rate adjustment in normal conditions
3–4Significant shiftA 50bp hike at the start of a cycle, a moderate stimulus package, a minor sovereign downgrade
5–6Major actionEmergency rate cut, large-scale QE launch, significant tariff package, credit rating cut to junk
7–8Systemic stressMajor bank failure, capital controls imposed, devaluation over 20%, large IMF bailout
9–10CatastrophicSovereign default, currency collapse, full banking-system crisis, hyperinflation milestone

The economic ladder, for contrast — same 0–10 scale, entirely different anchors, because a rate decision and a deportation order are not intense in the same way. This is why magnitude compares within a domain and not across.

Adapted from
Log-fatality severity, on a 1–10 magnitude range
In use by
The Center for Systemic Peace publishes MEPV on this 1–10 construction; UCDP and the Correlates of War project use fatality thresholds to bound armed conflict.
What we changed
Richardson's log slope is unchanged. We fix the intercept at 2 so a single fatality does not read as zero, matching MEPV's 1–10 range. The 25 and 1,000-death thresholds are cited as precedent for banded severity — no formula of ours consumes them. The three non-conflict ladders are ours; these sources address armed conflict only.
Worked on a real event
Nationwide power grid blackout in HavanaINFRASTRUCTURE · 18 articles · path = hazard

“A nationwide infrastructure failure left approximately 9.6 million people without electricity, halted most public transport, and cancelled tens of thousands of surgeries.”

value = 7 on the hazard ladder magnitude = 7

No deaths are reported, so the conflict formula never applies — and the event is plainly severe. That is what the other three paths exist for.

systemic_importance

0–1

How much does the wider system depend on the thing this event touched?

It scores the node — a named grid, port, firm or ministry — not how many countries appear in the coverage and not how big the story was. The coder names the node first, so the three scores are about something concrete.

systemic = size + interconnectedness + irreplaceability3

Equal weights, deliberately: differential weights would imply a precision about relative importance that neither we nor the regimes below can support.

The variables
node
The specific thing the event touched, named. Not a term in the arithmetic — it is what the three scores below are about.
size
How much of the system that node accounts for. A national grid scores high; one branch office scores low.
interconnectedness
How many other things depend on it. Electricity feeds hospitals, transport and payments; a single warehouse feeds one supply chain.
irreplaceability
How hard it is to substitute. A sole-source chokepoint scores high; one of many competing suppliers scores low.
The anchors
each sub-factor · 0–1
0.9–1.0size, at the topReserve-currency central banks and G7 fiscal authorities
lowsize, at the bottomA mid-size emerging-market central bank, one regional bank, a single statistical agency
≈1.0interconnectedness, at the topA reserve currency's policy rate — everything keys off it; interbank funding and settlement rails close behind
lowinterconnectedness, at the bottomA purely domestic tax change with no cross-border leg
1.0irreplaceability, at the topA unique chokepoint — the only settlement rail for a currency, a sole route for a traded commodity
lowirreplaceability, at the bottomOne of several competing suppliers, where substitutes exist now rather than in years

Anchors are per-domain and name real institutions. The ECONOMIC prompt is shown; INFRASTRUCTURE anchors on grids, ports and chokepoints, CORPORATE on issuers and supply chains. Every domain prompt states the base rate is LOW — a routine measure usually touches no systemic node at all, and should score near 0 rather than promoting the country itself into a node.

Adapted from
Systemically-important-institution assessment
In use by
The Basel Committee and FSB designate global systemically important banks annually on five equally-weighted categories; the ECB and national regulators apply the EBA's O-SII criteria across the EU.
What we changed
Those regimes score institutions on balance-sheet data we do not have. We score the node an event touched, on rubric anchors, and take the plain mean of three categories rather than five. That difference is why this is a rubric score and not a Basel score.
Worked on a real event
Anthropic's $1.5bn copyright settlement approvedCORPORATE · 15 articles

node — Anthropic and the generative-AI copyright/licensing ecosystem

size0.70A major AI developer; reportedly the largest known U.S. copyright settlement of its kind.
interconnectedness0.70Claims span authors, publishers, copyrighted books and AI training practice across connected technology and media sectors.
irreplaceability0.30Important, but there are competing AI developers and alternative content-licensing arrangements.
0.70 + 0.70 + 0.303= 0.57

propagation_potential

0–1

How open are the routes out of this event, right now?

Not a probability and not a forecast. It scores transmission conditions observed in the event as reported — a high score says the routes are open and the slack is gone, not that a shock will travel them.

if channel ≤ 0.05
propagation = 0
otherwise
propagation = channel + coupling + breach + primed + (1 containment)5

Two things carry the design. channel is a gate — if no live route out exists, nothing can propagate however severe the event, so the score is 0 outright rather than a small positive number. And containment subtracts: a damper already acting reduces how far a shock travels, so it enters as 1 − containment.

The variables
channel
Do live routes out exist right now — operational dependency, common financial exposure, physical or geographic contact, or confidence and belief? This one gates: 0 means genuinely self-contained.
coupling
How little slack there is. No buffer, no spare capacity, no substitute, no time to react — a shock moves rather than being absorbed.
breach
Whether something that was holding has just given way: a first, a threshold crossed, a previously observed restraint broken.
primed
Whether the receiving system was already stressed before this happened — an existing crisis, a deadline, a market open.
containment
Whether credible dampers are ALREADY acting: a mediator, a backstop, a failover, service restored. This one subtracts.
The anchors
each sub-factor · 0–1
0.7–0.9coupling, tightNo spare generation margin, no inventory or buffer stock, just-in-time inputs, single route, no alternative berth, no spare fibre, reservoir low, peak demand
0.1–0.3coupling, looseStorage full, alternate carriers already taking the volume, off-peak, days of fuel stock reported
highbreach, present“First outage of the entire network”, “first since”, “unprecedented”; a chokepoint blocked for the first time; protection schemes that failed and let a cascade past the last ring
highprimed, stressedA grid already on emergency margins, a cold snap or heatwave, a port already congested, a tight LNG market, a war zone, a repair backlog
0channel, self-containedThe asset is genuinely islanded and nothing depends on it — a redundant link that failed over, a local outage already restored, a spur road with parallel routes. This is the gate: score 0 and the metric is 0.
subtractscontainment, already actingTraffic rerouted, failover or backup generation online, service restored within hours, reserves released, a repair ship dispatched — dampers ALREADY acting, never ones that exist on paper

From the INFRASTRUCTURE prompt, where these conditions are most directly observable. Note the anti-pattern the prompt states explicitly: absolute size alone is NOT breach — a large but routine, well-drilled outage scores low, because nothing that was holding gave way.

Adapted from
Barrier degradation and interdependency coupling
In use by
ERCS is the European Commission and EASA scheme for classifying aviation occurrences, binding since January 2023. The Rinaldi–Peerenboom–Kelly dependency model is applied to critical-infrastructure analysis by Argonne National Laboratory for DHS and CISA. The ESRB weighs pre-existing stress in its systemic-risk assessment.
What we changed
ERCS scores how far an aviation safety barrier was degraded, using incident data; we apply the same shape — barriers, degradation, dampers — to a news event using rubric anchors. The structure is borrowed; the calibration is ours and is NOT validated against downstream outcomes.
Worked on a real event
Nationwide power grid blackout in HavanaINFRASTRUCTURE · 18 articles
channel0.85Live operational dependency observed through electricity-dependent transport and medical services.
coupling0.80Total disconnection immediately halted much public transport and cancelled surgeries — little slack.
breach0.55A total national grid disconnection crossed a major service-continuity threshold.
primed0.80Fuel shortages and a deteriorating grid were already present, indicating a stressed system beforehand.
containment0.35The ministry activated restoration protocols — a documented but not yet completed damper.
0.85 + 0.80 + 0.55 + 0.80 + (1 0.35)5= 0.73

market_sensitivity

0–1

How directly does this attach to something actually traded?

An unsigned materiality signal — not a predicted price move and not a direction. Judge whether a traded claim exists in the world, not whether the article mentions markets.

if claim_exposure ≤ 0.05
market = 0
otherwise
market = claim_exposure + economic_bite2

claim_exposure gates. If nothing traded is exposed there is nothing to be sensitive, so the score is 0. A specialist can express almost any view through proxies, contracts or private markets — so “could someone trade it?” is true everywhere and discriminates nothing. The rung asks how directly this attaches to a claim that actually exists.

The variables
claim_exposure
How directly a traded claim is involved, on six rungs: 0 nothing exposed · 0.10 generic only, where the country merely has traded debt or a currency (most local crime, protest and domestic politics belongs here) · 0.35 a named sector or commodity complex through a stated mechanism · 0.60 a specific claim identifiable but not the point of the event · 0.80 that claim is the subject, acted on first-order · 1.00 the event sets the terms of the claim itself. A traded claim is broader than a listed share: sovereign debt, exchange-traded commodities, credit and contractual claims, an asset freeze, an insurance exposure, or a major private company with real secondary or private-credit exposure all count.
economic_bite
Whether something has ALREADY acted on that claim's economics, on six rungs: 0 pure speech or symbolism · 0.20 a procedural step with no operative effect yet · 0.40 a real but bounded effect · 0.60 a binding in-force effect · 0.80 a large in-force effect on core economics · 1.00 the claim's basic economics or legal status changes. Score what has happened — do not forecast, and do not reason about what was priced in.
Adapted from
Reasonable-investor materiality
In use by
The reasonable-investor test governs US securities disclosure and is applied by the SEC, including in the 2023 cyber-incident rule; MAR Art. 7(4) and ESMA guidance apply the equivalent test across the EU; ASX Listing Rule 3.1 and IFRS S1/S2 use materiality the same way.
What we changed
Those regimes ask a binary — must this be disclosed? We need a graded score, so the two limbs are scored on rungs and averaged. Lafonta is why the score is UNSIGNED: information can be precise without indicating which way a price will move. An earlier version multiplied by a surprise term; it was retired because how much was already priced in is a market-state question a coder cannot answer from an article.
Worked on a real event
Two events, and why the bigger one scores lowerCORPORATE vs INFRASTRUCTURE
Anthropic settlement
claim_exposure0.80Acts directly on Anthropic's own legal and contractual claim through a court-approved settlement.
economic_bite0.80Approval makes a large obligation operative — it affects cash flow and legal standing now, not later.
0.80 + 0.802 = 0.80
Havana grid blackout
claim_exposure0.10No specific traded company or contract identified; exposure is generic sovereign and currency only.
economic_bite0.80Already in force nationwide, disrupting core economic capacity and essential services.
0.10 + 0.802 = 0.45

This is the metric working, not failing. The blackout is severe — magnitude 7, systemic 0.85 — but almost nothing traded attaches to it. market_sensitivity measures ATTACHMENT to a traded claim, not how bad an event is.

How the four combine

They mostly don’t. The four are reported separately and are not averaged into an index, because they answer different questions — the Havana blackout is 0.85 systemic and 0.45 market, and collapsing that into one number would destroy the only interesting thing about it.

One number does combine them: significance, the default sort on /api/v2/events. It blends the four with Goldstein intensity, fatalities, civilian targeting, article evidence and confidence, then divides by the highest total that event’s own family can reach — which is what makes a Conflict event and a CAMEO+ event comparable despite drawing on different terms.

significance = weighted termsfamily maxconflict 1.00 · CAMEO+ POLITICAL 0.90 · other CAMEO+ 0.65

The four contribute the CAMEO+ terms. An unmeasured magnitude drops its term and its weight, which re-weights everything else — the measured effect on significance is up to ±0.22 in either direction, so it is not neutral.

What these numbers are not

They are judgements, not measurements.

Nobody measured Anthropic's systemic importance with an instrument. A language model read the coverage, answered a fixed set of questions against a published rubric, and a fixed formula turned those answers into a number. That is more auditable than a score with no stated method — you can read every input and disagree with a specific one — but it is still judgement.

They do not predict anything.

propagation_potential is not a probability that something will spread, and market_sensitivity is not a forecast price move or a direction. Both score conditions present in the event as reported.

The frameworks are borrowed structure, not endorsement.

We adapt the shape of established methods, which is what makes these scores legible to an analyst who already knows them. None of the institutions named on this page endorses, reviews, or is affiliated with this work.

Coverage against hard registries is thin.

Across 42,099 events, 2.2% touch a node we can match to a hard registry and 1.5% attach to an identifiable traded instrument. Treat all four as ordinal ranking signals — good for sorting and triage, not for asserting one event is 1.4× another.

The error on each scale

We coded the same 59 events three times and measured how far each score moved when nothing changed. The grey band is that noise. Do not read a difference smaller than the band — it is indistinguishable from the instrument talking to itself.

magnitude3.5 ± 0.72
010
systemic_importance0.26 ± 0.07
01
propagation_potential0.31 ± 0.06
01
market_sensitivity0.27 ± 0.06
01

Bars show the corpus mean; the band is twice the measured run-to-run standard deviation. Magnitude is the least stable — the verbal path and the ~8% of events that switch path between runs account for roughly half of that, and hazard is by far the steadiest.

One thing this does not tell you. Three runs agreeing proves the instrument is consistent, not that it is right — a scorer that was reliably wrong would look identical. Establishing correctness needs a rubric-blind gold set graded by domain experts, which we have not built. propagation_potential in particular has no outcome validation: we do not currently measure whether high-scoring events are followed by more downstream events than low-scoring ones.

When this took effect, and what happens to older events

contract version
v2-2026-07-24
in effect from
28 July 2026. Events coded from that date use these formulas and record the sub-factor evidence.
older events
Events coded earlier carry the previous scores and no recorded evidence. They are not wrong, but they sit on a different scale — use the presence of metrics.metric_inputs as the boundary marker.
backfill
Planned, not yet run. We intend to re-code the back catalogue onto v2 so the whole corpus sits on one scale, and to record the sub-factor evidence for those events too.