Fuel Prices AU Scraper avatar

Fuel Prices AU Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Fuel Prices AU Scraper

Fuel Prices AU Scraper

Scrapes petrol and fuel prices data across Australia and New Zealand. Search by address or coordinates to find nearby stations with current fuel prices.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

0

Monthly active users

5 days ago

Last modified

Share

Fuel Prices ANZ Scraper

Fuel Prices ANZ Scraper

Scrapes petrol and fuel prices data across Australia and New Zealand. Search by address or coordinates to find nearby stations with current fuel prices.

Features

  • Address-Based Search: Search by suburb, postcode, or full address (e.g., "Sydney CBD", "3168", "Clayton VIC")
  • Coordinate Search: Search by latitude/longitude for precise location targeting
  • Offline Geocoding: Uses local AU/NZ postcode datasets - no external API dependencies
  • Price Analytics: Automatic price summaries with min/max/avg per fuel type
  • Cheapest Fuel Finder: Highlight the cheapest station for a specific fuel type
  • Proxy Support: Built-in Apify proxy configuration for reliable scraping

Use Cases

  • Fuel Price Monitoring: Track fuel prices across suburbs and regions
  • Cost Optimization: Find the cheapest fuel stations in your area
  • Market Analysis: Analyze fuel price trends and variations
  • Fleet Management: Monitor fuel costs for business vehicle operations
  • AI/ML Training Data: Build datasets for price prediction models

Input Parameters

ParameterTypeDefaultDescription
addressstring-Search address (e.g., "Sydney CBD", "Clayton VIC", "2000")
latnumber-Latitude coordinate (use with lng if no address)
lngnumber-Longitude coordinate (use with lat if no address)
radiusKmnumber5Search radius in kilometers (1-50)
fuelTypestring-Optional fuel type filter (U91, E10, Diesel, U95, U98, LPG)
proxyobject-Optional proxy configuration
resumeFromRunIdstring-Previous run/dataset ID to seed Incremental mode's baseline from
incrementalModebooleanfalseReturn only NEW/UPDATED/REAPPEARED stations vs. the last run of this same search
stateKeystring-Name a monitoring campaign, or share state across differently-configured runs
emitUnchangedbooleanfalseAlso return (and bill) stations unchanged since the last run
emitExpiredbooleanfalseAlso return (and bill) stations no longer found this run

Note: Either address OR both lat and lng must be provided.

Resume & recurring updates (incremental mode)

Turn on incrementalMode to schedule this actor daily/weekly against the same search and get back only what changed, instead of the full station list every time:

  • The first run for a given search returns every station as changeType: "NEW".
  • Later runs return only NEW, UPDATED, and REAPPEARED stations by default. A station whose data is identical to the last run is not returned and not billed — turn on emitUnchanged to get it back anyway, marked UNCHANGED.
  • A station present in a previous run but no longer found in this run's search area can be returned as a tombstone row marked EXPIRED — turn on emitExpired to get these (also billed).
  • State is tracked per suburb/lat+lng, radiusKm, and fuelType — different search setups never share a baseline. Set stateKey to name a campaign explicitly, or to deliberately share state across differently-configured runs.
  • Stations are matched between runs by stationId (falls back to a brand+address composite for the rare record missing one).
  • prices.<fuelType>.updatedAt is tracked as real data, not scrape noise — it is PetrolSpy's own "price last changed" timestamp (confirmed by measurement: it did not move across two of this actor's own fetches 75s apart, while it does vary per price/station). Excluding it would make UPDATED unreachable for a pure price change, defeating the point of this actor.
  • The diff is null-tolerant: a field flipping between a real value and missing/null never counts as a change on its own; a real change elsewhere in the same station is still caught.
  • resumeFromRunId (paste a previous run ID or dataset ID) has no pagination to resume on this actor — its only effect is to seed Incremental mode's very first baseline from that prior run's dataset, so those stations don't look NEW again on day one of monitoring. It only applies when the state key has no saved baseline yet.

New dataset fields, present only in incremental-mode runs: changeType (NEW/UPDATED/REAPPEARED/EXPIRED/UNCHANGED), changedFields (array of top-level field names that changed), firstSeenAt, lastSeenAt.

Usage Examples

Search by Suburb

{
"address": "Sydney CBD",
"radiusKm": 5,
"fuelType": "U91"
}

Search by Postcode

{
"address": "3168",
"radiusKm": 10
}

Search by Coordinates

{
"lat": -33.8688,
"lng": 151.2093,
"radiusKm": 5,
"fuelType": "E10"
}

With Proxy Configuration

{
"address": "Auckland",
"radiusKm": 5,
"proxy": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "AU"
}
}

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape — the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record — not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Output Format

Station Data (Dataset)

Each station is stored as a separate record:

