---
name: publicdata-au
description: Use when a question needs Australian government open data. It finds a dataset on publicdata.au, reads its rows through the MCP server, the query API or the files, and cites the publisher's attribution with the dated version the answer came from.
---

# Using publicdata.au

Australian government open data republished as CSV, Excel, JSON, Parquet, SQLite, DuckDB, GeoJSON and GeoPackage at URLs that never change. Every release is a dated version that keeps its content, with schema, provenance and a diff. Run by National Digital. No government agency has endorsed it.

## With the MCP server

`https://publicdata.au/mcp` is a remote MCP server over Streamable HTTP with the same tools, defined in the same place, so a tool added to the pages is added here too. It needs no key and no account. Its row tools and the query API answer every version through one query path, so a tool's answer and the query URL it cites give the same rows. A query that would read too much of a file is refused with DuckDB SQL that answers it from the file. It also has `search` and `fetch`, the two tools ChatGPT's deep research and company knowledge call by name, which run search_datasets and read a dataset's record in the shapes those features expect. The row tools are held to the query API's limit of 60 queries in 10 seconds from one address, and each call is two queries because it also counts the matching rows. Add it to Claude Code with `claude mcp add --transport http publicdata https://publicdata.au/mcp`, add the URL in Claude as a custom connector, connect the publicdata.au plugin in ChatGPT, or give it to any client that connects to remote MCP servers. Each dataset with a table is also a resource at `https://publicdata.au/d/<slug>/fields.json`, which lists its fields with their types, the publisher's descriptions, their ranges and the values they hold, so an agent can read a dataset's shape before it writes a query.

Australian government open data, republished at URLs that never change. Find a dataset with search_datasets, read its fields with list_fields, then answer from the whole table with query_rows or count_rows. A dataset that is not served yet can be found with search_catalogue and voted for with upvote_dataset. Every answer names the version it came from and the publisher's attribution string. When you show the data to a person, use the attribution string, say it came from publicdata.au and link to the version the answer came from, https://publicdata.au/d/<slug>/v/<version>/. Use of this server is under https://publicdata.au/terms/.

## With the files and the query API

No keys or accounts, and no download limit on files. The API allows 60 requests in 10 seconds from one address. Above that it answers 429 for 10 seconds with a `Retry-After` header, a `RateLimit-Policy` header and a JSON body that gives the limit. Every API answer carries the same `RateLimit-Policy`. A client should wait the `Retry-After` seconds, or read the files, which have no limit. `latest/` redirects (302) to the newest dated version; dated versions keep their content. Every JSON, NDJSON, GeoJSON, Parquet and SQLite file carries a `publicdata` header with the publisher, licence, attribution, a ready-made `cite` string and the source SHA-256. A cell the publisher suppressed, such as "<5", is null, and the row's `suppressed` field names each field suppressed in that row. Report such a value as withheld by the publisher. When you show the data to a person, use the attribution string, say the file came from publicdata.au and link to the version URL.

Query API: https://publicdata.au/api/v1/datasets/<slug>/rows?field=eq.value&select=a,b&order=a.desc&limit=100, https://publicdata.au/api/v1/datasets/<slug>/aggregate?group=field&metric=count,sum.field, and the same under /versions/<date>/ for an answer from that dated version alone; every version with a table is listed at https://publicdata.au/api/v1/datasets/<slug>/versions. Each filter is `field=operator.value` in the query string, and every filter must match. A number or date field compares as a number or date, and a text field compares as text. Values are case-sensitive, except that `like` and `ilike` ignore case in the ASCII letters A to Z. Prefix `not.` to negate a filter, as `not.eq.value`. Operators: `eq.value`, `neq.value`, `gt.value`, `gte.value`, `lt.value`, `lte.value`, `like.*text*`, `ilike.*text*`, `in.(a,b,c)`, `is.null`.

Every live dataset is listed in https://publicdata.au/llms.txt with its latest download URLs, and https://publicdata.au/llms-full.txt adds each field. https://publicdata.au/catalog.json is the same list as a DCAT catalogue.
