Free fuel prices API
The data behind FuelWide, as JSON. No key, no registration, CORS enabled, cached an hour at the edge. National averages for 28 markets and per-forecourt prices for 42,322 stations across 4 countries.
Every figure arrives with the body that published it, that body’s licence, how the number was measured and when. See all data sources and the methodology.
- GET
/api/fuel-pricesNational average petrol 95, diesel and LPG prices in EUR per litre, including all duties and taxes, with each country's own source, licence and credit line. Returns 28 of the 111 markets published on the site; the other 83 are withheld and the response says by whom and why.
- GET
/api/fuel-prices/{country}Prices, pre-tax prices and one normalized observation per fuel — price basis, geographic precision, measurement date, retrieval date and confidence. Markets whose redistribution terms are unconfirmed answer 451 with the publisher named.
- GET
/api/stations/{country}Per-station prices with coordinates, brand, opening hours and every grade sold, for italy, spain, france, australia (Western Australia only). No key, no cap. 3 further sets are published on our pages but withheld here: Portugal, Bulgaria, Slovenia.
- fuel
- Keep only stations reporting this fuel.
- near
- `lat,lon` — filter by radius and sort nearest first.
- km
- Radius in kilometres for `near`. Default 25.
- sort
- `price` sorts cheapest first instead of nearest first.
- limit
- Maximum stations returned. Default and maximum 5000.
- GET
/api/widget/{slug}A self-contained HTML card for one market, styled to inherit the host page's background. Same rights gate as the JSON endpoints.
- GET
/api/widget/embed.jsA dependency-free script that renders a price card into any element carrying `data-fuelwide="{slug}"`. Include it once per page; it renders every matching element and re-scans for elements mounted later. Carries only the markets we may redistribute, and links back to the source page from the host's own markup.
A working response example
Selected fields and the first fuel observation from the current Germany dataset. The endpoint also returns the other available fuels and country-level fields.
{
"updatedAt": "2026-10-19",
"observations": [
{
"fuelType": "petrol95",
"price": 2.179,
"currency": "EUR",
"unit": "litre",
"priceBasis": "national_weighted_average",
"geographicPrecision": "national",
"taxIncluded": true,
"geography": {
"country": "Germany",
"countryCode": "DE",
"countrySlug": "germany"
},
"source": {
"id": "ec-weekly-oil-bulletin",
"name": "Weekly Oil Bulletin",
"publisher": "European Commission, DG Energy",
"url": "https://energy.ec.europa.eu/data-and-analysis/weekly-oil-bulletin_en",
"type": "government",
"licence": "European Commission reuse notice",
"licenceUrl": "https://commission.europa.eu/legal-notice_en",
"cadence": "weekly"
},
"attribution": "Source: European Commission, Weekly Oil Bulletin",
"observedAt": "2026-10-19",
"retrievedAt": "2026-10-24T19:34:40.095Z",
"confidence": "high",
"stale": false
}
]
}curl -s https://fuelwide.com/api/fuel-prices/germany | jq .observations
const response = await fetch("https://fuelwide.com/api/fuel-prices/germany");
if (!response.ok) throw new Error(`FuelWide HTTP ${response.status}`);
const data = await response.json();
const price = data.observations.find(item => item.fuelType === "petrol95");
if (price && price.price != null) {
console.log(price.price, price.currency, price.unit);
console.log("Observed:", price.observedAt, "Stale:", price.stale);
console.log("Credit:", price.attribution);
}Read observations rather than prices. The bare price map is kept for back-compatibility and cannot tell you what kind of average you are holding, what it is a measurement of, or when it was measured as opposed to fetched. Each observation can.
Update frequency varies by publisher: read source.cadence on each observation. observedAtis the price’s reference date; retrievedAt records collection, and stale flags a delayed observation. A newly fetched weekly or monthly average is still a weekly or monthly average. Check currency, unit and price basis before comparing it with a station quote, and preserve missing values as missing.
Station-level prices
Every forecourt in a covered market, with coordinates, brand where the feed publishes one, opening hours and every grade sold. No key and no cap — the whole dataset is a few megabytes and we would rather you built on it than scraped it.
/api/stations/italy21,147stationsMinistero delle Imprese e del Made in Italy/api/stations/spain11,200stationsMinisterio para la Transición Ecológica (Spain)/api/stations/france8,981stationsMinistère de l'Économie (France)/api/stations/australia994stations · Western Australia onlyGovernment of Western Australia, Department of Energy, Mines, Industry Regulation and Safety
What the API will not give you
We publish 83 markets and 3 station feeds that we may not pass on. These answer 451 Unavailable For Legal Reasons with the publisher named, rather than a price we have no right to hand over. They stay on our own pages, with credit.
- GlobalPetrolPrices.com58 markets
GlobalPetrolPrices.com's reuse terms have not been reviewed, so we do not pass the figures on.
- OpenVan.camp14 markets
OpenVan.camp's reuse terms have not been reviewed, so we do not pass the figures on.
- Agency for Natural Resources and Energy (METI), Japan1 market
Agency for Natural Resources and Energy (METI), Japan's reuse terms have not been reviewed, so we do not pass the figures on.
- Ministry of Finance Malaysia, via data.gov.my1 market
Ministry of Finance Malaysia, via data.gov.my's reuse terms have not been reviewed, so we do not pass the figures on.
- CPC Corporation, Taiwan (state-owned)1 market
CPC Corporation, Taiwan (state-owned)'s reuse terms have not been reviewed, so we do not pass the figures on.
- Consumer Council, Hong Kong (DATA.GOV.HK)1 market
Consumer Council, Hong Kong (DATA.GOV.HK)'s reuse terms have not been reviewed, so we do not pass the figures on.
- Comisión Reguladora de Energía (CRE), México1 market
Comisión Reguladora de Energía (CRE), México's reuse terms have not been reviewed, so we do not pass the figures on.
- Agência Nacional do Petróleo, Gás Natural e Biocombustíveis (ANP), Brazil1 market
Agência Nacional do Petróleo, Gás Natural e Biocombustíveis (ANP), Brazil's reuse terms have not been reviewed, so we do not pass the figures on.
- RECOPE, prices set by ARESEP (Costa Rica)1 market
RECOPE, prices set by ARESEP (Costa Rica)'s reuse terms have not been reviewed, so we do not pass the figures on.
- Ministerio de Industria, Comercio y Mipymes (MICM), Dominican Republic1 market
Ministerio de Industria, Comercio y Mipymes (MICM), Dominican Republic's reuse terms have not been reviewed, so we do not pass the figures on.
- Ministry of Business, Innovation and Employment (MBIE), New Zealand1 market
Ministry of Business, Innovation and Employment (MBIE), New Zealand's reuse terms have not been reviewed, so we do not pass the figures on.
- Independent Consumer and Competition Commission (ICCC), Papua New Guinea1 market
Independent Consumer and Competition Commission (ICCC), Papua New Guinea's reuse terms have not been reviewed, so we do not pass the figures on.
- Gouvernement de la Nouvelle-Calédonie (DIMENC)1 market
Gouvernement de la Nouvelle-Calédonie (DIMENC)'s reuse terms have not been reviewed, so we do not pass the figures on.
- Direção-Geral de Energia e Geologia (Portugal)Portugal stations
Direção-Geral de Energia e Geologia (Portugal) permits display but not redistribution.
- KARAI (karai.bg)Bulgaria stations
KARAI (karai.bg)'s reuse terms have not been reviewed, so we do not pass the figures on.
- Goriva.siSlovenia stations
Goriva.si's reuse terms have not been reviewed, so we do not pass the figures on.
If you need one of these, licence it from the publisher — every one is named on our sources page. When a decision is recorded, the market reappears here without anyone editing this page.
Attribution
Free to use, including commercially. What the licences require is that you credit the bodies that produced the data — a FuelWide credit on its own does not satisfy them. Every response carries its own attribution string; reproduce that. Across everything the API currently serves, the lines are:
- Contains public sector information licensed under the Open Government Licence v3.0
- Source: European Commission, Weekly Oil Bulletin
- Station prices: FuelWatch, Government of Western Australia, CC BY 4.0
- Station prices: MIMIT, CC BY 4.0
- Station prices: Ministerio para la Transición Ecológica y el Reto Demográfico
- Station prices: prix-carburants.gouv.fr, Licence Ouverte
A link back to fuelwide.com is appreciated and not required.
Roadmap
Coming next: more station-level countries, US state and metro endpoints, and historical series. The Fair Price Score now ships on every market the API serves, as a fairPriceScore object. If you are building on this and need something, tell us — the roadmap is mostly other people’s requests.
