🎉 Premium Proxies · 24-Hour Free TrialClaim Now
Use Cases

Proxies for Energy Tariff and Fuel Price Data

Fuel price data and energy tariff collection: which markets publish official open feeds, where proxies fill the gaps, and how to size and structure the scrape.

S SparkProxy 0 15 min read
Share
Proxies for Energy Tariff and Fuel Price Data

Fuel price data in several major markets is already published by law, so the first step is to check for an official feed; proxies earn their cost on the gaps: US station prices, supplier tariff pages, delivered heating fuels, EV charging rates, and checking feeds against what retailers actually display.

That ordering matters because energy is unusual among price-intelligence verticals. Regulators in the UK, Germany, France and Western Australia force fuel retailers to report prices, and Australian electricity retailers publish plans through public APIs. A team that starts by scraping station websites in those markets builds something fragile to collect data it could have downloaded. This guide maps the official sources first, then covers the collection work that does need proxies, how fuel and tariff data differ as scraping problems, and which proxy setup suits each.

Official open data: check this before scraping

The sources below were checked in September 2026. Reporting rules and access terms change, so confirm each on the publisher's own page before you design around it.

MarketSourceWhat it coversFreshness
United KingdomFuel Finder, under the Motor Fuel Price (Open Data) Regulations 2025Station-level road fuel pricesTraders must report a price change within 30 minutes; the CMA said it would prioritise enforcement from 1 May 2026
GermanyMarkttransparenzstelle für Kraftstoffe (MTS-K) at the Bundeskartellamt, redistributed by licensed services such as TankerkönigSuper E5, E10 and diesel at public stationsChanges reported within five minutes
Franceprix-carburants.gouv.fr open data, "flux instantané"Station prices, fuels and servicesFeed refreshed every 10 minutes; individual stations update less often
Western AustraliaFuelWatchStation prices, including tomorrow'sRetailers notify by 2pm; prices fixed for 24 hours from 6am next day
United StatesEIA Gasoline and Diesel Fuel UpdateNational and regional averages, not stationsWeekly, representing Monday prices
United StatesOpenEI Utility Rate Database (URDB)Utility electricity rate structuresUpdated on a rolling and annual basis; API and bulk download
AustraliaConsumer Data Right energy Product Reference DataRetail electricity plans, tariffs, fees, discountsPublic endpoints such as Get Generic Plans need no authentication
Great BritainOfgem energy price capDefault tariff cap levelsQuarterly; the January to March 2027 level is due by 25 November 2026
TexasPower to Choose, run by the Public Utility Commission of TexasRetail electricity plans posted by certified providersPlans as posted by providers

Two practical notes. France's publisher points out that a 10-minute feed does not mean every station changes its price every 10 minutes, and it shows a last-updated date per price for that reason. And Tankerkönig's API terms ask for attribution under CC BY 4.0 and no more than one request every 5 minutes, which is a useful reminder that "open" data still has conditions.

If your market is in this table and the feed covers the fields you need, you may not need proxies at all for the core dataset.

Where proxies are actually needed

Official feeds leave real gaps, and those gaps are where most commercial energy price work sits.

  • US and Canadian station prices. There is no national station-level reporting mandate in the US comparable to the European schemes above, and the EIA's weekly series is an average. Station-level prices come from brand store locators, retailer websites and apps.
  • Supplier tariff pages. Unit rates, standing charges, contract lengths and exit fees for fixed deals are published by each supplier, often behind a postcode lookup, and rarely in a feed.
  • Business and commercial tariffs. Price caps and consumer plan APIs mostly cover households. Business rates are scattered across supplier and broker sites.
  • Delivered fuels. Heating oil, LPG and bulk diesel are quoted by volume and delivery postcode by local distributors, with no central register.
  • EV charging prices. Per-kWh, per-minute and session fees vary by network, charger speed, membership and time of day, and are published network by network.
  • Feed verification. Reporting regimes are new or unevenly enforced in places. Sampling what a retailer's own site displays against the official record catches stale or missing stations.
  • Comparison-site views. What a switching site ranks first for a postcode is a commercial signal in its own right, although these sites often restrict automated access in their terms.

