# Australia Open Data Studio — Gov Data Joins (`subimpact/au-open-data-studio`) Actor

Value layer on Australia's official open data API (data.gov.au): 6 cross-dataset join presets (Energy & Climate, Material Consumption, Innovation & Industry, Tourism & Aid, Society & Road Safety, Threatened Species) + custom joins, CSV/JSON/XLSX delivery, AI-ready output with CC BY 4.0 attribution.

- **URL**: https://apify.com/subimpact/au-open-data-studio.md
- **Developed by:** [subimpact](https://apify.com/subimpact) (community)
- **Categories:** AI, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 joined pulls

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Australia Open Data Studio — Gov Data Joins

Join Australia's official open data into clean CSV/JSON/XLSX with AI-ready output and attribution.

Sister actor to [my-open-data-studio](https://apify.com/subimpact/my-open-data-studio) and [sg-open-data-studio](https://apify.com/subimpact/sg-open-data-studio) — same value-layer engine, Australia data source (data.gov.au).

### Why this exists

Every preset pulls multiple official data.gov.au datasets, aligns them on a common key (year), and delivers one flat joined file. Raw APIs can't do this — that's the value layer.

### Presets

- **A1 — Energy & Climate by Year**: Renewable energy share × energy intensity × CO2 emissions per capita (SDG indicators), 1990–2015.
- **A2 — Material Consumption by Year**: Domestic material consumption total × per capita by material category (biomass, fossil fuels, metal ores, non-metallic minerals), 1970–2017.
- **A3 — Innovation & Industry by Year**: R\&D expenditure % GDP × manufacturing value-added % GDP × manufacturing employment share, 1981–2015.
- **A4 — Tourism & Aid by Year**: Tourism direct GDP share × net ODA % GNI, 2000–2016.
- **A5 — Society & Road Safety by Year**: Road fatalities per 100k × youth not in education (NEET), 2000–2017.
- **A6 — Threatened Species by Year**: Species listed under the EPBC Act by taxonomic group (flora, birds, mammals, fish, reptiles, frogs), 2000–2020.

### Custom joins

Choose `preset=custom` and supply your own data.gov.au datastore resource ids (UUIDs), key columns, optional filters, and aggregation. The engine probes each dataset and guesses numeric fields if you don't specify them.

### Input

| Field | Default | Description |
|---|---|---|
| preset | A1 | A1-A6 or custom |
| format | json | json, csv, xlsx |
| customDatasets | \[] | resource ids for custom joins |
| customKey | year | key column for custom joins |
| webhookUrl | "" | POST the joined file to a webhook |

### Output

- `{preset}_join.{json,csv,xlsx}` — the joined file
- `{preset}_attribution.json` — source/licence metadata
- `{preset}_ai_ready.json` — JSON Schema + data dictionary + sample rows for LLM/RAG ingestion
- `{preset}_verification.json` — row counts per source, join stats, year range

### Source

[data.gov.au](https://data.gov.au) — Australia's official open data portal. Datasets are licensed under CC BY 4.0 unless otherwise stated on the source record; attribution is attached to every output.

data.gov.au's public API is keyless. The actor paces its fetches within a comfortable rate; large datasets take longer but never fail on rate limits.

# Actor input Schema

## `mode` (type: `string`):

studio = value layer (presets, joins, AI-ready package). extract = raw data pull of 1-5 datasets by ID (cheaper per-pull event).

## `datasetIds` (type: `array`):

For mode=extract: list of data.gov.au datastore resource ids (UUIDs) to pull raw (1-5). Leave empty to use studio mode.

## `preset` (type: `string`):

Join bundle. A1 = Energy & Climate by Year. A2 = Material Consumption by Year. A3 = Innovation & Industry by Year. A4 = Tourism & Aid by Year. A5 = Society & Road Safety by Year. A6 = Threatened Species by Year. custom = bring your own dataset ids.

## `customDatasets` (type: `array`):

For preset=custom: list of data.gov.au datastore resource ids (UUIDs) to join (2-6). Leave empty to use a preset.

## `customKey` (type: `array`):

For preset=custom: key parts to join on. Use 'year' (auto-extracted from year/Calendar year/Date/FY fields) or raw field names. All datasets must share these keys.

## `customJoinType` (type: `string`):

inner keeps only keys present in every dataset; left keeps all keys from the first dataset.

## `customParams` (type: `string`):

For preset=custom: JSON object of extra API params applied to every dataset, e.g. {"filters": {"Servicetype": "LDC"}}.

## `customAgg` (type: `string`):

none = keep raw rows (last value per key). sum = aggregate numeric values per key. mean = average numeric values per key.

## `format` (type: `string`):

File format delivered to the key-value store (dataset records are always JSON).

## `webhookUrl` (type: `string`):

POST the result file to this URL after the run (3 retries with backoff). Leave empty to skip.

## `aiReady` (type: `boolean`):

Also emit JSON Schema + data dictionary + sample rows for LLM/RAG ingestion.

## `includeAttribution` (type: `boolean`):

Attach source/licence metadata sidecar to every output (CC BY 4.0).

## Actor input object example

```json
{
  "mode": "studio",
  "preset": "A1",
  "customKey": [
    "year"
  ],
  "customJoinType": "inner",
  "customAgg": "none",
  "format": "json",
  "aiReady": true,
  "includeAttribution": true
}
```

# Actor output Schema

## `runSummary` (type: `string`):

One summary record per run: mode, preset, row count, format, files, year range.

## `joinedData` (type: `string`):

The joined dataset file (CSV/JSON/XLSX) in the default key-value store.

## `extractedData` (type: `string`):

Raw dataset file(s) (CSV/JSON/XLSX) in the default key-value store.

## `aiReadyPackage` (type: `string`):

JSON Schema + data dictionary + sample rows for LLM/RAG ingestion.

## `attribution` (type: `string`):

Source and licence metadata (CC BY 4.0).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("subimpact/au-open-data-studio").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("subimpact/au-open-data-studio").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call subimpact/au-open-data-studio --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,subimpact/au-open-data-studio"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0PGppJaL5gw2fuoPx/builds/V5KkQgJl2up66L4u7/openapi.json
