Skip to content

About · Methodology · Assumptions

Where the data comes from.

Every chart, map, and ratio on this site is stitched together from roughly a dozen external data families. This page inventories each one—by agency, product, vintage, geographic coverage, and what the model does with it—so you can trace any number back to its source.

Snapshot version:

How the raw data is organised

Two fetch families, one SHA-pinned manifest

Raw spatial inputs—about 24 GB—live outside git in each state’s analysis/<state>/data/raw/ tree and are pulled from the project’s Cloudflare R2 bucket via scripts/fetch_raw_data.py, gated by a SHA-256 manifest (scripts/raw_data_manifest.json) so an ingest can’t silently swap an input. A separate family of fetch_*.py scripts pulls the always-online ABS, Valuer-General, and GTFS data directly from public CDNs on demand—census DataPacks, SEIFA, building approvals, regional population, sale prices, and the transit feeds.

The canonical human-readable inventory is docs/raw-data-inventory.md, filed by Ethan as #92 and committed next to the code that reads each input. It carries a status legend—Confirmed URL, Confirmed source, Hand-curated, Derived, Needs citation—so each source’s provenance confidence is explicit rather than implied.

Source: docs/raw-data-inventory.md (#92), scripts/fetch_raw_data.py, scripts/raw_data_manifest.json. Methodology →

Read this before pairing numbers

The vintages are deliberately mismatched

The four temporal layers don’t line up—by design, not oversight:

Layer Vintage
Zoning / restriction Current (2026) planning snapshot
Census income / rent / mortgage / demographics 2021 Census
Building approvals Annual flow (latest single FY 2024-25; 5-FY history available)
Regional population (ERP) Per-FY current (demographics use 30 June 2025; per-ring population uses an older ~2023 ERP)
Sale prices Mix of Census-2021 imputation + Valuer-General annual files

The prices README is emphatic: do not pair these as if one moves with another. A high-price, low-restriction suburb is not proof that recent reform cut prices—the prices are roughly four years older than the restriction snapshot. Every demographics row bakes in provenance columns (population_vintage, dwellings_vintage, *_source) so the consumer can see exactly which vintage each number is.

Source: outputs/combined/prices/README.md, outputs/combined/demographics/README.md.

Source family 1 of 6

ABS Census 2021—DataPacks, mesh blocks, SEIFA

General Community Profile (GCP) DataPacks supply the demographic and affordability columns; Mesh Block Counts give the finest population and dwelling denominators; SEIFA supplies the socioeconomic indices. All CC-BY 4.0.

Product / table Geographic levels What the model uses it for
GCP G01—selected person characteristics (age, country of birth, language) SAL · SA2 · LGA Median-age estimate, over-65 / under-18 %, Australian-born %, English-only-at-home % for demographic × restriction correlations
GCP G02—selected medians and averages SAL · SA2 · LGA Median weekly household income, median weekly rent, median monthly mortgage—affordability ratios + price/income regressions
GCP G09—country of birth detail SAL · SA2 · LGA Top-7 country-of-birth shares (England, China, India, NZ, Italy, Vietnam, Philippines) for migrant-composition cross-cuts
GCP G14—religious affiliation SAL · SA2 · LGA no-religion % and Christian % demographic columns
GCP G15—educational institution attending SAL · SA2 · LGA University-attending % (student-precinct signal)
GCP G34—motor vehicles per dwelling SAL · SA2 · LGA Zero-car-household % + mean vehicles per dwelling
GCP G36—dwelling structure SAL · SA2 · LGA Separate-house / medium-density / apartment %
GCP G37—tenure type × dwelling structure SAL · SA2 · LGA Owner-outright / owner-with-mortgage / renter shares
GCP G49—non-school qualification / attainment SAL · SA2 · LGA Bachelor-or-higher %
GCP G60—occupation × age SAL · SA2 · LGA Manager-or-professional %
Mesh Block Counts 2021—person + dwelling per MB Mesh Block (MB_2021) Per-ring population + dwelling counts; existing-dwelling-stock denominator for approvals-per-1,000-dwellings; parcel-level dwelling distribution
SEIFA 2021 (2033.0)—IRSAD, IRSD, IER, IEO indices + deciles SA2 · LGA · SAL Socioeconomic advantage/disadvantage scores joined to restriction data

G-tables are fetched by scripts/fetch_abs_census.py from the ABS DataPacks CDN (short-header AUS-wide ZIPs). The fetcher also extracts G04/G07/G10/G11/G17/G33/G38/G40/G46/G50/G56/G62 from the same ZIPs, but several of those were later dropped as “subsumed” or “too granular for a headline”. SEIFA is fetched by scripts/fetch_abs_seifa.py; mesh-block counts are read from the gitignored “Mesh Block Counts, 2021.xlsx”.

Source: ABS Census 2021 GCP DataPacks (CC-BY 4.0), ABS 2033.0 SEIFA, ABS 2021 Mesh Block Counts; scripts/fetch_abs_census.py, scripts/fetch_abs_seifa.py. Methodology →

Source family 2 of 6

Zoning & planning-scheme layers, per jurisdiction

There is no national zoning dataset—each state and territory publishes its own. Queensland publishes none at the state level, so Brisbane is a per-council merge of five schemes. Zone-code→category and height/min-lot lookups are hand-curated CSVs per state, sitting alongside the spatial layers.

State / territory Source agency + product Format Access What it provides
NSW (Greater Sydney) NSW DPHI—Standard Instrument LEP Land Zoning (EPI Primary Planning Layers, MapServer/2) Shapefile (ArcGIS REST) Confirmed URL Zone polygons; plus LEP Height of Building (HOB, MapServer/5, ~41,000 polygons, MAX_B_H metres → storeys)
VIC (Melbourne) DTP VicPlan—PLAN_ZONE statewide planning-scheme zones (planning_scheme_zones/MapServer/0) GeoPackage (ArcGIS REST) Confirmed URL Statewide zone polygons; ZONE_CODE (e.g. NRZ1) + ZONE_CODE_GROUP prefix; per-LGA NRZ/GRZ schedule heights hand-coded (#383)
QLD (Greater Brisbane) Per-council—Brisbane City Plan 2014; Ipswich (council-supplied); Logan Planning Scheme v9.2; Moreton Bay; Redland City Plan Shapefile (ArcGIS Hub / REST / direct council) Mixed—confirmed URLs + 2 council-supplied No statewide scheme; 5 sub-councils processed separately then merged; each contributes zones + heights
SA (Adelaide) data.sa.gov.au—Planning & Design Code Zones (+ SubZones + Technical & Numeric Variations) + Land Use Generalised 2025 Shapefile (GDA2020) Confirmed URL P&D Code zones; variations give local height/lot overrides; land-use ∩ zones is the base residential layer
WA (Greater Perth) Landgate SLIP—Local Planning Scheme R-Codes (DPLH-070, MapServer/111) + Perth CPS2 Maximum Building Height Shapefile (SLIP REST) Confirmed URL R-Code density-designator zoning; CPS2 height limits for City of Perth
TAS (Hobart) LISTdata—Tasmanian Planning Scheme Zones (PlanningOnline MapServer/13) + Interim Planning Zones (/4) + Code Overlays (/14, /3) Shapefile (ArcGIS REST) Confirmed URL Statewide TPS zones (+ legacy interim scheme); code overlays carry heritage
NT (Darwin) NT DLPE—NT Town Planning Zones + NT Land Use Mapping Project 2016-current (LUMP) Shapefile Zones supplied direct from DLPE (no public URL); LUMP via data.nt.gov.au Town-planning zones; heights/categories hand-coded from NT Planning Scheme 2020
ACT (Canberra) ACTMAPi / data.act.gov.au—Territory Plan Land Use Zones + ACT Blocks (parcels) Shapefile + GeoPackage Confirmed URL Zoning polygons + block geometries; zone→category + lot/coverage rules hand-curated from Territory Plan

As of #377, the low-density / rural / established-zone classification is assigned at source in each R/cities/<city>.R adapter and baked into parcels.gpkg, rather than patched in Python downstream. A legacy per-state notebook pipeline that carried narrower definitions (#117/#121) has been retired (#406), so the topline low-density-share.csv and the suburb (SAL), SA2 and LGA numbers now share one source-level definition.

Source: Per-state planning-scheme layers (see table); outputs/combined/zoning/README.md, R/cities/<city>.R adapters (#377). Methodology →

Source family 3 of 6

Cadastral parcels—the denominator layer

Parcel-area denominators are a deliberate choice: zoning polygons clip through roads and easements, so the headline ratios compute their denominators from cadastral lot_area_m2 per parcel, not from raw zone-polygon area.

State Source / product Format Vintage Notes
NSW NSW Land Parcel and Property Theme (Spatial Services) GeoPackage (~1.6M parcels) Current cadastral cut Land-parcel level (not strata)—corrects the legacy strata multi-count in ring 1; fetched by fetch_nsw_parcels.py
VIC VicMap Cadastre GeoPackage (~3M lots) Current cadastral cut PS-prefix strata-deduped at load; fetched by fetch_vic_parcels.py
QLD Queensland Digital Cadastral DB—Land Parcel Property Framework (Tenure) Shapefile (ArcGIS REST) Current Statewide parcels joined to all 5 sub-councils
WA Landgate cadastre (SLIP Historical Cadastre WFS) GeoPackage 2024 vintage “2024 cadastral.gpkg”
TAS LIST Cadastral Parcels (LISTdata) GeoPackage Current LIST metadata record
ACT ACT Blocks (data.act.gov.au) GeoPackage Current Block geometries used as parcel proxy; the per-distance-ring lot breakdowns (lot count + median lot area by ring) aren’t computed for Canberra, though its overall + per-suburb lot sizes are.
SA / NT / ACT (leaderboard-rollup caveat) SA, NT + ACT still report parcel_count = 0 in the suburb- and LGA-level leaderboard rollups (#119/#120), so those tables fall back to an area floor. Lot sizes + min-lot stats ship for all three; the NT (Darwin) now also runs the full per-parcel lot metrics off its land-titles cadastre.

Source: Per-state cadastral parcel datasets (see table); scripts/fetch_nsw_parcels.py, scripts/fetch_vic_parcels.py. Methodology →

These parcels also yield the derived lot-size dataset (outputs/combined/lot-size/)—the median and mean area of each city’s existing residential lots, at city, ring, zone, LGA, suburb and SA2 level. That’s the actual typical lot (Melbourne ~506 m² up to Darwin ~817 m², rural-zoned parcels excluded), a separate measure from the UDIA greenfield average (the median new-estate lot).

Source family 4 of 6

ABS statistical boundaries (ASGS)—shared by every city

Every rollup, clip, and join references the Australian Statistical Geography Standard. All editions sit in the 2021–2025 range; outline GeoJSONs are emitted in EPSG:4326 and simplified in EPSG:3577 (Albers).

Boundary Product Agency / edition Used for
LGA LGA_2025_AUST_GDA2020 ABS—Local Government Areas, 2025 (ASGS) Council-level leaderboards + detail-page outlines
SA2 SA2_2021_AUST_GDA2020 ABS—Statistical Area Level 2, 2021 (ASGS Ed.3) SA2 rollups, approvals, demographics, price regressions
SAL (suburb/locality) SAL_2021_AUST_GDA2020 ABS—Suburbs and Localities, 2021 Canonical suburb-level geography for leaderboards + sale-price joins
GCCSA gccsa.gpkg → per-city clips ABS—Greater Capital City Statistical Area, 2021 Per-city metro footprint clip; headline scope
SUA Significant Urban Area ABS (ASGS) Preferred city-level approvals grain (#349)—excludes peri-urban LGAs that pad GCCSA
Mesh Block MB_2021_AUST_GDA2020 ABS—Mesh Blocks, 2021 Population + dwelling counts per ring; finest geometry
LGA correspondence LGA_2021 → LGA_2025 correspondence CSV ABS (ASGS Ed.3) Cross-vintage boundary mapping

Source: ABS ASGS boundary products (LGA 2025, SA2/SAL/GCCSA/Mesh Block/SUA 2021); outputs/combined/boundaries/README.md. Methodology →

Source family 5 of 6

GTFS transit feeds—the rapid-stop buffer

“Rapid” means the frequent-network classification: a weekday 7am–7pm mean headway of 15 minutes or less (matching PTV Frequent Network, TransLink BUZ, Adelaide Go Zone, and TfNSW B-Line). A representative term-time Tuesday is auto-picked from each feed’s calendar. The walkable buffer is a straight-line 800m (roughly a 10-minute walk), not network-walk distance.

City Agency / feed Auto-download? Vintage / note
Adelaide Adelaide Metro GTFS (gtfs.adelaidemetro.com.au) Yes (direct URL) Latest static feed
Brisbane TransLink SEQ_GTFS (gtfsrt.api.translink.com.au) Pinned Pipeline pins the April 2025 pre-strike feed (#95) so the near-PT denominator is normal-service rail, not the reduced strike timetable
Canberra Transport Canberra GTFS (transport.act.gov.au) Yes (direct URL) MyWay+ feed; absent from the headline PT CSV at last run (coverage gap)
Melbourne PTV GTFS (data.ptv.vic.gov.au) Yes (direct URL) Latest static feed
Sydney TfNSW Timetables Complete GTFS (opendata.transport.nsw.gov.au) No—sign-up gated ZIP dropped in manually
Perth TransPerth Spatial Data Access No—dynamic link ZIP dropped in manually
Hobart Metro Tasmania GTFS (metrotas.com.au/community/gtfs) No—session-protected ZIP dropped in manually
Darwin (no public GTFS feed) n/a Falls back to an OSM mode filter (rail/tram/ferry) in pt_proximity.py

⚠ Brisbane feed is intentionally not the live one

Issue #95 is closed, but it remains a manual pin: the pipeline deliberately uses the April 2025 pre-strike TransLink feed so Brisbane’s near-PT denominator reflects normal-service rail rather than the reduced strike timetable. This does not auto-refresh—if a later feed is adopted, the pin must be updated by hand.

Source: Per-city GTFS static feeds (see table); scripts/gtfs_rapid_stops.py, outputs/combined/pt/README.md. Methodology →

Source family 6 of 6

Approvals, population, sale prices & heritage overlays

Building approvals are the “did the market actually build it?” signal; regional population is the denominator for per-1,000-population rates; sale prices feed the affordability regressions; heritage overlays are one of the three highly-restricted controls. Heritage gradings (significant / contributory / representative) are flattened to “Local Heritage” for cross-jurisdiction consistency, and Aboriginal-cultural-heritage items are excluded.

Dataset Agency / product Vintage / coverage Used for
Building approvals ABS 8731.0 Building Approvals, Australia—small-area data cubes (CC-BY 4.0) FY 2020-21 → 2024-25 (5 FYs; small-area cubes only reach back to Mar 2022) Dwelling-approval counts (new houses + new other residential) per SA2/LGA/SUA/GCCSA × FY; the “did the market actually build it?” supply-side signal
Regional population (ERP) ABS 3218.0 Regional Population—cubes 32180DS0001 (SA2), DS0002 (LGA), DS0005 (GCCSA) Per-FY ERP, releases 2020-21 → 2024-25; demographics rollup uses ERP at 30 June 2025 Per-FY denominator for approvals-per-1,000-population; current-FY population in demographics outputs
VIC sale prices Valuer-General Victoria—Median House by Suburb + Units by Suburb (VPSR time series), CC-BY 4.0 2013–2023/2024 annual Melbourne median sale price + 10y CAGR (houses + apartments)
SA sale prices SA Valuer-General—Metro Median House Sales, CC-BY 4.0 Quarterly Adelaide median house sale price (no open apartment data)
NSW sale prices NSW Valuer-General—Property Sales Information (PSI) bulk, CC-BY-ND 4.0 Annual files; 2014 + 2025 for the 11y CAGR Sydney per-suburb median (houses + apartments) + CAGR—only the derived per-suburb statistic is published (non-substantial extraction under CC 4.0 §2(a)(4))
NSW state heritage NSW State Heritage Register curtilage (ePlanning Planning Portal, MapServer/221) Current State-heritage classification of Sydney parcels
VIC heritage VicMap HO local heritage overlay (overlays/9) + Victorian Heritage Register (heritage/2) Current (VHR added under #381) Local + state heritage flags for Melbourne
SA heritage data.sa.gov.au—SA Heritage Places (polygons + points) Current Local (heritagecl L/C) + state (S) heritage
WA heritage Landgate—Heritage Areas (DPLH-089) + WA State Register (DPLH-006 / inHerit) Current Local + state heritage for Perth
QLD heritage Queensland Heritage Register (QSpatial) + per-council local overlays Current State + local heritage across the 5 Brisbane sub-councils
TAS heritage TAS Planning Scheme Code Overlay (local) + State Heritage Tas / Tasmanian Heritage Register (gpkg) Current Local + state heritage for Hobart
ACT heritage ACTGOV Heritage Register (heritage_scoped.geojson, ACTMAPi) Current Local heritage only (no separate ACT state register)
NT heritage (zone-coded—HT zone = heritage; no spatial overlay layer) Current Local heritage flag for Darwin
Road-strip mask (ACT) ACTGOV Road Reserves (ACTMAPi Open Data) Current Masking road strips out of the residential denominator

Approvals are fetched by scripts/fetch_abs_approvals.py (eight state Excel cubes, ~1.3 MB); population by scripts/fetch_abs_population.py; sale prices by scripts/fetch_vg_sale_prices.py and scripts/fetch_nsw_vg_sales.py. A parcel is flagged heritage when its representative interior point (st_point_on_surface) falls inside an overlay polygon, with State winning over Local—uniform across the seven spatial adapters; Darwin uses zone-coded heritage.

Source: ABS 8731.0, ABS 3218.0, per-state Valuer-General + heritage layers (see table); outputs/combined/{approvals,population,prices,heritage}/README.md.

Known limitations

Coverage gaps worth surfacing

  • Transit feeds: Sydney, Perth and Hobart GTFS feeds are portal-gated and dropped in by hand. Darwin has no public GTFS at all (an OSM mode-filter fallback stands in), and Canberra was missing from the headline PT CSV at the last run.
  • Sale prices: open-licence suburb-level price time series exist only for VIC, SA and NSW—the QLD and WA Valuer-Generals don’t publish open data, so Brisbane and Perth have no CAGR. Apartment-vs-house splits exist only for Melbourne and Sydney (SA is houses only).
  • Per-parcel metrics: the ACT runs on a block proxy (and SA on houses-only) for some per-parcel metrics; and SA, NT + ACT still report parcel_count = 0 in the suburb/LGA leaderboard rollups (#119/#120), so those fall back to the per-km² metric. The NT (Darwin) now runs on a real land-titles cadastre, so it carries the per-parcel lot metrics.
  • Provenance: NT zoning is supplied direct from DLPE with no public URL, and several QLD inputs are hand-coded from planning-scheme PDFs.

Source: outputs/combined/{pt,prices}/README.md, docs/raw-data-inventory.md status legend. Methodology →

The eight capitals

Each city’s source slice

The zoning, heritage and height inputs differ by jurisdiction. This table pairs each capital’s planning-scheme source (from the per-city profiles) with the analysis radius—uniform across all 8 capitals—and the published zoned-capacity baseline that calibrates its capacity figures, where one exists.

City Zoning scheme + source agency Format Heritage source Analysis radius
Sydney NSW Standard Instrument LEP—Land Zoning NSW Department of Planning, Housing & Infrastructure (DPHI) Shapefile (ArcGIS REST) LEP heritage layer (local) + State Heritage Register (state wins) 20 km
Perth WA Local Planning Scheme R-Codes Landgate SLIP Shapefile (SLIP REST) LGA Heritage Areas (local) + State Register (state wins) 20 km
Brisbane QLD City Plan 2014 + 4 neighbouring council schemes Per-council (Brisbane CC, Ipswich, Logan, Moreton Bay, Redland) Shapefile (ArcGIS Hub / REST / council-supplied) Per-council local + state shapefiles + QLD Heritage Register 20 km
Melbourne VIC Victoria Planning Provisions—PLAN_ZONE DTP VicPlan GeoPackage (ArcGIS REST) VicMap Heritage Overlay (local) + Victorian Heritage Register (state) 20 km
Adelaide SA Planning & Design Code—Zones data.sa.gov.au Shapefile (GDA2020) SA Heritage Places (local = 'L', state = 'S' in one file) 20 km
Hobart TAS Tasmanian Planning Scheme—Zones LISTdata Shapefile (ArcGIS REST) TPS Code Overlay (local) + Tasmanian Heritage Register (state) 20 km
Canberra ACT Territory Plan—Land Zones ACTMAPi / data.act.gov.au Shapefile + GeoPackage ACT heritage register (local); no separate state layer 20 km
Darwin NT NT Planning Scheme—Town Planning Zones NT DLPE (supplied direct; no public URL) Shapefile Zone-coded (TOWNP_ZONE 'HT' → heritage); no NT state register in data 20 km

Per-city data quirks

City Low-density zone codes Height source Quirk / note
Sydney
  • R2 (Low Density Residential)
  • R5 (Large Lot Residential)
LEP Height of Building (HOB) in metres → storeys (3.1 m/storey) R5 reclassified to the rural subset (#373).
Perth
  • LPS zones flagged low-density in the WA R-Code capacity table
R-Code → storeys lookup; CPS2 height in metres → storeys Split R-codes (e.g. R20/40) collapse to the highest density.
Brisbane
  • LDR (Low-Density Residential)
  • CR (Character Residential)
Per-council: metres → storeys, or direct storey field Only multi-source city—5 sub-councils processed separately, then unioned.
Melbourne
  • NRZ (Neighbourhood Residential)
  • LDRZ (Low Density Residential)
Per-LGA NRZ/GRZ height schedule (metres) → storeys; zone-group fallback VIC housing zone set carries no farming/rural zones (#370).
Adelaide
  • Established Neighbourhood
  • Hills Neighbourhood
  • Rural-living zones
P&D Code 'Maximum Building Height (Levels)' (storeys), or metres → storeys
Hobart
  • Low-Density Residential
  • Village
  • Rural Living
  • Future Urban
Per-zone building-height storey count (TPS zoning table)
Canberra
  • RZ1 (Suburban Zone—implies a 2-storey cap)
Per-zone storey lookup (ACT zoning table; DES sentinel = unlimited)
Darwin
  • LR (Low-density Residential)
  • RL (Rural Living)
  • RR (Rural)
Per-zone storey limit (NT zoning table) Built from the NT land-titles cadastre (20,588 residential lots, median ~817 m²), so Darwin now runs the per-ring lot metrics, lot-by-lot, frontage and reform-uplift calcs like every other parcel city. About 16% of lots are dense-zone strata that ship a placeholder geometry; they’re kept for area, count and zoning but sit out the geometry-dependent stages, which run on the 17,326 lots with reliable geometry. Heritage is structurally near-zero—the NT data carries only an HT zone, no separate heritage register.

Source: src/lib/cityProfiles.ts (per-scheme SSOT), cities.json (analysis_radius_km), zonedCapacityBaselines.json (calibration baselines). Methodology →

Capacity calibration—settled

The published zoned-capacity baselines above feed the reform/uplift capacity calculation, which now runs on the reform-uplift matrix (four named reforms × the 16-combo grid, net-additional lot-by-lot across the whole metro). The lot-by-lot capacity method ships alongside the simple-area method, the yield-methodology audit is closed, and the in-repo capacity and yield formulas replaced the retired GMAPS model. Model assumptions—absorption rate alpha, storey factors—are centralised in config/model-assumptions.json. These capacity and scenario numbers are the live headline source and safe to cite. See Assumptions for the model knobs.

Open data

Download the processed files

This page inventories the inputs. The processed outputs—every per-city, per-ring, per-suburb summary the charts read from—are open, citable, and version-stamped. There are 31 per-metric datasets plus the suburb / SA2 / LGA rollups and headline cumulatives.

Browse & download all datasets →

Every JSON is served from https://zoning.org.au/data/json/ with permissive CORS and a 1-day edge cache—pull it from the command line, a notebook, or a fetch call, no auth.

Source: YIMBY-101-Data pipeline outputs/combined; served as CC-BY 4.0 JSON.

Keep reading

Where these inputs become numbers

This page is the “what we ingest”. For the “how we turn it into a figure”, see Methodology (rings, storey conversion, the highly-restricted union). For the model knobs—absorption rate, calibration, scenario assumptions—see Assumptions.

Cite as: Australian Zoning Atlas (). Source-data inventory. zoning.org.au/about/data. Source data from the YIMBY-101-Data pipeline.