European Fuel Prices Scraper - Italy, Spain, France avatar

European Fuel Prices Scraper - Italy, Spain, France

Pricing

$0.50 / 1,000 price records

Go to Apify Store
European Fuel Prices Scraper - Italy, Spain, France

European Fuel Prices Scraper - Italy, Spain, France

Petrol, diesel, LPG, CNG and HVO prices for 42,000+ filling stations in Italy, Spain and France, straight from the three governments' official open data. One comparable fuel taxonomy, explicit units and radius search. You pay only for the price records you receive.

Pricing

$0.50 / 1,000 price records

Rating

0.0

(0)

Developer

Koukkis

Koukkis

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

Categories

Share

European Fuel Prices — Italy, Spain, France

Petrol, diesel, LPG, CNG and HVO prices for 42,000+ filling stations in Italy, Spain and France, taken straight from the three governments' own open-data feeds and normalised into one comparable dataset.

Most fuel price scrapers cover the United States and read crowd-reported figures. This one covers Europe and reads official sources: the Italian Ministry of Enterprises and Made in Italy (MIMIT), the Spanish Ministry for the Ecological Transition (MITECO), and the French government open-data portal.

What you get

Stations42,000+ across IT, ES, FR
Price records~167,000 per full run (one record = one fuel at one station)
Fuels18 normalised categories, original label kept
FreshnessFrance: updated about every 10 minutes. Spain: about every 30 minutes. Italy: once a day, prices in force at 8:00 the previous day
Coordinateslatitude and longitude, for maps and radius searches
Sourceofficial government open data only

Pricing

You pay per price record delivered to your dataset: $0.50 per 1,000 records ($0.0005 each, event price-record). There is no start fee.

You do not pay for:

  • records your filters remove,
  • a country whose feed was unreachable — the other countries are still delivered,
  • a run that returns nothing, or that fails,
  • invalid input — the run stops before fetching anything.

Set Maximum cost per run in the run options and the Actor delivers exactly as many records as that budget covers, then finishes normally. It never goes over.

Typical inputRecordsCost
Default run: 1,000 records shared across IT, ES, FR1,000$0.50
Diesel within 5 km of central Madrid~60$0.03
Diesel and petrol 95 within 25 km of Madrid~1,260$0.63
Self-service diesel and petrol 95 within 25 km of Milan~1,650$0.83
Every diesel price in Spain~11,300$5.65
Everything, all three countries~167,000$83.50

Running the Madrid example once a day costs about $19 a month. Narrow the countries, fuels and radius to pay only for what you use.

Input

Every field is optional. Running with defaults returns 1,000 records shared evenly between the three countries.

FieldTypeDefaultNotes
countriesarray["IT","ES","FR"]Which feeds to query
fuelsarrayallNormalised categories, e.g. ["diesel","lpg"]
latitude / longitudestring—Centre of a radius search, decimal degrees. Give both or neither
radiusKminteger251–500, used with latitude and longitude
maxResultsinteger1000Shared across countries. 0 = no limit (~167,000)
includeSuspectPricesbooleanfalseSee data quality below
selfServiceOnlybooleanfalseItaly only; see below

An input the Actor cannot run as given — only a latitude, a coordinate that is not a number, an unknown fuel — fails immediately with a clear message, instead of quietly returning (and billing) records you did not ask for.

Cheapest diesel near a point

{
"countries": ["ES"],
"fuels": ["diesel"],
"latitude": "40.4168",
"longitude": "-3.7038",
"radiusKm": 5
}

One fuel across all three countries

{ "fuels": ["diesel"], "maxResults": 0 }

Example output

{
"country": "ES",
"station_id": "ES-10943",
"source_station_id": "10943",
"name": "CEPSA",
"brand": "CEPSA",
"address": "PASEO MORET, 7",
"city": "Madrid",
"region": "MADRID",
"postcode": "28008",
"lat": 40.432861,
"lon": -3.724194,
"fuel": "diesel",
"fuel_original": "Gasoleo A",
"fuel_mapping_exact": true,
"is_premium": false,
"price": 2.034,
"currency": "EUR",
"unit": "EUR/l",
"price_updated_at": "2026-09-26T14:10:27",
"self_service": null,
"price_suspect": false,
"source": "Ministerio para la Transición Ecológica y el Reto Demográfico (MITECO)",
"source_license": "Spanish public-sector information reuse terms (Ley 37/2007, RD 1495/2011): cite the source and the date of last update",
"source_url": "https://geoportalgasolineras.es/",
"fetched_at": "2026-09-26T12:10:39+00:00"
}

Run it every day

The national feeds publish only the current price, never yesterday's. To build a price history, schedule the Actor:

  1. Save your input as a task.
  2. In Schedules, create a schedule for that task that runs once a day, for example 0 9 * * * for 9:00 every morning.
  3. Set Maximum cost per run on the task so a schedule can never surprise you.

Each run lands in its own dataset, which exports as JSON, CSV, Excel or XML and connects to Make, Zapier, Google Sheets and Airtable. From code, one call runs the Actor and returns the records:

