Methodology
How FuelClock.nz calculates New Zealand's fuel security position in real time.
About
The Fuel Clock is an initiative of the Taxpayers’ Union, built to provide independent, real-time insight into New Zealand’s fuel security. Official fuel data is often delayed and incomplete. By combining Government stock figures with live shipping and market data, the Fuel Clock gives a clearer, up-to-date picture of risk — so Kiwis aren’t left in the dark. This isn’t about alarmism. It’s about transparency, and making sure the public has access to the information that matters.
Fuel Stock Depletion Calculation
The core fuel security calculation runs on every request to /api/fuel-data. It produces depletion estimates for three fuel types: Petrol, Diesel, and Jet Fuel.
Core Formulas
The gauge and countdown use pure depleted MBIE in-country plus AIS-confirmed vessel cargo only — the most conservative, verifiable picture. The pipeline model (below) feeds into internal risk calculations but does not affect the displayed in-country figure. calendarHoursToDepletion simulates forward hour-by-hour applying day-of-week weights — so the countdown reflects true clock hours, not just average-days × 24.
1. MBIE Anchor (In-Country)
The starting point is MBIE's published in-country days of supply for each fuel type. The MBIE scraper checks the petroleum stockholding page every 5 minutes to pick up new data (MBIE typically publishes Mon/Wed afternoons). The scraper extracts the "As at" date (e.g. "As at 11:59PM on Wednesday 18 March") from the page text and uses it as the anchor timestamp. This date is parsed with the correct NZ timezone offset (NZDT/NZST). The current fallback anchor (used only if both the live scrape and Vercel Blob are unavailable) is from 18 March 2026; the live anchor date is shown in the Consumption Rates table below. When fresh MBIE data is available, it becomes the new anchor automatically. At the moment MBIE publishes, the displayed figures match MBIE exactly. From that point, they deplete forward using day-of-week weighted consumption. All three sections (Countdown, Fuel Gauges, MBIE Comparison) show the same depleted values calculated from the same anchor.
2. Weighted Elapsed Days
Hours elapsed since the anchor date are accumulated with day-of-week consumption weighting. This accounts for real-world demand patterns where weekday fuel consumption exceeds weekends. The calculation iterates hour-by-hour from the anchor timestamp to the current time.
3. Pipeline Absorption Model
The pipeline model estimates how much of the untrackedMBIE on-water supply has physically arrived in NZ storage since the anchor. MBIE's on-water figure includes all vessels (confirmed, likely, scheduled). The pipeline only applies to the portion that AIS cannot confirm — i.e. MBIE on-water days minus AIS-confirmed vessel days minus vessels already fully discharged since anchor. A fraction (elapsed / average transit time) of that remainder is estimated to have arrived. AIS-confirmed vessels (docked at berth + confirmed en-route) and fully-discharged vessels are accounted for separately, so there is no double-counting between the pipeline and the confirmed (blue) segment.
Note: the pipeline model feeds into internal risk calculations only. The gauge's green "In-Country (Est.)" bar shows pure depleted MBIE in-country without any pipeline addition.
4. Confirmed On-Water (Blue Segment)
The confirmed on-waterfigure represents vessel cargo that is verifiably committed to NZ supply but not yet reflected in MBIE's in-country numbers:
- Docked at berth — AIS vessels with progressPct 100 that have arrived at an NZ fuel terminal and are awaiting or undergoing discharge. Shown as the blue segment in the gauge bars. They remain visible until MBIE publishes new in-country figures that incorporate their cargo.
- Confirmed en-route— AIS vessels with status "confirmed" that are still underway (progressPct < 100). These are AIS-verified committed voyages and count as additional confirmed supply.
- MBIE's on-water figure = all vessels — confirmed, likely, and scheduled — including those at sea or merely planned. This is always larger than our confirmed figure, and the difference is unverified supply.
5. Risk Classification
The overall risk level is derived from the lowest fuel type's days of supply compared to its MSO threshold. Levels: low (well above MSO), moderate, elevated, high, critical (below MSO).
Where Every Number Comes From
A plain-English audit of every figure shown on the dashboard. All three reserve sections (Countdown, Fuel Gauges, MBIE Comparison) use the same depleted values calculated from the same MBIE anchor.
Fuel Reserves Countdown
- Shows the lowest fuel type's total days of supply as a live countdown (days / hours / min / sec).
- Total days = In-country (est.) + confirmed vessel cargo (AIS)
- The countdown is driven by
countdownHours— actual calendar hours to depletion computed by simulating forward with day-of-week weights, not a simple avgDays × 24 multiplication. - Ticks down every second by subtracting time elapsed since the last API calculation.
- The text below the countdown states which fuel type drives it and shows the on-land and total figures.
Fuel Gauges (NZ Fuel Reserves)
- Three cards: Petrol, Diesel, Jet Fuel. The most critical (fewest calendar days to depletion on combined in-country + confirmed stock) gets a full-width alert card.
- "In-Country (Est.)" =
MBIE published in-country days − weightedElapsedDays(pure depletion — the pipeline model feeds the gauge bar internally but does not affect this displayed counter) - "Total (incl. confirmed)" = In-Country (Est.) + AIS confirmed vessels (docked at berth awaiting discharge, plus confirmed en-route)
- ML values = days × daily consumption rate (e.g. Petrol: 8.1 ML/day)
- Gauge bar = in-country days as a percentage of 2× MSO threshold, plus a stacked on-vessel portion
- MSO line = Minimum Stock Obligation threshold (Petrol 28d, Diesel 21d, Jet 24d)
- At the moment MBIE publishes new data, these numbers match MBIE exactly. They then deplete forward.
MBIE vs Actual Reserves
- "In-Country (Est.)" = Our depleted in-country estimate (same number as the Fuel Gauges)
- "Claimed Govt-Total" = MBIE published total depleted by weighted consumption:
max(0, mbieInCountryDays − weightedElapsedDays) + mbieOnWaterDays. Only the in-country portion depletes; on-water vessels are in transit and not yet consumed. - "Confirmed" = Our depleted in-country + AIS confirmed vessels only (docked at berth + confirmed en-route)
- "Difference" = Claimed Govt-Total − Confirmed. The gap comes from MBIE counting vessels that are unconfirmed, at sea, or merely scheduled — supply we cannot verify via AIS.
- Stacked bar per fuel type: full bar width = government's claimed total. Green = depleted in-country, blue = AIS-confirmed vessel cargo, orange = unverified gap (MBIE on-water minus confirmed).
Shared Calculation: In-Country Depletion
- Start with MBIE's published in-country days cover (e.g. Diesel: 21.0 days).
- Note the "As at" date from the MBIE page (e.g. 11:59PM 18 March 2026 NZDT).
- Count hours from that date to now, applying day-of-week consumption weights (Mon 1.08× → Sun 0.80×).
- Convert weighted hours to days (÷ 24) = weightedElapsedDays.
- Apply pipeline model: estimate how much of MBIE's on-water supply has physically arrived into storage = pipelineArrivedDays (used in risk calculations only).
- In-Country (Est.) = MBIE days − weightedElapsedDays. (The pipeline addition feeds the internal
onLandDaysused in risk calculations but is not shown in the gauge counter.) - From AIS: collect vessels with status "confirmed" — both those docked at berth (progressPct 100, awaiting discharge) and those confirmed en-route = confirmedOnWaterDays.
- Total = In-Country (Est.) + confirmedOnWaterDays.
- Compute calendarDaysToDepletion by simulating forward hour-by-hour applying day-of-week weights — the true clock days until this fuel runs out.
Daily consumption rates: Petrol 8.1 ML/day · Diesel 10.7 ML/day · Jet 4.8 ML/day. These are hardcoded constants — consumption rates are never overridden by scraped data.
Consumption Rates & MSO Thresholds
Daily consumption rates are from MBIE energy statistics. Minimum Stock Obligation (MSO) thresholds are set by the Petroleum Stocks regulations.
| Fuel Type | Daily Rate | MSO Threshold | Current Anchor Stock |
|---|---|---|---|
| Petrol | 8.1 ML/day | 28 days | 221.9 ML (27.4d) |
| Diesel | 10.7 ML/day | 21 days | 224.7 ML (21.0d) |
| Jet Fuel | 4.8 ML/day | 24 days | 102.7 ML (21.4d) |
Dashboard Sections
Fuel Reserves Countdown
A live countdown driven by the fuel type with the fewest calendar days to depletion (on-land + AIS-confirmed vessels). The countdown uses forward-weighted calendar hours — not a simple days × 24 calculation — so it accounts for heavier weekday consumption ahead. Updates every second, subtracting elapsed time since the last API fetch.
NZ Government Debt
A debt counter that uses the data from DebtClock.nz.
Fuel Gauges
Visual gauge cards for each fuel type with a three-segment stacked bar: green = in-country (MBIE depleted + pipeline model), blue = confirmed vessel cargo (AIS vessels docked at berth or confirmed en-route), orange = likely/scheduled pipeline. The MSO threshold marker shows the legal minimum. Two counters show In-Country (Est.) and Total (incl. confirmed). The most critical fuel type (fewest calendar days to depletion on combined total) gets a full-width highlighted card. Gauges update every 30 seconds.
Difference — MBIE vs Actual
Side-by-side table comparing the government's claimed total against confirmed reality. Claimed Govt-Total = MBIE published total depleted by weighted consumption (in-country depletes day-by-day; on-water stays at the published figure since those vessels are still in transit). Confirmed = depleted in-country + only AIS confirmed vessels (docked at berth + confirmed en-route). The Difference column shows unverified supply: vessels MBIE counts that we cannot confirm via live AIS. Stacked bar charts show top row (government claim) vs bottom row (confirmed reality + unverified gap).
Daily Consumption
Live burn rate counters that show how much fuel NZ is consuming in real time. Animated progress bars depict today's consumption against daily budgets, adjusting for day-of-week weighting.
Oil & FX
Live pricing for Brent Crude, WTI Crude, Dubai Crude (Oman Crude Futures), and NZD/USD exchange rate. Sourced from Yahoo Finance with 30-minute cache. Shows price, daily change, and percentage movement. Dubai Crude is particularly relevant as it's the benchmark for Asian-Pacific refined product pricing; WTI is the global benchmark for light sweet crude.
Fuel Prices
NZ retail fuel prices scraped from Gaspy.nz Firebase API. Shows current average prices for 91 Octane, 95 Octane, Diesel, and EV charging with 7-day and 28-day price changes. Cached for 15 minutes.
Supply Projections
Recharts line chart showing historical reserve depletion from January 2026 to today, plus four projection curves: No Intervention (baseline), Voluntary Conservation (10% reduction), Government Rationing (25%), and Emergency Lockdown (40%). Projections start from the combined in-country + confirmed vessel stock, giving a more accurate forward view than in-country alone. An MSO threshold reference line shows when reserves would drop below the legal minimum. Switchable between Diesel, Petrol, and Jet Fuel.
Geopolitical Risk — Polymarket
Live prediction market probabilities from Polymarket via the Gamma API (server-side proxy to avoid CORS). Six markets are tracked: US-Iran Ceasefire, Hormuz Traffic Normalisation, Average Ships Transiting Hormuz, Crude Oil >$90/bbl, Kharg Island Strike, and US Naval Escorts. Displayed with headline summary cards, cumulative probability bars, a donut ring gauge, a ship-transit bar chart, and related market links. Polled every 60 seconds; fallback values used when API is unavailable.
NZ Government Bonds
Price of NGB.NZ 10-Year via the Yahoo Finance chart API. Displays a yield history chart, current price with daily change, day range, 52-week range, volume, and 1-week/1-month/3-month/6-month/1-year yielf performance. Includes NZ sovereign credit rating (Fitch AA+ with Negative Watch outlook — highlighted with a flashing red alert). NZ 10-year sovereign bond yields are sourced from the RBNZ B2 Daily Close Excel file (hb2-daily-close.xlsx), fetched via a Python serverless function that bypasses Cloudflare's TLS fingerprint check. Shows 1-week, 1-month, 3-month, 6-month and 1-year change. Updated every day at 3:30PM.
Vessel Pipeline & Tracking
Interactive SVG map with GeoJSON country outlines (Natural Earth 110m) showing all NZ-bound fuel tankers sourced from AIS data. Vessel data is fetched every 4 minutes. Only NZ-bound vessels carrying petrol, diesel, or jet fuel are shown. Vessels that arrived before the most recent MBIE anchor date are excluded — their cargo is already captured in MBIE's published in-country figure and must not be double-counted. Vessel positions are interpolated along pre-defined route corridors using the journey completion percentage — corridors route ships through known maritime straits (e.g. Lombok Strait, Banda Sea, Coral Sea) to avoid landmasses. Status is as assigned by NZOilWatch: CONFIRMED (AIS-verified, committed voyage), LIKELY (probable NZ destination), SCHEDULED (planned, not yet departed). The map supports zoom (scroll/pinch) and pan (drag). Below the map: fleet status breakdown, Hormuz transit exposure, next arrivals, per-fuel-type supply.
Scenario Projections
Four disruption scenario cards showing estimated days to depletion per fuel type under different conditions: Business as Usual (0.30× multiplier), Prolonged Disruption (0.85×), Full Crisis (1.00×), and SK Export Ban (1.48×). Also lists government response measures with estimated days of supply saved (speed limits, rationing, essential travel only, flight reductions, strategic reserve release).
AI Risk Assessment
A comprehensive risk analysis generated by Claude (claude-sonnet-4-6) that synthesises all dashboard data into a headline, detailed analysis, fiscal note, watch items, buying advice, and tips. Generated server-side with a 60-minute cache. Fallback assessment used when the API is unavailable.
News & Media Releases
NZ fuel-related news from Google News RSS (10-minute cache) and Taxpayers' Union media releases scraped from the Taxpayers' Union news page (NationBuilder CMS, 30-minute cache).
Data Sources & Refresh Rates
| Source | Cache TTL | Implementation |
|---|---|---|
| MBIE petroleum stocks | 5 min | Scraper checks MBIE fuel stocks page every 5 minutes; persisted to Vercel Blob so cold-start lambdas always use the latest MBIE anchor date for depletion. Hardcoded 18 Mar 2026 anchor only used if Blob is also empty. |
| Gaspy fuel prices | 15 min | Firebase Realtime Database API (gaspy-4e3e3.firebaseio.com) |
| DebtClock.nz | Live | Extracted from debtclock.nz |
| Polymarket | 60 sec | Server-side proxy to Gamma API (gamma-api.polymarket.com), 6 market slugs |
| NZ Government Bonds | 1 min | Yahoo Finance chart API, RBNZ B2 Daily Spreadsheet Daily |
| Brent, WTI & Dubai Crude | 30 min | Yahoo Finance API (BZ=F Brent, CL=F WTI, QM=F Dubai Crude / Oman futures) |
| NZD/USD exchange rate | 30 min | Yahoo Finance API (NZDUSD=X) |
| NZTU news | 30 min | Data pulled from taxpayers.org.nz/news |
| Vessel tracking | 4 min | AIS-verified NZ-bound tankers. Cron refreshes every 5 min with ?force=1 to bypass cache. Pre-anchor arrivals filtered before caching. |
| AI risk assessment | 60 min | Anthropic Claude claude-sonnet-4-6 via server-side API call |
| Google News | 10 min | RSS feed: news.google.com/rss/search for NZ fuel-related terms |
Supply Projections Model
The supply projections chart shows four scenarios representing different demand reduction levels. Each scenario applies a percentage reduction to the daily consumption rate and projects days of supply remaining into the future.
| Scenario | Demand Reduction | Description |
|---|---|---|
| No Intervention (Baseline) | 0% | Current consumption continues unchanged |
| Voluntary Conservation | 10% | Public asked to reduce non-essential driving |
| Government Rationing | 25% | Mandatory odd/even plate rationing, speed limits |
| Emergency Lockdown | 40% | Essential travel only, flight reductions, strategic reserves |
Disruption Scenario Model
The Scenario Projections section models how geopolitical disruptions would increase effective consumption (panic buying, hoarding, supply chain friction). The multiplier is applied to the base consumption rate.
| Scenario | Multiplier | Description |
|---|---|---|
| Business as Usual | 0.30× | Normal supply chain with minor regional tensions |
| Prolonged Disruption | 0.85× | Extended Strait of Hormuz disruption, partial rerouting |
| Full Crisis | 1.00× | Complete Hormuz closure, all Middle East supply cut off |
| SK Export Ban | 1.48× | South Korea halts refined product exports — NZ loses primary refining source |
Staleness Indicators
Every data section shows a staleness badge indicating when the data was last fetched. Colour coding: green (<5 min), grey (<30 min), amber (<1 hr), red(>1 hr). If external sources fail, hardcoded fallback values are used and clearly labelled with an amber ⚠ warning banner.
Disclaimer
FuelClock.nz provides indicative estimates only. Stock levels are calculated from published MBIE anchors — at the moment of MBIE publication, figures match exactly; they are then depleted forward using day-of-week weighted consumption and should not be treated as exact measurements. Vessel data is sourced from AIS, cargo volumes may not reflect confirmed manifest data. On-water figures only include vessels with “confirmed” status from AIS; MBIE's published on-water figures include all vessels (at sea, scheduled, and docked) which may overstate actual available supply. Prediction market probabilities are derived from Polymarket and reflect market sentiment, not forecasts.
This dashboard is for informational purposes and should not be used for trading decisions. The NZ Taxpayers' Union takes no responsibility for decisions made based on this data.
Taxpayers' Union Privacy Policy'
Built by RB Alliance Limited for the NZ Taxpayers' Union