{
  "openapi": "3.0.1",
  "info": {
    "title": "Fuel Price Scraper - Petrol Prices & Stations AU/NZ",
    "description": "Scrape current petrol and fuel prices across Australia and New Zealand. Search by address or GPS coordinates to find nearby fuel stations, compare prices and collect station locations and fuel price data.",
    "version": "0.1",
    "x-build-id": "5iMNVZpqvCHyg0RFy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~fuel-prices-anz-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-fuel-prices-anz-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/abotapi~fuel-prices-anz-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-fuel-prices-anz-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/abotapi~fuel-prices-anz-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-fuel-prices-anz-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "suburb": {
            "title": "Suburb or City",
            "type": "string",
            "description": "Suburb or city name to search (e.g., 'Sydney', 'Melbourne', 'Auckland', 'Wellington'). You can also use postcode (e.g., '2000', '3168').",
            "default": "Sydney"
          },
          "lat": {
            "title": "Latitude",
            "type": "number",
            "description": "Latitude coordinate (optional - use instead of suburb). Clear Suburb, or leave it at its default, to search by coordinates."
          },
          "lng": {
            "title": "Longitude",
            "type": "number",
            "description": "Longitude coordinate (use with latitude)"
          },
          "latitude": {
            "title": "Latitude (alias)",
            "type": "number",
            "description": "Alias of Latitude, for callers that use the longer field names. Used only when Latitude is empty."
          },
          "longitude": {
            "title": "Longitude (alias)",
            "type": "number",
            "description": "Alias of Longitude. Used only when Longitude is empty."
          },
          "searchMode": {
            "title": "Search mode",
            "enum": [
              "location",
              "startUrls"
            ],
            "type": "string",
            "description": "'Location' searches by suburb or coordinates above. 'Start URLs' searches the map URLs listed below instead (map location or latlng URLs of the source site).",
            "default": "location"
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Map URLs, either a location page (https://petrolspy.com.au/map/location/au/nsw/2000/sydney) or a coordinate page (https://petrolspy.com.au/map/latlng/-33.8688/151.2093). Only used when Search mode is Start URLs.",
            "default": [
              {
                "url": "https://petrolspy.com.au/map/location/au/nsw/2000/sydney"
              },
              {
                "url": "https://petrolspy.com.au/map/latlng/-33.8688/151.2093"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "radiusKm": {
            "title": "Search Radius (km)",
            "minimum": 1,
            "maximum": 50,
            "type": "number",
            "description": "Search radius in kilometers from the center point (1 to 50). A very large area is fetched in parts automatically.",
            "default": 5
          },
          "fuelType": {
            "title": "Fuel Type Filter",
            "enum": [
              "",
              "U91",
              "E10",
              "U95",
              "U98",
              "Diesel",
              "LPG"
            ],
            "type": "string",
            "description": "Optional. Does not remove any station: it picks which fuel the 'cheapest' highlight in the OUTPUT record is computed for, and which fuel 'Sort by: price' uses (default U91). Leave empty for all fuels."
          },
          "brands": {
            "title": "Brands (optional)",
            "type": "array",
            "description": "Only return stations of these brands (case-insensitive exact match on the brand, e.g. BP, Shell, Caltex). Empty returns all brands.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "",
              "price",
              "distance",
              "name"
            ],
            "type": "string",
            "description": "Order of the returned stations. 'price' sorts by the Fuel Type filter (U91 when empty), stations without that price go last. 'distance' is from the search centre. Empty keeps the source order.",
            "default": ""
          },
          "sortOrder": {
            "title": "Sort order",
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Ascending or descending. Only used with Sort by.",
            "default": "asc"
          },
          "maxItems": {
            "title": "Max stations",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of stations returned across the whole run, applied after brands and sorting. 0 uses the largest allowed value (100000).",
            "default": 1000
          },
          "proxy": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy configuration for requests. Disabled by default as the site blocks most proxies.",
            "default": {
              "useApifyProxy": false
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to seed Incremental mode's baseline from it, so stations already in that dataset don't look NEW again on this actor's first incremental run. This actor's search is a single request with no pagination, so there is nothing to resume mid-crawl — this field only has an effect together with Incremental mode below, and only when that state key has no saved baseline yet."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring of the same search. The first run returns all matching stations as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED stations — a station whose prices and details are unchanged since the last run is not returned (and not billed). Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those stations returned. State is kept separately per suburb/coordinates, radius, and fuel type filter; use State key to name or deliberately share a monitoring campaign. Compared fields: every output field of a station, including each fuel price and its price timestamp (prices.*.price, prices.*.updatedAt), name, brand, location, hours and flags; a field flipping to or from empty is not counted. Excluded: nothing by default; add your own with Ignore fields when detecting changes. To bootstrap the very first baseline from an existing run instead of starting fresh, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the suburb/coordinates, radius, and fuel type — different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged stations (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return stations that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired stations (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return stations that were present in a previous run but are no longer found in the search area, marked EXPIRED. This returns — and bills — extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Optional. Field names to leave out of UPDATED change detection (they are still returned in the output). Supports nested paths such as prices.U91.reportedBy, and * as a wildcard key, e.g. prices.*.reportedBy. By default nothing is ignored: price, price timestamp, location, name, brand, hours and every other field count as a change.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}