← Back to dashboard

EuroOilWatch · Methodology

How we measure European fuel prices, stocks, and reserves

Every number we publish carries a source, a perimeter, and a timestamp. This page sets out exactly which data enters each calculation — so our figures can be questioned, reproduced, and cited with confidence.

Coverage · EU-27Fuel-price cadence · WeeklyStocks cadence · Monthly (~2-month lag)

Source hierarchy — highest authority first

01
European Commission Weekly Oil Bulletin
Harmonised weekly consumer prices across EU member states. The backbone of every cross-border comparison and country ranking.
02
Eurostat oil-stock and consumption datasets
Monthly closing stocks (nrg_stk_oilm) and gross inland consumption (nrg_cb_oilm). Source for reserve days-of-supply.
03
EIA Europe Brent Spot Price
Daily Brent reference series back to May 1987. The authoritative crude price for analytical work.
04
Stooq Brent futures (cb.f)
Front-month Brent futures, intraday refresh, used for the live dashboard tile only.
05
Editorial panels
War-Risk Watch, Fertilizer Watch — synthesised from publicly-cited trade-press sources. Marked as editorial estimates.

No single dataset describes European fuel security well. The European Commission's harmonised price bulletin is consistent but slow and national-only. Eurostat's stock series is authoritative but lags by months. Crude prices respond intraday but tell you nothing about pump-side transmission. So we stack these sources rather than pick one.

The honest question is not “what formula did you use?” — it is “which observations actually entered this number?”

Two analysts can apply an identical average and still diverge, because they quietly included different countries, fuel grades, weeks, or even definitions of price. The sections below document the inputs precisely so that ours can be reconstructed.

01Fuel prices — what we use today

All EU-27 retail fuel prices on EuroOilWatch come from the European Commission DG Energy Weekly Oil Bulletin. The Commission collects national average consumer prices, including all taxes, from official authorities in each member state every Wednesday and publishes on Thursdays. We refresh our country table the same day.

The Bulletin is harmonised across countries, which makes it the only sound foundation for cross-border comparison. We use it for every country ranking, EU-wide average, and weekly historical series.

ScopeSourceStatusGranularity
All 27 EU member statesEC Weekly Oil BulletinLiveNational weekly average
France — granular detailprix-carburants.gouv.fr open feedLiveStation-level → département + région rollups (daily)
Germany — granular detailtankerkoenig.de (MTS-K)RoadmapArchitecture ready; pending tankerkoenig API key approval. ~16,000 stations once live.
Spain — granular detailGeoportal de HidrocarburosLiveStation-level → provincia + CCAA rollups (daily)
Italy — granular detailMIMIT carburanti datasetsLiveStation-level → provincia + regione rollups (daily)
UK — non-EU comparisonDESNZ weekly road-fuel statisticsRoadmapNational weekly average (handled separately)

Roadmap rows describe national open datasets we plan to integrate as a second granularity layer beneath the EC bulletin. Until they go live the only layer visible on the site is the harmonised national bulletin — and rows are not silently mixed: a country's price always carries its source label.

02Oil stocks and consumption — Eurostat

Monthly closing oil-stock levels for each EU member state come from Eurostat's nrg_stk_oilm dataset, in thousand tonnes on national territory. Gross inland consumption comes from nrg_cb_oilm.

We track three fuel categories: motor gasoline (petrol), gas/diesel oil, and kerosene-type jet fuel. Both Eurostat series publish monthly with an approximate two-month lag — the figure on the site today reflects the most recent fully-reported period, not real-time inventories.

03Crude oil prices — two Brent series

We use two different Brent series for two different jobs, and disclose both because they can diverge sharply during volatile markets.

The live dashboard card tracks Stooq's cb.f front-month Brent futures — intraday, freely available, refreshes client-side. Front-month futures price expected near-term delivery and roll between contracts as months expire.

The “Brent in historical context” chart on /prices draws from the U.S. Energy Information Administration's Europe Brent Spot Price FOB daily series (RBRTE), which goes back to 20 May 1987. EIA spot is the more authoritative reference for analytical work — it is what most press and policy citations mean by “Brent.”

