publicdata.au

au.publicdataPublished by publicdata.auOfficial publisherv2.49.1Updated Oct 24, 2026

Search, filter, count and sum Australian government open data, with every version kept.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingData & Analytics

Overview

AI-generated overview

A remote MCP server for searching, querying and citing Australian government open datasets, with version history and change diffs.

What you can do
Find served datasets by keyword and read their metadata, licence, attribution and version history, or search the wider Australian government catalogue for datasets not yet served here. Inspect a dataset's fields, types and values, and list download files split by a field such as year. Read filtered rows, or count, sum, average, minimum and maximum rows grouped by up to three fields. Compare two consecutive versions row by row to see what a publisher changed. List and add anonymous votes for datasets people want built.
When to use it
Useful when answering questions from Australian government open data, checking what changed between releases, or pointing someone to a downloadable slice of a dataset. Also suited to ChatGPT deep research and company knowledge style search-and-fetch citation flows.
Requirements
A remote streamable HTTP endpoint; no package, environment variables or headers are declared. No authentication is declared. The README states no credentials are needed to run a working copy.
Before you install
Most tools are read-only, but upvote_dataset adds an anonymous vote that cannot be attributed to you. The site is independent, run by National Digital, and is not run, funded or endorsed by any government agency; each dataset is republished under the publisher's licence with its attribution. Catalogue search results describe data held elsewhere that cannot be queried here.

Installation

In SourceWeft

  1. Open publicdata.au in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/au.publicdata%2Fmcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "publicdata-au": {
      "type": "http",
      "url": "https://publicdata.au/mcp"
    }
  }
}

README

publicdata.au

[CI] [CodeQL] [Deploy] [License: AGPL-3.0-or-later] [Data text: CC BY 4.0] [DCO] [PyPI]

Australian government open data, republished as CSV, Excel, JSON, Parquet, SQLite, DuckDB, GeoJSON and GeoPackage at URLs that never change. Every release the publisher makes becomes a dated version that keeps its content, with its schema, provenance, the publisher's own file and a diff against the release before.

This is an independent site run by National Digital. No government agency runs it, funds it or has endorsed it. Each dataset is republished under the publisher's licence with the attribution that licence asks for.

Contributing

Contributions are welcome from anyone. A dataset from the backlog is one YAML file in register/, and a new file format is one writer in pipeline/publicdata/serialise/writers/. CONTRIBUTING.md has the steps for those and for adapters, fixes and the clients, and publicdata.au/contribute gives the overview. Every dataset page links to the register entry it is built from.

Taking part means agreeing to the Code of Conduct. SUPPORT.md says where to ask for a dataset or for help, and a vulnerability is reported privately as SECURITY.md describes. GOVERNANCE.md says who decides, and AGENTS.md is for coding agents.

Layout

  • register/ one YAML per dataset: source, licence with evidence, attribution, field allow-list, key, partitions, status. Backlog and blocked entries live here too.
  • store/ one manifest per fetched version. Bytes are in R2 and pulled by hash before a build.
  • pipeline/ the Python build: publicdata register validate | fetch | build | gate | split | store pull|push | dist-push | shards | purge.
  • functions/ Cloudflare Pages Functions: votes, requests, saved dashboards, the query API, latest/ redirects, R2 fallback.
  • explorer/ and package.json the explorer's browser libraries, copied into the build.
  • clients/ the packages that call the site from other languages: clients/python is publicdata-au on PyPI and clients/r is publicdataau for CRAN. They take any slug, so a new dataset needs no release.
  • docs/ARCHITECTURE.md the rules that decide the code.
  • docs/CORRECTIONS.md how a fault in a published file is reported and fixed, and the log of every correction.
  • docs/adr/ the decision records behind those rules: what each decided, what was weighed against it and what it costs.
  • docs/ACCESSIBILITY.md the WCAG 2.2 AAA target, what CI enforces and the exceptions.

Run it

CONTRIBUTING.md sets up a working copy, builds the fixtures, fetches a real dataset and walks through the routine changes. No credentials are needed for any of it.

Deploy