Energy suppliers and fuel retailers also defend their pages the way any retailer does. Rate limits and bot checks on store locators and quote journeys are the same problem covered for supermarkets in proxies for grocery and delivery prices, with one difference that shapes everything below: the unit of data.

Free trial

Scraping at scale? Skip the blocks.

Fast, unblockable datacentre proxies with unlimited bandwidth.

Fuel prices and tariffs are different scraping problems

DimensionStation fuel pricesEnergy tariffs
Unit of dataOne price per station per gradeOne product with many components
Number of recordsVery large: thousands of stationsSmall: hundreds or thousands of products
How often it changesOften, sometimes several times a dayRarely, but in steps that matter
Typical pageStore locator JSON or a light station pageMulti-step, JavaScript-heavy quote journey
Main cost driverRequest countRendering time and bytes
Location inputStation ID or coordinates in the dataPostcode, meter type, consumption entered in a form
Biggest failure modeMissing a change between pollsParsing the wrong component, such as a standing charge as a unit rate

Read the "main cost driver" row carefully, because it decides which proxy billing model hurts. Fuel collection is many small requests: a per-request or per-IP limit is the constraint, and bytes barely register. Tariff collection is fewer, heavier sessions with a headless browser pulling scripts and assets at every step: on a per-GB plan that is where the bill grows. How to reduce proxy bandwidth costs covers blocking assets you do not need, which matters far more for the tariff side.

Polling frequency and request volume

Poll at the speed prices change on your source, not at the speed your infrastructure allows. Two illustrative workloads show the range. The numbers are assumptions for sizing, not measurements.

Fuel: a regional US brand locator. Assume 1,200 stations, each returning all grades in one JSON response.

Poll intervalRequests per dayRequests per minute
Every 4 hours7,2005
Every hour28,80020
Every 30 minutes57,60040
Every 10 minutes172,800120

Even the aggressive end is 120 requests a minute, a light load for any proxy plan. The limiting factor is how the locator treats repeated calls from the same address, so rotation matters more than concurrency. And polling every 10 minutes buys little if the brand changes prices a few times a day. Store only changes, and let the change log tell you whether to poll faster.

Tariffs: a UK supplier sweep. Assume 30 suppliers, 40 representative postcodes, and 3 meter or consumption profiles, run weekly. That is 3,600 quote journeys a week. If each journey loads 6 rendered pages, the week is 21,600 page renders. Few requests by fuel standards, but each render may weigh one to three megabytes once scripts and assets are counted, which puts the weekly transfer somewhere in the tens of gigabytes before any asset blocking. Here, concurrency controls how long the sweep takes and bandwidth controls what it costs.

Location: the station ID and the postcode, not the IP

Most location-sensitive scraping depends on exit IP geography. Energy data mostly does not, and buying city-level proxies for it is usually wasted money.

A station's price belongs to the station. The locator returns it with an ID and coordinates, regardless of where your request comes from. A tariff quote depends on the postcode and meter details you enter, because regional distribution charges vary. Your IP does not change what a supplier charges in a given postcode.

The IP still matters at country level:

  • Some suppliers and fuel retailers serve a different site, or refuse service, to visitors outside their home country.
  • Currency, VAT display and language can follow the visitor's country.
  • A bot-check system is more suspicious of a foreign datacenter address hitting a domestic-only quote journey.

So match the exit country to the market, and put the real location into the request parameters. For how geo-targeting works in general and where finer targeting does matter, see what geo-targeting means in proxies.

Choosing a proxy setup by source

Source typeRecommended setupWhy
Official feeds and public APIsNo proxy, respect published rate limitsYou are a welcome consumer; a proxy adds nothing but risk to your access
Fuel brand store locatorsRotating datacenter proxies in the market's country, per-request rotationHigh request count, tiny payloads, per-IP limits are the constraint
Supplier tariff pages and quote journeysSticky sessions for the length of one journey, headless browser, unmetered bandwidthMulti-step forms break if the IP changes mid-journey; rendered pages are heavy
Heating oil and LPG distributor sitesRotating datacenter, low rate, per-site pacingMany small independent sites; politeness matters more than scale
EV charging network price pagesPlain HTTP where JSON is exposed, rendering where it is notMixed; check for an underlying API call in the browser's network tab first
Sites that block datacenter ranges outrightResidential proxies or a scraping API with its own unblockingIf clean datacenter IPs fail on the first request, the block is by network type

