Skip to content
Straits
Degraded feedsOilstale 37mTransitslive 9h

Methodology

How the data gets here.

Each indicator on the page, with the upstream feed where we can name it, how fresh it is, and what it can’t tell you. Each live section also surfaces a per-indicator data-health chip that flags live, curated, or stale at a glance. A separate Supplementary feeds section at the bottom covers indicators derived from third-party aggregators whose upstream we keep private to preserve access. Read this before quoting any number.

Hormuz Index · v0.4.0

How the Hormuz Index is computed.

Why two numbers. v0.1 of the index combined current-state signals (insurance, transits, options vol, recent events) with a single forward-looking signal (Polymarket) into one 0–100 headline. A reader pointed out the obvious: four of five inputs measure what just happened, so the headline was effectively a state reading dressed as a forecast. v0.2 splits the brand into two parallel indices, each backed only by inputs that match its claim. Both ship in lockstep, recompute every 5 minutes, share the same bands and rails, and publish per-input contribution on the audit endpoint.

Crisis Pressure Index: state.

What is happening right now. Four measured signals about the physical strait and the markets that price its present condition. The override rule fires here: when any single input scores at or above 75, the headline is floored at 0.9× that input’s score, so a high-severity signal cannot be averaged away; the physical-strait override is load-bearing for crisis severity.

What this does not measure. The Crisis Pressure Index is not a forecast. A high value tells you the present is bad; it does not tell you whether the next 30 days will be worse. The Escalation Forecast below answers that question.

  1. 30%

    Physical reality

    IMF PortWatch daily transit count deviation from the pre-crisis baseline. The unique physical-strait signal: cannot be faked by markets, independent of sentiment.

    IMF PortWatch chokepoint6 + proprietary AIS aggregation

  2. 25%

    Insurance

    War-risk insurance multiple vs peace-baseline rates for VLCC voyages through Hormuz. The slowest input to react but the most consequential when it moves: uneconomic at standard rates above 4×.

    Trade press + proprietary aggregation

  3. 25%

    Event pressure

    Goldstein-scale-weighted count of escalation events from GDELT over a rolling 72-hour window, with exponential decay. A major event keeps the index elevated for roughly a week unless reinforced.

    GDELT 2.0 events database

  4. 20%

    Oil-market dread

    CBOE Crude Oil Volatility Index (OVX): 30-day at-the-money implied volatility on Brent options. Treated as a state signal: spot vol is overwhelmingly reactive, measuring repricing that has already happened.

    CBOE OVX via FRED

Escalation Forecast: 30-day forecast.

Renamed from Escalation Probability in v0.3.3. The composite blends prediction-market odds with a Brent–WTI price spread and play-money Manifold contracts, so the single number is a directional forecast signal, not a calibrated probability you could bet against at those exact odds. The math is unchanged.

What markets and forward-dated contracts price for a bad outcome within the next 30 days. The forecast target is the union: closure or partial closure of Hormuz, a major strike on Gulf infrastructure, a US military casualty, Iranian retaliation, or Brent above $150. Polymarket, Kalshi, and Manifold contracts are mapped to this union; dollar-weighted aggregation pools them by their 7-day volume (Manifold mana converted at 100:1 USD-equivalent). Each matched contract is classified by orientation before aggregation: contracts that frame YES as the bad outcome (closure, strike, retaliation, invasion) contribute their YES probability directly; contracts that frame YES as de-escalation (peace deal, ceasefire, traffic returns to normal, blockade lifted) contribute 1 minus their YES probability, so the aggregate consistently reads as "markets-implied probability of the bad outcome."

What this does not measure. The Escalation Forecast is not a state reading. Forward contracts price what speculators are willing to wager on, not whether ships are moving today; the Crisis Pressure Index above answers that. No override rule fires here: a forecast should be a smooth probabilistic number, not a threshold flipper.

Liquidity floor. When combined Polymarket + Kalshi + Manifold 7-day dollar volume across matching contracts falls below $15,000, the Escalation Forecast reports as low-confidence and the hero shows it in a muted treatment. It does not collapse a weight or hide the number; the right behavior under thin liquidity is honest uncertainty, not silent reweighting.

