UK Fuel Prices Scraper avatar

UK Fuel Prices Scraper

Pricing

from $0.89 / 1,000 stations

Go to Apify Store
UK Fuel Prices Scraper

UK Fuel Prices Scraper

UK petrol and diesel pump prices from the retailers' own price files. One row per filling station: brand, address, postcode, coordinates and every grade it sells, with the age of the retailer's file on each row so frozen prices never pass as today's. $0.92 per 1,000 stations.

Pricing

from $0.89 / 1,000 stations

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

6 days ago

Last modified

Share

Pick the fuel retailers you want and get one row per UK filling station: its brand, address, postcode, coordinates and the price in pence per litre of every grade it sells. Every row carries the time stamped on the retailer's own file, and a file older than your limit is skipped and reported for free rather than passed off as today's price.

This is not every forecourt in the UK. The government's list of open price files was withdrawn on 1 May 2026, so it reads the retailers that still publish their own, which came to about 2,400 stations with current prices on 30 September 2026.

InputRetailer keys, or all, plus optional postcode areas and a freshness limit
OutputOne row per filling station: brand, address, postcode, coordinates, unleaded, super unleaded, diesel and premium diesel prices, and the age of the retailer's file
Ceiling20,000 stations per run, far more than is published
Account neededNone, and no API key
Price$0.92 per 1,000 stations on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 5,400

🔍 What UK Fuel Prices Scraper does

It reads the price file each chosen retailer publishes, and checks it before anything is charged: that it is a station list, that the list is not empty, that it carries a date, and that the date is recent enough for your limit. A file that fails one of those checks becomes a free row saying which.

Grade codes are mapped onto one set of field names, whatever each retailer calls them. Retailers also use placeholder numbers to mean "we do not sell this grade here", so any price below 50p or above 400p a litre comes through as null instead of as a price.

A frozen file is the dangerous case. It answers like any other and holds plausible numbers in the right fields, and only its date gives it away. That is why the date is on every row.

Who publishes what, read on 30 September 2026:

RetailerKeyStations in its fileState
Motor Fuel Groupmfg1,225current
Asdaasda790current
Esso Tesco Allianceesso193current
SGNsgn112current
Motomoto47current
JET Retail UKjet11current
Morrisonsmorrisons1current, and it is one site in Gibraltar
Shellshell546frozen since 13 May 2026
Rontecrontec265frozen since 1 May 2026
Applegreenapplegreen65frozen since 26 February 2025
Ascona Groupascona60frozen since 5 May 2026
Tescotesco515 on 20 Septemberfrozen since 29 April 2026 when last read
bpbpnoneno file served
Karan Retailkarannoneserver error
Sainsbury'ssainsburysnonethe address no longer exists

Nothing is built around this table. Every retailer you choose is asked on every run, so a file that comes back to life starts returning rows by itself. Trust feedUpdatedAt on your own run over this table.

📋 What data you get from each UK filling station

What you getField
The company whose file it is, and the brand over the doorretailer, retailerKey, brand
The retailer's site code, the address, postcode and positionsiteId, address, postcode, latitude, longitude
Unleaded and super unleaded, in pence per litrepetrolE10, petrolE5
Diesel and premium diesel, in pence per litredieselB7, dieselSDV
Any other grade a retailer starts publishingotherPrices
The currency and the unitcurrency, priceUnit
How old the retailer's file isfeedUpdatedAt, feedAgeHours, feedStale
Whether the retailer was on the government's final listonCmaList
When the row was writtenscrapedAt

▶️ How to scrape UK fuel prices

  1. Open UK Fuel Prices Scraper and click Try for free.
  2. In Retailers, list the keys you want, one per line, or type all.
  3. Set Maximum rows. About 2,400 stations are current across every retailer, so 3,000 takes the lot.
  4. To narrow it down, put postcode starts such as SW or EH12 in Postcode areas (optional).
  5. Click Start, then export the dataset as CSV, JSON or Excel, filtered on charged.

💰 How much does it cost to scrape UK fuel prices?

$0.92 per 1,000 stations on the Free plan. Paid plans pay a little less: $0.91 on Starter, $0.90 on Scale and $0.89 on Business. On the free plan, the $5 Apify gives you each month covers about 5,400 stations.

Not charged: the sample row, every diagnostic row, stations from a file older than your limit, stations your postcode filter drops, stations with no price or no location, and a forecourt the same retailer lists twice. All 2,400 or so current stations come to about $2.20.

📥 What you give it

{
"retailers": ["asda", "mfg", "moto"],
"maxItems": 200,
"maxFeedAgeHours": 48,
"postcodePrefixes": ["SW", "M1", "EH12"]
}
FieldDefaultWhat it is
retailersnone, which gives a free sample row; the box starts at asda, mfg, motoKeys from the table above, or the single word all. They are read in the order you list them; all reads the biggest first. A key that is not in the table is ignored.
maxItems200Stations to return across all your retailers, 1 to 20,000. Once it is reached the remaining retailers are not read at all, so list the one you care about first.
maxFeedAgeHours48How old a retailer's file may be, in hours, before its stations are skipped. Raise it to take the frozen files as well; every row still says how old it is.
postcodePrefixesnone, which means every stationOnly stations whose postcode starts with one of these, such as SW, M1 or EH12. Stations the filter drops are never charged.
proxyUrlsnoneOptional, for sending the requests through servers of your own, as http://user:pass@host:port. Leave it empty for a normal run.

📤 What you get back

A real row from a run on 30 September 2026:

