Content
# ausdata-api
**Stop fighting SDMX.** Hosted REST API over Australia's 9 public government data sources, with one auth key and one response envelope.
> The chart you spend 90 minutes building in Excel? One HTTP call.
Live service: https://ausdata.io · OpenAPI: `/openapi.json` · Swagger UI: `/docs` · LLM-agent manifest: `/llms.txt`
> **Docs URL note:** The canonical docs surfaces are the Swagger UI at
> `https://api.ausdata.io/docs` and the LLM-agent discovery manifest at
> `https://api.ausdata.io/llms.txt`. The Fly deployment URL
> `https://ausdata-api.fly.dev` serves the same content and is what
> `flyctl` operates against. The `docs.ausdata.io` subdomain is currently
> unresolved — pending an ops decision to either delete the DNS record
> or CNAME it to `ausdata-api.fly.dev` with a Fly cert. Treat
> `https://api.ausdata.io/docs` as the source of truth.
---
## What this is
`ausdata-api` is the hosted SaaS frontend to a portfolio of free, MIT-licensed Australian data MCPs. Self-hosters can `pip install` any of the 9 sister packages directly; commercial customers can call a managed HTTPS endpoint with normalised auth, attribution, rate limits, and a uniform response envelope.
**Sister packages on PyPI (all MIT, free):**
| Package | Source | Status |
|---|---|---|
| `abs-mcp` | Australian Bureau of Statistics | LIVE |
| `aemo-mcp` | Australian Energy Market Operator | LIVE |
| `aihw-mcp` | Australian Institute of Health and Welfare | LIVE |
| `apra-mcp` | Australian Prudential Regulation Authority | LIVE |
| `asic-mcp` | Australian Securities and Investments Commission | LIVE |
| `ato-mcp` | Australian Taxation Office | LIVE |
| `au-weather-mcp` | Open-Meteo (BOM aggregation) | LIVE |
| `rba-mcp` | Reserve Bank of Australia | LIVE |
| `wgea-mcp` | Workplace Gender Equality Agency | LIVE |
| `aus-identity` | ABN / postcode / ASGS resolution helper | LIVE |
---
## Pricing
| Tier | Price | Monthly calls | Webhooks | Attribution |
|---|---|---|---|---|
| **Free** | $0 | 500 | yes | always returned |
| **Analyst** | $29/mo | 10,000 | yes | always returned |
| **Pro** | $99/mo | 100,000 | yes | always returned |
| **Enterprise** | custom | unlimited | yes | always returned |
Every tier returns CC-BY attribution in `meta.sources[]` (never gated). History
is uncapped on every tier. Per-minute cap is a flat 100/min across all tiers.
Pricing details at https://ausdata.io/pricing.
---
## Get started
```bash
# Sign up at https://ausdata.io and copy your API key (starts with ak_)
export AUSDATA_KEY=ak_xxx
# Real wages: WPI minus CPI, the chart Greg Jericho builds weekly
curl -H "Authorization: Bearer $AUSDATA_KEY" \
"https://api.ausdata.io/v1/real-wages?start=2019-Q1&seasonal_adjustment=trend"
# Five-source economic snapshot
curl -H "Authorization: Bearer $AUSDATA_KEY" \
"https://api.ausdata.io/v1/economic-dashboard"
# Search 84+ curated datasets across 9 sources
curl -H "Authorization: Bearer $AUSDATA_KEY" \
"https://api.ausdata.io/v1/search-datasets?q=unemployment+nsw"
```
---
## Endpoints (v1)
23 v1 endpoints live. See [`/openapi.json`](https://api.ausdata.io/openapi.json),
[Swagger UI](https://api.ausdata.io/docs), and the LLM-agent manifest at
[`/llms.txt`](https://api.ausdata.io/llms.txt) for the full list.
Highlights:
| Endpoint | Purpose | Auth |
|---|---|---|
| `GET /v1/health` | Service status | public |
| `GET /v1/status` | Detailed per-upstream status + 24h metrics | public |
| `POST /v1/register` | Free-tier signup, returns API key | public |
| `GET /v1/search-datasets` | Fan-out search across all 9 sources | key |
| `GET /v1/data/{source}/{dataset_id}` | Generic data fetch | key |
| `GET /v1/describe/{source}/{dataset_id}` | Schema + filter docs | key |
| `GET /v1/datasets` / `/v1/datasets/{source}` | Catalogue | key |
| `GET /v1/real-wages` | WPI minus CPI quarterly series | key |
| `GET /v1/real-cash-rate` | RBA cash rate minus ABS CPI | key |
| `GET /v1/economic-dashboard` | Five-source macro snapshot | key |
| `GET /v1/cost-of-living` | 11-group CPI_MONTHLY breakdown | key |
| `GET /v1/trade-balance` | ABS ITGS exports / imports | key |
| `GET /v1/youth-unemployment` | LF + LF_AGE comparison | key |
| `GET /v1/housing-affordability` | Mean dwelling value / median income ratio | key |
| `GET /v1/gender-pay-context` | WGEA-derived | key |
| `GET /v1/energy-snapshot` | AEMO spot prices | key |
| `GET /v1/releases` | Upcoming ABS/RBA release calendar | key |
| `GET /v1/weather/{location}` | Open-Meteo (BOM aggregation) | key |
| `GET /v1/whoami` | Caller tier, usage, key prefix | key |
| `GET/POST /v1/account/api-key` | Read or rotate API key | JWT |
| `POST/GET/DELETE /v1/webhooks` | Webhook subscription management | key |
| `POST /webhook/stripe` | Inbound billing events | Stripe |
---
## Self-host vs hosted
You CAN self-host the sister MCPs:
```bash
uvx --from abs-mcp abs-mcp # ABS data, free, MIT
uvx --from rba-mcp rba-mcp # RBA data, free, MIT
# ... 7 more
```
You'll pay for hosted (`ausdata.io`) when you need:
- A single REST surface with one auth key, not 9 separate MCP servers
- Cross-source endpoints (`/real-wages`, `/economic-dashboard`) that aren't possible on a single sister
- Operational features: 99.95% uptime SLA, status page, pre-warmed cache, webhook notifications
The free public sisters and the hosted API are complementary, not competitors — the free sisters are the brand-building / discovery surface; the hosted API is the commercial product.
---
## License
This backend (`ausdata-api`) is **FSL-1.1-MIT** — Functional Source License with a 2-year MIT conversion. See [LICENSE](./LICENSE) for full terms.
**Plain-English summary:**
- You CAN read, modify, fork, use internally, contribute, deploy for personal / research / non-commercial use.
- You CAN'T offer a competing hosted service from this code while the FSL term is active.
- 2 years after first release (so by 2028-05-16), the license auto-converts to MIT and all restrictions drop.
This isn't a "source available" trick — your fork is permanent MIT once the change date hits, retroactive to all prior releases. The 2-year window protects the commercial moat while we build customer trust.
The 9 sister MCP packages remain plain MIT — fork freely.
---
## Local development
```bash
git clone https://github.com/Bigred97/ausdata-api.git
cd ausdata-api
# Install (uses uv)
uv sync --extra dev
# Copy and edit env vars
cp .env.example .env
# Fill in SUPABASE_URL, SUPABASE_JWKS_URL, STRIPE_* (Stripe optional for local dev)
# Run
uv run uvicorn ausdata_api.main:app --reload --port 8080
# Test
uv run pytest
# Lint
uv run ruff check src tests
# Build
uv build
```
OpenAPI / Swagger UI at http://localhost:8080/docs once running.
---
## Deploy (Fly.io, Sydney)
```bash
# First time only
fly launch --no-deploy
# Set secrets
fly secrets set \
SUPABASE_URL=... \
SUPABASE_JWKS_URL=... \
STRIPE_SECRET_KEY=... \
STRIPE_WEBHOOK_SECRET=... \
API_KEY_HASH_SECRET="$(python -c 'import secrets; print(secrets.token_urlsafe(64))')"
# Deploy
fly deploy
```
The `fly.toml` pins region to Sydney (`syd`), health-checks `/v1/health`, and auto-scales between 1 and N machines.
---
## Publishing this repo to GitHub
This scaffold lives locally first. When you're ready:
```bash
cd ausdata-api
gh repo create Bigred97/ausdata-api --public --source=. --remote=origin --push
```
That command creates a public GitHub repo and pushes the local commits. The FSL license file at the root protects against competing hosted services from the moment the code is public.
---
## Status
`0.6.61` — LIVE at `https://api.ausdata.io` (Fly deployment: `https://ausdata-api.fly.dev`). 23 v1 endpoints, Supabase JWT
+ API key auth, SQLite on `/data` volume, Fly.io Sydney region, Stripe billing
wired, Resend transactional email, 700+ unit tests.
---
## The ausdata.io ecosystem
This hosted API composes a family of free, public MCP servers:
- **Sister MCPs** (free, MIT): [abs](https://github.com/Bigred97/abs-mcp) · [rba](https://github.com/Bigred97/rba-mcp) · [ato](https://github.com/Bigred97/ato-mcp) · [apra](https://github.com/Bigred97/apra-mcp) · [aihw](https://github.com/Bigred97/aihw-mcp) · [asic](https://github.com/Bigred97/asic-mcp) · [aemo](https://github.com/Bigred97/aemo-mcp) · [au-weather](https://github.com/Bigred97/au-weather-mcp) · [wgea](https://github.com/Bigred97/wgea-mcp)
- **Hosted API + cross-source endpoints**: [ausdata.io](https://ausdata.io)
- **Python SDK**: `pip install ausdataio` · **Node MCP**: `npx -y ausdata-mcp`
Connection Info
You Might Also Like
ai-native-pm-os
The exhaustive guide to mastering Claude for Product Managers. Build your...
Train-in-Silence
The first Task-Aware MCP server and automated VRAM calculator for LLM...
stacklit
108,000 lines of code. 4,000 tokens of index. One command makes any repo...
AppClaw
AI-powered mobile automation agent — describe what you want in plain...
pdf-mcp
Production-ready MCP server for PDF processing with intelligent caching....
kotadb
Local-only code intelligence API for AI developer workflows (Bun +...