In normal markets the spread between the two is about $1–3/bbl. During the Iran-war period of early 2026 it widened past $25/bbl as the futures curve discounted a near-term ceasefire. Both numbers are real and sourced — they answer different questions. EUR conversion uses the current EUR/USD exchange rate.

04Days-of-supply calculation

“Days of supply” is calculated as:

Days = (Stock in kt / Monthly Consumption in kt) × 30

This is an estimate of consumption cover for one product.

Directive 2009/119/EC requires each member state to hold emergency stocks equivalent to at least 90 days of average daily net imports or 61 days of average daily inland consumption, whichever is greater, calculated under the Directive's own accounting rules — in crude equivalent, across all petroleum products together, with its prescribed deductions and eligible-stock definitions.

The figure above is none of those things: it is a single product measured against its own consumption. We draw a 90-day reference line on it because it is a familiar number and a useful constant, not because 90 days is a statutory minimum for any individual fuel. Nothing on this site establishes that a country complies, or fails to comply, with the Directive; that assessment belongs to the European Commission and the member states' own reporting.

What the EU average is. Each “EU average” on this site is the unweighted mean of the national days-of-cover figures: every country counts once, whatever its size, so Malta's figure moves the mean exactly as much as Germany's. It is not the EU's aggregate stock divided by the EU's aggregate consumption, which weights by volume and comes out materially lower (for the June 2026 file: petrol 58 days aggregate against 74 unweighted, diesel 79 against 94, jet 52 against 67). We publish the unweighted figure because it is what the series has always been; the label now says so. A country figure that is carried forward, modelled or capped (below) enters the mean like any other, and the note beneath each average counts how many did.

Which month a figure is from. Since 15 September 2026 (zero-policy-2026-09) a record describes the dataset's month and no other: the Eurostat cell for that month decides whether a figure is an observed value, a reported zero or not reported, and nothing older is ever promoted into the current figure. Before that, the importer scanned backwards for the latest positive value, so Lithuania's jet fuel — reported as 0.0 kt by Eurostat every month from August 2025 — was published as its July 2025 observation inside every later file. That older observation is now shown beside the current record as dated context, never as the figure.

A reported zero: cover withheld by policy. When Eurostat reports 0.0 kt with no flag, the site displays “0 kt reported” and withholdsdays of cover, a status band, and any contribution to the EU average, the counts or the rankings. This is a conservative assessment policy, not an arithmetic limitation: 0 divided by consumption is 0 days, but an unexplained zero from a country that consumes the product every month is not a number the site is willing to assert cover on. A documented resolution that confirms a genuine zero holding makes the figure assessable at 0 days; any other documented explanation leaves it withheld and says why.

Which consumption is used. Consumption is taken from the same month as the stock; if that month has no cell, from up to three earlier months, crossing absent cells only. A reported zero consumption stops the search and withholds cover for a different reason: stock divided by zero is undefined, so cover cannot be computed — arithmetic, not policy, and no resolution changes it. The raw reported zero is kept. The former fallback that modelled days from a size-class constant when no consumption was published has been retired; it measured nothing.

What a withheld figure does to the averages. Each EU average is the unweighted mean of the assessable national figures, and the coverage (“26 of 27 assessable”) is printed beside it. A mean or a count that moves because a figure was withheld or restored is a change in assessability, not in reserves, and the analysis is instructed never to present it as reserves improving or deteriorating.

The 365-day cap. Days of cover are clamped to 365. A value shown as 365 is the cap, not a measurement; the computed figure is kept alongside (provenance.uncappedDays) and the figure is labelled capped. Slovenia's jet fuel (54 kt against 4 kt a month) computes to 405 days and is shown as 365.

05Reserve-status classification

These bands are EuroOilWatch's own classification of the days-of-consumption figure above, applied to the 90-day reference line. They are not a test of compliance with Directive 2009/119/EC. The site classifies on the ratio days / 90, so the boundaries below are the exact day figures at which a band changes.

Safe — 99 days or more (ratio ≥ 1.10)

Watch — 85.5 up to 99 days (ratio ≥ 0.95), adequate but thinning

