UK Fuel Prices Scraper
Pricing
from $1.05 / 1,000 results
UK Fuel Prices Scraper
Today's petrol and diesel prices at ~3,000 UK forecourts, from the retailers' own CMA open-data feeds: station, brand, postcode, coordinates and pence per litre for E10, E5, B7 and super diesel. Stale feeds are excluded by age -- one publishes prices nineteen months old.
Pricing
from $1.05 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Today's petrol and diesel prices at ~3,000 UK forecourts, straight from the retailers' own open-data feeds published under the CMA road-fuel price scheme: station address and postcode, coordinates, brand, and pence per litre for E10, E5, B7 diesel and super diesel.
HTTP only. One request per retailer, no pagination, no key — these files are published for exactly this use.
What it is for
- Cheapest fuel near a postcode, refreshed on a schedule.
- Regional price monitoring — by postcode area, brand or retailer.
- Price history — run it daily and keep the rows.
Input
| field | what it does |
|---|---|
retailers | Any of the ten reachable feeds. Empty = all. |
maxFeedAgeDays | Exclude feeds older than this. Default 7. See below. |
includeStaleFeeds | Keep stale feeds' stations, labelled. |
fuelTypes, postcodeAreas, brands | Filters. |
excludeSuspectRows | Drop placeholder ids and non-UK coordinates. Default on. |
Three things about this data worth knowing before you trust a run
1. Some feeds are months old, and their prices look like prices
Each feed carries one last_updated timestamp. On the day this Actor was
built:
| feed | last updated | age |
|---|---|---|
| Esso, JET, Moto, MFG, SGN | today / yesterday | fresh |
| Shell | 13/05/2026 | 4 months |
| Tesco | 29/04/2026 | 4.5 months |
| Rontec | 01/05/2026 | 4.5 months |
| Applegreen | 26/02/2025 | 19 months |
Applegreen's E10 at 138.8p is not obviously wrong — it is a price petrol really had, in early 2025. Merged with today's ~170p it drags every average down and sends every "cheapest station" query to a forecourt whose price nobody can verify.
So feeds older than maxFeedAgeDays are excluded by default, the summary
row for each names its age and says feed_stale, every kept station carries
feedAgeDays, and includeStaleFeeds brings them back labelled if you want
them.
2. Five of the fifteen scheme feeds are not here — and the run says so
| feed | why |
|---|---|
| Asda (790 stations) | its own robots.txt disallows the feed path. The scheme's intent does not override the host's robots in this Actor. |
| BP | HTTP 403 bot challenge |
| Sainsbury's | host does not resolve |
| Ascona | broken TLS certificate |
| Karan | times out |
Every run emits a feed_not_fetched row for each, so the coverage gap is data
rather than a footnote. Asking for one of them by name is refused with the
reason.
3. The feeds share a schema and disagree about everything inside it
last_updatedis DD/MM/YYYY —01/05/2026is May, and a month-first parser puts Rontec eight months in the past or fails on13/05/2026.- Morrisons' feed holds one station, with string coordinates, in Gibraltar.
Coordinates outside the UK are flagged (
coordinatesInUk) and excluded by default; MFG's feed had five such rows too. - Brand casing:
SHELLandShell,ESSOandEsso,TEXACOandTexaco— a group-by on the raw field splits each.brandis normalised;brandRawis kept. - Placeholder site ids —
7zzzzzzzzzzz, the geohash of a missing coordinate, appears in more than one feed. Flagged and excluded. - JET publishes
175.89999999999998. Rounded to the scheme's one decimal. - Shell serves JSON as
application/octet-streamat a URL ending in.html. The body decides, not the header. - All feeds are in pence today. The scheme has seen retailers publish
pounds (
1.699); a value below 10 is treated as pounds, converted, and the row says so inpricesConvertedFromPounds.
Output
STATION—retailer,brand+brandRaw,address,postcode,postcodeArea,latitude/longitude,e10/e5/b7/sdv(pence per litre),fuelsSold,feedLastUpdated,feedAgeDays,feedIsStale,coordinatesInUk,siteIdIsPlaceholder.FEED_SUMMARY— one per retailer:stationsInFeed,stationsReturned,feedAgeDays,feedIsStale,placeholderSiteIds,stationsOutsideUk,fuelCoverage,stoppedReason.ERROR—feed_not_fetchedfor each absent scheme feed, and anything that went wrong.
Known limits
last_updatedis per feed, not per station. A fresh feed can still carry a station whose price has not moved in months (MFG, updated today, lists E10 at 131.9p among a field of ~170p). That is beyond what this Actor can prove either way and is not guessed at with an outlier heuristic.- Asda, BP, Sainsbury's, Ascona and Karan are absent — see above.
- UK only, pence per litre.