The sticky-session row is the one teams miss. A quote journey that starts on one IP and submits its postcode from another looks like a hijacked session to many form handlers, and fails in ways that resemble parser bugs. Hold one exit for the whole journey, then rotate before the next. The underlying trade-off is laid out in residential vs datacenter proxies.

Normalising prices so they compare

Energy prices are some of the least comparable numbers you will collect. Settle the schema before the scraper.

Fuel

  • Units. Pence per litre, euros per litre, dollars per US gallon. Convert to one unit and keep the original.
  • Precision. Many European and US displays carry a tenths digit, such as 1.749 or $3.29 9/10. Store the full precision you are shown.
  • Grade names. "Super E10", "Unleaded", "Regular 87" and "SP95-E10" need a mapping table per market.
  • Timestamps. Record both when the retailer says the price took effect, where given, and when you observed it.

Tariffs

  • Two-part pricing. A unit rate per kWh plus a standing charge per day. Neither alone tells you the cost.
  • Time-of-use bands. Peak, off-peak and weekend windows with their own rates and clock times, often in local time with daylight saving changes.
  • Tax. Whether a displayed rate includes VAT or sales tax differs by page and by customer type.
  • Contract terms. Fixed length, exit fees and end-date behaviour are part of the product.

The only fair comparison between tariffs is an annual cost for a stated consumption profile. A minimal calculator makes the point:

def annual_cost(unit_rates_p, band_share, standing_p_per_day, kwh_per_year, days=365):
    """Annual cost in pounds for a (possibly time-of-use) tariff.

    unit_rates_p: pence per kWh per band, e.g. {"peak": 27.1, "off_peak": 8.5}
    band_share:   share of consumption in each band, summing to 1.0
    """
    energy = sum(kwh_per_year * band_share[b] * unit_rates_p[b] for b in unit_rates_p)
    standing = standing_p_per_day * days
    return round((energy + standing) / 100, 2)

# Illustrative tariffs only, not real supplier prices
flat = annual_cost({"all": 24.5}, {"all": 1.0}, 53.0, 2700)
tou  = annual_cost({"peak": 29.0, "off_peak": 9.0}, {"peak": 0.6, "off_peak": 0.4}, 58.0, 2700)
print(flat, tou)   # 854.95 778.7

With those invented numbers, the time-of-use tariff is about £76 a year cheaper for a household using 40% of its power off-peak, and becomes the more expensive option once the off-peak share drops below roughly 26%, because its standing charge is higher. The scraper's job is to capture every input to that function correctly. The calculator's job is to stop anyone ranking tariffs by unit rate alone.

For fuel, the equivalent discipline is a change log rather than snapshots:

last_seen = {}   # (station_id, grade) -> price

def record(station_id, grade, price, observed_at, sink):
    key = (station_id, grade)
    if last_seen.get(key) != price:
        sink.append({"station": station_id, "grade": grade,
                     "price": price, "observed_at": observed_at,
                     "previous": last_seen.get(key)})
        last_seen[key] = price

A change log is smaller, answers "when did this station move" directly, and tells you empirically how often your source changes, which feeds back into the polling interval. The broader pipeline pattern is in building an automated price monitoring system with proxy rotation.

Collecting through SparkProxy

SparkProxy is datacenter-first, which fits the two workloads above differently, so here is where it helps and where it does not.

Fuel locators. Rotating datacenter proxies with per-request rotation on gateway.sparkproxy.io:11000 spread locator calls across a 1M+ IP pool in 80+ countries, including 50,000+ US IPs. Plans are sized by concurrent threads, and the fuel workload above needs very few. Starter at $75 a month for 100 threads is already far more parallelism than a 1,200-station poll requires, so only choose a larger plan if other collection shares the account.