{
"stationId": "556fcfdccf79db30f9694c0b",
"name": "Z Mount Albert",
"brand": "Z",
"location": {
"lat": -36.8805,
"lng": 174.7249,
"address": "774 New North Rd",
"suburb": "Mount Albert",
"state": "",
"postcode": "1025"
},
"phone": "+6498463964",
"prices": {
"U91": {
"price": 287.9,
"updatedAt": 1739137133695,
"reportedBy": "Leacim",
"relevant": false
},
"U95": {
"price": 306.9,
"updatedAt": 1739137133694,
"reportedBy": "Leacim",
"relevant": false
},
"DIESEL": {
"price": 219.9,
"updatedAt": 1739137133694,
"reportedBy": "Leacim",
"relevant": false
}
},
"tradingHours": null,
"isAdBlueAvailable": false,
"verified": false,
"searchContext": {
"searchLocation": {
"lat": -36.8609,
"lng": 174.7695,
"address": "Auckland, Auckland 1148, NZ"
},
"boundingBox": {...},
"radiusKm": 5
}
}

Summary Output (Key-Value Store)

The OUTPUT key contains aggregated results:

{
"searchLocation": {
"lat": -36.8609,
"lng": 174.7695,
"address": "Auckland, Auckland 1148, NZ"
},
"radiusKm": 5,
"totalStations": 39,
"priceSummary": {
"totalStations": 39,
"fuelTypes": {
"U91": {
"min": 235.9,
"max": 290.9,
"avg": 263.5,
"count": 34
},
"U95": {
"min": 235,
"max": 306.9,
"avg": 282.2,
"count": 28
},
"DIESEL": {
"min": 151.7,
"max": 245,
"avg": 195.2,
"count": 38
}
},
"generatedAt": "2025-12-01T07:59:11.317619"
},
"stations": [...]
}

Supported Fuel Types

CodeDescription
U91Unleaded 91
E10Ethanol 10
U95Unleaded 95
U98Unleaded 98
DieselDiesel
LPGLiquefied Petroleum Gas
PremDSLPremium Diesel
TruckDSLTruck Diesel
AdBlueAdBlue
E85Ethanol 85

Supported Regions

Australia

All states and territories: NSW, VIC, QLD, SA, WA, TAS, NT, ACT

New Zealand

All regions including Auckland, Wellington, Canterbury, Otago, and more

Output Storage

Dataset

  • Each station is stored as a separate record
  • Exportable to JSON, CSV, Excel, XML

Key-Value Store

  • OUTPUT: Complete results with price summary and all stations

Standby Mode (HTTP API)

This Actor supports Standby mode for real-time HTTP API access with low latency. When enabled, the Actor runs as a persistent HTTP server.

Base URL

https://<your-username>--fuel-prices-anz-scraper.apify.actor

Endpoints

EndpointMethodDescription
/GETAPI information and available endpoints
/healthGETHealth check endpoint
/searchGET/POSTSearch for fuel stations

Search Parameters

ParameterTypeDescription
suburbstringSuburb or city name (e.g., "Sydney", "Melbourne", "Auckland")
latnumberLatitude (use with lng)
lngnumberLongitude (use with lat)
radiusKmnumberSearch radius in km (default: 5)
fuelTypestringFilter by fuel type (U91, E10, U95, U98, Diesel, LPG)

Example Requests

Search by suburb (GET):

$curl "https://<username>--fuel-prices-anz-scraper.apify.actor/search?suburb=Sydney&radiusKm=5&token=YOUR_TOKEN"

Search by coordinates (GET):

$curl "https://<username>--fuel-prices-anz-scraper.apify.actor/search?lat=-33.8688&lng=151.2093&radiusKm=5&token=YOUR_TOKEN"

Search with fuel type filter (POST):

curl -X POST "https://<username>--fuel-prices-anz-scraper.apify.actor/search?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"suburb": "Melbourne", "radiusKm": 10, "fuelType": "U91"}'

Response Format

{
"searchLocation": {
"lat": -33.8688,
"lng": 151.2093,
"address": "Sydney, NSW 2000, AU"
},
"radiusKm": 5,
"totalStations": 42,
"priceSummary": {
"U91": {"min": 175.9, "max": 189.9, "avg": 182.4, "count": 38},
"E10": {"min": 172.9, "max": 186.9, "avg": 179.8, "count": 35}
},
"cheapest": {
"stationId": "...",
"name": "Metro Petroleum",
"price": 172.9,
"fuelType": "E10"
},
"stations": [...]
}

Enabling Standby Mode

  1. Go to the Actor's Settings in Apify Console
  2. Navigate to the Standby tab
  3. Enable Standby mode and configure memory/timeout settings
  4. Save changes - the Actor will start as an HTTP server