Gov APIbom.gov.au ↗
Access Bureau of Meteorology weather forecasts for Australian cities. Get multi-day temperature, precipitation, UV index, and location search via 2 endpoints.
What is the Gov API?
The BOM API provides weather forecast data sourced from Australia's Bureau of Meteorology across 2 endpoints. The get_forecast endpoint returns up to 8 days of daily forecasts — including max/min temperatures in Celsius, precipitation probability, UV index, and weather descriptions — for any searchable Australian city. The search_locations endpoint resolves city and suburb names to geocoded location records with state, postcode, and timezone.
curl -X GET 'https://api.parse.bot/scraper/fd5101ce-6a40-4855-966d-758610b61fb0/get_forecast?city=Sydney&days=3' \ -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 bom-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.
"""Walkthrough: Australian BOM Weather API — bounded, re-runnable."""
from parse_apis.australian_weather_forecast_api_bom import BOMWeather, LocationNotFound
client = BOMWeather()
# Search for locations matching "Brisbane"
for loc in client.locations.search(query="Brisbane", limit=3):
print(loc.name, loc.state, loc.latitude, loc.longitude)
# Get a full forecast report for Sydney (3 days)
report = client.forecastreports.get(city="Sydney", days=3)
print(report.location.name, report.location.state, report.days_requested)
# Drill into individual forecasts via a Location's sub-resource
location = client.locations.search(query="Perth", limit=1).first()
if location:
for forecast in location.forecasts.list(days=3, limit=3):
print(forecast.date, forecast.temp_max_celsius, forecast.weather_description)
print(f" Rain chance: {forecast.precipitation.probability_percent}%")
# Handle a location that doesn't exist
try:
bad_report = client.forecastreports.get(city="Nonexistentville")
print(bad_report.location.name)
except LocationNotFound as exc:
print(f"Location not found: {exc.city}")
print("exercised: locations.search / forecastreports.get / location.forecasts.list / LocationNotFound")
Get multi-day weather forecast for an Australian city. Resolves the city name to BOM grid coordinates, then returns daily forecasts including temperature extremes, precipitation probabilities at multiple thresholds, UV index, and a human-readable weather description. Returns up to 8 days. The first day may have a null temp_min_celsius if only part of the day remains.
| Param | Type | Description |
|---|---|---|
| city | string | Australian city name to get forecast for. |
| days | integer | Number of forecast days to return (1 to 8). |
{
"type": "object",
"fields": {
"location": "object containing name, state, postcode, latitude, longitude, and timezone",
"forecasts": "array of daily forecast objects with date, temp_max_celsius, temp_min_celsius, weather_description, precipitation, and uv_index_max",
"days_requested": "integer number of days requested",
"issue_time_utc": "string ISO timestamp of when the forecast was issued"
},
"sample": {
"data": {
"location": {
"name": "Sydney",
"state": "NSW",
"latitude": -33.8593,
"postcode": "2000",
"timezone": "Australia/Sydney",
"longitude": 151.2048
},
"forecasts": [
{
"date": "2026-06-10T14:00:00Z",
"uv_index_max": 2.49,
"precipitation": {
"probability_percent": 73,
"amount_10pct_chance_mm": 7.7,
"amount_25pct_chance_mm": 4.1,
"amount_50pct_chance_mm": 1.3,
"amount_75pct_chance_mm": 0,
"probability_10mm_percent": 6,
"probability_25mm_percent": 0
},
"temp_max_celsius": 20.8,
"temp_min_celsius": null,
"weather_icon_code": 3,
"weather_description": "Mostly sunny"
}
],
"days_requested": 3,
"issue_time_utc": "2026-06-11T06:00:13Z"
},
"status": "success"
}
}About the Gov API
Endpoints and Data Returned
The get_forecast endpoint accepts a city string and an optional days integer (1–8). It returns a location object with name, state, postcode, latitude, longitude, and timezone, alongside a forecasts array. Each forecast entry covers a single date and includes temp_max_celsius, temp_min_celsius, weather_description, precipitation, and uv_index_max. The response also carries an issue_time_utc timestamp indicating when the Bureau published the forecast.
Location Search
The search_locations endpoint accepts a query string and returns a locations array of matching cities, suburbs, and weather stations. Each record includes an id, name, state, postcode, latitude, longitude, and timezone. The total field tells you how many results matched. Use this endpoint to resolve ambiguous city names before calling get_forecast — for example, to distinguish between multiple suburbs sharing the same name across different states.
Coverage and Freshness
Coverage is limited to Australian locations served by the Bureau of Meteorology. The forecast horizon is capped at 8 days, matching what BOM publishes. The issue_time_utc field in the forecast response tells you exactly how fresh the data is, so you can handle caching and staleness in your own application logic.
The Gov API is a managed, monitored endpoint for bom.gov.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bom.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 bom.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?+
- Display a 7-day outlook widget on an Australian travel or event planning site using
temp_max_celsius,temp_min_celsius, andweather_description. - Alert users when precipitation probability crosses a threshold for a chosen city.
- Show UV index warnings for outdoor activity apps targeting Australian users.
- Resolve user-entered suburb names to canonical BOM location IDs before fetching forecasts.
- Feed daily min/max temperature data into a historical logging pipeline for trend analysis.
- Filter sporting event schedules by forecast conditions for venues in specific Australian states.
| 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 the Bureau of Meteorology have an official developer API?+
What does the `forecasts` array in `get_forecast` actually contain per day?+
temp_max_celsius, temp_min_celsius, weather_description, precipitation, and uv_index_max. The array length matches the days_requested value, up to a maximum of 8.Does the API return hourly forecast data?+
get_forecast returns daily-resolution forecasts only. Each day has a single max temperature, min temperature, precipitation value, and UV index. You can fork the API on Parse and revise it to add an hourly forecast endpoint if finer time resolution is needed.Is there any location coverage outside Australia?+
How do I handle cases where a city name matches multiple locations?+
search_locations first. It returns a total count and a locations array that includes state and postcode for each match, letting you present a disambiguation UI or select the correct record before calling get_forecast.