Fuel Price Tracker: Gas Station Prices in 23 Countries avatar

Fuel Price Tracker: Gas Station Prices in 23 Countries

Pricing

from $0.85 / 1,000 station fuel prices

Go to Apify Store
Fuel Price Tracker: Gas Station Prices in 23 Countries

Fuel Price Tracker: Gas Station Prices in 23 Countries

Fuel and gas prices API: station-level prices in 23 countries incl. US, Canada, UK, Mexico, Australia, Germany, France, Spain, Brazil. Search by ZIP, city or coordinates, or get only price changes with Telegram, Slack or webhook alerts. From $0.85 per 1,000 prices.

Pricing

from $0.85 / 1,000 station fuel prices

Rating

0.0

(0)

Developer

Misha Ershov

Misha Ershov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Fuel prices by station for the US and Canada (GasBuddy), the UK, Australia, Germany, Spain, Portugal, Mexico, France, Italy, Austria, Slovenia, Romania, Croatia, Chile, Brazil and Sweden — as an API, on a schedule, or only the prices that changed.

$0.85 per 1,000 prices · no start fee · ~30 s per run · no proxies needed.

Each output row is one station and one fuel type, so it is easy to filter, chart, and plug into spreadsheets, BI tools, or automations.

Why this one

  • Cheaper per price than the market leader. $0.00085 per station x grade, with no start fee.
  • Change-tracking mode. changes returns only stations whose price moved since the previous run, with previousPrice and change.
  • Twenty-three countries in one Actor. US, Canada, UK, Australia, Germany, Spain, Portugal, Mexico, France, Italy, Austria, Slovenia, Romania, Croatia, Chile, Brazil, Sweden, Greece, Poland, Czechia, Bulgaria, Hungary and Slovakia share one output format.
  • Search by ZIP, city, address text, or by coordinates plus radius. Coordinates are routed to the country that contains them.
  • Pay only for the grades you choose. The default run returns the regular grade only; each station x grade is one row and one charge.

Measured on the Apify platform on 2026-10-10: one run with 4 countries took 32 s and cost $0.002 in platform usage, with 0 broken prices; the US median price age was 13 h. No proxies and no CAPTCHA solving are needed, so runs are fast and cheap.

Compare

This ActorTypical alternatives
Price per 1,000 prices$0.85$1.00 to $1.35
Start feenoneup to $0.07 per run (residential proxies and a CAPTCHA solver)
Change modeyes, with previousPrice and changeusually not available
CountriesUS, Canada, UK, Australia, Germany, Spain, Portugal, Mexico, France, Italy, Austria, Slovenia, Romania, Croatia, Chile, Brazil, Sweden, Greece, Poland, Czechia, Bulgaria, Hungary, Slovakiaoften US only
Grades per runthe ones you chooseone grade, or all grades at a higher price

Use cases

  • Fleet and delivery cost tracking: schedule a daily run for the regions you drive in and watch the cost per liter or gallon.
  • Price-comparison apps and fuel-card dashboards: feed station-level prices into your product through the API.
  • Analysts and journalists: collect regional prices over time and use changes mode to log every move.

Countries and sources

