OIA Statistics NZ
Query New Zealand Public Service Commission six-monthly OIA compliance statistics with per-period and per-agency views, including timeliness, extensions, transfers, refusals, proactive publication, and Ombudsman complaints.
OIA Statistics NZ
Goal
Expose the Public Service Commission six-monthly Official Information Act (OIA) statistics in a small, deterministic CLI that removes scraping friction for downstream civic-transparency workflows.
The skill uses the PSC all-data CSV and official dated release workbooks. The CSV retains historical rows, including undated records when the upstream date column is damaged.
Use this when
- You need per-agency OIA workload and performance series for NZ public-sector bodies.
- You need a machine-readable on-time rate, complaint, extension, transfer, or refusal snapshot for a period.
- You need the latest period and historical aggregate totals for reporting or comparison.
- You need official links and discovered OIA release table URLs for reproducible citations.
Do not use this for
- Accessing any non-OIA datasets.
- Requesting private or protected internal agency systems.
- Non-official or third-party mirror data.
Commands
list-agencies [--json]- list distinct agencies that have a PSC OrgID. Release records without an OrgID are not listed separately; when merged by name (see Notes) they count toward that agency'speriod_count, otherwise query them by exact name withagency.agency <name-or-org-id> [--period YYYY-MM-DD|latest] [--json]- full per-period time series for one agency or one period. A name that resolves to one OrgID returns that agency's whole dated history.period <YYYY-MM-DD|latest> [--sort name|worst|best|requests] [--json]- all agencies for one period with computed timeliness percentage.periods [--json]- list all discovered survey periods with simple period-level counts.tables [--format all|csv|xlsx|pdf] [--json]- discover PSC OIA table assets from the landing page (plus the stable all-data CSV fallback).timeliness [--period latest] [--sort worst|best|name] [--limit 20] [--json]- agency timeliness metrics for a period.refusals [--period latest] [--sort worst|best|name] [--limit 20] [--json]- refusal count and percentage per agency.extensions [--period latest] [--sort worst|best|name] [--limit 20] [--json]- extension count and percentage per agency.complaints [--period latest] [--sort complaints|final_opinions|worst|best|name] [--limit 20] [--json]- Ombudsman complaints and final-opinion counts.totals [--period latest] [--json]- sector-wide totals and computed aggregate on-time rate for a period.
CLI
Run with:
python3 skills/oia-statistics-nz/scripts/cli.py <command> [flags]
Notes
- No API key, auth, or browser automation required for implemented commands.
- Network timeout and upstream-unavailable handling are built in for blocked upstreams.
- CSV remains preferred. If its reporting dates are invalid,
scripts/oia_workbooks.pyreads dated release workbooks using stdlib ZIP/XML. - Release downloads have a 24-hour cache in
.cache/inside the skill. Cached provenance retains the original retrieval time. - Recovery never infers dates from CSV row order. Every agency record in a dated release workbook counts toward that period, so period totals equal the workbook. Release records with no exact CSV match keep
org_id: nulland anidentity_warning. CSV rows that match no release record remain undated and are excluded from period totals. Published ID conflicts remain explicit warnings; use exact agency names for affected records. - Release records without an OrgID are merged into an OrgID agency's history when their normalised name (macrons, punctuation and the CSV
?placeholder ignored) equals, or is a whole-word part of, the names of exactly one OrgID agency that has no record of its own in that period. Merged records keeporg_id: nulland addinferred_org_id; they never count as a separate agency for ambiguity. Period totals are unaffected. - A blank on-time count (e.g. NZ Police, Jul-Dec 2018, which could not report it) stays
nullwithtimeliness_pct: null; it is never treated as 0%. Aggregate on-time counts and percentages (totals,periods,period,timeliness) exclude such agencies from both numerator and denominator, reporton_time_coverage(covered and missing agencies/requests) and add a warning.requests_handledtotals still include them, andtimeliness --sort worst|bestlists them last.
Resources
- API notes:
references/api-notes.md
Last updated: October 13, 2026
Files (11)
- Jurisdiction
- 🇳🇿 New Zealand
- Practice area
- Administrative
- License
- MIT
- Author
- thecolab-ai
Test OIA Statistics NZ
Ask a legal question — get an answer generated live from this skill’s instructions.
Sign in to test this skill.