Station details and attribution
Source priority, optional provider data and unknown station information.
FuelWatch supplies the price and source station identity. Normalization gives contact details, opening hours, features and restrictions consistent shapes. Optional Google Maps enrichment can add information, but public requests never contact Google.
Source priority
| Field | Behavior |
|---|---|
| Price, name, trading name, brand, street, suburb, coordinates | FuelWatch values remain authoritative. Google does not replace them. |
| Postcode | A confident provider match can fill a missing postcode. |
| Phone | A valid provider number fills a missing source value. An explicitly invalid or ambiguous FuelWatch number blocks replacement. |
| Site features | Known provider facilities can add to the controlled FuelWatch feature list. |
| Opening hours | FuelWatch wins for each supplied weekday, including explicit closed days. Provider hours can fill missing days. |
| Restrictions | Normalized from FuelWatch; provider data does not invent restrictions. |
Missing values are not evidence of absence. is24Hours=null means unknown. An empty feature array means no recognized features were supplied.
Phone numbers
Phones are valid E.164 numbers or null. Australian numbers are interpreted with the Australian default region. If a supplied source value is invalid, includes multiple numbers or cannot be represented safely, the original is retained in sourceNotes.phone instead of guessing.
Opening hours
Schedules use local AWST weekday names and HH:mm-HH:mm intervals. Split shifts are comma-separated; Closed means explicitly closed. A closing time before the opening time denotes the next day. 24:00 is permitted only as a closing boundary. Unknown days are omitted.
The production example below includes Costco Perth Airport's complete seven-day schedule, with different Saturday and Sunday hours.
Confirmed 24-hour stations have is24Hours=true and omit openHours. Invalid source schedules remain in sourceNotes.openHours and block provider replacement. A confirmed source 24-hour schedule cannot be narrowed by Google.
Enrichment provenance
enrichment appears only when provider fields actually contribute to the result. Its fields array identifies those fields; fetchedAt and stale describe provider freshness. provider is Google Maps, alongside placeId, googleMapsUri and third-party attributions.
Retain this attribution when displaying the provider's fields. See the Google Places attribution guidance.
In this real capture, Google contributed address.postcode and siteFeatures. The phone and opening hours are present but are not listed as provider contributions. attributions was an empty array in the response; the provider, placeId and googleMapsUri fields are preserved.
All references expanded, with enrichment
Captured 2026-09-30T11:42:42.891+08:00 (AWST) · HTTP 200. Historical snapshot; repeat the request for current data.
curl 'https://fuelwatch.oss.bhodges.me/v1?brand=32&suburb=PERTH%20AIRPORT&surrounding=no&expand=all' \
-H 'Accept: application/vnd.api+json'{
"jsonapi": {
"version": "1.1"
},
"meta": {
"source": "fuelwatch.wa.gov.au",
"products": [
1,
2,
4,
5,
6,
10,
11
],
"sourceDate": "2026-09-30",
"fetchedAt": "2026-09-30T11:00:52.278+08:00",
"validFrom": "2026-09-30T06:00:00.000+08:00",
"validUntil": "2026-10-01T06:00:00.000+08:00",
"publicationStatus": "available",
"copyright": "Copyright 2025 Department of Local Government, Industry Regulation and Safety (source data); Copyright 2026 Bradley Hodges (api). All rights reserved.",
"documentation": "https://docs.fuelwatch.oss.bhodges.me",
"issues": "https://github.com/bradleyhodges/fuelwatch-api/issues",
"version": "4.30.1"
},
"data": [
{
"type": "serviceStation",
"id": "2026-09-30:dca78516464d85042c12eab0fd45d71665adc32b578908bc8444f29201d02ba7",
"attributes": {
"name": "Costco Perth Airport",
"tradingName": "Costco Perth Airport",
"brand": {
"code": 32,
"name": "Costco",
"logo": "/static/image/brand/costco.svg"
},
"price": {
"asAt": "2026-09-30T06:00:00.000+08:00",
"products": {
"1": 218.7,
"6": 242.7,
"11": 264.7
}
},
"address": {
"street": "142 Dunreath Dr",
"suburb": "PERTH AIRPORT",
"state": "WA",
"postcode": "6105"
},
"is24Hours": false,
"phone": "+61893114700",
"latitude": -31.940377,
"longitude": 115.951869,
"siteFeatures": [
{
"code": 8,
"name": "EFTPOS"
},
{
"code": 1,
"name": "Credit Cards"
},
{
"code": 2,
"name": "Debit Cards"
}
],
"restrictions": [
{
"code": 3,
"name": "Membership Required"
}
],
"enrichment": {
"provider": "Google Maps",
"placeId": "ChIJw1UkrSm5MioRiEMGrwrsOUI",
"fetchedAt": "2026-09-29T18:36:18.295+08:00",
"stale": false,
"fields": [
"address.postcode",
"siteFeatures"
],
"googleMapsUri": "https://www.google.com/maps/search/?api=1&query=Costco%20Perth%20Airport&query_place_id=ChIJw1UkrSm5MioRiEMGrwrsOUI",
"attributions": []
},
"openHours": {
"Monday": "06:00-21:30",
"Tuesday": "06:00-21:30",
"Wednesday": "06:00-21:30",
"Thursday": "06:00-21:30",
"Friday": "06:00-21:30",
"Saturday": "06:00-19:30",
"Sunday": "07:00-19:00"
}
}
}
]
}Provider lookups run independently of price refreshes. Missing configuration, exhausted budget, no confident match, expired data or an unavailable enrichment database can all produce FuelWatch-only responses. A 200 does not imply that every station has enrichment.
Provider data can be served after its refresh deadline with stale=true, but never at 30 days old or older. At the configured 30-day refresh interval there is no stale grace period. Cached rendered responses can delay the appearance of newly stored enrichment, subject to their own bounded lifetime.
A response without enrichment
This exact-suburb selection returned Billabong Roadhouse and Billabong Homestead Hotel Motel. Both records are included in full. They have FuelWatch opening hours, but no enrichment object, no known postcode or phone, empty feature arrays and null restrictions. Consumers must accept this alongside enriched stations.
FuelWatch-only stations with unknown details
Captured 2026-09-30T11:42:44.305+08:00 (AWST) · HTTP 200. Historical snapshot; repeat the request for current data.
curl 'https://fuelwatch.oss.bhodges.me/v1?brand=15&suburb=MEADOW&surrounding=no' \
-H 'Accept: application/vnd.api+json'{
"jsonapi": {
"version": "1.1"
},
"meta": {
"source": "fuelwatch.wa.gov.au",
"products": [
1,
2,
4,
5,
6,
10,
11
],
"sourceDate": "2026-09-30",
"fetchedAt": "2026-09-30T11:00:52.278+08:00",
"validFrom": "2026-09-30T06:00:00.000+08:00",
"validUntil": "2026-10-01T06:00:00.000+08:00",
"publicationStatus": "available",
"copyright": "Copyright 2025 Department of Local Government, Industry Regulation and Safety (source data); Copyright 2026 Bradley Hodges (api). All rights reserved.",
"documentation": "https://docs.fuelwatch.oss.bhodges.me",
"issues": "https://github.com/bradleyhodges/fuelwatch-api/issues",
"version": "4.30.1"
},
"data": [
{
"type": "serviceStation",
"id": "2026-09-30:319621520a443f7357aec2b6e23441ef7309cc0e4bc2a5b45786f4573e8395fe",
"attributes": {
"name": "Billabong Roadhouse",
"tradingName": "Billabong Roadhouse",
"brand": 15,
"price": {
"asAt": "2026-09-30T06:00:00.000+08:00",
"products": {
"1": 195,
"4": 279.9,
"6": 195
}
},
"address": {
"street": "Lot 2 North West Coastal Hwy",
"suburb": "MEADOW",
"state": "WA",
"postcode": null
},
"is24Hours": false,
"phone": null,
"latitude": -26.816033,
"longitude": 114.614261,
"siteFeatures": [],
"restrictions": null,
"openHours": {
"Monday": "06:00-20:30",
"Tuesday": "06:00-20:30",
"Wednesday": "06:00-20:30",
"Thursday": "06:00-20:30",
"Friday": "06:00-20:30",
"Saturday": "06:00-20:30",
"Sunday": "06:00-20:30"
}
}
},
{
"type": "serviceStation",
"id": "2026-09-30:dc03c54421a654d3210602e20d38fc639d9fff0d8fa0b6e10f22f57d4d5601bb",
"attributes": {
"name": "Billabong Homestead Hotel Motel",
"tradingName": "Billabong Homestead Hotel Motel",
"brand": 15,
"price": {
"asAt": "2026-09-30T06:00:00.000+08:00",
"products": {
"1": 268.9,
"4": 282.9,
"6": 288.9
}
},
"address": {
"street": "23253 North West Coast Hwy",
"suburb": "MEADOW",
"state": "WA",
"postcode": null
},
"is24Hours": false,
"phone": null,
"latitude": -26.81714685,
"longitude": 114.6146351,
"siteFeatures": [],
"restrictions": null,
"openHours": {
"Monday": "06:00-21:00",
"Tuesday": "06:00-21:00",
"Wednesday": "06:00-21:00",
"Thursday": "06:00-21:00",
"Friday": "06:00-21:00",
"Saturday": "06:00-21:00",
"Sunday": "06:00-21:00"
}
}
}
]
}Unknown source text
sourceNotes retains unclassified brand, feature, restriction, phone and opening-hour text. These are optional troubleshooting/display fields, not additional controlled codes. Treat them as untrusted text when rendering HTML, and do not parse them as a stable machine vocabulary.
Matching uses name, location, address and brand evidence; ambiguous candidates are rejected. A successful web search alone does not establish that two station records refer to the same physical site.