CountrySourceLicenseUpdate cadence
USGasBuddy (crowdsourced and data-feed prices)none statedcontinuous, per report
CanadaGasBuddy (crowdsourced and data-feed prices)none statedcontinuous, per report
United KingdomRetailer open-data price feeds (CMA fuel price scheme), geocoded with postcodes.ioUK retailer open data (CMA fuel price scheme)differs by retailer; feeds older than 7 days are skipped
AustraliaPetrolSpy public station endpoint (NSW and WA government data plus crowd reports), geocoded with zippopotam.us and OpenStreetMap Nominatimnone statedcontinuous, per report
GermanyMTS-K prices as listed on clever-tanken.deMTS-K (Markttransparenzstelle für Kraftstoffe)near real time
Francedata.economie.gouv.fr, "Prix des carburants - flux instantane"Licence Ouverte v2.0near real time
SpainMinisterio, "Precios de carburantes" (MINETUR)CC BY 4.0several times a day
PortugalDGEG, "Preços de Combustíveis"none statedcontinuous
MexicoCRE, public places and prices XMLnone statedseveral times a day
ItalyMIMIT daily price exportIODL 2.0once a day (prices as of 08:00)
AustriaE-Control Spritpreisrechnernone statedcontinuous
Sloveniagoriva.si, national price portalnone statedcontinuous
RomaniaMonitorul Prețurilor (Competition Council)none statedcontinuous
ChileCNE, Bencina en LíneaCNE attribution (see license)continuous (station-reported)
BrazilANP, Levantamento de Preços de CombustíveisANP attribution (see license)weekly survey
SwedenBensinpriser.nuBensinpriser.nu attribution (see license)crowd-sourced, at most 3 days old
GreeceFuelo.net (crowd-sourced)none statedcrowd-sourced, can be several days old
PolandFuelo.net (crowd-sourced)none statedcrowd-sourced, can be several days old
CzechiaFuelo.net (crowd-sourced)none statedcrowd-sourced, can be several days old
BulgariaFuelo.net (crowd-sourced)none statedcrowd-sourced, can be several days old
HungaryFuelo.net (crowd-sourced)none statedcrowd-sourced, can be several days old
SlovakiaFuelo.net (crowd-sourced)none statedcrowd-sourced, can be several days old
CroatiaMZOE, Ministry of Economy fuel price portalnone statedregulated prices, about every 2 weeks

The European countries use official open data. Please keep the attribution that the license of each source requires when you republish the data (the license field is filled in for you).

Input reference

An empty input runs the example location 77002 (Houston, US).