Why Kalshi left and came back. v0.3.2 dropped Kalshi from the composite after a 2026-05-27 audit walked all 20,000 currently-open Kalshi markets and found zero actively-traded Iran/Hormuz forecast contracts; its 0.15 weight was redistributed pro-rata. A 2026-06-10 re-audit found Kalshi had since listed heavily traded Hormuz series (led by KXHORMUZNORM, which resolves on the IMF PortWatch 7-day moving average reaching 60 transit calls, the same criterion the dominant Polymarket contracts use), and v0.4.0 restored Kalshi at its original 0.15 weight the same day. Both audits are documented in the changelog.

  1. 40%

    Polymarket forward

    Dollar-weighted mean implied probability across matching Polymarket contracts on Hormuz closure, Iran escalation, US-Iran conflict, and oil-shock outcomes within the forecast horizon.

    Polymarket Gamma API

  2. 20%

    Brent–WTI spread

    Front-month Brent price minus front-month WTI price, in USD. WTI prices US/Cushing crude; Brent prices waterborne Mideast/North-Sea crude that has to transit the Strait of Hormuz or pay the Cape reroute. A widening Brent premium means real money is pricing Brent-specific access risk separately from US supply, a Hormuz signal by construction. Normal range $2–4; sustained Mideast crises push it to $5–10+. The only Escalation input not sourced from a prediction-market venue: a deep, liquid, independent forecast signal.

    Brent − WTI front-month futures spread · intraday futures feed

  3. 25%

    Manifold forward

    Mana-weighted mean implied probability across matching Manifold contracts on Hormuz/Iran outcomes. Play-money market; mana converted to USD-equivalent at 100:1 for liquidity-floor accounting. Included because Manifold consistently carries more Hormuz-specific forward contracts than the regulated US venues.

    Manifold Markets public API

  4. 15%

    Kalshi forward

    Dollar-weighted mean implied probability across matching Kalshi contracts, dominated by the KXHORMUZNORM series, which resolves on the IMF PortWatch 7-day moving average of transit calls reaching 60, the same criterion Polymarket uses. A regulated US exchange; contract count approximates dollar volume at the $1 max payout. Reopening-framed contracts are orientation-inverted so likely reopening reads as low escalation probability.

    Kalshi trade API v2

Why a non-market forward input. Until v0.3 the Escalation Forecast pulled exclusively from prediction-market venues. Three venues, broadly the same participants; a fair critic could call the composite “a poll of prediction markets, not a forecast.” The Brent–WTI front-month spread answers that. When real money widens Brent’s premium over WTI, it is pricing Brent-specific access risk (Hormuz transit, Mideast supply) separately from US/Cushing crude. The spread is quoted continuously by two of the deepest commodity futures markets and is uncorrelated with the prediction-market crowd. It will not move the index in calm regimes (the $2–$4 baseline scores low by design), but during a developing crisis it gives the forecast a deep, liquid second opinion. No paywalled feeds inform either index.

Spread calibration · linear interpolation between anchors

$0 premium
score 0
$2 premium
score 15
$4 premium
score 35
$7 premium
score 70
$10 premium
score 90
$15+ premium
score 100

Negative spreads (WTI priced over Brent) reflect US Cushing logistics, not Hormuz, and clamp to 0.

Decay and rails, applied to both indices.

Inputs are smoothed with an exponentially weighted moving average (6-hour half-life) so intraday jitter doesn’t propagate to the headline. Each index decays asymmetrically against its own previous value: rises propagate instantly, falls smooth with a 36-hour half-life. This mirrors implied-volatility behavior: tension builds fast and resolves slowly.

Event pressure from GDELT decays exponentially with a 72-hour half-life, so a major event keeps the Crisis Pressure Index elevated for roughly a week unless reinforced.

Hard 24-hour rails clamp each index: neither can rise more than 25 points or fall more than 10 points in a 24-hour window. The floor is fixed; we will not signal an all-clear faster than the underlying inputs warrant.