Tariff journeys. Port 11002 holds one exit IP for a session window, which is what a multi-step quote form needs. Every plan has unlimited bandwidth, so heavy rendered pages do not change the bill; the Fair Usage speed ceiling (25 Mbps on Starter up to 150 Mbps on Plus) is the practical limit, not a monthly allowance.

When you would rather not run browsers. The Scraping API renders pages, rotates and retries behind one call. A plain fetch costs 1 credit, a JavaScript render 5, and routing through a specific country adds 5, so a rendered GB-routed page is 10 credits. There are 1,000 free credits with no card, and paid plans start at $49 for 250,000 credits a month.

curl -G "https://scrape.sparkproxy.io/api/v1" \
  -H "X-API-Key: $SPARKPROXY_API_KEY" \
  --data-urlencode "url=https://supplier.example/tariffs/fixed" \
  --data-urlencode "render_js=true" \
  --data-urlencode "country_code=GB" \
  --data-urlencode "tag=tariffs:weekly"

What SparkProxy does not do: it sells no residential or mobile proxies and no city-level targeting. For scraping jobs, the SparkProxy Scraping API does offer residential exits through its premium_proxy option, which routes a request through a residential pool for 10 credits, or 25 with JavaScript rendering. If a supplier or comparison site blocks datacenter networks outright, you need a different proxy type for that source.

Licensing, terms and data you should not enter

  • Open data licences carry obligations. Attribution requirements, rate limits and redistribution terms apply even to free feeds. Keep a register of which licence each dataset arrived under.
  • Website terms differ from open data. Comparison sites and some suppliers restrict automated access in their terms. Read them, and get legal advice before collecting at commercial scale or republishing.
  • Never enter real personal data into quote forms. Use published tariff tables, tariff information documents and quote steps that return prices from a postcode alone. If a journey requires a name, email or account number to show a price, treat that source as out of scope rather than inventing details.
  • Be a light visitor. Pace requests per domain, cache pages that have not changed, and schedule sweeps outside the site's peak hours. Small distributors run small servers.

Frequently asked questions

FAQ

Several markets publish station-level prices officially: the UK's Fuel Finder scheme, Germany's MTS-K data through licensed services such as Tankerkönig, France's prix-carburants open data feed and Western Australia's FuelWatch. In the US, the EIA publishes weekly averages but not station-level prices, so station data usually comes from retailer sites.

Only for sources without an official feed or API. Australian retail plans are available through public Consumer Data Right endpoints and US utility rates through OpenEI's database. Supplier tariff pages, business rates and comparison sites generally need a scraper, and proxies keep those sweeps from being rate-limited.

As often as prices actually change on your source, which you find out by storing a change log rather than snapshots. Start hourly, measure how often each station's price moves, then tighten or relax the interval. Polling faster than the source changes adds requests and block risk without adding data.

Usually not. Station prices come back with the station ID and location regardless of where the request originates, and tariff quotes depend on the postcode you enter. Match the proxy's country to the market to avoid geo-blocks, and put the real location in the request parameters.

Multi-step quote journeys often bind the session to the visitor's IP. If the postcode step and the results step arrive from different addresses, the form can reset or return errors that look like parser bugs. Use a sticky session for one full journey, then rotate before the next.

Convert every tariff to an annual cost for a stated consumption profile, combining unit rates per time-of-use band with the daily standing charge. Ranking by unit rate alone is misleading, because standing charges and off-peak shares can reverse the order.

Special Discount · 20% off

Get 20% off your first month

Premium datacentre proxies with unlimited bandwidth. Use the code at checkout.

Save up to 15% more on quarterly, half-yearly and yearly plans

Claim Discount

About the author

This guide was written by the SparkProxy Technical Team, the engineers who run SparkProxy's datacenter proxy network and Scraping API. SparkProxy operates 1M+ datacenter IPs across 80+ countries on flat, thread-based plans with unlimited bandwidth. We point to official data sources first because they are the better option where they exist. Regulatory and open-data details were checked against the publishers' own pages in September 2026; workload and tariff figures are illustrative assumptions, not measurements. Questions: support@sparkproxy.io.

Keep reading

Related articles