Skip to content
Back to blog
12 May 2026·Domato Team

How to Map a PHN Catchment to ABS Boundaries (LGA, SA2, SA1 and Postcode)

guidephndataabsasgsgeography

Every Australian Primary Health Network catchment is defined as a list of Local Government Areas. The Australian Bureau of Statistics publishes most data at Statistical Area 1 (SA1), Statistical Area 2 (SA2) or LGA. AIHW indicators usually land at LGA. State crime data is mostly LGA. Postcodes are how patients and providers describe where they live.

Joining those six boundary systems together is most of the data work in a PHN. The analysis comes after.

This is a practical guide to doing it correctly, with the ABS correspondence files and the gotchas that catch first-timers.

The geography you're working with

The ABS Australian Statistical Geography Standard (ASGS) is a hierarchy of nested boundaries. The current edition is ASGS 2021, in use since the 2021 Census. From smallest to largest:

Unit Approximate population Purpose
Mesh Block 30–60 people Building block; not used for most public data
SA1 ~400 people Smallest unit ABS releases Census tables at
SA2 3,000–25,000 "Community of interest" — suburb / small town
SA3 30,000–130,000 Sub-regional
SA4 100,000–500,000 Labour-force regions
Greater Capital City / Rest of State Millions Top of the SA hierarchy

Outside this hierarchy:

  • LGA — Local Government Area. State-defined. Approximately stable but updated when councils amalgamate.
  • POA — Postal Area. ABS-built approximation of postcodes, because Australia Post postcodes don't respect statistical boundaries.
  • PHN — Primary Health Network. Not an ASGS unit. Defined by the Department of Health as a list of LGAs (occasionally with carve-outs).

Two key facts to internalise:

  1. PHNs are derived. There is no ABS-published "PHN" boundary. Every PHN-level number is calculated by mapping an LGA list to an ABS unit, pulling data at that unit, and aggregating.
  2. Not all boundary pairs nest cleanly. SA1s nest perfectly into SA2s. SA2s mostly nest into LGAs but a handful straddle. Postcodes don't nest into anything.

The four mappings you need

For most PHN analytical work, you need these four:

1. LGA → SA2

The cleanest of the four. The ABS publishes an LGA → SA2 correspondence with the proportion of each SA2's population in each LGA. Most SA2s sit entirely inside one LGA, but in a typical state you'll find 5–15% of SA2s straddling LGA boundaries.

Source: ABS Correspondences (Statistical Spatial Framework portal), file name pattern LGA_to_SA2_2021.csv.

Gotcha: When an SA2 straddles two LGAs, you have two choices — assign by population majority (cleaner for headline numbers) or split proportionally (cleaner for sums like dwelling counts). Pick one and stay consistent.

2. SA2 → SA1

Perfectly hierarchical. Every SA1 sits inside exactly one SA2. The correspondence is just a lookup of SA1_CODE_2021 → SA2_CODE_2021 and ships with the ABS Mesh Block file.

Source: ABS Australian Statistical Geography Standard (ASGS) — Main Structure files, available as ESRI Shapefile, GeoPackage, or CSV.

Gotcha: SA1 codes change between Census years. The 2021 SA1 codes are not the same as 2016 SA1 codes. If you're combining 2021 Census data with an older time-series, you'll need an SA1-to-SA1 correspondence between editions — ABS publishes this too.

3. LGA → Postcode (POA)

The messy one. Postcodes (and their POA approximations) don't respect statistical or administrative boundaries. A single postcode commonly covers parts of 2–4 SA2s and occasionally crosses LGA lines.

Source: ABS POA → LGA correspondence, file name pattern POA_to_LGA_2021.csv. Population-weighted overlaps.

Gotcha: State health data is often released by postcode of patient residence. To map that data to a PHN catchment you need POA → LGA → PHN. Each step introduces a fractional allocation, which compounds error. If your indicator is small numbers (e.g. rare conditions), the error from postcode allocation can be larger than the signal.

Rule of thumb: if a postcode is more than 80% inside one LGA, assign all of it. Below that threshold, split proportionally to population.

4. Catchment → Custom Boundaries

PHNs sometimes commission at sub-catchment units — "Eastern Sydney" inside a metro PHN, or by Aboriginal Health Service region in regional PHNs. These are not ABS-published either.

The right approach: define the sub-catchment as a list of SA1s. SA1 is the finest grain you can use, so anything coarser can be built up. Save the SA1 list as a CSV in your repository and join it to every analysis the same way you'd join an LGA list.