One consequence worth stating plainly: because of this smoothing, the published reading is deliberately not the bare weighted sum of the inputs you see in the component table. On a fast move the two diverge. If the components weighted-average to 27 but yesterday’s reading was 78, the 10-point fall rail and 36-hour half-life mean today prints near 68 and converges toward 27 over several days, not in one tick. That is the intended anti-whipsaw behavior, not an error. To keep it honest rather than hidden, the hero labels the trajectory (“cooling toward 27”) whenever the gap exceeds 5 points, and the /api/index response carries a reconciliation block exposing the raw composite, the decayed value, and the rail-limited published value side by side. Sum the components yourself and you land on rawComposite; the smoothing chain from there to the headline is fully shown.

Missing inputs, applied to both indices.

When an input is unavailable or stale (its upstream feed is down, returns no reading, or carries only a frozen last-good value past its refresh cadence), its weight is redistributed pro-rata across the inputs that remain. The published composite then sums over current data rather than treating a dark feed as a zero score or carrying a stale reading at full weight. This is honest degradation, but it does mean the operative weights shift away from the headline figures while a feed is out. If CBOE OVX drops out of the Crisis Pressure Index, its 20% is shared out and the remaining three inputs scale up: the 30 / 25 / 25 split becomes roughly 37 / 31 / 31. When this happens, the affected index in /api/index carries a degraded block naming each redistributed component and its nominal weight, so the renormalization is visible rather than implied by the shifted numbers.

This is a different case from the Escalation Forecast’s liquidity floor described above, where the contracts exist but trade thin. There the number is still shown, just flagged low-confidence, with no weight collapse. Redistribution fires when an input is genuinely absent or stale, not merely quiet. If every input for an index is missing, nothing is published; when every input is only stale, the last-known values are kept rather than collapsing the composite to a false zero.

Bands, shared across both indices.

The bands carry the same emotional register; only the meaning of being at 80 differs. Crisis Pressure at 80 says a crisis is happening; Escalation Forecast at 80 says markets price a bad outcome as likely within 30 days.

The ± figure. Each index is shown with a small ± value (for example 94 ± 3). It is a dispersion band: the weighted standard deviation of the component scores, scaled and clamped to the 2–15 range. Read it as “how much the inputs disagree right now,” not as a statistical confidence interval. A small value means the components point the same way; a large one means the composite is averaging across divergent signals.

  1. 019Calm
  2. 2039Watchful
  3. 4059Elevated
  4. 6079High
  5. 80100Extreme

Known limitations.

  • Forecast inputs are thin. The Escalation Forecast runs on three prediction-market venues (Polymarket, Kalshi, and Manifold) plus the Brent–WTI front-month spread. Hormuz contracts trade at modest volume relative to broader political markets, and Manifold's mana is play-money rather than dollar-backed. The liquidity floor above is the structural defense.
  • OVX is a state input. CBOE OVX (30-day Brent options implied vol, sourced from FRED) sits inside the Crisis Pressure Index rather than the forecast index. Spot vol is overwhelmingly reactive: it measures repricing that has already happened, not forward expectations. Term structure (front-month vs 6-month) would be a genuine forecast input, but no free public source publishes it.
  • Pre-2022 history is state-only. Polymarket did not exist before 2022 and Manifold dates to 2022. Historical backfill of the Escalation Forecast would have a structural input gap; we plan to backfill the Crisis Pressure Index to earlier crises (1990, 2003, 2019) but leave the forecast index without pre-Polymarket history rather than synthesize a proxy.
  • Calibration in progress. The weights, normalization curves, and rails published here are v0.4.0. Every change is recorded in the changelog with both live-published and retro-computed values preserved. The v0.1 methodology page is archived at /methodology/v0.1 for historical reference.

AI assistance in the daily brief.

The bullets and situation summary on the daily brief (rendered on the homepage and at /briefs/[date]) are drafted with AI assistance. A scheduled function calls a large language model with the structured indicators visible on this site (transit counts, Brent and WTI prices, the Hormuz Index components, indexed events from the last 24 hours) and asks for three bullets and a single situation paragraph in a fixed JSON shape.

What the model sees: only the figures and event headlines that already appear elsewhere on this site. The prompt forbids inventing numbers, paraphrasing them ("a handful", "about sixty"), or claiming agreement between divergent indicators. If the figures shown elsewhere on the page change, the brief will not silently disagree; the same source-of-truth feeds both surfaces.