curl -X POST "https://api.apify.com/v2/acts/koukkis~european-fuel-prices/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"countries":["FR"],"fuels":["diesel"],"latitude":"48.8566","longitude":"2.3522","radiusKm":10}'

Why the fuel taxonomy matters

The same physical fuel has a different name in every country, and Italian retailers brand premium diesel under a dozen names of their own — Blue Diesel, Supreme Diesel, Hi-Q Diesel, Excellium, V-Power, DieselMax. Raw national feeds cannot be compared with each other.

This Actor maps 80+ national labels onto 18 categories and returns both, so you can group across borders without losing the original:

Normalised fuelItalySpainFrance
dieselGasolioGasoleo AGazole
diesel_premiumBlue Diesel, Hi-Q Diesel, Supreme DieselGasoleo Premium—
petrol_95BenzinaGasolina 95 E5SP95
petrol_98Benzina specialeGasolina 98 E5SP98
hvoHVOlution, HVO100Diésel Renovable—
lpgGPLGases licuados del petróleoGPLc
cngMetanoGas Natural Comprimido—

A label the mapping does not recognise is returned as unknown and flagged with fuel_mapping_exact: false. It is never guessed into the wrong bucket, because a silent misclassification is worse than a visible gap.

Data quality

Gases are not sold by the litre. CNG, LNG and hydrogen are priced per kilogram, but all three national feeds publish them in the same numeric column as litre prices. Treated naively, hydrogen looks like petrol at €17.45 per litre. Every record carries an explicit unit of either EUR/l or EUR/kg.

Official feeds contain typos. Around 10 records in 167,000 are clearly wrong — diesel listed at €8.888, premium petrol at €0.100. They are flagged with price_suspect: true and excluded by default, never silently deleted. Set includeSuspectPrices: true to receive them.

Some prices are old. A station that has not reported a change keeps its last price. Check price_updated_at: in Italy and France it is the time of that particular price; in Spain it is the time the whole feed was published, so it says nothing about an individual price's age.

Broken coordinates are repaired or removed. The feeds contain placeholders such as 0,0, swapped latitude and longitude, and longitudes of 999. A clear swap is corrected; anything else outside the country becomes null, so the station still appears in the data but not in radius searches.

An incomplete feed is retried and reported. The French portal occasionally serves a partial export while it re-indexes. The Actor compares the row count with the portal's own figure, retries, and if France is still incomplete it delivers what was published and says so in the log.

Every run ends with a compact quality report in the log and saves the same figures as QUALITY_REPORT in the run's key-value store: records and stations per country, implausible prices flagged, how many delivered prices are older than 30 days, records without coordinates, and any source that failed.

Self-service versus served (Italy)

Italy publishes two prices per pump, self-service and served, and the difference is often 15–20 cents. self_service is true or false for Italian records and null for Spain and France, whose feeds do not make the distinction. Set selfServiceOnly: true to keep only self-service prices; Spanish and French records are unaffected by that flag.

Data sources, licences and attribution

CountryPublisher and datasetLicence and what it requires
ItalyMinistero delle Imprese e del Made in Italy (MIMIT) — Carburanti: prezzi praticati e anagrafica degli impiantiItalian Open Data License 2.0. Credit the source and the licensor and link the licence. Commercial reuse allowed
SpainMinisterio para la Transición Ecológica y el Reto Demográfico (MITECO) — Geoportal GasolinerasSpanish public-sector information reuse rules (Ley 37/2007, Real Decreto 1495/2011 art. 7). Do not distort the data, cite the source, give the date of the last update
FranceDGCCRF via data.economie.gouv.fr — Prix des carburants en France, flux instantané v2Licence Ouverte / Open Licence 2.0 (Etalab). Credit the source and the date of the last update; a link to the data is enough. Commercial reuse allowed

To make attribution easy to keep, every record carries it: source (publisher), source_license, source_url and price_updated_at (the date of the last update). If you republish the data, keep those fields or credit the publishers the same way. None of the three licences allow presenting the data as official or as endorsed by the publisher, and this Actor is not affiliated with or endorsed by any of them. The French portal's region and department fields are derived from INSEE, IGN and Natural Earth reference data.

Germany is deliberately absent. The only practical German feed restricts bulk access to one request per minute and licenses historical data for non-commercial use only, so it cannot back a commercial dataset.

Disclaimer

The data comes from official public sources and is delivered as published. It can contain the sources' own errors, omissions and delays, and a station's price at the pump may differ from the published one. No warranty is given as to its accuracy, completeness or timeliness. Do not use it as the sole basis for financial or safety-related decisions. You are responsible for how you use the data, including complying with the source licences above.

Use cases

  • Fleet and logistics routing by real fuel cost rather than distance
  • Price comparison apps and cheapest-station finders
  • Cross-border price research and journalism
  • Inflation and energy-cost tracking
  • Competitor price monitoring for fuel retailers