Data Methodology

Fuel

Bill Hero's fuel price dataset covers retail prices at Australian service stations, refreshed every 4 hours from state government price reporting feeds aggregated by the bill-hero-fuel service, with per-station prices in AUD per litre for unleaded, diesel, LPG, and ethanol blends across NSW, VIC, QLD, SA, and WA.

What this dataset covers

Retail fuel prices at individual service stations across the five states with mandatory fuel price transparency reporting: New South Wales, Victoria, Queensland, South Australia, and Western Australia. Each record represents the most recently observed price for a specific fuel type at a specific station.

Fuel types covered: ULP 91 (U91), Premium 95 (U95), Premium 98 (U98), E10 (ethanol blend), Diesel, Premium Diesel, LPG, and E85 where reported by state feeds. Not all fuel types are available at every station; the dataset only contains types that a station actively reports. The Northern Territory, Tasmania, and ACT do not operate mandatory fuel price reporting schemes and are not included.

Sources

Prices are aggregated by the bill-hero-fuel service from the following state government feed providers:

  • NSW — FuelCheck (NSW Department of Customer Service)
  • VIC — Victorian Fuel Price Reporting (Essential Services Commission)
  • QLD — Queensland Fuel Price Reporting (Department of Energy and Public Works)
  • SA — SA Fuel Price Reporting (Office for Recreation, Sport and Racing)
  • WA — FuelWatch (WA Department of Energy, Mines, Industry Regulation and Safety)

Bill Hero fetches from the bill-hero-fuel API, which normalises the disparate state feed formats into a consistent structure. Each record in the Bill Hero feed carries the station's external identifier as assigned by the state feed, making it possible to cross-reference against the original state source.

Refresh cadence

The fuel sync runs every 4 hours, at 15 minutes past each 4-hour mark (00:15, 04:15, 08:15, 12:15, 16:15, 20:15 UTC). The 15-minute offset avoids collision with the upstream state feeds' own hourly update cycles, reducing the chance of pulling a partially refreshed feed.

The ingest pages all available stations from the bill-hero-fuel API in batches of 5,000 records per request, then upserts each station's current price by (station_id, fuel_type). This means the fuel_prices table always holds the most recently observed price for each station and fuel type combination. After the upsert, the table is propagated to the production database within the same workflow run.

How prices are expressed

Prices in the price_dollars_per_litre field are in Australian dollars per litre, GST inclusive. State feeds report prices in cents per litre (cpl); the ingest divides by 1,000 to convert to dollars (state feeds use 1/10 cent precision internally, so the divisor is 1,000 rather than 100).

The captured_at field records when the bill-hero-fuel service observed the price from the state feed. This is distinct from when the station actually changed its price; the gap between a price change and its appearance in the feed varies by state.

Per-station vs per-postcode

The primary grain of the dataset is per-station: each row represents one fuel type at one physical service station, identified by station_id. Stations are also tagged with a postcode and a normalised suburb slug, enabling postcode-level filtering via the ?postcode= query parameter.

Aggregation to suburb-level or postcode-level averages is not performed in the feed itself; callers who need a typical price for an area should compute the median or mean across stations in that postcode. The Bill Hero consumer-facing pages do this aggregation server-side; the raw feed exposes individual station prices.

Known limitations

State-feed reporting lag varies considerably. NSW FuelCheck updates within approximately 5 minutes of a station submitting a new price. WA FuelWatch operates on a next-day publication model (stations report tomorrow's price today). VIC, QLD, and SA typically have a 1–4 hour lag. The captured_at timestamp reflects when Bill Hero observed the price, not when it became effective at the pump.

Stations that are not registered with their state's mandatory reporting scheme are not included. Independent rural stations, unmanned card-only outlets at farms or marinas, and some fleet depots do not report to state feeds.

Historical price data (trend tables) is maintained separately from the current-price snapshot. The /data/fuel JSON endpoint exposes the current snapshot only. For price trend analysis, use the consumer-facing fuel trends pages.

Verification & corrections

Errors in fuel data can be reported to data@billhero.com.au. Omissions or corrections are typically applied within 48 hours of verification.

Licence & attribution

Published under Creative Commons CC-BY-4.0. Attribution required: "Data via Bill Hero (billhero.com.au)". Underlying state government fuel price data is published under open government licences; see each state feed's terms for direct-source attribution requirements. Commercial republication of the Bill Hero feed is permitted with attribution; bulk redistribution is rate-limited at 10 req/s per IP.

Citation format

Bill Hero (2026). Australian Retail Fuel Prices Dataset. https://billhero.com.au/data/fuel. Accessed [date]. CC-BY-4.0.

@misc{billhero2026fuel,
  author    = {{Bill Hero}},
  title     = {Australian Retail Fuel Prices Dataset},
  year      = {2026},
  url       = {https://billhero.com.au/data/fuel},
  note      = {Accessed [date]. CC-BY-4.0. Per-station prices aggregated from state government feeds. Updated every 4 hours.},
}