# CEE & DACH Fuel Intelligence (`kondasviktor/cee-dach-fuel-intelligence`) Actor

Station fuel prices across CEE+DACH. Country, point & route modes with EUR FX, dataConfidence, brand analytics, cheapest-stop. No-key AT/SI/HR/RO; BYOK DE (Tankerkönig) + Fuelo (CH/HU/PL/CZ/SK/BG). Optional BYOK AI digest.

- **URL**: https://apify.com/kondasviktor/cee-dach-fuel-intelligence.md
- **Developed by:** [Viktor Kondas](https://apify.com/kondasviktor) (community)
- **Categories:** AI, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 station price observations

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## European Fuel Station Price Intelligence (CEE + DACH)

**Normalized station-level fuel prices across CEE + DACH — country, point, and route modes for fleet, logistics, travel apps, and vibe-coder workflows.**

Standalone Apify Actor for European fuel intelligence (not a single-site scraper). Pairs well with the [Google Maps CEE Supplier Shortlist Builder](https://apify.com/kondasviktor/google-maps-cee-scraper) when you already have depot / stop coordinates, and with the [Website Change Monitor](https://apify.com/kondasviktor/website-change-monitor) if you schedule daily price snapshots.

Slug: `cee-dach-fuel-intelligence`  
PPE floor: **`$0.0025` / station** (**$2.50 / 1k**) + usage · min **`$0.10`**

### What it does

- Returns **normalized station rows** for DE, AT, CH, HU, PL, CZ, SK, RO, HR, SI, BG.
- Modes: **`country`** (national centroid), **`point`** (lat/lng radius), **`route`** (deterministic cheapest-stop).
- Adds **ECB FX** fields (`dieselEur`, `petrol95Eur`, …, `priceEur`), **`dataConfidence`**, and **regulatory flags**.
- Optional **`brands[]`**, **`openNow`**, **`diffAgainstPrevious`**, and **brand-analytics** summary.
- Optional **BYOK AI digest** (off by default) — never invents regulations; narrates aggregates + flags only.
- Built for **n8n**, **Make**, **Zapier**, and agent workflows.

### Who it's for

1. **Fleet / logistics** teams comparing pump prices near hubs or along corridors.
2. **Travel / mobility apps** that need structured station prices, not HTML scrapes.
3. **Market researchers** tracking brand and country price spreads.
4. **Vibe coders** wiring fuel intelligence into CRM / n8n / Make / Zapier / Apify.
5. **Procurement-adjacent** teams validating fuel-cost assumptions on routes.

### What this actor is — and is not

This Actor helps you **read public / official / licensed open fuel feeds** into one schema. It does **not** guarantee every station in a country, negotiate fuel cards, or replace regulator portals.

Use the output for:
- station shortlists and route cheapest-stop
- scheduled price monitoring (`diffAgainstPrevious`)
- EUR-normalized analytics across borders

Do **not** treat community/aggregator rows (`COMMUNITY_AGGREGATOR_UNVERIFIED`) as official regulator dumps.

### Live sources & keys

| Country | Source | Confidence | Keys |
|---------|--------|------------|------|
| **DE** | Tankerkönig / MTS-K | `OFFICIAL_REALTIME` | Buyer **`tankerkoenigApiKey`** |
| **AT** | E-Control | `OFFICIAL_REALTIME` | None — **cheapest-N only**, not full market |
| **RO** | PretCarburant | `OFFICIAL_REALTIME` | None (station endpoint often rate-limited → city averages) |
| **SI** | goriva.si | `OFFICIAL_REALTIME` | None |
| **HR** | mzoe-gor.hr | `OFFICIAL_REALTIME` | None |
| **CH, HU, PL, CZ, SK, BG** | Fuelo.net | `COMMUNITY_AGGREGATOR_UNVERIFIED` | Buyer **`fueloApiKey`** |

**BYOK keys are for buyers — never provided by this Actor.** Never paste keys into public Tasks, GitHub, or Store screenshots.

**Not used:** Google Maps, Waze, holtankoljak `/api`+`/stations` (robots-disallowed).

#### How to get a Fuelo API key (`fueloApiKey`)

Needed for **CH, HU, PL, CZ, SK, BG**.

1. Open the free key request form: [https://fuelo.net/about/api_key_request](https://fuelo.net/about/api_key_request)  
   (The page is in Bulgarian; there is no English URL for this form.)
2. Fill the fields:
   - **Име/Фирма** — your name or company
   - **E-mail** — where Fuelo sends the key
   - **Web site** — product / Actor / company URL
   - **Повече информация** — short intended use (API only, Apify Actor, rate limits respected)
   - Math captcha (**Колко е … ?**)
3. Submit. Approval is often immediate; the key is **15 characters** and valid right away (Fuelo may revoke it if data was filled incorrectly).
4. Paste the key into Actor input field **`fueloApiKey`** (or your Apify secret / task private input — not a public task default).
5. API overview: [https://fuelo.net/about/api](https://fuelo.net/about/api)

Free-tier notes: respect Fuelo’s limits (commonly cited ~5k requests/day). This Actor uses `/near` for locations and enriches pump prices from the public station page.

#### How to get a Tankerkönig API key (`tankerkoenigApiKey`)

Needed for **DE**.

1. Open the registration form: [https://onboarding.tankerkoenig.de/](https://onboarding.tankerkoenig.de/)  
   Docs hub: [https://creativecommons.tankerkoenig.de/](https://creativecommons.tankerkoenig.de/)
2. Enter your **real** first and last name (no nicknames — Bundeskartellamt identity rule), email, category, and a short description/URL of your app or Actor.
3. Confirm you are **not** in the mineral-oil industry and accept ToS / privacy.
4. Wait for manual review; the personal API key arrives by **email**.
5. Paste it into Actor input **`tankerkoenigApiKey`**.

Free-tier limits to respect: search radius **≤ ~25 km**, about **1 request/minute**, and **CC BY 4.0** attribution (e.g. link to tankerkoenig.de). Do not publish the key in forums, GitHub, or public Tasks.

#### Canonical fuel grades

Input `fuel`: `diesel` | `petrol95` | `petrol98` | `lpg` | `cng` | `all`  
Mapped from local names (e.g. DE E10→petrol95, E5→petrol98, SI `dizel`→diesel).

#### Partial runs

If one country fails (missing key, adapter error), the run **still succeeds** with other countries. Check dataset / `RUN_STATUS.countryStatus`.

### What data you get

| Field | Description |
|-------|-------------|
| `stationId`, `brand`, `name`, `address`, `city`, `postcode` | Station identity |
| `lat`, `lng`, `distanceKm` | Location / distance from query point |
| `diesel`, `petrol95`, `petrol98`, `lpg`, `cng` | Local-currency pump prices when available |
| `*Eur`, `priceEur` | ECB FX normalized EUR fields |
| `currency`, `lastUpdated`, `openingHours` | Meta |
| `dataConfidence`, `source`, `sourceStatus`, `regulatoryFlags` | Honesty / provenance |
| `recordType: brand-analytics` | Brand avg/min/max/count summary (separate row) |
| `RUN_STATUS` | Per-country status + adapter latency (KV + dataset) |

### How to use it

1. **Pick a mode** — `country`, `point`, or `route`.
2. **Add keys only when needed** — none for AT/SI/HR/RO; `tankerkoenigApiKey` for DE; `fueloApiKey` for CH/HU/PL/CZ/SK/BG.
3. **Run** on Apify cloud (recommended) or locally with `apify run`.
4. **Download** the dataset as JSON, CSV, or Excel; check `RUN_STATUS` if a country is empty.

### Input presets

#### Austria diesel near Vienna (no key — Store / QA)

```json
{
  "mode": "country",
  "countryCode": "AT",
  "fuel": "diesel",
  "radiusKm": 8,
  "maxStations": 15,
  "enableAIDigest": false
}
````

AT returns E-Control **cheapest-N**, not the full Austrian market.

#### Hungary petrol95 near Budapest (needs `fueloApiKey`)

```json
{
  "mode": "point",
  "countries": ["HU"],
  "lat": 47.4979,
  "lng": 19.0402,
  "radiusKm": 10,
  "fuel": "petrol95",
  "maxStations": 20,
  "fueloApiKey": "YOUR_FUELO_KEY",
  "enableAIDigest": false
}
```

#### Germany diesel near Berlin (needs `tankerkoenigApiKey`)

```json
{
  "mode": "point",
  "countries": ["DE"],
  "lat": 52.52,
  "lng": 13.405,
  "radiusKm": 10,
  "fuel": "diesel",
  "maxStations": 20,
  "tankerkoenigApiKey": "YOUR_TANKERKOENIG_KEY",
  "enableAIDigest": false
}
```

### History (honest)

- **Live** — default for all supported countries
- **`asOfDate`** — best-effort; most sources ignore it (or fail if `asOfDateStrict`)
- **Recommended:** schedule the Actor daily and use `diffAgainstPrevious` for change economics

### Pricing

| Event | When | USD |
|-------|------|-----|
| `station-price` | Full snapshot (default) | **0.0025** |
| `station-price-changed` | `diffAgainstPrevious=true` and price moved | 0.0025 |
| `route-recommendation` | Route mode | 0.05 |
| `brand-analytics` | Brand summary for the run | 0.05 |
| `ai-digest` | Optional BYOK narrative | 0.15 |
| Minimum charge | Per run floor | 0.10 |

Enable **Pay per event + usage** in Apify Console so platform compute costs are passed through to users.

### Optional BYOK AI digest (secondary)

Off by default. One narrative per run over aggregates + flags. Missing LLM key → warning; deterministic station data still succeeds.

### Local development

```bash
cd apify/cee-dach-fuel-intelligence
npm install && npm test && npm run build
cp INPUT.smoke.json INPUT.json && npx apify run -p
```

### Disclaimer

Public / official transparency feeds and licensed open data where adapters are live. You are responsible for downstream use. Platform and source ToS change — verify before high-volume commercial use. Monetization / Store publication may require ~14 days for Apify PPE usage pass-through and pricing notice windows.

### Related actors (suite)

| Actor | Role |
|-------|------|
| [Google Maps CEE Supplier Shortlist](https://apify.com/kondasviktor/google-maps-cee-scraper) | Discover local suppliers |
| [Website Intelligence + Contact](https://apify.com/kondasviktor/website-intelligence-contact-extractor) | Enrich websites (contacts, tech, compliance) |
| [Dealer / Distributor Locator](https://apify.com/kondasviktor/dealer-distributor-locator) | Expand brand locator pages |
| [PDF Procurement Document Extractor](https://apify.com/kondasviktor/pdf-procurement-document-extractor) | Find certs / reports / datasheets |
| [Website Change Monitor](https://apify.com/kondasviktor/website-change-monitor) | Watch pages for changes |
| **European Fuel Station Price Intelligence** (this Actor) | CEE + DACH station fuel prices |

Each Actor runs standalone; use them as an optional suite when chaining discovery → enrichment → monitoring → fuel intelligence.

### Feedback

Open an issue on the actor’s Apify page or contact [Vibe Coder's Life](https://vibecoderslife.com/#contact).

# Actor input Schema

## `mode` (type: `string`):

country = national centroid search; point = lat/lng radius; route = cheapest stop along origin→destination (deterministic). Austria returns E-Control cheapest-N only.

## `countryCode` (type: `string`):

ISO alpha-2. No key: AT, SI, HR, RO. BYOK buyers: DE needs tankerkoenigApiKey; CH/HU/PL/CZ/SK/BG need fueloApiKey (never provided by this Actor).

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

Optional multi-country list. Overrides countryCode when set. Partial failures do not fail the whole run — see RUN\_STATUS.

## `fuel` (type: `string`):

Canonical grades: diesel, petrol95 (E10/Super 95), petrol98 (E5/100), lpg, cng, all. Sources map local names into these fields.

## `lat` (type: `number`):

Required for mode=point.

## `lng` (type: `number`):

Required for mode=point.

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

Search radius. Capped at 25 km (Tankerkönig free-tier limit).

## `originLat` (type: `number`):

Route start latitude.

## `originLng` (type: `number`):

Route start longitude.

## `destinationLat` (type: `number`):

Route end latitude.

## `destinationLng` (type: `number`):

Route end longitude.

## `maxDetourKm` (type: `number`):

Route mode: ignore stations whose estimated detour exceeds this.

## `vehiclePlateCountry` (type: `string`):

ISO alpha-2 for dual-pricing flags (e.g. HU plates in SK).

## `brands` (type: `array`):

Optional post-filter (e.g. Shell, OMV, MOL). Matches brand/name contains. Not a Europe-wide brand crawl.

## `openNow` (type: `boolean`):

When true, keep stations with isOpen=true or is24h=true (only where the source provides hours).

## `asOfDate` (type: `string`):

YYYY-MM-DD. Most feeds are live-only — Actor falls back to live unless asOfDateStrict=true. Prefer scheduled runs for history.

## `asOfDateStrict` (type: `boolean`):

If true, fail when asOfDate is unsupported by the source.

## `diffAgainstPrevious` (type: `boolean`):

Push all rows; charge station-price-changed only when the selected fuel price moved since last run in priceSnapshotStoreName.

## `priceSnapshotStoreName` (type: `string`):

Named Apify Key-Value store for LATEST\_PRICES when diffAgainstPrevious=true.

## `maxStations` (type: `integer`):

Hard cap per country fetch. Prefill stays small for Store QA.

## `tankerkoenigApiKey` (type: `string`):

Bring your own key from https://creativecommons.tankerkoenig.de/ — never provided by this Actor.

## `fueloApiKey` (type: `string`):

Bring your own free key from https://fuelo.net/about/api\_key\_request — never provided by this Actor.

## `enableAIDigest` (type: `boolean`):

Secondary feature: one narrative per run. Off by default. Never fails the run if key missing.

## `aiProvider` (type: `string`):

LLM provider for optional digest (BYOK).

## `aiModel` (type: `string`):

Optional model override for the selected provider.

## `geminiApiKey` (type: `string`):

Google AI Studio key (BYOK).

## `anthropicApiKey` (type: `string`):

Anthropic API key (BYOK).

## `openaiApiKey` (type: `string`):

OpenAI API key (BYOK).

## `openrouterApiKey` (type: `string`):

OpenRouter API key (BYOK).

## Actor input object example

```json
{
  "mode": "country",
  "countryCode": "AT",
  "fuel": "diesel",
  "radiusKm": 8,
  "maxDetourKm": 15,
  "openNow": false,
  "asOfDateStrict": false,
  "diffAgainstPrevious": false,
  "priceSnapshotStoreName": "cee-dach-fuel-price-snapshots",
  "maxStations": 15,
  "enableAIDigest": false,
  "aiProvider": "auto"
}
```

# Actor output Schema

## `dataset` (type: `string`):

Normalized station price rows (overview view).

## `runOverview` (type: `string`):

Open the run in Apify Console.

# 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 = {
    "mode": "country",
    "countryCode": "AT",
    "fuel": "diesel",
    "radiusKm": 8,
    "priceSnapshotStoreName": "cee-dach-fuel-price-snapshots",
    "maxStations": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("kondasviktor/cee-dach-fuel-intelligence").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 = {
    "mode": "country",
    "countryCode": "AT",
    "fuel": "diesel",
    "radiusKm": 8,
    "priceSnapshotStoreName": "cee-dach-fuel-price-snapshots",
    "maxStations": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("kondasviktor/cee-dach-fuel-intelligence").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "mode": "country",
  "countryCode": "AT",
  "fuel": "diesel",
  "radiusKm": 8,
  "priceSnapshotStoreName": "cee-dach-fuel-price-snapshots",
  "maxStations": 15
}' |
apify call kondasviktor/cee-dach-fuel-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=kondasviktor/cee-dach-fuel-intelligence",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "CEE & DACH Fuel Intelligence",
        "description": "Station fuel prices across CEE+DACH. Country, point & route modes with EUR FX, dataConfidence, brand analytics, cheapest-stop. No-key AT/SI/HR/RO; BYOK DE (Tankerkönig) + Fuelo (CH/HU/PL/CZ/SK/BG). Optional BYOK AI digest.",
        "version": "0.1",
        "x-build-id": "KJ5ilUtijWgJRtA0S"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kondasviktor~cee-dach-fuel-intelligence/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kondasviktor-cee-dach-fuel-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/kondasviktor~cee-dach-fuel-intelligence/runs": {
            "post": {
                "operationId": "runs-sync-kondasviktor-cee-dach-fuel-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/kondasviktor~cee-dach-fuel-intelligence/run-sync": {
            "post": {
                "operationId": "run-sync-kondasviktor-cee-dach-fuel-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Query mode",
                        "enum": [
                            "country",
                            "point",
                            "route"
                        ],
                        "type": "string",
                        "description": "country = national centroid search; point = lat/lng radius; route = cheapest stop along origin→destination (deterministic). Austria returns E-Control cheapest-N only.",
                        "default": "country"
                    },
                    "countryCode": {
                        "title": "Country code",
                        "enum": [
                            "DE",
                            "AT",
                            "CH",
                            "HU",
                            "PL",
                            "CZ",
                            "SK",
                            "RO",
                            "HR",
                            "SI",
                            "BG"
                        ],
                        "type": "string",
                        "description": "ISO alpha-2. No key: AT, SI, HR, RO. BYOK buyers: DE needs tankerkoenigApiKey; CH/HU/PL/CZ/SK/BG need fueloApiKey (never provided by this Actor).",
                        "default": "AT"
                    },
                    "countries": {
                        "title": "Countries (multi)",
                        "type": "array",
                        "description": "Optional multi-country list. Overrides countryCode when set. Partial failures do not fail the whole run — see RUN_STATUS.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "fuel": {
                        "title": "Fuel type (canonical)",
                        "enum": [
                            "diesel",
                            "petrol95",
                            "petrol98",
                            "lpg",
                            "cng",
                            "all"
                        ],
                        "type": "string",
                        "description": "Canonical grades: diesel, petrol95 (E10/Super 95), petrol98 (E5/100), lpg, cng, all. Sources map local names into these fields.",
                        "default": "diesel"
                    },
                    "lat": {
                        "title": "Latitude",
                        "type": "number",
                        "description": "Required for mode=point."
                    },
                    "lng": {
                        "title": "Longitude",
                        "type": "number",
                        "description": "Required for mode=point."
                    },
                    "radiusKm": {
                        "title": "Radius (km)",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "number",
                        "description": "Search radius. Capped at 25 km (Tankerkönig free-tier limit).",
                        "default": 10
                    },
                    "originLat": {
                        "title": "Route origin latitude",
                        "type": "number",
                        "description": "Route start latitude."
                    },
                    "originLng": {
                        "title": "Route origin longitude",
                        "type": "number",
                        "description": "Route start longitude."
                    },
                    "destinationLat": {
                        "title": "Route destination latitude",
                        "type": "number",
                        "description": "Route end latitude."
                    },
                    "destinationLng": {
                        "title": "Route destination longitude",
                        "type": "number",
                        "description": "Route end longitude."
                    },
                    "maxDetourKm": {
                        "title": "Max detour (km)",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "number",
                        "description": "Route mode: ignore stations whose estimated detour exceeds this.",
                        "default": 15
                    },
                    "vehiclePlateCountry": {
                        "title": "Vehicle plate country",
                        "type": "string",
                        "description": "ISO alpha-2 for dual-pricing flags (e.g. HU plates in SK)."
                    },
                    "brands": {
                        "title": "Brand filter",
                        "type": "array",
                        "description": "Optional post-filter (e.g. Shell, OMV, MOL). Matches brand/name contains. Not a Europe-wide brand crawl.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "openNow": {
                        "title": "Open now / 24h only",
                        "type": "boolean",
                        "description": "When true, keep stations with isOpen=true or is24h=true (only where the source provides hours).",
                        "default": false
                    },
                    "asOfDate": {
                        "title": "As-of date (optional)",
                        "type": "string",
                        "description": "YYYY-MM-DD. Most feeds are live-only — Actor falls back to live unless asOfDateStrict=true. Prefer scheduled runs for history."
                    },
                    "asOfDateStrict": {
                        "title": "Fail if asOfDate unsupported",
                        "type": "boolean",
                        "description": "If true, fail when asOfDate is unsupported by the source.",
                        "default": false
                    },
                    "diffAgainstPrevious": {
                        "title": "Diff against previous snapshot (scheduled)",
                        "type": "boolean",
                        "description": "Push all rows; charge station-price-changed only when the selected fuel price moved since last run in priceSnapshotStoreName.",
                        "default": false
                    },
                    "priceSnapshotStoreName": {
                        "title": "Price snapshot KV store name",
                        "type": "string",
                        "description": "Named Apify Key-Value store for LATEST_PRICES when diffAgainstPrevious=true.",
                        "default": "cee-dach-fuel-price-snapshots"
                    },
                    "maxStations": {
                        "title": "Max stations",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Hard cap per country fetch. Prefill stays small for Store QA.",
                        "default": 50
                    },
                    "tankerkoenigApiKey": {
                        "title": "Tankerkönig API key (BYOK — buyers, required for DE)",
                        "type": "string",
                        "description": "Bring your own key from https://creativecommons.tankerkoenig.de/ — never provided by this Actor."
                    },
                    "fueloApiKey": {
                        "title": "Fuelo.net API key (BYOK — buyers, CH/HU/PL/CZ/SK/BG)",
                        "type": "string",
                        "description": "Bring your own free key from https://fuelo.net/about/api_key_request — never provided by this Actor."
                    },
                    "enableAIDigest": {
                        "title": "Optional BYOK AI digest",
                        "type": "boolean",
                        "description": "Secondary feature: one narrative per run. Off by default. Never fails the run if key missing.",
                        "default": false
                    },
                    "aiProvider": {
                        "title": "AI provider",
                        "enum": [
                            "auto",
                            "gemini",
                            "claude",
                            "openai",
                            "openrouter"
                        ],
                        "type": "string",
                        "description": "LLM provider for optional digest (BYOK).",
                        "default": "auto"
                    },
                    "aiModel": {
                        "title": "AI model override",
                        "type": "string",
                        "description": "Optional model override for the selected provider."
                    },
                    "geminiApiKey": {
                        "title": "Gemini API key",
                        "type": "string",
                        "description": "Google AI Studio key (BYOK)."
                    },
                    "anthropicApiKey": {
                        "title": "Anthropic API key",
                        "type": "string",
                        "description": "Anthropic API key (BYOK)."
                    },
                    "openaiApiKey": {
                        "title": "OpenAI API key",
                        "type": "string",
                        "description": "OpenAI API key (BYOK)."
                    },
                    "openrouterApiKey": {
                        "title": "OpenRouter API key",
                        "type": "string",
                        "description": "OpenRouter API key (BYOK)."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