A workflow that actually works

Order of operations for a planning-ready PHN data shape:

Step 1: Define your catchment.
        → LGA list (CSV in your repository)

Step 2: Get the SA2s in your catchment.
        → Join LGA list to ABS LGA-to-SA2 correspondence.
        → For straddling SA2s, decide: majority-assign or split.

Step 3: Get the SA1s in your catchment.
        → For each SA2 in your list, pull all SA1s nested under it.
        → Result: full SA1 list for the catchment (typically 1,500–6,000 SA1s).

Step 4: Get the postcodes that map to your catchment.
        → Join LGA list to ABS POA-to-LGA correspondence.
        → For each POA, calculate the fraction of its population inside your catchment.

Step 5: Pull data at the finest available level.
        → ABS Census variables → at SA1.
        → ABS Estimated Resident Population → at SA2.
        → AIHW METeOR indicators → at LGA.
        → State health admin data → at postcode, then converted via Step 4.

Step 6: Aggregate up for presentation.
        → SA1 → SA2 → LGA → catchment.
        → Keep the SA1-level data for hotspotting; present at LGA for stakeholders.

Each step has gotchas. Each step is also fully automatable. If you're doing this twice a year (needs assessment cycle plus board reporting), it's worth investing in code over click-paths.

Tools

For analysts doing this work end-to-end:

  • R{sf} for spatial joins, {readabs} for direct ABS file pulls, {strayr} for ASGS / LGA correspondences. Probably the most mature open-source toolchain for Australian data.
  • Pythongeopandas for spatial joins, pandas for tabular work, abs_data for ABS API access. Better if your team's existing stack is Python.
  • QGIS — Free desktop GIS. Useful for one-off boundary visualisation; less useful for repeatable workflows.
  • Power BI / Tableau — Fine for the presentation layer. Don't try to do correspondence-file joins in Power Query unless you enjoy debugging Power Query.

For PHNs that want the work done once and shared across all 31 catchments, Domato PHN pre-builds the LGA → SA2 → SA1 → postcode mapping for every PHN in Australia and pre-joins ABS, AIHW, ACARA and state datasets to each level. The two-week pilot turns the workflow above into a configuration step — pick your catchment, apply your branding, launch.

A few things that catch first-timers

ASGS edition mismatches. ABS 2016 SA1 boundaries are not 2021 SA1 boundaries. If you're combining Census 2016 data with Census 2021 data, you need a correspondence between the two editions. ABS publishes it; using it correctly takes a beat.

LGA boundary changes. When councils amalgamate (NSW has done several rounds), the LGA in last year's data may not exist this year. Track this. If your catchment was historically 11 LGAs and is now 9 (because two amalgamated), correspondence files for the previous boundaries are still needed for historical analysis.

Confidentiality suppression. ABS suppresses cells with very small counts to protect identifiability. At SA1, this hits Indigenous status, country of birth (some categories), and rare disability counts. Expect 1–5% of cells to be suppressed or rounded; don't sum across them blindly.

POA != actual postcode. Australia Post postcodes don't have official boundaries — Australia Post operates by address, not area. POA is the ABS's best-effort approximation. Most of the time they line up; occasionally they don't, particularly in PO-box-heavy commercial postcodes.

Time-of-event for service data. State health admin data is often released as "patient by postcode of residence at time of admission". If your catchment had a boundary change between the data period and today, the population denominator and the numerator may not match exactly.

When to invest in code vs. when to buy

A practical heuristic. If your PHN does:

  • One needs assessment every three years and ~four board reports per year → click-path workflow with R / Python notebooks is fine; you'll spend more time on insights than on plumbing.
  • A needs assessment + quarterly board reports + monthly commissioning reviews + ad-hoc council briefings → buy or build a reusable data layer. The break-even on dev time is usually 8–12 months.
  • Sub-catchment commissioning evaluation, hotspot identification, multi-year trend analysis → definitely buy or build. The dataset gets unwieldy fast and you want governance over what numbers your team is quoting.

The data is all free. The wrangling is the cost. Make peace with one of those two paths.


Domato PHN pre-maps every Australian PHN catchment to LGA, SA2, SA1 and postcode, with ABS, AIHW, ACARA and state datasets pre-joined. Live in production with Sydney North Health Network. See the product page or reach out for a pilot.