.github/workflows/deploy.yml builds, gates, splits, pushes large files to R2 and deploys to the Pages project publicdata-au on every push to main, with a preview per pull request from this repository. Credentials sit in GitHub environments. production, which only main can use, holds the deploy's and the hubs'; preview holds a pull request preview's; fetch, also main only, holds the fetch's and the catalogue's. Each holds a Cloudflare token of its own, and these are the R2 buckets each token can reach:

EnvironmentWorkflowsWritesOnly reads
productiondeploy.yml on mainpublicdata-dist, publicdata-build-cachepublicdata-raw
previewdeploy.yml on a pull requestnonepublicdata-raw, publicdata-dist, publicdata-build-cache
fetchfetch.yml, catalogue.ymlpublicdata-rawnone

The build cache, from which a deploy takes the versions it does not build again, has a bucket of its own, so that only the production deploy can change what the site publishes from it.

.github/workflows/fetch.yml reads every live source each Tuesday and the live feeds every other day, and opens one pull request per government whose sources changed. .github/workflows/catalogue.yml harvests the portals' dataset lists. Some portals turn away cloud addresses, so both run on a runner of our own in Australia. Its runner group admits only those two workflows on main, and they start only on their schedule or when a maintainer runs them. Both open their pull requests as the GitHub App "publicdata.au fetch", whose key is a secret only those environments hold. A ruleset lets only that app create or push data/ branches, so no person can open a pull request as the automation. .github/workflows/data-pr.yml approves those pull requests and nothing else.

Licence

The code is licensed under the GNU Affero General Public License v3.0 or later (LICENSE). If you run a modified copy as a service, you must offer its users the source of your changes. The clients in clients/ are under the MIT licence in each package's LICENSE.

The publicdata.au name and mark are not covered by the code licence; BRAND.md says what a copy must change.

The data is not ours to license. Each dataset is published under its publisher's licence, which its register entry, its manifest and every file name, with the attribution that licence asks for. The text we write for the register is under CC BY 4.0 (LICENSE-DATA.md). Test extracts, the brand typeface and the explorer's libraries are listed in THIRD-PARTY-NOTICES.md; the typeface is RandomMaerks' free package, redistributed under its own licence.

Source: README.md at commit ae7e7d4

Tools

12

search_datasets

Search datasets

Find the slug of a served dataset. Start here for any question about Australian government data, since the other tools read only the datasets this finds. Every word in query must match the title, summary, publisher, keywords or a field name. A word matches its plural and other endings but never as a prefix, so bus does not find business. Up to 50 matches come back in one answer, with no paging. If nothing matches, try fewer or broader words, then search_catalogue. Each call costs one of the 60 queries each address may make in 10 seconds.

Parametersqueryrequired

get_dataset

Read a dataset

Read a served dataset's data package and full version history: licence, attribution, whole-table files and the version dates diff_versions and the version parameter take. It carries no rows. To answer from the rows use query_rows or count_rows, and for field names use list_fields. slug is lowercase letters, digits and hyphens, the part after /d/ in a dataset page URL, such as au-road-deaths. The whole history comes back in one answer, with no paging. It needs no key or sign-in, and costs nothing against the rate limit. A slug that is not served returns a 404 error.

Parametersslugrequired

list_fields

List a dataset's fields

List a served dataset's fields, with their types, descriptions, ranges and values, before querying it. Call it before query_rows or count_rows unless you already know the exact names and values, because where matches values exactly and an unknown field is an error. It also names the key fields diff_versions compares on and the partition fields list_partitions accepts. slug is lowercase letters, digits and hyphens, the part after /d/ in a dataset page URL, such as au-road-deaths. The answer describes the newest version, in one page. The call costs nothing against the rate limit. A slug that is not served or not loaded for queries returns an error.

Parametersslugrequired

list_partitions

List partition files

List the download files that split a served dataset's newest version by one field, such as one file per year. Use it to hand someone a slice of the data as a file. It gives file links and no rows, so to answer a question use query_rows or count_rows instead, and for the whole table as one file use get_dataset. field must be one of the partition_by fields that list_fields names, and any other field returns a 404 error. Every value comes back in one answer, with no paging. The call costs nothing against the rate limit.

Parametersslugrequiredfieldrequired

query_rows

Query rows

