FuelWatchX

Loading...

NSW Petrol vs Diesel — 80 Day Price Trend

Daily family average · p95 shown on hover · c/L
Last 14 days · DL · P95 · P98 Geopolitical Stage 3

DL — Diesel

P95 — Premium 95

P98 — Premium 98

Related News (last 14 days)

Price Spread — Cheapest vs Dearest Right Now

Loading...

All Stations — Latest Prices

Average Price by Brand

Brand Station Count

Brand Avg Price Over Time (30 days)

Dashed lines = news events

Brand League Table (30 days)

Loading...
Spikes are detected every 30 minutes across three scopes — individual stations, postcode averages, and state average. Changes below ±2% are treated as noise and ignored. Severity is based on the percentage move between readings and how many standard deviations (σ) it sits from the 14-day baseline. Full methodology →

Price Spike Events

Loading...
Loading news...

Day-of-Week Price Pattern

Average price by day of week (AEST). Unlike Perth's strict 7-day cycle, Sydney/NSW prices follow a multi-week rhythm (~5 weeks). Day-of-week variation here reflects patterns within that longer cycle, not a predictable weekly schedule.

Brand Price Premium

How many cents per litre each brand charges above the cheapest brand on average. Zero means at-or-below the floor; higher = more expensive.

Loading...

NSW Price Cycle Phase (U91 — Sydney avg ~5-week cycle)

Loading...

Methodology & Transparency

FuelWatchX automatically monitors petrol and diesel prices across New South Wales using data from the NSW Government's mandatory FuelCheck reporting scheme. This page explains exactly how data is collected, how price spikes are detected, and what every number on this site means — so that journalists, policy researchers, and the public can evaluate the information with full context.

Data Source & Coverage

Where does the price data come from?

All fuel prices are sourced from the NSW Government FuelCheck API (api.onegov.nsw.gov.au). Under NSW law, every petrol station is legally required to report a price change to FuelCheck within 30 minutes of it taking effect at the bowser. This makes the data both timely and comprehensive.

What region is covered?

This tool covers all of New South Wales. The FuelCheck API returns data for NSW and Tasmania; FuelWatchX includes every NSW station with reported price data and excludes Tasmanian stations. You can use the postcode filter to narrow statewide results to a particular area.

How often is data refreshed?

The scraper fetches a full price snapshot every 2.5 hours. Spike detection and news monitoring run every 30 minutes, so a spike can be identified before the next full price refresh. There is an inherent lag of up to 2.5 hours between a station changing its price and that change appearing here.

Fuel Types & Units

What fuel types are tracked?

  • DL — Diesel
  • PDL — Premium Diesel
  • U91 — Unleaded 91
  • E10 — Ethanol-blended 10%
  • E85 — High-ethanol blend 85%
  • P95 — Premium Unleaded 95
  • P98 — Premium Unleaded 98
  • LPG — Liquefied Petroleum Gas

What unit are prices in?

All prices are in Australian cents per litre (c/L), which is the standard unit used by FuelCheck and Australian fuel industry reporting. A price of 180.0 means $1.80 per litre.

Why is EV not listed?

FuelCheck includes EV charging stations. FuelWatchX currently excludes EV from its displays because EV prices (priced in kWh, not c/L) are not comparable with liquid fuels on the same scale.

Spike Detection — Full Algorithm

What is a "price spike"?

A price spike is recorded whenever a fuel price at a station (or across a postcode or state average) changes significantly between two consecutive snapshots. Not every price change qualifies — small fluctuations are filtered out as noise. Spikes have a direction (up or down) and a severity (normal, elevated, or abnormal).

Step 1 — The Noise Gate (±2%)

If the price change between two consecutive readings is less than ±2% in either direction, it is discarded entirely and no spike is recorded. This prevents ordinary micro-fluctuations from being flagged as events.

Formula: delta_pct = (current_price − prev_price) / prev_price × 100
If |delta_pct| < 2.0 → ignored (noise gate). No spike recorded.

Step 2 — Baseline & Z-Score Calculation

For changes that pass the noise gate, the algorithm looks at the past 14 days of price history for that specific station and fuel type. It calculates:

  • Baseline average (μ) — the mean price over the 14-day window
  • Baseline standard deviation (σ) — how much prices typically varied day-to-day
  • Z-score — how many standard deviations the current price is above or below the average: sigma = (current_price − baseline_avg) / baseline_std

