# EU Fuel Prices: Spain & France Official Data (`hydrocore/eu-fuel-prices`) Actor

Live petrol station prices from the official government feeds of Spain and France: diesel, petrol 95/98, E10, LPG and more, in one clean format with GPS. Filter by city, region, radius or cheapest N, or get every price in a country for a flat $2.50.

- **URL**: https://apify.com/hydrocore/eu-fuel-prices.md
- **Developed by:** [Hydrocore Data](https://apify.com/hydrocore) (community)
- **Categories:** Travel, Automation, E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 price rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## EU Fuel Prices: Spain & France Official Data

Get **current fuel prices for every petrol station in Spain and France**, straight from each government's official open-data feed, in **one clean, normalized format**. Ask for the 20 cheapest diesel stations within 10 km of a point, every E10 price in a city, or **every price in the country for a flat $2.50** with one click, and optionally see **which prices went up or down since your last run**.

- 🇪🇸 **Spain**: about 11,500 stations, ~43,000 prices, refreshed by the ministry every 30 minutes
- 🇫🇷 **France**: about 9,800 stations, ~30,000 prices, read straight from the ministry's instant feed, refreshed every 10 minutes
- ⛽ Diesel, petrol 95 and 98, E10, E85, LPG, CNG/LNG, hydrogen, AdBlue, HVO and more
- 📦 **Full country snapshot**: every station and every price of a country for a flat price (about **$2.50 per country** on the Free plan)
- 📍 Filter by **city, region/province, postcode, brand, fuel, radius around a point**, or keep the **cheapest N**
- 📈 Optional **price-change tracking** between runs (new / up / down / same)
- 🔓 No login, no API key, no proxies: public government open data only
- ✅ Built-in data checks: a feed that is down, changed format or went stale gives a clear error row, never silently wrong prices

### What can you use it for?

- **Fleet and logistics**: find the cheapest diesel along your depots every morning
- **Price comparison apps and websites**: a ready-made, normalized feed for two countries
- **Market and pricing analysis**: track brand and regional price differences over time
- **Alerts**: schedule a run and get only the stations whose price changed
- **Journalism and research**: reproducible snapshots with source and licence on every row

### How it works

1. Pick one or both countries and, if you like, fuels and a place. Or turn on **Full country snapshot** to get everything.
2. The Actor downloads the official national feed for each country (for Spain, only the province or region you name, when possible).
3. Every price is converted to one format: same field names, same fuel names, prices as numbers in euros, times in UTC.
4. Each feed is checked (format, size, freshness, plausible prices and coordinates) before any row is used.
5. Your filters are applied, results are sorted (cheapest first within each fuel, or nearest first) and saved to the dataset.

A run takes about **5 to 10 seconds** for France or a single Spanish province, about **40 to 90 seconds** when it needs the whole of Spain, and about **2 minutes** for a full snapshot of both countries. It uses 512 MB of memory by default; 256 MB is enough for filtered searches.

### Input example

```json
{
    "countries": ["ES"],
    "fuelTypes": ["diesel", "petrol_95"],
    "latitude": 40.4168,
    "longitude": -3.7038,
    "radiusKm": 10,
    "cheapestN": 20
}
```

Other ideas:

- **Everything in Spain and France (bulk)**: `{"countries": ["ES", "FR"], "fullSnapshot": true}` (set **Maximum cost per run** to at least $5.01)
- All diesel prices in Seville: `{"countries": ["ES"], "city": "Sevilla", "fuelTypes": ["diesel"]}`
- Cheapest 10 E10 in Paris: `{"countries": ["FR"], "postalCode": "75", "fuelTypes": ["petrol_95_e10"], "cheapestN": 10}`
- Daily change alert for one province: `{"countries": ["ES"], "region": "Valencia", "onlyChanges": true, "stateKey": "valencia-daily", "maxResults": 0}`

### Output example

One row per station, fuel and service type. Every row has the same columns in the same order (real row from a test run on 2026-11-04, point search in Madrid with price tracking on):

```json
{
    "country": "ES",
    "fuelType": "petrol_95",
    "fuelName": "Gasolina 95 E5",
    "price": 1.549,
    "unit": "EUR/L",
    "currency": "EUR",
    "service": null,
    "stationId": "12145",
    "stationName": "Alcampo",
    "brand": "Alcampo",
    "address": "Calle Jose Paulete,",
    "postalCode": "28000",
    "city": "Madrid",
    "province": "Madrid",
    "region": "Madrid",
    "latitude": 40.393806,
    "longitude": -3.654528,
    "distanceKm": 4.89,
    "previousPrice": null,
    "priceChange": null,
    "changeStatus": "new",
    "lastUpdated": "2026-11-05T04:04:09.000Z",
    "priceAgeHours": 0,
    "priceAgeDays": 0,
    "isStale": false,
    "source": "Ministerio para la Transición Ecológica y el Reto Demográfico (MITECO), Geoportal Gasolineras",
    "sourceUrl": "https://sedeaplicaciones.minetur.gob.es/ServiciosRESTCarburantes/PreciosCarburantes/EstacionesTerrestres/",
    "licence": "Spanish public-sector reuse terms (Ley 37/2007): cite source and update date",
    "error": null,
    "errorType": null,
    "scrapedAt": "2026-11-05T04:04:46.337Z"
}
```

Every row shows how old its price is: `priceAgeHours` (hours from `lastUpdated` to the run, one decimal), `priceAgeDays` (whole days) and `isStale` (`true` when the price is older than 7 days). Prices are numbers in EUR, dates are ISO 8601 in UTC, and empty values are `null`.

`distanceKm` is filled when you give a point. `previousPrice`, `priceChange` and `changeStatus` (`new`, `up`, `down` or `same`) are filled when price tracking is on. `error` and `errorType` are only filled on the one row added for a country whose official feed could not be used.

**Views.** The Output tab opens in **Overview (prices)**. There are also **Price changes**, **Stations & coordinates** and **Detailed** (every field) views. A run summary (feed update time, rows per country, rows matched) is saved as `OUTPUT` in the key-value store.

**Sorting and limits.** *Sort by* orders results cheapest first (per fuel type), nearest first, or in feed order; *Cheapest N per fuel* keeps the N best per fuel type; *Max results* caps the total after sorting.

> Changed in v1.1: every row now always has the same columns (`distanceKm`, the change-tracking columns and `error`/`errorType` are `null` when not used, instead of missing).

#### Fuel types

| `fuelType`       | Spain (official name)                                                                                                                                                                             | France (official name) |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| `diesel`         | Gasóleo A                                                                                                                                                                                         | Gazole                 |
| `diesel_premium` | Gasóleo Premium                                                                                                                                                                                   | –                      |
| `petrol_95`      | Gasolina 95 E5                                                                                                                                                                                    | SP95                   |
| `petrol_95_e10`  | Gasolina 95 E10                                                                                                                                                                                   | E10                    |
| `petrol_98`      | Gasolina 98 E5                                                                                                                                                                                    | SP98                   |
| `e85`            | Gasolina 95 E85                                                                                                                                                                                   | E85                    |
| `lpg`            | Gases licuados del petróleo                                                                                                                                                                       | GPLc                   |
| `cng` / `lng`    | Gas Natural Comprimido / Licuado (per kg)                                                                                                                                                         | –                      |
| others           | Gasóleo B (`diesel_agricultural`), Diésel Renovable (`hvo`), Biodiésel, Bioetanol, E25, Gasolina 98 E10, Gasolina 95 E5 Premium, Gasolina Renovable, biogas, Hidrógeno, AdBlue, Metanol, Amoníaco | –                      |

The original name is always kept in `fuelName`. Gas and hydrogen are priced per kilogram (`unit: "EUR/kg"`); everything else is per litre.

### Pricing

Pay per event: you only pay for what the run actually does. Platform usage is included.

| Event                                                          | Free plan | Bronze    | Silver    | Gold, Platinum, Diamond |
| -------------------------------------------------------------- | --------- | --------- | --------- | ----------------------- |
| Actor start (once per run)                                     | $0.0005   | $0.0005   | $0.0005   | $0.0005                 |
| Country feed loaded (once per country)                         | $0.003    | $0.0027   | $0.0024   | $0.002                  |
| Price row (per price row in your dataset; error rows are free) | $0.0013   | $0.0012   | $0.0011   | $0.001                  |
| **Most you pay per country (full country snapshot price)**     | **$2.50** | **$2.25** | **$2.00** | **$1.75**               |

**A country never costs more than its snapshot price.** In every run, only the first price rows of each country are charged (1,920 on the Free plan, 1,872 Bronze, 1,816 Silver, 1,748 Gold and above). Every row after that is still in your dataset, **for free**.

**Want everything? Use Full country snapshot.** Turn on **Full country snapshot** and you get every station and every price of each selected country, with no filters, for the flat price above.

Worked examples on the Free plan:

| What you ask for                                  | Rows you get | What you pay                                                   |
| ------------------------------------------------- | ------------ | -------------------------------------------------------------- |
| 20 cheapest diesel stations near a point in Spain | 20           | $0.0005 + $0.003 + 20 × $0.0013 = **$0.0295**                  |
| A search that finds nothing                       | 0            | **$0.0035**                                                    |
| **All of Spain** (Full country snapshot)          | about 43,000 | **$2.50** ($0.0005 start + $0.003 + 1,920 × $0.0013 = $2.4995) |
| All of Spain and France (Full country snapshot)   | about 73,000 | **$5.00** ($0.0005 start + 2 × $2.499 = $4.9985)               |

A country whose feed can't be downloaded is not charged. **Max results** (default 1,000) limits the size and cost of a filtered search.

**Maximum cost per run:** Apify stops a run when it reaches the "Maximum cost per run" set in the run options. For a full snapshot set it to at least **$2.51 per country** ($5.01 for Spain + France). If it is too low, the Actor skips that country, says so in the log and `OUTPUT`, and does not charge for it.

### Data quality checks

Government feeds occasionally go down or change format. Instead of passing on broken data, every run checks each feed first:

- **Format**: required fields (station ID, address, coordinates, prices) must be present and numbers must be in the expected format (Spain uses comma decimals, e.g. `1,749`). If the publisher changes the layout, that country is rejected with `errorType: "format-changed"`.
- **Size**: a full national feed with far fewer stations than normal is treated as a broken download (`too-small`).
- **Freshness**: if the feed itself has not been refreshed for 24 hours (**Reject feeds older than**), it is rejected as `stale`.
- **Plausible values**: prices outside 0.10–5.00 €/L (0.10–40 €/kg for gas and hydrogen) are dropped; if many are, the feed is rejected. Station coordinates with latitude and longitude swapped are corrected, and impossible ones such as 0,0 are set to `null`. Counts are in `OUTPUT`.
- **Retries**: downloads are retried on network errors and server errors.
- **Price age**: every row has `priceAgeDays` and `isStale`, so old prices are easy to spot (see the FAQ below).

A rejected country is **not charged** and adds one row like `{"country": "FR", "error": "...", "errorType": "stale", "price": null}`, so pipelines can spot it. Turn on **Fail the run if a feed has a problem** to make the run end as Failed and trigger Apify's failure alerts.

### Data sources and licences

| Country | Publisher                                                                                     | Feed                                                                                                                                                                                                                 | Licence / terms                                                                                                                  |
| ------- | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| Spain   | Ministerio para la Transición Ecológica y el Reto Demográfico (MITECO), Geoportal Gasolineras | [REST service](https://sedeaplicaciones.minetur.gob.es/ServiciosRESTCarburantes/PreciosCarburantes/help)                                                                                                                 | Reuse of Spanish public-sector information (Law 37/2007): cite the source and the update date, do not distort the data's meaning |
| France  | Ministère de l'Économie (DGCCRF), prix-carburants.gouv.fr open data, instant feed             | [Official instant feed](https://www.prix-carburants.gouv.fr/rubrique/opendata/) (fallback: [data.economie.gouv.fr](https://data.economie.gouv.fr/explore/dataset/prix-des-carburants-en-france-flux-instantane-v2/)) | [Licence Ouverte v2.0 (Etalab)](https://www.etalab.gouv.fr/licence-ouverte-open-licence/)                                        |

Every row carries `source`, `sourceUrl`, `licence` and the publisher's `lastUpdated` time, so attribution is easy when you reuse the data. Station names and addresses are reformatted from ALL CAPS for readability and fuel names are mapped to common types; prices are never changed. This Actor is not affiliated with or endorsed by either government.

### FAQ

**How fresh are the prices?**
As fresh as the official feeds: Spain republishes its whole feed every 30 minutes; France's instant feed, which this Actor reads directly, is refreshed every 10 minutes (if it is ever unavailable, the Actor falls back to the data.economie.gouv.fr copy and says so in `OUTPUT`).

**Are all prices current?**
Not always, and every row tells you. Spain gives one time for the whole feed (when it was generated), so every Spanish price has the same recent `lastUpdated`. In France, `lastUpdated` is when that station last reported the price, and some stations that rarely update have prices that are weeks or even more than a year old. Every row shows `priceAgeHours`, `priceAgeDays` and `isStale` (`true` when the price is older than 7 days). A filtered search skips prices older than **Ignore prices older than** (7 days by default; 0 keeps everything). A full country snapshot includes every price, old ones too, so you can filter by `isStale` yourself.

**Why is `brand` empty for French stations?**
France's official open-data feed does not include brand or station name (the ministry's open-data page lists them as excluded). You still get the station ID, full address, postcode, town, département, region and GPS position.

**Which other countries are supported?**
Only Spain and France for now, because their governments publish open, no-login price feeds with clear reuse terms. Italy's official MIMIT files were tested but the server does not accept connections from Apify's network without a proxy, so it is not included. Other countries were left out because their official data needs a personal API key, forbids commercial reuse or has no published licence.

**How do I find the cheapest station near me?**
Set `latitude`, `longitude`, `radiusKm` and `fuelTypes`, and `cheapestN` to how many you want. Results include `distanceKm`. Distance is straight-line, not driving distance.

**How does price-change tracking work?**
Turn on **Track price changes** and give a **Tracking name**. Each run saves the prices it saw in a key-value store in your Apify account and compares the next run with them. Use **Only output changes** to pay only for prices that moved. The first run is a baseline: every row is `new`.

**How much does a full country cost?**
At most **$2.50 per country** on the Free plan ($2.25 Bronze, $2.00 Silver, $1.75 Gold and above), plus the $0.0005 start, for about 43,000 rows in Spain or about 30,000 in France. See **Pricing** above for how the cap works.

**I need lots of rows. Should I filter or use the snapshot?**
If you want more than about 1,900 rows of a country, use **Full country snapshot**: you get every row for the same price a big filtered search would cost. A filtered search is cheaper for small answers, for example $0.0295 for the 20 cheapest stations near a point. Either way, a country never costs more than its snapshot price.

**What does Full country snapshot ignore?**
Everything except **Countries** and the price-tracking options: fuel, place, brand, radius, cheapest N, **Ignore prices older than** and **Max results** are all skipped, and **Only output changes** is turned off. Because the age limit is skipped, old French prices are included; use `isStale` or `priceAgeDays` to filter them. Rows are sorted by country, then fuel, then price (cheapest first).

**Why are some prices per kg?**
CNG, LNG, biogas and hydrogen are sold by weight at the pump. Those rows have `unit: "EUR/kg"`.

**Can I run it on a schedule or through the API?**
Yes. Create a schedule in Apify Console (for example every morning) or call the Actor from the Apify API, Python/JavaScript clients, Make, Zapier or n8n. Results can go to Google Sheets, webhooks or your database.

**What happens if a government feed is down?**
The run continues with the other countries, adds an error row for the failed one, says which feed failed in the status message and the `OUTPUT` record, and does not charge for that country. If no feed loads, the run fails and only the start event is charged. See **Data quality checks** above.

**Is this legal to use?**
The data is published by both governments as open data for reuse under the terms listed in the table above. The Actor uses only public endpoints, no logins and no proxies. When you republish the data, credit the source as shown in each row's `source` and `licence`.

### Support

Found a problem or want another country? Open an issue on the Actor's Issues tab and include the run ID.

# Actor input Schema

## `countries` (type: `array`):

Which official government feeds to read. Spain (ES) republishes its feed every 30 minutes; France (FR) refreshes its instant feed every 10 minutes. Each country you pick is one feed download (one 'Country feed loaded' event). A country never costs more than its full-snapshot price.

## `fullSnapshot` (type: `boolean`):

One click for bulk data: turn this on to get every station and every fuel price of each selected country, with no filters. All other filters, Cheapest N and Max results are ignored, including 'Ignore prices older than', so rarely updated French stations are included; use the isStale and priceAgeDays fields to filter them out. Price: a flat price per country, at most $2.50 on the Free plan ($2.25 Bronze, $2.00 Silver, $1.75 Gold and above), plus the $0.0005 run start. Tip: for Spain + France together, set 'Maximum cost per run' to at least $5.01 in the run options, or a country will be skipped and not charged.

## `fuelTypes` (type: `array`):

Only return these fuels. Leave empty for every fuel the station sells. Names are normalized across countries, for example 'diesel' covers Spain's Gasóleo A and France's Gazole.

## `city` (type: `string`):

Town or municipality name as the official feed spells it, for example 'Madrid', 'Sevilla' or 'Lyon'. Accents and capital letters don't matter. Separate several towns with commas. It is an exact town match, so 'Madrid' does not include 'Humanes de Madrid'; use Region or a radius for wider areas.

## `region` (type: `string`):

Region, province or département, for example 'Andalucía', 'Málaga', 'Île-de-France' or 'Gironde'. Part of a name also works. For Spain, naming a single province or autonomous community downloads only that part of the feed, which is faster.

## `postalCode` (type: `string`):

Postcode prefix, for example '28' for Madrid province or '75' for Paris.

## `brand` (type: `string`):

Part of the brand or station sign, for example 'Repsol', 'Cepsa' or 'Ballenoil'. France's official feed has no brand field, so French stations never match this filter.

## `latitude` (type: `number`):

Centre point latitude in decimal degrees, for example 40.4168 for central Madrid. Use together with longitude. Adds a distanceKm column.

## `longitude` (type: `number`):

Centre point longitude in decimal degrees, for example -3.7038 for central Madrid.

## `radiusKm` (type: `number`):

Only stations within this straight-line distance of the point. 0 or empty means no limit (distance is still shown).

## `cheapestN` (type: `integer`):

Keep only the N cheapest stations for each fuel type in each country after the other filters. 0 keeps every match.

## `sortBy` (type: `string`):

Order of the results. 'Cheapest first' lists each fuel type separately, cheapest station first. If you leave this empty, results are sorted nearest first when a point is given, otherwise cheapest first.

## `maxPriceAgeDays` (type: `integer`):

Skip prices the station has not updated for this many days. France keeps old prices from stations that report rarely, so the default is 7 days. Set 0 to keep every price. Every row shows its age in priceAgeDays and isStale (true when older than 7 days).

## `maxResults` (type: `integer`):

Stop after this many price rows in a filtered search (ignored by Full country snapshot). 0 means no limit. You never pay more than the snapshot price per country ($2.50 on the Free plan): only the first 1,920 rows of each country are charged, the rest are free. All of Spain is about 43,000 rows, all of France about 30,000.

## `maxFeedAgeHours` (type: `integer`):

Safety check: if a government feed itself has not been refreshed for this many hours, that country is skipped (not charged) and a clear error row is added instead of serving old prices. Set 0 to turn the check off.

## `failOnError` (type: `boolean`):

Off: the run still succeeds with the countries that worked, plus one error row per country that could not be used (feed down, format changed, too old). On: same output, but the run ends as Failed, so Apify can alert you. Good for monitoring and scheduled runs.

## `trackChanges` (type: `boolean`):

Compare each price with the last run that used the same tracking name, and add previousPrice, priceChange and changeStatus (new, up, down, same). Prices are remembered in a key-value store in your account.

## `onlyChanges` (type: `boolean`):

Return only prices that went up or down, plus stations seen for the first time. Turns on tracking. The first run saves a baseline and returns everything.

## `stateKey` (type: `string`):

Name for the saved price history, so different schedules (for example 'madrid-diesel' and 'lyon') don't mix. Use the same name on every run of one schedule.

## Actor input object example

```json
{
  "countries": [
    "ES"
  ],
  "fullSnapshot": false,
  "fuelTypes": [
    "diesel",
    "petrol_95"
  ],
  "latitude": 40.4168,
  "longitude": -3.7038,
  "radiusKm": 10,
  "cheapestN": 20,
  "maxPriceAgeDays": 7,
  "maxResults": 1000,
  "maxFeedAgeHours": 24,
  "failOnError": false,
  "trackChanges": false,
  "onlyChanges": false,
  "stateKey": "default"
}
```

# Actor output Schema

## `overview` (type: `string`):

Compact table: fuel, price, brand, address, distance, update time and price age in days, with a flag for prices older than 7 days.

## `changes` (type: `string`):

Previous price, current price and change for each row when price tracking is on.

## `locations` (type: `string`):

Station IDs, addresses and coordinates for mapping.

## `results` (type: `string`):

Every matching price: one row per station, fuel and service type, with country, station ID, brand, address, coordinates, normalized fuel type, price in EUR per litre (per kg for gas and hydrogen), last update time, price age (priceAgeHours, priceAgeDays, isStale = older than 7 days), source and licence.

## `summary` (type: `string`):

Per country: whether the feed loaded, the publisher's update time, rows in the feed, rows matched and MB downloaded, plus the filters used.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "countries": [
        "ES"
    ],
    "fuelTypes": [
        "diesel",
        "petrol_95"
    ],
    "latitude": 40.4168,
    "longitude": -3.7038,
    "radiusKm": 10,
    "cheapestN": 20,
    "maxPriceAgeDays": 7,
    "maxResults": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("hydrocore/eu-fuel-prices").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "countries": ["ES"],
    "fuelTypes": [
        "diesel",
        "petrol_95",
    ],
    "latitude": 40.4168,
    "longitude": -3.7038,
    "radiusKm": 10,
    "cheapestN": 20,
    "maxPriceAgeDays": 7,
    "maxResults": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("hydrocore/eu-fuel-prices").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "countries": [
    "ES"
  ],
  "fuelTypes": [
    "diesel",
    "petrol_95"
  ],
  "latitude": 40.4168,
  "longitude": -3.7038,
  "radiusKm": 10,
  "cheapestN": 20,
  "maxPriceAgeDays": 7,
  "maxResults": 1000
}' |
apify call hydrocore/eu-fuel-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hydrocore/eu-fuel-prices"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MrbsqdDLdw0gMQBk6/builds/aPSdojE5Bhh4VNLf4/openapi.json