What the model does not see: live web search, social-media chatter, news articles beyond the titles in our indexed event feed, external commentary, or any data not present on this site. It cannot cite a source it has not been shown. When the underlying event feed is unsourced or the model output fails JSON validation, the brief falls back to a rule-based summary; the “Indicative summary” chip on the page surfaces that case explicitly.

Briefs flagged “AI-assisted” on the page carry the same label in the NewsArticle JSON-LD so downstream readers (search engines, AI overviews, aggregators) see the disclosure too. Briefs flagged “Editorial” are human-written; briefs flagged “Indicative summary” are rule-based fallback prose. The provenance is recorded per-brief in Firestore and exposed via /api/v1/briefs.

Disclosure.

The publisher does not trade on either index, hold positions sized to its movement, or use it for personal investment decisions.

Neither index is a benchmark within the meaning of EU Regulation 2016/1011 (Benchmarks Regulation) and is not licensed for use as a reference rate for any financial product.

Both indices are informational only and not investment, financial, legal, or tax advice. Embeddable versions carry this disclaimer server-side and cannot be stripped by the embedding site.

Methodology changelog →

What we count.

The headline transit number (the count that drives status, throughput, and the lede) comes from the IMF PortWatch chokepoint6 dataset, an attributable daily feed built on global AIS signals via the Oxford / UN Global Pulse partnership. Every other AIS-derived figure (live presence overlay, stranded count, per-port congestion, tankers gone dark, sanctioned- vessel join) derives from a Persian Gulf bounding box subscribed to AISStream.io, plus a tighter inner zone for the AIS-dark count and four named ports for per-port congestion. The diagram below shows where the AIS-derived measurements apply.

Strait of HormuzBandar AbbasJebel AliFujairahSohar28°N22°N54°E ↔ 60°EIranUAE / OmanAIS-dark filter zone
  • Outer bbox · AIS subscription window
  • AIS-dark filter zone · 24–28°N, 55–58°E
  • Strait of Hormuz centroid · 26.566°N, 56.25°E
  • Tracked ports · 10–12 km radius each
Illustrative · not GIS. The bounding box and the AIS-dark filter zone are exact (defined in fetchShipPositions.ts and computeAisGaps.ts); coastlines are stylized. The four ports are the named locations for which portCongestion/{id} documents are written hourly.

Markets & risk pricing

Prices, premiums, and odds: what the market thinks about the disruption right now.

Brent and WTI prices

Every 10 minutes

SourceIntraday continuous futures (ICE Brent, NYMEX WTI) via Yahoo Finance chart data, with EIA daily closing prices as backstop

Intraday continuous-futures quotes with real session moves; the prior upstream (Stooq) retired its continuous-futures symbols on 2026-06-09 and was replaced the same day. EIA publishes once-daily closes for canonical citation and acts as the staleness backstop. The session-percent change reflects the open-to-current move on the futures contract; for a clean day-over-day delta we prefer the EIA series.

Reference →

US gas prices

Hourly refresh; upstream publishes once daily

SourceAggregated US state-by-state regular-grade gasoline averages

Per-state regular-grade averages plus a national mean across the 50 states + DC. Only the regular-grade column is extracted.

Prediction-market odds

Every 15 minutes

SourcePolymarket (gamma-api.polymarket.com) + Kalshi (trade API v2) + Manifold (api.manifold.markets) public read APIs

Active markets pulled from each venue, filtered by a relevance keyword set covering Hormuz / Iran-conflict / oil-shock terms with a hard exclude list for sports and entertainment substring collisions; top 30 by dollar-volume retained across venues. Manifold volume is reported in mana and converted to USD-equivalent at the conservative 100:1 rate Manifold itself uses for charity redemption. Kalshi was dropped at v0.3.2 (2026-05-27) after an audit found zero traded Iran/Hormuz contracts in its catalogue, and re-included at v0.4.0 (2026-06-10) after Kalshi listed heavily traded Hormuz series; see the changelog for both audits. Implied YES probability is labelled "market price" because the bull/bear read depends on question framing: high YES on "regime fall" reads bearish; low YES on "Hormuz reopens" reads bearish.

Reference →

War-risk insurance multiple

Manual; refreshed when new pricing surfaces

