# Romania Fuel Prices (`openrows/romania-fuel-prices`) Actor

Per-station fuel prices from Romania's official Competition Council price monitor, filterable by city, network and fuel type.

- **URL**: https://apify.com/openrows/romania-fuel-prices.md
- **Developed by:** [openrows](https://apify.com/openrows) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$15.00 / 1,000 fuel 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.

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

## Romania Fuel Prices

Per-station fuel prices from Romania's official fuel-price transparency monitor, filterable by city,
network and fuel type.

Extracts public data from [monitorulpreturilor.info](https://monitorulpreturilor.info/) — the
Competition Council's fuel-price monitor — and delivers it as a clean dataset you can download as
JSON, CSV or Excel, or pull through the API. HTTP-only, no browser: it talks directly to the site's own
JSON web service, so runs are fast and cheap.

### What data you get

For every station × fuel type the Actor returns:

| Field         | Description                                                                         |
| ------------- | ----------------------------------------------------------------------------------- |
| `url`         | The JSON API endpoint the result was extracted from                                 |
| `scrapedAt`   | ISO 8601 timestamp of the extraction                                                |
| `stationId`   | The site's own station identifier                                                   |
| `stationName` | Station display name                                                                |
| `network`     | Fuel network operating the station (OMV, Petrom, Rompetrol, MOL, Lukoil, ...)       |
| `address`     | Business street address of the station                                              |
| `city`        | Locality, resolved by the site's own locality search                                |
| `county`      | County (județ), resolved the same way                                               |
| `latitude`    | Station latitude, when published                                                    |
| `longitude`   | Station longitude, when published                                                   |
| `fuelType`    | Generic fuel type: Benzină standard/premium, Motorină standard/premium, GPL, EV     |
| `productName` | The station's own branded name for that fuel type, when different from `fuelType`   |
| `price`       | Price per liter (per kWh for EV charging)                                           |
| `currency`    | Always `RON`                                                                        |
| `priceDate`   | When the station last updated its prices, per the site (site-wide, see Limitations) |

### Input

| Option                | Type    | Default                                                      | Description                                                                     |
| --------------------- | ------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------- |
| `locations`           | array   | `["Bucuresti","Cluj-Napoca","Timisoara","Iasi","Constanta"]` | City / locality names to fetch                                                  |
| `county`              | string  | -                                                            | Keep only results whose county matches (narrows `locations`; see Limitations)   |
| `networks`            | array   | all                                                          | Limit to these fuel networks                                                    |
| `fuelTypes`           | array   | all 6                                                        | Limit to these fuel types. Each selected type is one extra request per locality |
| `maxItems`            | integer | `100`                                                        | Stop after this many results (max 10,000). Also your cost cap.                  |
| `proxyConfiguration`  | object  | Apify datacenter                                             | Proxy settings                                                                  |
| `maxRequestsPerCrawl` | integer | `5 x maxItems`                                               | Hard cap on requests, including locality lookups                                |

Example input:

```json
{
    "locations": ["Cluj-Napoca"],
    "fuelTypes": ["11", "21"],
    "maxItems": 50
}
```

### Output example

```json
{
    "url": "https://monitorulpreturilor.info/pmonsvc/Gas/GetGasItemsByUat?UatId=179132&CSVGasCatalogProductIds=11&CSVServiceCatalogIDS=&CSVGasNetworkIDS=&OrderBy=dist",
    "scrapedAt": "2026-09-22T16:22:56.296Z",
    "stationId": "R1008",
    "stationName": "INTERCONTINENTAL",
    "network": "PETROM",
    "address": "Str. Tudor Arghezi, nr. 3A, Sect 2",
    "city": "Municipiul Bucureşti",
    "county": "Bucuresti",
    "latitude": 44.4372,
    "longitude": 26.10484,
    "fuelType": "Benzină standard",
    "productName": "Benzina Standard 95 / Benzina 95",
    "price": 9.93,
    "currency": "RON",
    "priceDate": "2026-09-21T11:35:00"
}
```

A run summary (items pushed, items skipped by category, pages fetched, failed requests by category,
stop reason) is stored in the run's key-value store under the key `OUTPUT`.

### Pricing

**Pay per result.** You are charged per result and nothing else: no platform usage, no compute units.
Locality lookups, retries and failed requests are free. The current rate is on the *Pricing* tab of
this Actor — that is the only place it is set, so no figure is repeated here.

- `maxItems` caps the number of results, and therefore the cost, of a run.
- The run also stops when it reaches the *maximum total charge* you set for the run in Apify Console
  or through the API.

### Tips

- Start with `maxItems: 20` to check the fields before a large run.
- To cover a whole county, list its main cities/towns in `locations` rather than relying on `county`
  alone — see Limitations.

### Limitations

- **No county-only lookup.** The site can search by locality name but not by county name, so `county`
  only narrows the `locations` you already gave it — it cannot fetch "every station in a county" from
  a bare county name on its own.
- **Locality name matching is a substring search**, not a prefix match (the site's own behavior, e.g.
  searching "Bran" also matches "Zabrani"). If a name matches several localities, the Actor picks an
  exact match when there is one, otherwise the site's first result, and logs a warning either way — a
  more specific name (e.g. add the county) picks a different one.
- **No pagination parameter was found** for the station-lookup endpoint. In testing it returned up to
  50 stations for one locality × fuel-type combination; whether that is a hard limit was not confirmed.
  Large cities may not return every station in one query.
- **`priceDate` is site-wide per station**, not per individual fuel price — it is the closest date the
  site publishes, and it carries no timezone (Romania local time, passed through as-is).
- Pages that require a login are not accessible and are not scraped — not applicable here, the whole
  site is public.

### Data and compliance

This Actor collects **publicly available, non-personal data only**:

- It fetches the site's own public JSON API, the same one its web page uses, without logging in or
  bypassing any access control.
- It does not collect names, e-mail addresses, phone numbers or any other field that identifies a
  person. Station addresses are business addresses, not personal data. A station-level contact field
  sometimes carries a network-wide support phone number and, on at least one station, an individual's
  e-mail address — the Actor never reads that field at all, and it is also listed in
  `PERSONAL_DATA_FIELDS_TO_DROP` as a safety net.
- It identifies itself with a plain User-Agent and sends no headers that imitate a browser.
- It sends few requests in parallel (at most 2), waits between requests to the same host, and stops
  instead of working around a block.

**Removal requests.** If you believe this Actor exposes data it should not, open an issue on the Actor's
*Issues* tab and state the URL(s) concerned. Requests are answered there, and the fields or pages in
question are removed.

You are responsible for using the extracted data in line with the terms of monitorulpreturilor.info and
the laws that apply to you.

### Support

Report bugs and request fields on the *Issues* tab of this Actor. Include the run ID.

# Actor input Schema

## `locations` (type: `array`):

Romanian localities to fetch station prices for, e.g. "Bucuresti", "Cluj-Napoca". Each name is looked up on the site's own locality search (a substring match) and resolved to its official locality + county. Leave empty to use the default list below.

## `county` (type: `string`):

Keep only stations whose county (judet) matches this text (e.g. "Cluj"). Applied after fetching, on top of `locations` above — the site has no county-only lookup, so this only narrows the localities you already listed; it cannot fetch "every station in a county" on its own.

## `networks` (type: `array`):

Limit results to these networks. Leave empty for all networks.

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

Limit results to these fuel types. Leave empty for all fuel types. Each selected type costs one extra request per locality.

## `maxItems` (type: `integer`):

Stop after this many results. You are charged per result, so this is also your cost cap. Maximum 10,000 per run; split a bigger job across runs.

## `proxyConfiguration` (type: `object`):

Proxy settings. Apify datacenter proxies are the default and are enough for most targets.

## `maxRequestsPerCrawl` (type: `integer`):

Hard cap on requests, including locality lookups. Defaults to 5 x Max results.

## Actor input object example

```json
{
  "locations": [
    "Bucuresti",
    "Cluj-Napoca",
    "Timisoara",
    "Iasi",
    "Constanta"
  ],
  "fuelTypes": [
    "11",
    "12",
    "21",
    "22",
    "31",
    "41"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

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

No description

# 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 = {
    "locations": [
        "Bucuresti",
        "Cluj-Napoca",
        "Timisoara",
        "Iasi",
        "Constanta"
    ],
    "fuelTypes": [
        "11",
        "12",
        "21",
        "22",
        "31",
        "41"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("openrows/romania-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 = {
    "locations": [
        "Bucuresti",
        "Cluj-Napoca",
        "Timisoara",
        "Iasi",
        "Constanta",
    ],
    "fuelTypes": [
        "11",
        "12",
        "21",
        "22",
        "31",
        "41",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("openrows/romania-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 '{
  "locations": [
    "Bucuresti",
    "Cluj-Napoca",
    "Timisoara",
    "Iasi",
    "Constanta"
  ],
  "fuelTypes": [
    "11",
    "12",
    "21",
    "22",
    "31",
    "41"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call openrows/romania-fuel-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,openrows/romania-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/qLd12fux5bQbRjp67/builds/duw1aZ9vCpC2raa0D/openapi.json