Warning — 76.5 up to 85.5 days (ratio ≥ 0.85), approaching the reference

Critical — below 76.5 days (ratio < 0.85)

06Why not all prices mean the same thing

This is the caveat that most fuel-price comparisons skip — and the one most likely to mislead. A “price” from one source is not interchangeable with a “price” from another, even when both are sourced from the same Bulletin.

The clearest trap is Belgium. Belgian retail fuel pricing is regulated via a maximum-price ceiling published daily by FPS Economy. The figure that enters the EC Weekly Oil Bulletin reflects that maximum permitted price, not necessarily what motorists actually pay at the pump. Retailers may sell below it, so the published number is a ceiling, not an observed average. We display Belgium prices with that context, and any future granular-data integration for Belgium will distinguish observed prices from regulatory ceilings.

The broader principle: each price is stored with its own source label and methodology flag, and comparisons across countries are drawn only after normalising fuel grade, unit, tax treatment, week, and geography.

07The four things that change a result

When two reproductions of one of our figures disagree, the cause is almost always one of the four below — not the arithmetic:

  • →The fuel grade differs (E10 vs E5 vs B7 diesel; jet A vs jet A1).
  • →The cadence window differs — we report the latest weekly bulletin and the rolling 4-week trend; using a single day or a single month produces a different number.
  • →The geographic perimeter differs (single country vs EU-27 average vs euro-area subset).
  • →The tax treatment differs (consumer price including all taxes vs net-of-tax product price; we always quote the consumer figure unless explicitly noted).

State all four and any two analysts will converge. Omit one and they will not, however identical the formula looks.

08AI analysis

The AI analysis is generated by Claude (Anthropic) using the latest stock, price, and crude data. It provides a plain-English interpretation of the numbers and highlights notable trends or risks. The analysis is regenerated whenever the underlying data updates.

Analysis is AI-assisted and provided for informational purposes only. For important decisions, users should verify the underlying figures against official primary sources.

09Limitations

Data lag. Eurostat oil-stock data is published with an approximate two-month delay. The dashboard shows the most recent available period, not real-time stock levels.

Estimation. Days-of-supply is a calculated estimate, not a direct measurement. Actual reserve adequacy depends on import flows, refinery output, and demand patterns that vary day-to-day.

Coverage gaps. Not all member states report all fuel categories every period. Missing values are marked, not imputed.

National-only fuel pricing. Until our roadmap granular-data integrations go live, fuel prices on EuroOilWatch are national weekly averages from the EC Bulletin — we do not yet display sub-national variation.

Not affiliated with any government. EuroOilWatch is an independent fuel-monitoring platform built on publicly available EU data.

Citing a EuroOilWatch figure

If you reference one of our numbers in an article, briefing, or dataset, please quote four things so readers can place it precisely:

Fuel gradeCountry / perimeterBulletin weekLink to /methodology

“French E10 averaged €1.84 in the week to 25 May 2026 (EuroOilWatch, national weekly bulletin) — eurooilwatch.com/methodology.”

10Frequently asked

Can I reproduce your national averages myself?+

Yes — that is the point of this page. The EC Weekly Oil Bulletin is the reference dataset; download the matching week, filter for the country and fuel grade, and your figure should reproduce ours to the cent.

Why might your figure differ slightly from another tracker's?+

Almost always because of a different fuel grade, week, perimeter, or tax treatment — not different arithmetic. A tracker using a single-day rather than a weekly figure, or comparing tax-inclusive against net-of-tax prices, will land somewhere else from the same underlying data.

Is the UK part of your EU averages?+

No. UK data, when published, comes from DESNZ as a separate non-EU comparison series and is never blended into the EU-27 harmonised figures.

When will sub-national pricing go live?+

The granular open datasets we plan to integrate — French prix-carburants, German MTS-K, Spanish Geoportal, Italian MIMIT — are listed in section 01 as roadmap items. We will announce each one as it goes live, and the source table here will flip the row from “Roadmap” to “Live.”

May I cite this page?+

Yes. Reuse and verification are exactly what it exists for. Please include the fuel grade, country / perimeter, bulletin week, and a link as set out above.