SourceEditorial reading of trade-press reporting (Splash247, Lloyd's List, gCaptain, Reuters)

The "Nx normal" figure is a working estimate from reported VLCC war-risk premium quotes: named outlets report a range of $125,000 (peace baseline) to about $2.5M per voyage during the closure. London-market war-risk pricing is not published as machine-readable data, so this carries an editorial uncertainty band.

Trade impact (oil/LNG at risk, daily cost)

Quarterly (EIA publication cycle)

SourceEIA World Oil Transit Chokepoints reference figures

The 21% oil figure is the share of global oil consumption transiting Hormuz under normal conditions; the 25% LNG figure is the share of global seaborne LNG trade. The $4B/day cost figure is an industry-standard estimate of the gross value of Hormuz-borne crude at current prices. Shocks of this kind are not linear in real-economy effects, which depend on inventory, demand response, and bypass-pipeline utilization.

Reference →

Transits & vessel traffic

Daily transit count comes from IMF PortWatch: authoritative, attributable, survives AIS outages. AIS contributes a live presence overlay plus several derived metrics that need per-vessel positions PortWatch does not provide.

Daily transit count

Underlying data publishes Tuesdays 9 AM ET; we re-fetch daily 14:00 UTC

SourceIMF PortWatch (chokepoint6 dataset, public ArcGIS feed)

Daily count of vessels that traversed the Strait of Hormuz, by ship class. Built on global AIS signals from ~90,000 ships via the IMF / Oxford / UN Global Pulse partnership. Methodologically transparent and IMF-attributed; this is the dashboard's authoritative throughput backbone. Survives any AISStream outage. Updated daily but with a 24–72h freshness lag because PortWatch batches its publication.

Reference →

Throughput (% of pre-crisis typical)

Daily 14:00 UTC

SourceDaily transit count ÷ pre-2026-02-28 PortWatch median (~94/day)

Computed against a stable peacetime baseline derived from the 335 PortWatch records dated before the 2026-02-28 closure declaration. We deliberately do NOT use a 30-day rolling baseline: once a closure outlasts the window, the rolling baseline collapses to match the disrupted state and the dashboard would silently flip "closed" to "open" while the strait is still closed. The pre-crisis median is the right anchor for a sustained-crisis dashboard. Falls back to a rolling baseline only during cold-start before PortWatch backfills.

Live concurrent presence (AIS overlay)

Every 5 minutes (4-minute listen window per run)

SourceAIS broadcasts via AISStream.io (free WebSocket feed)

Best-effort live ticker, shown as a "N live" sub-line on the homepage when the AIS feed is fresh, hidden when stale (>30 min) or down. Does NOT drive status, throughput, or the verdict; those read PortWatch. AIS counts vessels currently broadcasting transit status inside a Persian Gulf bounding box (lat 22–28, lng 54–60). AISStream is officially BETA with no SLA; multi-hour silent windows are normal. Military vessels often run dark; small fast-attack craft are not consistently captured.

Port congestion

Every 30 minutes

SourceAIS-derived count of vessels within ~10 km of named ports

Counts vessels in shipPositions whose coordinates fall within a 10–12 km radius of Fujairah (UAE Indian-Ocean side, ADCOP terminus), Sohar (Oman alt-berthing), Bandar Abbas (Iran main strait port), or Jebel Ali (Dubai container hub). Anchored + stopped = congestion; transiting vessels excluded. Yanbu (Saudi Red Sea) sits outside our bounding box and cannot be tracked from this feed.

Stranded-vessel time-series

Hourly buckets, written every 30 minutes

SourceAIS-derived running count of anchored + stopped vessels in the bbox

Hourly snapshots of the stranded count. The homepage sparkline shows the past 7 days. Hourly cadence resolves daily news beats; finer-grained changes are visible at /api/v1/stranded.

Tankers gone dark (AIS gap)

Computed every 30 minutes

SourcePersistent vesselTracker collection (cumulative AIS sightings) × strict filter

A tanker "going dark" is genuinely ambiguous: equipment failure, GPS spoofing, deliberate evasion, or simply leaving the bbox can all produce the same observation. The filter requires (1) type = tanker, (2) total sightings ≥ 50 to confirm prior active broadcasting, (3) last position inside the core area (lat 24–28, lng 55–58) so vessels that sailed out are excluded, (4) last seen 3–24 hours ago. Strict, biased toward false-negatives. Homepage shows count + 7-day baseline; vessel names live at /api/v1/ais-gaps with the same disclaimer.

Sanctioned vessels in transit

OFAC SDN refreshed weekly; cross-join run every 15 minutes

SourceOFAC Specially Designated Nationals list × AISStream live positions

OFAC SDN CSV filtered to vessels (~1,500 entries), with IMO and any "a.k.a." / "f.k.a." aliases extracted from the freeform remarks column, joined against shipPositions by IMO when available, normalised name otherwise. Match strategy intentionally biased toward false-negatives: common names ("Glory") would over-match if accepted alone, so the homepage block is muted at zero hits and individual vessel names live only at the API to avoid surfacing a single false positive as a named individual. Many shadow-fleet vessels rename to evade the SDN list; we will under-count.

Reference →

Lane breakdown (N / S)

Every 5 minutes (matches the AIS feed)

SourceLat-based classification of in-transit vessels against the IMO Traffic Separation Scheme

Vessels marked status=transit are bucketed by latitude inside the chokepoint window (lng 56.0–57.4°E, lat 25.7–26.9°N): ≥26.5°N = Northern lane, ≤26.3°N = Southern lane, the band between is treated as the TSS separation buffer. Without course-over-ground on every AIS position this is a static lane assignment, not a direction-of-travel inference, but in a TSS the lanes ARE the direction, so "N lane" reads as inbound traffic and "S lane" as outbound, matching the IMO designation at Hormuz. Exact lane geometry is published in BA chart 2858 / INT 728; we approximate with editorial lat bands.

Per-vessel risk band

Every 30 minutes

SourceRules engine joining vesselTracker × sanctionedTransits × current AIS-dark list × MMSI flag-of-convenience

Each active vessel (lastSeenAt within 24h) is bucketed High / Moderate / Low by a transparent rule set: High = OFAC SDN match, OR flag-of-convenience tanker that is currently AIS-dark in the core area. Moderate = currently AIS-dark, OR FOC-flagged tanker on its own. Low = everything else. Flag-of-convenience is derived from the first three digits of the MMSI (the ITU-T M.585 Maritime Identification Digit), restricted to the open registries OFAC/EU/Lloyd's-List investigative reporting consistently names: Panama, Liberia, Marshall Islands, St Kitts, São Tomé, Gabon, Cook Islands, Cameroon, Côte d'Ivoire, Togo, Palau, Bahamas. Greek and Singaporean flags are NOT treated as FOC despite open-register critics. This is a rules engine, not an ML model: there is no opaque score, no learned weighting, no behavioural inference beyond these inputs. Ownership and beneficial-ownership signals are still out of scope; expect a high-band count meaningfully lower than commercial maritime-AI products that fuse those inputs. Aggregate counts on the homepage; per-vessel scores and pills at /vessels; raw scores read off vesselRisk/{mmsi}.

Industry response

How the carriers and pipelines are reacting in public: postures, surcharges, and rerouted capacity.

Carrier suspensions

Manual; refreshed daily during the crisis

SourceEach carrier's public customer-advisories page (linked); cross-checked against trade press (Splash247, Lloyd's List, gCaptain, Reuters)