A z-score of 0 means the price is exactly at the 14-day average. A z-score of +2.5 means it is 2.5 standard deviations above average — an unusual event that would occur less than 1% of the time if prices were normally distributed. Z-scores complement the raw percentage change: a station with highly volatile prices will need a larger move to reach an elevated z-score than a consistently stable station.

Step 3 — Severity Classification

Each spike is classified using whichever criterion — percentage delta or z-score — is more severe:

Severity % Delta criterion Z-score criterion Meaning
Normal ≥2% but <4% <1.5σ A real change that passed the noise gate, but within historical norms for this location.
Elevated ≥4% or ≥1.5σ A notable move. Prices are shifting more than usual — worth monitoring.
Abnormal ≥8% or ≥2.5σ A significant outlier, well outside recent historical patterns. Rare and newsworthy.

A single spike can meet either criterion — for example, an 10% jump at a normally-stable station would qualify as abnormal on both the percentage and z-score criteria. Only the highest applicable severity is recorded.

Detection Scopes

What are the three scopes?

Spike detection runs at three levels of aggregation for every snapshot:

  • Station — An individual petrol station's price for a specific fuel type. E.g. "BP Wollongong's P95 rose 12c/L."
  • Postcode — The average price across all stations within a postcode, for a specific fuel type. E.g. "Average Diesel across 2527 rose 6%."
  • State (NSW) — The average price across all monitored stations in the state. This is the broadest, most policy-relevant signal.

Why aggregate scopes?

A station-level spike might reflect a single operator's decision. A postcode-level or state-level spike suggests a coordinated or market-wide move — a more meaningful signal for consumer advocacy and policy purposes.

News Intelligence

What news sources are monitored?

FuelWatchX checks five major Australian news RSS feeds every 30 minutes:

  • ABC News
  • The Guardian Australia
  • SBS News
  • The Sydney Morning Herald
  • 9News

How are articles categorised?

Articles are tagged by matching their title and summary against keyword lists. An article can receive multiple tags. The four categories are:

Fuel Price Geopolitical Stage 3 NSW Local
  • Fuel Price — Direct reporting on petrol or diesel prices at the pump (e.g. "petrol price", "bowser price").
  • Geopolitical — Global oil market events: crude oil, OPEC, Strait of Hormuz, Brent crude, Iran sanctions.
  • Stage 3 — National fuel security stories: refineries, strategic reserves, fuel shortages, supply disruption.
  • NSW Local — NSW-specific coverage, including regional and metropolitan reporting, NRMA reports, and ACCC petrol inquiries.

News events are overlaid on price charts as dashed vertical lines, allowing visual correlation between market events and local price movements.

Limitations & Caveats

  • Data lag: There is an inherent lag of up to 2.5 hours between a station changing its price and that change appearing in FuelWatchX.
  • Station compliance: FuelCheck accuracy depends on stations reporting their prices within the legally required 30 minutes. Late reporting will delay spike detection.
  • Algorithm context: Statistical detection identifies unusual moves; it cannot determine why a price changed. Human judgement is required before drawing conclusions about pricing behaviour.
  • News matching: Article categorisation is automated via keyword lists and may occasionally misclassify or miss articles.
  • Region scope: This tool covers NSW only. Tasmanian records returned by the upstream FuelCheck API are excluded from station lists, maps, analysis, and statewide aggregates.
  • Short history: Z-scores are less reliable in the first two weeks of operation when the 14-day baseline window is not yet fully populated.

Sydney / NSW Price Cycles

Why do petrol prices spike then gradually fall?

Australian petrol retailers use a deliberate "rocket and feather" pricing strategy: prices rise sharply over a short period, then drift down slowly before the cycle repeats. The ACCC documents this pattern for all five major cities.

How long is the Sydney cycle?

The ACCC reports a 5.5-week average for Sydney (28–39 days across recent cycles). Prices typically reach their peak around days 12–16 into the cycle, then fall gradually for the remaining 3–4 weeks.

How does this differ from other cities?

  • Perth — strict 7-day weekly cycle, peaks on Wednesdays
  • Adelaide — 2.5-week avg, highly variable
  • Melbourne / Brisbane — 6–6.5 week cycles, similar to Sydney

This is why the day-of-week chart on the Patterns tab shows within-cycle variation for NSW, not a predictable weekly "buy on Tuesday" pattern.

Source: ACCC — Petrol price cycles in the 5 largest cities