How it's calculated

Full methodology: data sources, exposure formula, country multipliers, update cadence, and known limitations.

What we measure

Each food's crisis exposure score is the percentage of its retail price attributable to supply chain inputs that pass through β€” or are priced with reference to β€” the Strait of Hormuz. It is not an absolute price prediction. It measures the fraction of a food's cost structure that is sensitive to the current disruption.

Important: These are cost-of-production exposure estimates, not shelf-price forecasts. Retail prices are shaped by many factors beyond supply chain inputs β€” local taxes, retailer margins, inventory buffers, subsidy programmes. Actual observed price changes will differ.

Step-by-step calculation

  1. Identify cost drivers per food. Each food has 2–5 supply chain drivers (e.g. diesel for transport, urea for fertilizer, natural gas for processing) sourced from USDA and FAO cost-of-production breakdowns.
  2. Assign each driver a commodity category β€” one of: fuel, gas, fertilizer, petrochemical, shipping β€” and look up its current price change vs the pre-crisis baseline (28 Feb 2026).
  3. Compute the weighted input change. Unlike a simple average, we apply specific cost weights (e.g., 40% for fertilizer in grain) to each driver based on its intensity in that food's production cycle.
  4. Apply a sensitivity factor (calibrated per food) to convert the weighted commodity input change into a retail price exposure percentage.
  5. Run Monte Carlo simulations. We run 500 iterations with Β±15% noise on driver weights to generate an 80% confidence interval (the uncertainty band shown in the UI).
  6. Multiply by the country's impact coefficient to reflect how dependent that country is on Hormuz-linked commodity flows.

The formula

── 1. Weighted Input Calculation ──────────────────────────────────────────────────── weighted_input_chg = Ξ£ (driver.weight Γ— driver.price_change_pct) / Ξ£ driver.weight ── 2. EU Baseline Exposure ───────────────────────────────────────────────────────── max_exposure = 100 βˆ’ local_cost_floor_pct # floor = local labour + land + margin sensitivity = baseline_exposure / baseline_weighted_input_chg eu_exposure_pct = clamp(weighted_input_chg Γ— sensitivity, 1, max_exposure) ── 3. Uncertainty (Monte Carlo) ──────────────────────────────────────────────────── for i in 1..500: w_noisy = driver.weight * (1 Β± 0.15) results.push(calc_exposure(w_noisy)) exposure_band = [10th_percentile, 90th_percentile] ── 4. Country & Precision Adjustment ─────────────────────────────────────────────── country_exposure = clamp(round(eu_exposure_pct Γ— impact_multiplier), 1, max_exposure) if confidence == 'low': round to nearest 10% to avoid false precision

The Local Cost Floor

Every food has a local_cost_floor_pct β€” the share of its retail price made up of costs that are immune to the crisis: local labour, land rent, retail margin, packaging overheads, and domestic distribution. These do not change because of a distant chokepoint.

The floor is subtracted from 100% to define the model's maximum possible exposure:

max_exposure = 100 βˆ’ local_cost_floor_pct

This is the most important guard in the model. Without it, a Β£1 loaf of bread with 10p of imported wheat could naively be shown at 90%+ exposure β€” which is absurd. In practice, floors range from 40% (bulk commodities like cooking oil) to 85%+ (processed staples like milk, eggs, and bread) for the Hormuz crisis, where input costs are the transmission mechanism. For the Red Sea crisis, floors are even higher (82–99%) because only the distribution cost fraction is affected.

The floor is set per-food based on FAO agri-food cost-of-production data and Eurostat retail price decomposition studies. It does not vary by country β€” only the impact_multiplier scales country-level exposure.

Tipping Points (Non-Linearity)

The model includes two non-linear risk triggers that are not captured by the smooth cost-pass-through formula above:

Worked example β€” Chicken in Japan

Tracing the calculation

Drivers (4):Diesel +32%, Urea +25%, Gas +38%, Plastics +20%
β†’Mean input change:(32+25+38+20)/4 = 28.75%
β†’Sensitivity factor:73 / 28.75 β‰ˆ 2.54(EU calibration: 73% exposure at 28.75% avg input change)
β†’EU exposure:28.75 Γ— 2.54 β‰ˆ 73%
β†’Japan multiplier:2.3Γ—(87% oil, 20% LNG, 28% fertilizer via Hormuz)
β†’Japan exposure: clamp(round(73 Γ— 2.3), 1, 60) = 60% (floor cap: 100 βˆ’ 40% meat floor)

Commodity baselines

All percentage changes are calculated against prices recorded on 28 February 2026 β€” the day the crisis began.

CommodityCategoryPre-crisis baselineSource
Brent crude oiloil / fuel / shipping$72/bblWorld Bank
European natural gasgas€34/MWhIEA
Urea (E. Europe)fertilizer$320/tWorld Bank
Methanol (US Gulf)petrochemical$400/tWorld Bank
Retail diesel (EU)fuel€1.42/litreEurostat

Commodity prices are updated weekly from the World Bank Indicators REST API, with the Pink Sheet Excel as fallback. Exchange rates are updated weekly from Frankfurter (ECB).

Country impact multipliers

The EU (Italy) is used as the baseline reference (multiplier = 1.0). Each other country's multiplier is derived from three dependency dimensions weighted by their contribution to food supply chain costs: oil (highest weight, affects transport + heating + packaging), natural gas (processing + fertilizer feedstock), and fertilizer (direct crop input). Source: UN Comtrade, EIA, IFA.

