# Argentina Fuel Prices API by Station (Official) (`japan-open-data/argentina-fuel-station-prices`) Actor

Get fuel prices Argentine stations report to the Secretaria de Energia: nafta super, gas oil and GNC in ARS per station, with brand, address, coordinates and per-fuel dates. For fleets, station owners and AI agents: cheapest nearby, area averages, no API key. JSON, CSV, API or MCP; $3/1,000 rows.

- **URL**: https://apify.com/japan-open-data/argentina-fuel-station-prices.md
- **Developed by:** [Japan Open Data](https://apify.com/japan-open-data) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 station 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

## Argentina Fuel Prices API by Station (Official)

**Get the fuel prices Argentine service stations report to the government: nafta súper and premium, gas oil grado 2 and 3, and GNC in pesos, for every *estación de servicio* near a point, in a province or in a city.** The data is the official *Precios en Surtidor* file of Argentina's Secretaría de Energía, which permit holders must update within 8 hours of a price change (Resolución 314/2016). Search by latitude/longitude and radius, or by province/city, sort by nearest or cheapest, and optionally add one summary row with the minimum, maximum and average price of each fuel — one flat JSON row per station, no API key needed.

- **Official data:** the prices stations report to the Secretaría de Energía. Open data under CC BY 4.0. About 4,600 stations are in the file; the Actor returns the **last price each station reported**, dropping the ones that are older than `maxPriceAgeDays` (default 90). **Every fuel carries its own report date and age in days** (`superPriceAgeDays` … `cngPriceAgeDays`) — the same station often reported its diesel and its GNC weeks apart, so read the age of the fuel you care about before you quote a price (see *How fresh are the prices?*).
- **You choose freshness vs. coverage.** `maxPriceAgeDays` decides how old a reported price may be: on 2026-09-20 the file held **890 stations reported within 90 days (the default), 301 within 30 days and 73 within 7 days**. Lower it for accuracy, raise it for coverage — every row tells you exactly how old each price is.
- **Precios de combustibles por estación (último precio informado):** *nafta súper, nafta premium, gas oil grado 2, gas oil grado 3 y GNC* for every *estación de servicio* in your area, in ARS.
- **Search by point, province or city** — plus brand (YPF, Shell, Axion, Puma, Gulf, Refinor, blanca…), street address, coordinates and distance in every row.
- **Cheapest fuel near a location:** `sortBy: "price"` returns the cheapest stations first for the fuel you choose. **When you sort by price, always read that fuel's `…PriceAgeDays` in the top rows** — prices reported longer ago are lower simply because they are old.
- **Area benchmark in one row:** `includeSummary: true` adds min / max / average per fuel for all matching stations — the "competitor price range" that station owners pay monitoring services for. With `maxResults: 1` that is a **2-row run for about $0.0075**.
- **Pay only for results.** "Nothing found" and error rows are free.

### What can you do with the Argentina Fuel Prices API?

1. **Trucking, logistics and fleets.** Find the cheapest *gas oil* around a depot or along a route, check fuel card charges against the reported price, and pick refuelling stops. In a country with fast-moving fuel prices, run it once per stop or once per province with `fuelType: "diesel"` and `sortBy: "price"` — and compare `dieselPriceAgeDays` before you trust a low price.
2. **Service station owners and operators.** Monitor the competition: every station within 3–10 km (or in your *localidad*) with brand, address, prices, the date each price took effect, and the local min / max / average in one summary row.
3. **Price comparison apps, analysts and AI agents.** Feed a map or a chatbot ("where is the cheapest GNC in Rosario?"), track fuel inflation by province, or build your own price history by scheduling the Actor.

### How to use

1. Click **Start** with the default input: the 50 nearest stations within 10 km of the Obelisco in Buenos Aires whose price was reported in the last 90 days.
2. Either enter the **latitude and longitude** of your point and a **radius** in km, **or** fill in **province** / **city** (then the radius is ignored).
3. Optionally choose a **fuel type** and **sort by price** to get the cheapest stations first.
4. Turn on **Add a price summary row** to get the area's min / max / average prices.
5. Download the results as JSON, CSV or Excel, or call the Actor via API / MCP (see below). Use Apify **Schedules** to collect prices every day.

Common centers: Buenos Aires `-34.6037,-58.3816`, Córdoba `-31.4201,-64.1888`, Rosario `-32.9442,-60.6505`, Mendoza `-32.8895,-68.8458`, La Plata `-34.9215,-57.9545`, Mar del Plata `-38.0055,-57.5426`, San Miguel de Tucumán `-26.8083,-65.2176`, Salta `-24.7821,-65.4232`, Neuquén `-38.9516,-68.0591`.

### Input

Only `latitude` and `longitude` are required, and every input has a default.

| Input | Type | Default | What it does |
|---|---|---|---|
| `latitude` | number | `-34.6037` | Latitude of the search center (Argentina is about -56 to -21). |
| `longitude` | number | `-58.3816` | Longitude of the search center (about -74 to -53). |
| `radiusKm` | number | `10` | Only stations within this distance are returned (0.1–4000 km; 4000 covers all of Argentina). **Ignored when `province` or `city` is set.** |
| `province` | string | `""` | Return the stations of a province instead of a radius search, e.g. `BUENOS AIRES`, `CAPITAL FEDERAL`, `CORDOBA`, `SANTA FE`, `MENDOZA`. Accents and case are ignored; a partial name matches. |
| `city` | string | `""` | Same for the *localidad*, e.g. `ROSARIO`, `MAR DEL PLATA`. Can be combined with `province`. |
| `fuelType` | `any` / `super` / `premium` / `diesel` / `dieselPremium` / `cng` | `any` | `any` = every station with at least one price inside the age limit. A specific fuel returns only the stations that report it, and price sorting uses it. |
| `maxPriceAgeDays` | integer | `90` | Only prices whose effective date is within this many days are returned (1–3650), **applied to each fuel separately**. See *How fresh are the prices?* |
| `timeOfDay` | `day` / `night` | `day` | Stations report a daytime (*diurno*) and a night (*nocturno*) price; they are identical at about 99.5% of stations. |
| `sortBy` | `distance` / `price` | `distance` | Nearest first, or cheapest first for the chosen fuel (`super` when `fuelType` is `any`; stations without that price go last). Check that fuel's `…PriceAgeDays` in the top rows: older reports look cheaper. |
| `maxResults` | integer | `50` | Maximum number of station rows (1–20,000). |
| `includeSummary` | boolean | `false` | Adds one `rowType: "summary"` row with station count and min / max / average price per fuel for **all** matching stations (not only the returned ones). |

#### Fuel names

| Input value | Output field | Official product | Unit |
|---|---|---|---|
| `super` | `superPrice` | Nafta (súper) entre 92 y 95 RON | ARS per liter |
| `premium` | `premiumPrice` | Nafta (premium) de más de 95 RON | ARS per liter |
| `diesel` | `dieselPrice` | Gas Oil Grado 2 (regular diesel) | ARS per liter |
| `dieselPremium` | `dieselPremiumPrice` | Gas Oil Grado 3 (premium diesel, e.g. Infinia Diesel, V-Power) | ARS per liter |
| `cng` | `cngPrice` | GNC (compressed natural gas) | **ARS per m³** |

#### Input example

The stations within 10 km of the Obelisco in Buenos Aires, plus the area summary:

```json
{
  "latitude": -34.6037,
  "longitude": -58.3816,
  "radiusKm": 10,
  "maxResults": 5,
  "includeSummary": true
}
```

### Output

Real output from the input above (run on 2026-09-20; `source` shortened).

```json
{
  "status": "ok",
  "rowType": "summary",
  "searchLatitude": -34.6037,
  "searchLongitude": -58.3816,
  "radiusKm": 10,
  "province": null,
  "city": null,
  "fuelType": "any",
  "timeOfDay": "day",
  "maxPriceAgeDays": 90,
  "stationCount": 65,
  "superMin": 2059, "superMax": 2199, "superAvg": 2130.14, "superStationCount": 42, "superMinPriceAgeDays": 73,
  "premiumMin": 2330, "premiumMax": 2468, "premiumAvg": 2425.47, "premiumStationCount": 40, "premiumMinPriceAgeDays": 5,
  "dieselMin": 2131, "dieselMax": 2279, "dieselAvg": 2209.54, "dieselStationCount": 41, "dieselMinPriceAgeDays": 79,
  "dieselPremiumMin": 2429, "dieselPremiumMax": 2522, "dieselPremiumAvg": 2488, "dieselPremiumStationCount": 38, "dieselPremiumMinPriceAgeDays": 73,
  "cngMin": 579.9, "cngMax": 749, "cngAvg": 669.84, "cngStationCount": 33, "cngMinPriceAgeDays": 46,
  "currency": "ARS",
  "fetchedAt": "2026-09-19T23:27:45Z",
  "sourceUpdatedAt": "2026-09-19T19:00:26Z",
  "source": "Secretaria de Energia, Argentina - Precios en Surtidor (Res. 314/2016), ..."
}
```

(`superMin` 2059 was reported 73 days ago while the area average is 2130.14 — that is what `…MinPriceAgeDays` is for.)

```json
{
  "status": "ok",
  "rowType": "station",
  "stationId": "3747",
  "brand": "SHELL C.A.P.S.A.",
  "holderName": "ESTACION LIMA S.R.L.",
  "cuit": "30-53767985-5",
  "holderType": "company",
  "address": "Lima 835",
  "city": "CAPITAL FEDERAL",
  "province": "CAPITAL FEDERAL",
  "region": "PAMPEANA",
  "latitude": -34.618063,
  "longitude": -58.381766,
  "distanceKm": 1.597,
  "superPrice": 2129,
  "premiumPrice": 2429,
  "dieselPrice": 2199,
  "dieselPremiumPrice": 2499,
  "cngPrice": null,
  "currency": "ARS",
  "timeOfDay": "day",
  "nightPriceDiffers": false,
  "priceReportedAt": "2026-07-01T00:00:00-03:00",
  "priceAgeDays": 80,
  "newestPriceReportedAt": "2026-07-01T00:00:00-03:00",
  "newestPriceAgeDays": 80,
  "superPriceReportedAt": "2026-07-01T00:00:00-03:00",
  "superPriceAgeDays": 80,
  "premiumPriceReportedAt": "2026-07-01T00:00:00-03:00",
  "premiumPriceAgeDays": 80,
  "dieselPriceReportedAt": "2026-07-01T00:00:00-03:00",
  "dieselPriceAgeDays": 80,
  "dieselPremiumPriceReportedAt": "2026-07-01T00:00:00-03:00",
  "dieselPremiumPriceAgeDays": 80,
  "cngPriceReportedAt": null,
  "cngPriceAgeDays": null,
  "fetchedAt": "2026-09-19T23:27:45Z",
  "sourceUpdatedAt": "2026-09-19T19:00:26Z",
  "source": "Secretaria de Energia, Argentina - Precios en Surtidor (Res. 314/2016), ..."
}
```

Each fuel keeps its own date, so you can see which price is fresh and which is not (real rows; station 2481 reported its GNC 38 days ago but its nafta and gas oil more than a year ago, so those two are `null` under the default 90-day limit and come back only with a larger `maxPriceAgeDays`):

| stationId | brand | city | super (age) | premium (age) | gas oil 2 (age) | gas oil 3 (age) | GNC (age) | `priceAgeDays` (oldest) |
|---|---|---|---|---|---|---|---|---|
| 3747 | SHELL C.A.P.S.A. | CAPITAL FEDERAL | 2129 (80 d) | 2429 (80 d) | 2199 (80 d) | 2499 (80 d) | null | 80 |
| 3765 | SHELL C.A.P.S.A. | CAPITAL FEDERAL | 2129 (80 d) | 2429 (80 d) | 2199 (80 d) | 2499 (80 d) | 660 (43 d) | 80 |
| 2481 | YPF | CAPITAL FEDERAL | null | null | null | null | 739.9 (38 d) | 38 |
| 2481 *(with `maxPriceAgeDays: 3650`)* | YPF | CAPITAL FEDERAL | 1186 (475 d) | 1684 (357 d) | 1191 (475 d) | 1375 (475 d) | 739.9 (38 d) | 475 |

Invalid input and searches with no stations return one **free** row that says what to change (real output):

```json
{"status": "not_found", "fetchedAt": "2026-09-19T22:31:33Z", "searchLatitude": 35.68, "searchLongitude": 139.76, "radiusKm": 10, "province": null, "city": null, "fuelType": "any", "maxPriceAgeDays": 90, "sourceUpdatedAt": "2026-09-19T19:00:26Z", "error": "No service stations with a price reported for 35.68,139.76 (radius 10 km); the point is outside Argentina; use Argentine coordinates (latitude about -56 to -21, longitude about -74 to -53, e.g. -34.6037,-58.3816 for Buenos Aires)."}
{"status": "error", "fetchedAt": "2026-09-19T22:27:24Z", "error": "\"fuelType\" must be one of: \"any\", \"super\", \"premium\", \"diesel\", \"dieselPremium\", \"cng\"."}
```

#### Output fields

| Field | Meaning |
|---|---|
| `status` | `ok`, `not_found` or `error` |
| `rowType` | `station` (one service station) or `summary` (area statistics, only with `includeSummary`) |
| `stationId` | Station ID in the official file (`idempresa`; stable, use it to track a station over time) |
| `brand` | Flag / brand (*bandera*): `YPF`, `SHELL C.A.P.S.A.`, `AXION`, `PUMA`, `GULF`, `REFINOR`, `DAPSA S.A.`, `VOY`, `WICO`, `BLANCA` (unbranded) or `SIN EMPRESA BANDERA` |
| `holderName` | Permit holder's name — **only for companies and organizations**, otherwise `null` (see Privacy) |
| `cuit` | Holder's tax ID — **only for companies**, otherwise `null` |
| `holderType` | `company`, `individual_redacted` or `unverified_redacted` (see Privacy) |
| `address`, `city`, `province`, `region` | Street address, *localidad*, province and statistical region as published |
| `latitude`, `longitude` | Station coordinates |
| `distanceKm` | Straight-line distance from your search point (km). Also returned for province/city searches. |
| `superPrice`, `premiumPrice`, `dieselPrice`, `dieselPremiumPrice` | Price per **liter** in ARS; `null` when the station reported no price for that fuel inside the age limit |
| `cngPrice` | GNC price per **m³** in ARS |
| `superPriceReportedAt` … `cngPriceReportedAt` | **Per fuel:** when *that* price took effect (*fecha de vigencia*), Argentine local time (UTC-3); `null` when the fuel has no price |
| `superPriceAgeDays` … `cngPriceAgeDays` | **Per fuel:** days since that fuel's price was reported. Fuels at the same station are often reported weeks apart, so this is the number to check for the fuel you buy |
| `currency` | Always `ARS` (Argentine pesos, taxes included, as posted at the pump) |
| `timeOfDay` | Which shift the prices come from: `day` (*diurno*) or `night` (*nocturno*) |
| `nightPriceDiffers` | `true` when at least one of this station's fuels has a different price in the other shift |
| `priceReportedAt` | When the **oldest** of the prices in this row took effect — the worst case for the row, so **no price in the row is older than this** |
| `priceAgeDays` | Days since `priceReportedAt`: the age of the *oldest* price in the row. Use it as the row's overall freshness; use the per-fuel fields above for a single fuel |
| `newestPriceReportedAt`, `newestPriceAgeDays` | Same for the **newest** price in the row (the station's most recent report of any fuel) |
| `fetchedAt` | When this Actor downloaded the file (UTC) |
| `sourceUpdatedAt` | When the official file itself was last written (UTC) |
| `source` | Data source, license and changes (attribution) |
| `searchLatitude`, `searchLongitude`, `radiusKm`, `province`, `city`, `fuelType`, `maxPriceAgeDays`, `stationCount` | Summary / not\_found rows: the search and how many stations matched |
| `superMin` … `cngAvg`, `superStationCount` … | Summary row: min / max / average price and number of stations with a price, per fuel |
| `superMinPriceAgeDays` … `cngMinPriceAgeDays` | Summary row: how many days ago the **cheapest** price of that fuel was reported — a minimum that is much lower than the average is usually an old report |
| `error` | On `not_found` / `error` rows: one sentence explaining what to change |

### How much does it cost?

This Actor uses **Pay per event** pricing — you pay for results, not for compute time:

| Event | Price | When it is charged |
|---|---|---|
| Result row (`result-row`) | **$0.003** ($3 per 1,000 rows) | Each `ok` row: each station row, and the summary row when you ask for it |
| Actor start | **$0.0015** | Once per run |

`not_found` and `error` rows are **free**.

| Example | Rows | Cost |
|---|---|---|
| **Area benchmark only** (`maxResults: 1` + `includeSummary: true`) — min / max / average of every fuel in a city or province | **2** | **about $0.0075** |
| Cheapest 5 diesel stations near a depot | 5 | about $0.017 |
| Daily competitor check: 20 stations around your station + summary, every day for a month | 21 × 30 | about $1.94 / month |
| Default run (50 nearest stations in Buenos Aires) | 50 | about $0.15 |

- **Cheapest way to start:** `{"province": "CORDOBA", "maxResults": 1, "includeSummary": true}` — two rows, under a cent, and the summary already covers every matching station.
- Keep `maxResults` small when you only need the nearest or cheapest stations; the summary row always covers all matching stations, not only the returned ones.
- Set the **maximum cost per run** when you start the Actor to cap spending. If the limit is reached, the Actor stops cleanly and says so in the status message.
- For comparison, commercial price-monitoring dashboards for station owners start at roughly €10 per month for a fixed set of competitor stations; here a daily check of 20 competitors plus the area summary costs about **$1.94 a month**, and you can change the area, the fuel or the radius on every run.

### Use via API / MCP (AI agents)

**Apify API (HTTP).** Run the Actor and get the rows in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/japan-open-data~argentina-fuel-station-prices/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"latitude": -31.4201, "longitude": -64.1888, "radiusKm": 10, "fuelType": "diesel", "sortBy": "price", "maxResults": 10}'
```

**Python (apify-client):**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("japan-open-data/argentina-fuel-station-prices").call(run_input={
    "province": "SANTA FE", "city": "ROSARIO",
    "fuelType": "cng", "sortBy": "price", "maxResults": 20, "includeSummary": True,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    # cngPriceAgeDays is the age of THIS fuel's price - always read it next to the price.
    print(row["status"], row.get("rowType"), row.get("brand"),
          row.get("cngPrice"), row.get("cngPriceAgeDays"))
```

**MCP (Claude, ChatGPT, Cursor and other AI agents).** Add this Actor as a tool through the Apify MCP server (https://mcp.apify.com), for example with `?tools=japan-open-data/argentina-fuel-station-prices`. An agent only needs `{"latitude": <lat>, "longitude": <lon>}` or `{"city": "<localidad>"}`.

Recommended agent settings:

- "Cheapest diesel near X" → `{"latitude": .., "longitude": .., "radiusKm": 15, "fuelType": "diesel", "sortBy": "price", "maxResults": 5}`.
- "What do fuel prices look like in province X?" → `{"province": "MENDOZA", "includeSummary": true, "maxResults": 1}` — the summary row already has min / max / average.
- Prefer `province` / `city` over geocoding an address; when you do use coordinates, geocode first (the Actor does not geocode).
- Always check `status`; on `not_found` / `error` show the `error` sentence to the user.
- **When you use `sortBy: "price"`, always read the chosen fuel's age field (`dieselPriceAgeDays`, `cngPriceAgeDays`, …) in the top rows before calling a station "the cheapest": a price reported weeks ago looks cheaper than a current one.** Tell the user how old the price is, or drop rows above your own threshold (e.g. `superPriceAgeDays > 30`).
- Each fuel has its own `…PriceReportedAt` / `…PriceAgeDays`; `priceAgeDays` is the age of the oldest price in the row, `newestPriceAgeDays` that of the newest.

### FAQ

**How fresh are the prices?** The official file is not a daily snapshot: it holds the **last price each station reported**, with the date it took effect (*fecha de vigencia*). Stations must report a change within 8 hours, but stations that closed or stopped reporting keep old values — dates in the file go back to 2016. This Actor therefore drops prices older than `maxPriceAgeDays` (default 90). On 2026-09-20 the file held 4,608 stations, of which about 890 had reported within 90 days, about 300 within 30 days and about 70 within 7 days. In the default search (10 km around the Obelisco) 65 stations came back, but only 17 had reported within 30 days and the median report was about 5 weeks old. **Argentine fuel prices move fast, so a price that is weeks old is an indication, not today's pump price:** lower `maxPriceAgeDays` (e.g. 14 or 30) when you need accuracy and accept fewer stations, raise it for coverage, and always read the age fields in each row.

**Is the whole row as fresh as `priceAgeDays` says?** Each fuel is reported separately, so one station can have a GNC price from last month and a nafta price from last year — on 2026-09-20, 1,826 of the 4,608 stations in the file had reported their fuels on different dates, 1,441 of them more than 30 days apart. The age limit is applied to **each fuel on its own**, and each fuel carries its own `…PriceReportedAt` / `…PriceAgeDays`. `priceAgeDays` is the age of the *oldest* price in the row (nothing in the row is older than that) and `newestPriceAgeDays` the age of the most recent one. This matters most with `sortBy: "price"`: the cheapest-looking stations are often the ones that reported longest ago, so compare the age of the fuel you are pricing.

**Why are there day and night prices?** Argentine stations declare a *diurno* and a *nocturno* price. They are the same at about 99.5% of stations; when they differ the row has `nightPriceDiffers: true` and you can rerun with `timeOfDay: "night"`.

**Can I search by city or province?** Yes — fill in `province` and/or `city`. They match the names as published (accents and case ignored, partial names allowed) and replace the radius search.

**Is GNC priced per liter?** No. GNC (compressed natural gas) is sold per cubic metre, so `cngPrice` is ARS per m³ while the four liquid fuels are ARS per liter.

**Is it legal to use this data commercially?** Yes. The Secretaría de Energía publishes the dataset as open data under Creative Commons Attribution 4.0, which allows commercial use and adaptation with attribution. Each row's `source` field and the section below carry that attribution; keep it if you republish the data.

**Why do some stations have no name?** About 10% of permits belong to private persons, and another 9% to partnerships, estates or businesses registered under people's own names. To avoid publishing personal names, only names that are clearly companies or organizations are returned — 81% of stations keep theirs (see Privacy).

### Known limitations

- **"Last reported", not "today".** See *How fresh are the prices?* — always check the age of the fuel you are pricing (`superPriceAgeDays` … `cngPriceAgeDays`), especially with `sortBy: "price"`.
- **Coverage depends on reporting.** Small towns and some provinces have few stations with a recent report; widen `radiusKm`, use `province`, or raise `maxPriceAgeDays`.
- **Prices as reported.** The Secretaría de Energía does not verify them and the pump price can differ. Values of 0 or below are dropped; other implausible values (typos) are returned as reported, which is why the age filter matters.
- **Straight-line distance,** not driving distance.
- **No geocoding.** The Actor takes coordinates or the official province / city names, not free-form addresses.
- **A few stations have inconsistent coordinates** in the source (4 of 4,609 carry two different points); the Actor keeps the most recently reported one.
- **Argentina only.** Points outside Argentina return a free `not_found` row.
- **Cost limit.** If your maximum cost per run is lower than the price of one row, the dataset stays empty and the status message explains why.

### Data source and license

- **Source:** Secretaría de Energía, Ministerio de Economía, Argentina — *Precios en Surtidor – Resolución 314/2016* (prices reported by service station permit holders; registration under Resolución 1.102/2004). Dataset page: https://datos.gob.ar/dataset/energia-precios-surtidor---resolucion-3142016 , file served from http://datos.energia.gob.ar/ .
- **License:** Creative Commons Attribution 4.0 International (CC BY 4.0), https://creativecommons.org/licenses/by/4.0/ (the dataset's `license_id` in the national open data catalogue is `CC-BY-4.0`).
- **Changes made by this Actor:** the file is reshaped from one row per station × product × shift to **one row per station**, keeping the most recently reported price of each product for the selected shift; prices older than `maxPriceAgeDays` and prices of 0 or less are returned as `null`; rows without valid Argentine coordinates are dropped; duplicate rows and stations with conflicting attributes are resolved to the most recent report; names of permit holders who may be private persons are removed; summary statistics are calculated by this Actor.
- **Not affiliated:** this Actor is an independent project and is **not affiliated with, endorsed by or sponsored by the Secretaría de Energía or the Government of Argentina**.
- **Access:** one run downloads the one public file once (about 9 MB) and identifies itself in the User-Agent.

### Privacy

The source file contains the permit holder's name (*empresa*) and tax ID (*CUIT*), and roughly 10% of permits belong to private persons. To avoid publishing personal names, `holderName` and `cuit` are returned **only** when both of the following hold:

1. the CUIT prefix is `30`, `33` or `34` (a legal entity, not a private person — `20`, `23`, `24`, `27` are individuals), **and**
2. the name contains a company or organization legal form (S.A., S.R.L., S.A.S., S.A.I.C., S.A.C.I.F., S.C.A., Sociedad Anónima, Cooperativa, Ltda., Asociación, Fundación, Municipalidad, Club, Instituto, U.T.E., …; accent, dot and spacing variants included), **and**
3. the name carries no form that is registered under people's own names — *sociedad de hecho* / S.H., *sociedad colectiva*, *sociedad simple*, *sucesión / sucesores de …* — and names no previous holder in brackets (e.g. "… S.A. (ex-<person> y <person>)") unless that previous holder is itself a company.

Everything else gets `holderName: null`, `cuit: null` and `holderType` `individual_redacted` (a private-person CUIT) or `unverified_redacted` (a company-type CUIT whose name is, or may be, the partners' or owner's personal name). On 2026-09-20 that meant 3,742 of the 4,608 stations (81%) kept their holder name, 455 (10%) were `individual_redacted` and 411 (9%) `unverified_redacted`. This deliberately also hides a few real organizations. The station's address, brand, coordinates and prices describe the business location and are always returned.

### More from Japan Open Data

- [UK Visa Sponsor Register Tracker (Daily Changes)](https://apify.com/japan-open-data/uk-visa-sponsor-register) — new, removed and downgraded UK visa sponsor licences from the official Home Office register, or check whether a company can sponsor workers.
- [US Flood Zone Lookup by Address (FEMA NFHL)](https://apify.com/japan-open-data/us-flood-zone-lookup) — official FEMA flood zone (A, AE, VE, X…), base flood elevation and FIRM panel for any U.S. address or coordinates.
- [Mexico Gas Prices API by Station (Official CNE)](https://apify.com/japan-open-data/mexico-fuel-station-prices) — today's regular, premium and diesel prices at every Mexican gas station, from the official CNE feed.
- [US Hail History by Location (NOAA NEXRAD Radar)](https://apify.com/japan-open-data/us-hail-history) — every hail day near any U.S. latitude/longitude with max estimated hail size, from NOAA NEXRAD radar.
- [US Storm Reports API: Hail, Wind & Tornado (NWS)](https://apify.com/japan-open-data/us-storm-reports-live) — U.S. hail, wind, tornado and flood reports from official NWS Local Storm Reports within hours (last 7 days), filterable by state or radius.
- [TSA Checkpoint Travel Numbers (Daily, Weekly & YoY)](https://apify.com/japan-open-data/tsa-checkpoint-throughput) — daily U.S. TSA airport checkpoint traveler counts as clean JSON, with weekly averages and year-over-year change.
- [Japan Postal Code & Address in English](https://apify.com/japan-open-data/japan-postal-code-english) — look up Japanese postal codes and addresses in English/romaji, kanji and kana, from Japan Post's official data.
- [UK HGV Operator Licence Lookup (Official DVSA)](https://apify.com/japan-open-data/uk-hgv-operator-licence) — search the official DVSA / Traffic Commissioner register of UK truck and bus operator licences by company name, postcode area or fleet size.
- [UK Flood Risk Lookup by Postcode (England)](https://apify.com/japan-open-data/uk-flood-zone-lookup) — Environment Agency flood zone, recorded flood extents and flood defences for any postcode or coordinates in England.
- [UK Waste Carrier Licence Check (Environment Agency)](https://apify.com/japan-open-data/uk-waste-carrier-register) — check whether a company is a registered waste carrier, broker or dealer in England by registration number, company name or postcode radius, from the Environment Agency's public register (companies and organisations only).
- [France Property Risk Lookup by Address (Georisques)](https://apify.com/japan-open-data/france-property-risk-lookup) — official Géorisques risks for any French address or coordinates: flood, clay shrink-swell, seismic zone, radon, past natural-disaster declarations and nearby industrial / polluted sites, one row per location.
- [England Listed Building & Conservation Area Check](https://apify.com/japan-open-data/england-heritage-constraint-lookup) — official listed buildings, scheduled monuments, conservation areas and Article 4 directions for any postcode or coordinates in England, one row per location.
- [UK NHS Organisation Lookup (Official ODS Codes)](https://apify.com/japan-open-data/uk-nhs-organisation-lookup) — GP practices, pharmacies, dentists, hospitals and NHS trusts from the official ODS register, by postcode, type or ODS code (organisations only).

### Feedback

Found a wrong value or need another field (e.g. historical prices, driving distance, route search)? Open an issue on the Actor's **Issues** tab with your input and what you expected.

# Actor input Schema

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

Latitude of the search center in decimal degrees; Argentine latitudes are negative (about -56 to -21). Default: Buenos Aires (Obelisco), -34.6037.

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

Longitude of the search center in decimal degrees; Argentine longitudes are negative (about -74 to -53). Default: Buenos Aires (Obelisco), -58.3816.

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

Only stations within this distance of the point are returned (0.1 to 4000 km; 4000 covers all of Argentina). Ignored when you fill in "province" or "city".

## `province` (type: `string`):

Return the stations of this province instead of a radius search, e.g. "BUENOS AIRES", "CAPITAL FEDERAL", "CORDOBA", "SANTA FE", "MENDOZA". Accents and upper/lower case are ignored and a partial name matches. Leave empty to search by radius.

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

Return the stations of this locality (localidad) instead of a radius search, e.g. "ROSARIO", "MAR DEL PLATA", "SAN MIGUEL DE TUCUMAN". Accents and upper/lower case are ignored and a partial name matches. Can be combined with "province".

## `fuelType` (type: `string`):

"any" returns every station with at least one price inside the age limit; a specific fuel returns only the stations that report it, and price sorting uses it (super when "any").

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

The file holds the LAST price each station reported, not today's price, so only prices whose effective date (fecha de vigencia) is within this many days are returned. With 90 about 890 of the 4,600 stations come back; with 30 about 300, with 7 about 70. Lower it when you need accuracy, raise it (up to 3650) for the last known price of every station. The age limit is applied to each fuel separately, and every row carries the report date and age in days of each fuel (superPriceAgeDays ... cngPriceAgeDays) plus priceAgeDays for the oldest price in the row.

## `timeOfDay` (type: `string`):

Argentine stations report a daytime (diurno) and a night-time (nocturno) price. They are identical at about 99.5% of stations; "day" is the usual choice. The output field nightPriceDiffers tells you when the other shift is different.

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

"distance" = nearest first; "price" = cheapest first for the selected fuel (super when fuel type is "any"; stations without that price go last). Prices were reported on different dates, so an old report can look cheap: check that fuel's age field (e.g. dieselPriceAgeDays) in the rows at the top, or lower maxPriceAgeDays.

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

Maximum number of station rows to return (1 to 20000).

## `includeSummary` (type: `boolean`):

Adds one extra row (rowType "summary") with the number of stations and the minimum, maximum and average price of each fuel in the area (all matching stations, not only the returned ones).

## Actor input object example

```json
{
  "latitude": -34.6037,
  "longitude": -58.3816,
  "radiusKm": 10,
  "province": "",
  "city": "",
  "fuelType": "any",
  "maxPriceAgeDays": 90,
  "timeOfDay": "day",
  "sortBy": "distance",
  "maxResults": 50,
  "includeSummary": false
}
```

# Actor output Schema

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

Prices in ARS, brand, address, province, coordinates, distance and, per fuel, the date that price took effect and its age in days. Table view: overview.

# 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 = {
    "latitude": -34.6037,
    "longitude": -58.3816
};

// Run the Actor and wait for it to finish
const run = await client.actor("japan-open-data/argentina-fuel-station-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 = {
    "latitude": -34.6037,
    "longitude": -58.3816,
}

# Run the Actor and wait for it to finish
run = client.actor("japan-open-data/argentina-fuel-station-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 '{
  "latitude": -34.6037,
  "longitude": -58.3816
}' |
apify call japan-open-data/argentina-fuel-station-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,japan-open-data/argentina-fuel-station-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/yyi1pgp0SfXADdcSh/builds/VdopBXDYS8dpEelN6/openapi.json