Read individual rows of a served dataset, filtered across the whole table. For totals and breakdowns use count_rows, and for files use get_dataset or list_partitions. Field names and values for where, select and order come from list_fields. Filters hold at most 90 values per call, and a list value cannot contain a comma. version can be any date in the version history from get_dataset. A version too large for one file is stored as period parts and answered from them, in period order. A filter on the period field reads only the parts it can match, and parts names the periods read. One page holds up to limit rows, and offset steps through the rest until next_offset is null. An unknown field or version returns an error naming it. Each call costs two of the 60 queries each address may make in 10 seconds.

Parametersslugrequiredlimitorderwhereoffsetselectversion

count_rows

Count and sum rows

Count, sum, average, minimum or maximum rows of a served dataset across the whole table, grouped by up to three fields. For the rows themselves use query_rows. Field names and values for group_by and where come from list_fields. sum and avg need a numeric or true-or-false field. min and max take any field. version can be any date in the version history from get_dataset. A version too large for one file is stored as period parts and answered from them. A filter on the period field reads only the parts it can match, and parts names the periods read. Groups come back largest first, and truncated means raise limit or narrow where. An unknown field or version returns an error naming it. Each call costs two of the 60 queries each address may make in 10 seconds.

Parametersslugrequiredlimitwheremetricversiongroup_by

diff_versions

Compare versions

Compare two consecutive versions of a served dataset row by row on its key fields, to see what a publisher changed between releases. from and to must be adjacent dates in the version history from get_dataset, older first. Any other pair returns a 404 error, so step through a longer span one pair at a time. A dataset with no key, which list_fields shows as an empty key, gets row counts only, and a dataset with one version has nothing to compare. One answer holds the counts of rows added, removed, changed and unchanged, the keys of the rows added, removed and changed, and up to ten changed rows with their old and new values. The call costs nothing against the rate limit.

Parameterstorequiredfromrequiredslugrequired

search_catalogue

Search government portals

Search every dataset listed on Australia's government portals, including the many publicdata.au does not serve yet. Its records describe data held elsewhere, which cannot be queried here. Use it when search_datasets finds nothing, to find where a dataset is published, or to pick one for upvote_dataset. query matches every word against the title, summary and publisher, as search_datasets does. A page holds 20 records, those that can take a vote first. Pass next_offset as offset for the next page, up to 5000. Each call costs three of the 60 queries each address may make in 10 seconds.

Parametersqueryrequiredoffsetjurisdictionvotable_only

list_backlog

List the build backlog

List the datasets people have asked publicdata.au to build, most votes first. Use it to see what is wanted or under way, or to check that a vote counted. To add a vote use upvote_dataset. To read a dataset that is already served use search_datasets. Votes on catalogue records that no entry has claimed yet come back apart, under the vote key search_catalogue uses. The whole backlog comes back in one answer, with no paging, and the call costs nothing against the rate limit.

Takes no parameters.

upvote_dataset

Vote for a dataset

Add one anonymous vote for a government dataset that publicdata.au does not serve yet, so it is built sooner. To read a served dataset use search_datasets, and to see the votes so far use list_backlog. slug is a vote key from search_catalogue, such as act-3u5a-ve4j, or a list_backlog slug. A dataset that is served, being built or closed returns an error saying it is not open for votes. No identity is recorded, so a vote cannot be withdrawn, and a second vote from the same caller on the same day adds nothing. The answer gives the dataset's vote total after this call. The call costs nothing against the rate limit.

Parametersslugrequired

fetch

Fetch a dataset record

Read one served dataset's record as text to quote and cite: its summary, publisher, licence, attribution string, newest version and the URL of that version. It is the fetch that ChatGPT deep research and company knowledge call, with an id from search. It carries no rows. To answer from the data use query_rows or count_rows, and for every version and file use get_dataset. One answer holds the text, with the same facts under metadata. An id that is not served returns an error. The call costs nothing against the rate limit.

Parametersidrequired

Version history

9
  1. v2.49.1LatestOct 23, 2026
  2. v2.44.0Oct 13, 2026
  3. v2.33.0Oct 9, 2026
  4. v2.29.0Oct 9, 2026
  5. v2.23.5Oct 7, 2026
  6. v2.22.1Oct 5, 2026
  7. v2.0.0Sep 30, 2026
  8. v1.20.0Sep 29, 2026
  9. v1.5.0Sep 29, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Publicdata integrations