CountryOil via HormuzLNG via HormuzFertilizer via HormuzMultiplierConfidence
Italy (EU ref)14%12%30%1.0Γ—High
Germany10%15%28%1.0Γ—High
United Kingdom12%14%28%0.90Γ—High
United States5%2%15%0.65Γ—High
Japan87%20%28%2.3Γ—High
India52%22%40%1.9Γ—Medium
Australia15%5%20%0.7Γ—Medium
Brazil5%3%22%0.85Γ—Medium
Philippines52%8%38%1.9Γ—Medium
Sri Lanka25%12%38%1.8Γ—Low
China38%16%8%1.5Γ—High
South Korea72%32%28%2.2Γ—High
France9%6%18%0.75Γ—High
Singapore88%38%15%2.3Γ—High
Taiwan82%22%22%2.2Γ—Medium
Thailand45%15%35%1.8Γ—Medium
Lebanon55%5%40%1.5Γ—Low

Data confidence reflects how well local market conditions are captured by the EU-derived cost-of-production model. High = calibrated from local sources; Medium = EU model with import-dependency adjustment; Low = extrapolated, treat as indicative only. Low-confidence countries are rounded to the nearest 10% to avoid false precision.

What the model doesn't capture

Update cadence

Data refreshes daily at 06:00 UTC via a GitHub Actions workflow. If any data source is unavailable, the previous value is retained and the stale_sources field in data/foods.json is populated. The live badge on the main dashboard turns amber if data has not been refreshed in more than 10 days.

Frequently asked questions

Why don't you use retail prices directly?

Retail prices are "noisy." They include local taxes, temporary store promotions, and branding premiums. By modeling "Exposure" via supply chain inputs, we isolate the specific impact of the Hormuz crisis from general inflation or local market quirks. We show the pressure on the price, not just the sticker on the shelf.

Why not use custom/import data for real-time tracking?

While customs data (like UN Comtrade) is extremely accurate, it typically suffers from a 2–4 month reporting lag. During a fast-moving crisis, we need high-velocity data. We use commodity benchmarks (World Bank API) as "leading indicators" to estimate today’s impact, using customs data primarily for back-testing and calibrating our country-level dependency scores.

Does 40% exposure mean the price has risen by 40%?

No. It means 40% of that food’s cost structure is tied to inputs (like fuel and fertilizer) currently disrupted by the crisis. The actual price increase depends on the Pass-Through Rateβ€”how much of that cost increase the retailer decides to pass on to you versus absorbing it into their own profit margins.

What are "cost weights" and how are they determined?

Each food reacts differently to commodity shocks. For bread, fertilizer is a massive indirect cost (growing the wheat), while for fresh produce, shipping and fuel are the primary drivers. We use USDA and FAO Cost of Production tables to determine these weights (e.g., assigning a 40% weight to fertilizer for grains). This ensures the model accurately reflects the "Economic DNA" of each food item.

How do you account for countries that produce their own oil?

Even energy-independent nations are affected. Oil is a global commodity; if the price spikes in London (Brent), it usually spikes everywhere. However, our Country Multiplier accounts for the physical risk of the Strait. A country that relies on physical tankers passing through Hormuz gets a higher risk score than a country that produces its own energy locally.

Why is there a gap between a commodity spike and my grocery bill?

This is the Inventory Lag. Most of the grain in your bread today was grown with fertilizer bought months ago. Our model tracks "Current Exposure," which reflects the pressure on the next harvest or the current processing cycle. We use a temporal decay function to estimate when these "upstream" shocks will actually hit the retail shelf.

Can export bans or price controls affect your scores?

Yes, and this is a known limitation. When governments impose export restrictions β€” as India did with rice and wheat in 2022–23, or Russia did with fertilizers β€” global supply tightens faster than commodity indices reflect. Our exposure scores do not adjust for active export bans in real time. Separately, domestic price controls (active in several Gulf, Southeast Asian, and South Asian countries) can suppress retail transmission even when wholesale costs are rising sharply. The scores should be read as market-exposure estimates under free-trade conditions, not post-intervention retail predictions. When known export restrictions are in place, actual consumer prices in importing countries may be higher than indicated.

Do bilateral deals or alternate supply routes reduce exposure?

Sometimes significantly. The UAE's Fujairah pipeline (capacity ~1.5 mb/d) allows Abu Dhabi crude to bypass the Strait of Hormuz entirely β€” one reason Gulf producers are partially insulated from their own chokepoint risk. India has sourced heavily discounted Russian crude since 2022, cutting its effective oil import cost well below Brent spot. Countries with long-term bilateral supply contracts, direct pipeline access to production regions, or active diversification programs face a lower real-world shock than our market-rate multipliers suggest. Our country impact multipliers reflect physical Strait dependency at world-market prices; they do not model bilateral discount arrangements or strategic pipeline bypass routes. These are material limitations specifically for India, China, Gulf states, and countries with active alternative sourcing strategies.

Open source

The full calculation pipeline β€” including all driver weights, baseline values, and country coefficients β€” is in the open-source repository at github.com/prismatic-labs/tare. The data file at data/foods.json is the single source of truth that drives the dashboard.

Corrections and data contributions welcome via GitHub Issues.