Gov APIenergymadeeasy.gov.au ↗
Look up Australian energy plan details and search delivery area locations by postcode using the Energy Made Easy API. Two endpoints, real-time data.
What is the Gov API?
This API provides two endpoints for querying data from energymadeeasy.gov.au, Australia's government energy comparison service. Use get_plan_details to retrieve plan name, retailer, fuel type, distributor, customer type, and availability for a specific plan ID and postcode, or use search_locations to return all suburbs and localities within a given postcode with latitude and longitude coordinates.
curl -X GET 'https://api.parse.bot/scraper/695ab257-1fe4-456c-8c28-170f7d081267/get_plan_details?plan_id=RED552165MRE&postcode=2000' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace energymadeeasy-gov-au-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Energy Made Easy API — look up energy plans and search delivery locations."""
from parse_apis.energy_made_easy_plan_api import EnergyMadeEasy, FuelType, PlanNotFound
client = EnergyMadeEasy()
# Search locations in a postcode — single-page list, capped for safety.
for loc in client.locations.search(postcode="2000", limit=5):
print(loc.location, loc.state, loc.latitude, loc.longitude)
# Get a specific energy plan with availability check for a postcode.
plan = client.plans.get(plan_id="RED552165MRE", postcode="2560")
print(plan.plan_name, plan.retailer_name, plan.fuel_type, plan.availability)
# Typed error handling — plan ID that doesn't exist.
try:
client.plans.get(plan_id="NONEXISTENT999ZZZ")
except PlanNotFound as exc:
print(f"Plan not found: {exc.plan_id}")
print("exercised: locations.search / plans.get / PlanNotFound error handling")
Retrieve a single energy plan by its plan ID. Returns plan metadata (name, retailer, fuel type, distributor, status, effective date) and checks whether the plan is available in the given postcode. The postcode param controls availability lookup only — the plan data itself is returned regardless.
| Param | Type | Description |
|---|---|---|
| plan_idrequired | string | The energy plan identifier (alphanumeric code such as RED552165MRE) |
| postcode | string | Australian 4-digit postcode to check plan availability against |
{
"type": "object",
"fields": {
"state": "string - Australian state abbreviation",
"plan_id": "string - the plan ID queried",
"postcode": "string - the postcode checked for availability",
"fuel_type": "string - fuel type code (E for electricity, G for gas)",
"plan_name": "string - name of the energy plan",
"plan_type": "string - plan type code (M for market)",
"distributor": "string - electricity distributor name",
"plan_status": "string - publication status (e.g. PUBLISHED)",
"availability": "string - either 'available' or 'not available in this postcode'",
"customer_type": "string - customer type code (R for residential)",
"retailer_code": "string - short code for the retailer",
"retailer_name": "string - full name of the retailer",
"effective_date": "string - plan effective date in YYYY-MM-DD format"
},
"sample": {
"data": {
"state": "NSW",
"plan_id": "RED552165MRE",
"postcode": "2000",
"fuel_type": "E",
"plan_name": "Living Energy Saver",
"plan_type": "M",
"distributor": "Endeavour",
"plan_status": "PUBLISHED",
"availability": "not available in this postcode",
"customer_type": "R",
"retailer_code": "RED",
"retailer_name": "Red Energy",
"effective_date": "2025-07-29"
},
"status": "success"
}
}About the Gov API
Plan Details
The get_plan_details endpoint accepts a plan_id (required) and an optional postcode. It returns 10 fields covering the plan's identity and context: plan_name, plan_id, fuel_type (E for electricity, G for gas), plan_type (M for market), plan_status (e.g. PUBLISHED), customer_type (R for residential), distributor, state, postcode, and an availability field that resolves to either 'available' or 'not available in this postcode'. When a postcode is omitted, availability and distributor context may not reflect a specific service area.
Location Search
The search_locations endpoint takes a single required postcode parameter and returns a count integer alongside a locations array. Each location object includes a unique id, a human-readable location name, the postcode, state, and precise latitude/longitude coordinates. This is useful for validating postcodes, mapping delivery areas, or building location pickers before querying plan availability.
Data Scope and Codes
Both endpoints cover the plans and geographic areas listed on energymadeeasy.gov.au, which is administered by the Australian Energy Regulator. Fuel type codes (E, G), plan type codes (M), and customer type codes (R) follow the site's own classification scheme. The API does not return tariff rates, usage charges, or contract terms — it surfaces plan identity and geographic availability data.
The Gov API is a managed, monitored endpoint for energymadeeasy.gov.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when energymadeeasy.gov.au changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official energymadeeasy.gov.au API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Check whether a specific energy plan is available in a given Australian postcode before presenting it to a user.
- Populate a postcode-to-suburb lookup for an Australian energy comparison tool using
search_locationscoordinates. - Filter energy plans by fuel type code (E or G) to display only electricity or gas options.
- Identify the electricity distributor for a plan to route customers to the correct network operator.
- Validate Australian postcodes and retrieve their associated state and locality names.
- Build a map of energy plan delivery areas using the latitude and longitude fields returned per location.
- Monitor plan publication status to detect when plans move to or from PUBLISHED state.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does energymadeeasy.gov.au have an official developer API?+
What does the `availability` field in `get_plan_details` actually tell me?+
'available' or 'not available in this postcode'. This reflects whether the queried plan is offered in the postcode you pass. If you omit the postcode parameter, the availability field will not reflect a specific service area, so passing a postcode is recommended for accurate results.Does the API return tariff rates, usage charges, or contract terms for energy plans?+
get_plan_details endpoint returns plan identity fields — name, fuel type, distributor, customer type, plan status, and postcode availability — but does not include pricing, tariff structures, or contract conditions. You can fork this API on Parse and revise it to add an endpoint that retrieves pricing and terms data for a given plan.Can I search for plans by suburb name rather than postcode?+
search_locations returns suburb and locality names within a postcode, and get_plan_details checks availability against a postcode. You can fork this API on Parse and revise it to add a suburb-name lookup that resolves to a postcode before querying plan data.