FieldDescription
countriesMultiselect of US, CA, MX, GB, AU, DE, ES, PT, FR, IT, AT, SI, RO, HR, CL, BR, SE, GR, PL, CZ, BG, HU, SK. Default ["US"]. Unknown codes sent via the API are skipped with a warning.
locationsUS and Canada: ZIP or postal code, or City, ST/PROV. Europe: postal code or city name. UK: postcode, outcode (for example M1) or town. Australia: postcode or suburb/city. Mexico: 5-digit CP or city. Portugal: postal code such as 1000-001, or town. Slovenia: 4-digit postal code (1000) or city (Ljubljana). Romania: city name (Cluj-Napoca) or coordinates; Romanian postcodes are not supported. Croatia: city name (Zagreb) or coordinates; Croatian postcodes are not supported. Chile: comuna name (Recoleta) or coordinates; Chilean postcodes are not supported. Sweden: town or municipality name (Malmö) or coordinates, no postcodes. Greece, Poland, Czechia, Bulgaria, Hungary, Slovakia: town or city name or coordinates, no postcodes. Brazil: city (Guarulhos), City, UF (Valença, RJ) or CEP (07178-580). Germany: PLZ or city name; German search works by PLZ or city, not coordinates. A location is tried in every selected country; prefix it (FR:75001) to pin it to one country. Postal codes are searched only in the selected countries with that postal format; city names are searched in every selected country (prefix GB:Leeds to pin a city to one country).
coordinatesCoordinates can also be typed into Locations as lat,lng. Optional points { "lat": 48.2082, "lng": 16.3738, "radiusKm": 5 }. A point is queried only in the selected countries whose bounding box contains it (Vienna goes to AT only, Nice to FR and IT, Madrid to ES, whichever are selected). A point inside no selected country is not queried and is listed in failedLocations with the error outside selected countries.
fuelTypesAny of regular, midgrade, premium, diesel, e85, e10, lpg. Default: regular only. Each fuel type at a station is one row and one charge, so you pay only for the grades you choose. An explicit empty list returns all grades.
modesnapshot (default) or changes.
maxStationsPerLocationDefault 100, max 2000.
maxPriceAgeHoursSkip older prices. 0 = no filter. Prices without a timestamp (Austria) are kept.
stateKeyName of the saved price history for changes mode. Default: a hash of the input.
minPriceChangeNumber, default 0. In changes mode, moves smaller than this (in the station's currency, e.g. 0.05) are ignored.
brandsList of words, default empty. Keeps only stations whose brand (or name, when the brand is empty) contains any word, case-insensitive. Dropped stations are not charged.
maxDistanceKmNumber, default 0 (off). Keeps only stations within this distance of the searched point; stations with unknown distance are dropped. Not charged for dropped stations.
sortBynone (default), price or distance. Rows are sorted within each location: stations found for that location are sorted, after maxStationsPerLocation was applied.
telegramBotTokenHidden field. Bot token from @BotFather, for price change alerts.
telegramChatIdYour Telegram chat id (a number; a group id starts with -).
webhookUrlAn http(s) URL that receives a JSON POST with the changes.
slackWebhookUrlHidden field. Slack incoming webhook URL (https://hooks.slack.com/...).
discordWebhookUrlHidden field. Discord channel webhook URL (https://discord.com/api/webhooks/...).
proxyConfigurationOptional Apify Proxy, off by default.

Example:

{
"countries": ["US", "FR"],
"locations": ["77002", "Los Angeles, CA", "FR:75001"],
"fuelTypes": ["regular", "diesel"],
"mode": "snapshot"
}

Output

One dataset item per station and fuel type:

{
"stationId": "FR:75001003",
"country": "FR",
"source": "fr-gouv",
"name": null,
"brand": null,
"address": "8,10,10bis Rue Bailleul",
"city": "Paris",
"region": "Ile-de-France",
"postalCode": "75001",
"lat": 48.861,
"lng": 2.341,
"fuelType": "diesel",
"fuelTypeRaw": "Gazole",
"price": 2.68,
"priceCash": null,
"distanceKm": 1.42,
"rating": null,
"ratingCount": null,
"currency": "EUR",
"unit": "liter",
"priceUpdatedAt": "2026-10-06T17:57:24Z",
"scrapedAt": "2026-10-10T12:41:56Z",
"previousPrice": null,
"license": "Licence Ouverte v2.0"
}

Notes on the fields:

  • price is always positive. Stations with no price (0, empty, or - - -) for a fuel produce no row and are not billed.
  • priceCash is filled for the US only, when GasBuddy reports a separate cash price.
  • distanceKm is the distance from the searched point in km, null when the source gives no coordinates (for example Germany and Brazil).
  • rating and ratingCount come from GasBuddy (US, CA) and are null for other sources.
  • unit is gallon for the US and liter in Canada and Europe. Canadian prices are CAD per liter (for example 1.729, not 172.9).
  • priceUpdatedAt is ISO 8601 in UTC, or null when the source does not publish a per-price time (Austria).
  • fuelType is normalised; fuelTypeRaw keeps the source's own label. Italy: self-service prices are preferred over staffed-pump prices.
  • change (new, up, down) appears only in changes mode.

A run also stores RUN_SUMMARY in the default key-value store: rows fetched and emitted, rows per country, failedLocations[] for any location that could not be loaded after three retries, and emptyLocations[] ({location, countries}) for locations that returned no stations in any of the searched countries.

Changes mode and scheduling

In changes mode the Actor keeps {stationId|fuelType: price} in the named key-value store fuel-price-state under your stateKey.

  • First run: every row is returned with previousPrice: null and change: "new".
  • Later runs: only rows whose price is new or different are returned, with previousPrice and change set.
  • snapshot mode returns everything but also updates the saved history, so you can switch modes freely.

To track price moves, create an Apify Schedule (for example every 6 hours; once a day is enough for Italy) with the same input and mode: "changes".

Integrations (Make, Zapier, n8n)

Use the Apify integration in your tool:

  1. Add the Apify module/node and choose this Actor.
  2. Set the input as above, with mode: "changes" and a fixed stateKey.
  3. Trigger the scenario from the Actor's "run succeeded" event (or from an Apify Schedule), then read the run's dataset items.
  4. Route the rows to Slack, e-mail, Google Sheets, or a database. In changes mode each item is a price that just moved, so no extra de-duplication is needed.

Limitations

  • US data comes from GasBuddy, which is partly crowdsourced: some stations have stale or missing prices for some grades. Use priceUpdatedAt and maxPriceAgeHours.
  • US station count: a ZIP search on GasBuddy returns only the stations located in that ZIP (often around 5 in a dense downtown ZIP). If maxStationsPerLocation is higher, the actor adds stations from a proximity search around them until the maximum is reached or no more exist, so expect up to the maximum for typical ZIPs. maxStationsPerLocation counts stations, including ones with no price for the requested grades, so fewer rows than stations can be emitted. Many stations in dense areas have no price at all and yield no rows.
  • Austria: the E-Control API returns the 10 nearest stations per query point and fuel; use several coordinates to cover a city. Text locations work for Vienna postal codes and the larger Austrian cities; use coordinates for anywhere else. Natural gas is not covered.
  • Spain: enter a postal code (CP) or a town name. A postal code loads only its province, so it is fast; a town name or a coordinate point downloads the national file once per run. Premium diesel and agricultural diesel are not emitted.
  • Mexico and Portugal: search is by radius around the geocoded point. Portugal supports regular, premium, diesel and LPG only; Mexico supports regular, premium and diesel (no per-price timestamp).
  • Slovenia: search is by radius around the geocoded point; fuels are regular (95), premium (100, else 98), diesel and LPG. There is no per-price timestamp.
  • Romania: use a city name or coordinates; postcodes are not supported. Fuels are regular, premium, diesel and LPG; prices are in RON per litre and carry the time the station reported them.
  • Croatia: use a city name or coordinates; postcodes are not supported. Prices are the regulated prices currently in force (they change about every two weeks) and priceUpdatedAt is the date they took effect. When a station offers several grades of one type, the cheapest is returned.
  • Chile: use a comuna name or coordinates; postcodes are not supported. Prices are CLP per litre for regular (93), midgrade (95), premium (97) and diesel; the self-service price is used, and the assisted price only when a station has no self-service one. LPG is not covered.
  • Brazil: prices come from the ANP weekly survey (updated once a week, collection date in priceUpdatedAt), which covers about 400 cities; a city outside the survey returns nothing. The file has no station coordinates, so lat/lng are empty and the radius is ignored: stations are ordered by the price of your first requested fuel. Prices are BRL per litre for regular (gasolina comum), premium (gasolina aditivada), diesel (S10, or S500 when a station has no S10) and e85, which means hydrated ethanol (etanol) in Brazil. Midgrade, E10 and LPG are not covered (GLP is a 13 kg cylinder, GNV is CNG). A city name found in several states returns all of them; add the state (Valença, RJ) to narrow it.
  • Sweden: prices on Bensinpriser.nu are crowd-sourced by drivers and verified station owners, and the site shows only prices from the last 3 days, so a station without a recent report has no row. Search by town or municipality name (Malmö, Kiruna, Göteborg) or by coordinates; Swedish postcodes are not supported. The result is the cheapest stations in that municipality (ordered by the price of your first requested fuel, not by distance), up to your station limit. Prices are SEK per litre for regular (95), premium (98), diesel and e85 (etanol); midgrade, E10 and LPG are not covered. priceUpdatedAt is the report date (date only).
  • Greece, Poland, Czechia, Bulgaria, Hungary, Slovakia: prices come from Fuelo.net, a crowd-sourced site, and can be several days old, so check priceUpdatedAt. Search by town or city name or coordinates (radius applies); postcodes are not supported. Stations whose prices Fuelo marks as approximate are skipped. Prices are per litre in EUR (GR, BG, SK), PLN (PL), CZK (CZ) or HUF (HU) for regular, midgrade (95+), premium (98), diesel and LPG; premium and diesel fall back to the 98+/diesel-plus grades only when the standard grade has no price.
  • Italy: the official export updates once a day, so intraday moves are not visible. Postal-code search matches the CAP written inside the station address.
  • Italy and Spain: fuel labels that do not map to a normalised type (for example CNG/Metano, GNL, AdBlue) are not emitted.
  • US unl88 (E15) is not emitted.
  • France: station names and brands are not published in the open dataset, so name and brand are null.
  • Prices are reported as published by the sources; no guarantee of accuracy is given.

Pricing

This Actor uses pay-per-event pricing, with no start fee:

  • station-price: $0.00085 per station x grade returned (that is $0.85 per 1,000 prices).
  • price-change: $0.005 per changed price in changes mode, in addition to the station-price event.

Current prices are always shown on the Actor's page.

Price change alerts

Get told about price moves without opening Apify:

  1. Set mode to changes.
  2. Create a bot with @BotFather and send it any message.
  3. Put the bot token and your chat id in the input (telegramBotToken, telegramChatId).
  4. Add a schedule in Apify (for example hourly).

After each run with at least one up or down change, the Actor sends a short message to Telegram. If you set webhookUrl, it also receives a JSON POST with stateKey, changes, newCount and text.

  • Slack: create an incoming webhook in Slack and paste its URL into slackWebhookUrl.
  • Discord: open channel settings, then Integrations, then Webhooks, and copy the URL into discordWebhookUrl.
  • Email: Apify's built-in Gmail integration emails after every successful run. For email only when prices changed, send the webhook to Zapier or Make.

Moves smaller than minPriceChange are not emitted and not charged; they add up until they cross the threshold. Alerts are free, and a failed alert never fails the run.

FAQ

Is there a GasBuddy API?

GasBuddy does not offer a public API for this data. This Actor returns GasBuddy station prices for the US and Canada as structured data through the Apify API, including cash and credit prices and the postedTime of the report.

How do I get gas prices by ZIP code?

Put the ZIP code in locations, for example {"countries": ["US"], "locations": ["77002"]}. You get one row per station and fuel type.

How do I track fuel price changes daily?

Set mode to changes, use a fixed stateKey, and create an Apify Schedule that runs once a day. Each run returns only the stations whose price changed since the previous run.

How much does it cost?

$0.00085 per station x grade ($0.85 per 1,000 prices), plus $0.005 per changed price in changes mode. There is no start fee. The default run returns the regular grade only.

Which countries are supported?

The US and Canada (GasBuddy), the UK (retailer open data), Australia (PetrolSpy), Germany (MTS-K via clever-tanken), Spain, Portugal (DGEG), Mexico (CRE), France, Italy, Austria, Slovenia, Romania, Croatia, Chile and Brazil (official government open data).

Where do the UK prices come from, and how fresh are they?

From the retailers' own open price feeds published under the UK CMA fuel price scheme. Freshness differs by retailer, and a feed whose last update is older than 7 days is skipped. RUN_SUMMARY.ukFeeds shows the status of each feed. Prices are in GBP per litre.

Why does a ZIP code with no gas station still return results?

Some ZIP codes have no gas station inside (e.g. Midtown Manhattan); the actor then searches around the ZIP's center.

Can I search by coordinates?

Yes. Pass coordinates with lat, lng and radiusKm. Each point is queried in the selected country that contains it.

Can I use it from Claude or ChatGPT (MCP)?

Yes. AI agents can call the Actor through the Apify MCP server; see the MCP section below.

MCP

AI agents can run this Actor through the Apify MCP server. Add the Actor id Deepurple/fuel-price-tracker to the tools of your MCP client, then ask the agent for fuel prices in plain language.

Not affiliated with GasBuddy. US prices come from GasBuddy's public website; check that your use complies with its terms.