Tracks the nine largest container carriers by global TEU capacity. "Status" reflects each carrier's declared posture for Strait of Hormuz transit. "Surcharge $/TEU" is an editorial estimate based on each carrier's announced base surcharge and current bunker pricing on the Cape route; values are not directly quoted from the linked carrier page, which typically presents the policy without a single dollar figure. Treat as indicative, not contracted.

Pipeline bypass capacity

Annual (EIA publication cycle)

SourceEIA petroleum infrastructure data and country analyses

Three pipelines route Gulf crude around the strait: Petroline (Saudi → Yanbu, 5M bpd), ADCOP (UAE → Fujairah, 1.5M bpd), Goreh-Jask (Iran → Jask, ~0.35M bpd nameplate, currently operating at a fraction of capacity). Combined nameplate bypass ≈ 7M bpd against a normal Hormuz flow of 17M bpd; effective utilization is lower.

Reference →

Inventories & reserves

Where the buffer sits, and how it's drawing down: the slow-moving counter-pressure to a fast-moving disruption.

Strategic Petroleum Reserve (US)

EIA publishes weekly; we re-fetch daily 11:00 ET

SourceEIA Weekly Petroleum Status Report

The US SPR sits in salt caverns at four sites along the Gulf Coast. The doc carries the 4-week change so spike-vs-baseline reads correctly. Non-US holders (China, Japan, South Korea, EU, India) on the SPR page are editorial best-estimates; most countries do not publish stockpile data weekly.