{
"ok": true,
"charged": true,
"recordType": "station",
"retailer": "Motor Fuel Group",
"retailerKey": "mfg",
"brand": "Jet",
"siteId": "gcpt1f1w6e3b",
"address": "MFG Bath Road, 230 Bath Road, Slough",
"postcode": "SL1 4DX",
"latitude": 51.515983,
"longitude": -0.624051,
"petrolE10": 174.9,
"petrolE5": 189.9,
"dieselB7": 201.9,
"dieselSDV": 215.9,
"otherPrices": null,
"currency": "GBP",
"priceUnit": "pence per litre",
"feedUpdatedAt": "2026-09-30T00:00:01.000Z",
"feedAgeHours": 2.6,
"feedStale": false,
"onCmaList": true,
"scrapedAt": "2026-09-30T02:37:45.703Z"
}
FieldHow to read it
retailer, retailerKeyThe company whose file it is. Not always the brand over the door: Motor Fuel Group runs sites under BP, Esso and Jet, among others.
brandThe brand on the forecourt, spelled the way the retailer writes it, so ESSO and Esso both turn up.
siteIdThe retailer's own site code. A few sites share one, so to follow a station across runs, match retailerKey, siteId and postcode together.
petrolE10, petrolE5Standard 95-octane unleaded and super unleaded, in pence per litre.
dieselB7, dieselSDVStandard diesel and the premium diesel grade.
otherPricesAny grade code a retailer starts publishing that is not one of those four. Almost always null.
feedUpdatedAt, feedAgeHoursThe time on the retailer's own file, and how old it was when the row was written. Look here before you trust a price.
feedStaletrue when the file is more than 48 hours old, whatever limit you set, so it only shows up if you raised maxFeedAgeHours.
onCmaListWhether the retailer was on the government's final list of participating retailers. Applegreen was not.
latitude, longitudenull when the retailer published no real position. Four Motor Fuel Group sites do that; their address and postcode are right.

A grade the site does not sell is null, not zero.

🧾 Reading the output

RowHow to spot itCharged
A stationcharged: true, recordType: "station"yes
The sample row_sample: true, charged: false. Only when none of your retailer keys matchedno
A diagnostic row_diagnostic: true, charged: false, with the retailer it is about and an errorCodeno

The sample row carries recordType: "station" as well, so filter on charged rather than on recordType to keep only the stations you paid for.

errorCodeWhat happened
FEED_STALEThe file is older than your maxFeedAgeHours. The row gives its date and how many stations it holds.
FEED_HTTPThe retailer's server answered with an error, and status says which.
FEED_UNREACHABLEThe server could not be reached, or its address no longer exists.
FEED_NOT_JSON, FEED_SHAPE, FEED_EMPTYSomething answered, but it was not a usable list of stations.
FEED_NO_TIMESTAMP, FEED_BAD_TIMESTAMPThe file has no readable date, so there is no telling how old its prices are.
NO_RESULTSThe file was fine, but no station was in your postcode areas, or none had both a price and a location.
TIME_BUDGETThe run ran out of time before it reached that retailer, or before it finished its file. Nothing was charged for what it missed. The run ends as failed only when the time limit stopped it before any station came back.

💡 What people use it for

  • Keeping a price history. Retailers overwrite their files and keep no archive, so a daily scheduled run is the only way to have last month's prices later on.
  • Costing a delivery round or a fleet's fuel: pull the postcode areas on the route and compare diesel.
  • A comparison page or an in-car app that wants one flat table instead of fifteen files in fifteen shapes.
  • Seeing what one chain charges across the country, sorted by the grade you buy.

🚧 What it does not do

  • Not every UK forecourt. Only retailers that still publish an open file are in it. Independents and several large chains are not.
  • No history. A run is a snapshot of what each retailer last published.
  • Not a live read of the pump. A forecourt that changed its price an hour ago may not have updated its file yet.
  • No stations from frozen files by default. Shell, Rontec, Applegreen, Ascona and Tesco have not refreshed since spring 2026 or earlier, so on the default limit they return a free row and nothing else.
  • Morrisons is one site in Gibraltar. That is the whole file.
  • Postcodes match on the start, with spaces ignored. M1 also catches M11 and M12, and M11 catches M1 1AA as well, so check the postcode column when that matters.
  • Times are read as UTC, because the files carry no time zone. In British Summer Time a file can look an hour older than it is.
  • A retailer that does not answer during a run gets a free row naming it, and the next run asks again.
  • It is not an official tool of any fuel retailer or of the UK government. Dami's Studio is independent and is not affiliated with or endorsed by any retailer or government body, or by any other company named on this page.

🧭 Which UK data scraper do you need?

If you wantUse
Pump prices at UK filling stationsThis one
Every forecourt around a town on Google Maps, with ratings and GPS, the ones with no price file includedGoogle Maps Scraper
Classified ads on Gumtree UK, by keyword, category or townGumtree UK Scraper
Companies newly registered at Companies HouseNew UK Companies Scraper

❓ Questions people ask

Do I need an account or an API key?

No.

How current are the fuel prices?

Every row says, in feedAgeHours. On the default limit nothing older than 48 hours is charged, and the live retailers refresh daily, so most rows are less than a day old.

Can I get the price at one station?

Put the start of its postcode in postcodePrefixes and pick the row by postcode. Only matching stations are charged.

Can I get last month's fuel prices?

Not from this, because the retailers keep no archive. Schedule a daily run and you build the history yourself.

Why is there a null where a price should be?

Either the site does not sell that grade, or the retailer put a placeholder there instead of a price. Both come through as null.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/uk-fuel-prices-scraper. Either way the run happens on your Apify account at the same price.

The retailers published these price files openly, as part of a voluntary government scheme that has since ended. Check a retailer's own terms before you republish its prices at scale. Apify's write-up on the legality of web scraping is a fair starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Include the run ID and the retailer keys you asked for.