Reference →

Cushing crude oil stocks

EIA publishes weekly; we re-fetch daily 11:30 ET

SourceEIA Weekly Petroleum Status Report

Cushing, Oklahoma is the WTI delivery hub. Inventory swings here track the North-American crude balance independent of the Gulf-Coast / SPR picture. Pairs with the Brent–WTI spread to indicate whether disruption is global or American-specific.

Reference →

Events & narrative

What happened in the past 24 hours, and what it means: sourced events plus a programmatic daily summary.

War events timeline

Live feeds every 15 minutes; curated set refreshed weekly

SourceCurated editorial set + Google News RSS + gCaptain RSS + USNI News RSS + Iranian state media (IRNA, Mehr News, Press TV). GDELT plumbed in as a redundant supplement when its rate-limit allows.

Each event carries a sourceUrl that links to the originating outlet. Tehran-state framings (IRNA / Mehr / Press TV) are clearly labelled in the sourceName so readers can interpret the framing. A strict keyword filter applies to state-media feeds: every article from those outlets mentions Iran by default, so we require an explicit Hormuz / chokepoint / maritime / oil term to keep the timeline focused. Per-source cap of 6 events per ingestion run prevents a single fast-publishing feed from blanketing the timeline.

Daily brief

Daily at 12:00 UTC, with extra runs during a crisis

SourceEditorial summary of the indexed war events and price moves from the prior 24 hours

Generated programmatically; not edited by hand. When the underlying event feed is mock or unsourced, the prose summary is suppressed and only the bullets render, so the front page never carries a confident crisis narrative built on synthetic data.

Supplementary feeds

A subset of indicators is derived from third-party maritime and financial data aggregators that publish under their own terms. We don't redistribute the underlying datasets, only the derived counts, aggregates, and freshness checks computed from them. Specific upstream sources are kept private at our discretion: naming them risks being blocked, and several have terms that don't authorize republication of the raw data. If you're a journalist or researcher who needs to verify a specific number, email hello@straits.live and we'll walk you through the derivation.

Port-congestion snapshots (Fujairah, Sohar, Bandar Abbas, Jebel Ali)

Hourly

SourceAIS-based maritime data aggregator · upstream source kept private

Anchored / stopped / berthed counts per port. We compute the snapshot ourselves; the underlying per-vessel records are not redistributed.

Vessel-mix and recent-vessel summaries

Hourly

SourceAIS-based maritime data aggregator · upstream source kept private

Per-class transit counts (tanker / cargo / military / other) and recent named-vessel lists, used to keep the live picture rendering when AISStream is in a silent window.

Chokepoint comparison (Hormuz vs. Suez / Bab el-Mandeb / Malacca / Panama)

Daily

SourceIMF PortWatch chokepoint dataset (public page, parsed by our scraper rather than via an API)

PortWatch publishes daily transit counts for every major maritime chokepoint. We pull the comparison set so the dashboard can show Hormuz against its peers.

Tehran open-market USD/IRR rate

Hourly

SourceOpen-market currency aggregator · upstream source kept private

A continuously-quoted open-market mid-rate. Useful as a high-frequency signal of regime currency stress; not a published banking rate.

Bunker fuel indicative pricing

Daily

SourceMaritime fuel pricing aggregator · upstream source kept private

Daily VLSFO indicative pricing for the Fujairah bunker market. Spot indicator, not an exchange-cleared price.

When figures look wrong.

Feeds drop. Vessels spoof their AIS. Upstream sources change their publishing format and a feed breaks. The page is built to fail visibly rather than silently: affected indicators flip to a stale or suppressed state and the data-health chip on the section tells you which.

If a number still looks wrong after that, it usually is. Reply to any email or send a note to hello@straits.live with the section name and what looks off; corrections get pushed the same day.

← Back to the Strait of Hormuz live updateAbout →Glossary →