# AU Address Enrichment — planning, flood, NBN, schools, SEIFA (`davidar/au-address-enrichment`) Actor

Enrich Australian addresses with public government data: planning zone + overlays, flood, bushfire, contaminated land, NBN tech & upgrade, mobile towers, nearest public transport, school zones, ABS SA1 + SEIFA. All states + ACT; tri-state output — never a blank that reads as "no risk".

- **URL**: https://apify.com/davidar/au-address-enrichment.md
- **Developed by:** [David Roberts](https://apify.com/davidar) (community)
- **Categories:** Real estate, Developer tools, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 enriched addresses

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## AU Address Enrichment

Turn an Australian street address into one structured row of the public data that actually decides whether you'd rent, buy or build there — planning zone and overlays, flood risk, bushfire-prone status, contaminated land, NBN technology and fibre-upgrade eligibility, mobile-tower proximity, nearest public transport, designated government school zones, ABS SEIFA socio-economic indexes for the census block, and the electorates the address votes in (federal division, state district and upper-house region, council ward).

Every field comes from an official state or federal dataset, is queried live or from a bundled open-data extract, and carries its own `source`, licence and `retrievedAt`. No proxies, no paid geocoders, no scraping of listing portals.

### Why

The information exists, but it is spread across six or more government portals per state, each with its own map viewer and none with a batch interface. Real-estate listings don't show it. This Actor bundles it so that a renter, buyer, analyst or AI agent can screen a shortlist of addresses in one call.

### Coverage

All seven states/territories with a public address layer are geocoded against that layer and parcel-snapped. NT has no keyless address or planning service and is reported as `geocode_failed` with an explicit reason (not charged).

| Block                                            | VIC          | NSW               | QLD                         | WA                    | SA                | TAS                      | ACT                 | NT          |
| ------------------------------------------------ | ------------ | ----------------- | --------------------------- | --------------------- | ----------------- | ------------------------ | ------------------- | ----------- |
| Geocoding (authoritative address layer → parcel) | ✅ Vicmap    | ✅ SIX            | ✅ LPPF                     | ✅ Landgate           | ✅ SAGAF          | ✅ LIST                  | ✅ ACTmapi          | ❌          |
| Planning zone + scheme                           | ✅           | ✅ LEP            | ✅ 5 SEQ councils¹          | ✅ LPS + MRS + R-code | ✅ P\&D Code       | ✅ LPS                   | ✅ Territory Plan   | ❌          |
| Overlays                                         | ✅           | ✅ 16 EPI layers  | ✅ council overlays¹        | ✅                    | ✅                | ✅ codes                 | ✅                  | ❌          |
| Bushfire-prone                                   | ✅ BPA       | ✅ RFS + EPI      | ✅ council¹ (with distance) | ✅ DFES BPA           | ✅                | ✅                       | ✅ 2026             | ❌          |
| Flood — modelled 1 % AEP                         | ✅ FloodZoom | ⚠️ 10 LGAs²       | ⚠️ council flood overlay¹   | ✅ DWER               | ✅                | ✅ SES hazard + depth    | ✅                  | ❌          |
| Flood — observed history                         | ✅           | —                 | ✅ Brisbane 1974/2011/2022  | —                     | —                 | —                        | —                   | ❌          |
| Contaminated land / EPA                          | ✅           | ✅ EPA registers⁵ | —                           | —                     | —                 | —                        | —                   | —           |
| NBN technology + upgrade eligibility             | ✅           | ✅                | ✅                          | ✅                    | ✅                | ✅                       | ✅                  | ✅          |
| Mobile-tower proximity (ACMA)                    | ✅           | ✅                | ✅                          | ✅                    | ✅                | ✅                       | ✅                  | ✅          |
| Nearest public transport stop                    | ✅           | ✅ statewide³     | ✅ SEQ                      | ✅ Transperth         | ✅ Adelaide Metro | ✅ statewide incl. ferry | ✅ bus + light rail | ❌          |
| School zones — primary / year 7 / year 12        | ✅ / ✅ / ✅ | ✅ / ✅ / ✅      | ✅ / ✅ / ✅                | —                     | —                 | ✅ / ⚠️⁴ / —             | ✅ / ✅ / ✅        | ❌          |
| ABS SA1 + SEIFA 2021                             | ✅           | ✅                | ✅                          | ✅                    | ✅                | ✅                       | ✅                  | ✅          |
| Electorates — federal / state / upper / ward     | ✅ ✅ ✅ ✅  | ✅ ✅ ◦ —⁶        | ✅ ✅ ◦ ✅                  | ⚠️ ⚠️ ◦ —⁶            | ⚠️ ✅ ◦ ✅        | ✅ ✅ ✅ ◦               | ⚠️ ✅ ◦ ◦           | ⚠️ ✅ ◦ ✅⁷ |

¹ QLD planning and flood are council-published only — Queensland has no statewide point-queryable zoning, flood or bushfire layer (FloodCheck is a study index, QLUMP land use is 2012–13 and too coarse). Covered councils: **Brisbane, Gold Coast, Logan, Moreton Bay, Sunshine Coast** — the five largest in South East Queensland. Every other QLD address returns `planning` and `flood` as `unsupported`, never a `not_found` that would read as "no constraints here". **Ipswich is not covered**: the council publishes no queryable planning or flood service. Brisbane overlay and flood queries intersect the whole snapped lot (as the council's own property report does), so a lot straddling two flood planning areas reports both, most severe first.
² NSW has no keyless statewide flood layer; the EPI Flood Planning Area covers 10 LGAs and everywhere else returns `unsupported` — never `not_found`.
³ NSW stops come from the TfNSW Timetables Complete GTFS bundle (statewide: train, metro, light rail, bus, coach, ferry), baked into the image at data-refresh time (vintage 2026-08-31); school-bus-only stops are excluded by design.
⁴ TAS year 7 is only defined for District High Schools; senior colleges publish no intake areas.
⁶ Electorates: ✅ = gazetted legal boundaries (the AEC's own March 2025 divisions via the Digital Atlas of Australia for federal; the state's own layer for districts and wards); ⚠️ = ABS ASGS 2025 mesh-block approximation (WA state districts only, because Landgate's electoral layers are under a personal-use licence); ◦ = a fact rather than a lookup (statewide Legislative Council in NSW/SA/WA, no upper house in QLD/ACT/NT, no wards in TAS, no councils in the ACT); — = `unsupported` (NSW publishes no ward polygon layer; WA's is licence-restricted and incomplete). See "Reading `electorates`".
⁷ NT electorates answer for `lat`/`lng` input only — NT still has no address geocoder.
⁵ NSW EPA notified-sites register (2,007 sites under CLM Act s.60, with EPA's regulated-status classification), environment protection licences, and WARRP landfills. NSW has no Environmental Audit Overlay and no spatial site-audit register, so `environmentalAuditOverlay` is always `null` and `type: 'audit'` never appears. Sites EPA has notified but decided not to regulate are typed `notified_site`, distinct from `priority_site` (under an actual CLM/POEO Act instrument). WARRP lists only facilities currently reporting waste movements — a clear `landfill` result does not rule out a closed tip nearby.

Where a block isn't available for an address's state or council it is reported as `status: "unsupported"` — never as a blank that could be mistaken for "no risk".

**Unit / strata addresses.** Unit addresses resolve in six of seven states. **WA is the exception:** Landgate's public address layer has no unit column, so a unit address resolves to its building and `matchedInput` is `false`. Where a strata block has no base address record (common in QLD, TAS and the ACT; in SA, e.g. 260 Prospect Rd Prospect is unit 1 + common property), a unit-less input resolves to the block or to a unit on it — the correct parcel for every zone, flood and overlay lookup — again with `matchedInput: false` and an `address.note` saying so.
`Lot 5 12 Foo St` parses the lot separately (`lot` is never sent as a unit).

**Local government area.** `address.lga` is populated in all seven states. The name is reproduced as each state publishes it, so casing and style vary by jurisdiction (`MARIBYRNONG`, `BLUE MOUNTAINS`, `Brisbane City`, `TOWN OF CLAREMONT`, `CITY OF PROSPECT`, `Hobart`; in the ACT, which has no local government, the ACTmapi district `CANBERRA CENTRAL`).

### Input

```json
{
    "addresses": [
        "156 Bulleen Rd, Bulleen VIC 3105",
        "31 Marrickville Rd, Marrickville NSW 2204",
        "36 Baroona Rd, Milton QLD 4064",
        "10 Bay View Tce, Claremont WA 6010"
    ]
}
```

- `addresses` — up to 5 000 strings. Include suburb and state or postcode. Unit addresses (`1/79 Ormond Rd`) are resolved to the individual unit's property record.
- `records` — alternative structured form `[{ "id": "…", "address": "…" }]` or `[{ "id": "…", "lat": -37.81, "lng": 144.87, "address": "VIC" }]` (coordinates skip geocoding; the state must still be named).
- `blocks` — subset of `planning, flood, contaminatedLand, connectivity, transport, schools, demographics, electorates`. Default: all.
- `nbn` — set `false` to skip the NBN lookup (it relies on nbn co's public address-check endpoint, which is not a documented API).
- `concurrency` — 1–20, default 8.

### Output

One dataset item per input address. Top level:

| field              | meaning                                                                                                                                                                                                                                                                                                                                                                                                            |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `status`           | `ok` · `partial` (at least one block `unknown`) · `geocode_failed`                                                                                                                                                                                                                                                                                                                                                 |
| `address`          | `formatted` (one national shape — see below), `sourceFormatted` (the state layer's own string), state, LGA (ACT: district), parcel id (VIC PFI, NSW lot/DP, QLD lot-plan, WA PIN, SA parcel id, TAS PID, ACT block key), ABS mesh block (VIC), coordinates (parcel centroid when snapped; raw geocode point kept in `rawGeocode`), `matchedInput`, `note` (only when the row is not exactly the address asked for) |
| `planning`         | zone `{code, description, scheme}`, `overlays[]` (`LSIO`, `HO9`, `DDO5` …, each with a coarse `class` — see below), `bushfireProne`                                                                                                                                                                                                                                                                                |
| `flood`            | `modelled1pctAep` (statewide 1 % AEP extent), `observedHistory` (recorded inundation), `parcelDetail` (level / depth / velocity where a model exists), `planningOverlayAgrees`, `confidence`, `disclaimer`                                                                                                                                                                                                         |
| `contaminatedLand` | EPA priority sites, audits, restricted groundwater, landfills, licensed premises — split into `onParcel` and `nearby` (regulatory) and `historical` (directory scrapes), plus `nearestActive` (most significant, severity-ranked) and `nearestActiveByType` summaries                                                                                                                                              |
| `connectivity`     | `nbn` (technology at the premises, upgrade eligibility) and `mobile` (nearest site per carrier, bands, 5G presence)                                                                                                                                                                                                                                                                                                |
| `transport`        | nearest `station`, `tram`, `bus`, `coach` with distance in metres                                                                                                                                                                                                                                                                                                                                                  |
| `schools`          | designated government `primary`, `year7`, `year12` zone school with website                                                                                                                                                                                                                                                                                                                                        |
| `demographics`     | SA1, SA2–SA4 names, SEIFA 2021 scores and deciles (IRSD, IRSAD, IER, IEO)                                                                                                                                                                                                                                                                                                                                          |
| `electorates`      | `federal` (House of Representatives division), `stateLower` (state/territory district), `stateUpper` (Legislative Council region, or the statewide chamber, or `null` where unicameral), `ward` (council ward or division) — each a tri-state sub-block with `name`, `chamber`, `members`, `boundaries` (which redistribution answered) and, where a state layer answered, `absAgrees`                             |
| `meta`             | `retrievedAt`, timing, every source used with its licence and status, data vintages                                                                                                                                                                                                                                                                                                                                |

#### Address fields — what to key on

- **`address.formatted`** is the same shape in every state: `[UNIT/]NUMBER STREET TYPE LOCALITY STATE [POSTCODE]`, upper case, no punctuation — `38 KINGSTON STREET YARRAVILLE VIC 3013`, `4/23 BAROONA ROAD MILTON QLD 4064`, `1/260 PROSPECT ROAD PROSPECT SA 5082`. Key joins on this. (v0.3 emitted each layer's own string here — Vicmap without the state, QLD without the postcode, SA with commas and `SOUTH AUSTRALIA`; consumers keyed on the v0.3 value must re-key.) The layer's own string is still there as **`address.sourceFormatted`**. The postcode is omitted when neither the layer nor your input supplied one — it is never guessed.
- **`matchedInput: false` + `address.note`** means the row is enriched for the *block*, not the exact address you gave. The usual cause is a unit that is not in the state's address layer (a listing's `10/14` that the state layer numbers `201/14`, say): the actor retries the base address, and every zone, overlay, flood and contamination answer is a property of the block anyway. `connectivity.nbn` is queried for the unit as you typed it first; when nbn's address search has no such unit either, it falls back to the building's record with its own `connectivity.nbn.data.matchedInput: false` and `note` — the technology type is a property of the building for every unit in it. Filter on `matchedInput` (either one) if you need exact matches only.

#### Planning overlays — `class`

Every overlay carries a coarse `class` so you can keep the constraints and drop the administrative ones without a per-state code list: `hazard` (flood, bushfire, erosion, salinity, coastal, acid sulfate soils, contamination/EAO, noise), `heritage`, `environment` (vegetation, landscape, biodiversity, waterways), `design` (DDO/DPO, character, height/FSR/lot size), `contributions` (DCPO/ICPO — a levy on development, on every lot in many inner-Melbourne municipalities, not a constraint on use), `infrastructure` (public acquisition, airport environs, parking). An overlay the classifier does not recognise has **no** `class` — keep it; absent does not mean administrative.

#### Tri-state semantics — read this before filtering

Each block and sub-block has a `status`:

| status        | means                                                                                |
| ------------- | ------------------------------------------------------------------------------------ |
| `ok`          | the source answered and returned data for this point                                 |
| `not_found`   | the source answered and this point is **outside** every feature — a genuine negative |
| `unknown`     | the source failed (timeout, outage, decode error) — **not** a negative               |
| `unsupported` | no adapter exists yet for this state × layer — **not** a negative                    |

Composite blocks (`planning`, `flood`, `contaminatedLand`) report `ok` whenever their source answered; the hit or miss lives in the sub-fields (`flood.data.modelled1pctAep.status`, `contaminatedLand.data.onParcel`). So "not in any mapped flood extent" is `flood.status: ok` + `modelled1pctAep.status: not_found` in every state — filter on the sub-field, not the block. Single-feature blocks (`schools.*`, `demographics`, `connectivity.nbn`, each `transport` category) use `not_found` directly.

Some sources can only confirm, never clear: `flood.observedHistory` records inundation that was surveyed after past events; `not_found` there means "no record", not "never flooded". The `flood.confidence` field weighs the sub-signals on one scale across all states — it is **not** a probability of flooding:

| confidence | means                                                                                                                                                                                     |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `high`     | positive corroborated by a second layer, a parcel-level depth/level, or a regulatory class above the outer band (VIC extent + overlay; TAS hazard raster + depth; BCC FHA\_R1–R4)          |
| `medium`   | positive from one authoritative layer; or a negative from complete-coverage modelling with a second layer or parcel resolution agreeing (VIC, TAS, BCC double-negative)                   |
| `low`      | negative from a single layer, from partial-coverage mapping (WA studied catchments, Moreton Bay, ACT), or from a policy overlay rather than a model (SA; an SA hit is never above medium) |
| `unknown`  | the primary source failed, or does not cover this location (NSW outside the 10 LGAs on the EPI Flood Planning Map)                                                                        |

A parcel-level flood level from a Melbourne Water **draft consultation** layer (`parcelDetail.dataStatus: draft_consultation`) is a positive but never lifts `confidence` above `medium` on its own — those layers are draft, in Melbourne Water's words. `flood.planningOverlayAgrees` (VIC) is `true` when the modelled extent and the planning scheme's flood overlay (LSIO/SBO/FO) are both positive, `false` when exactly one is, and `null` when neither is or the overlay query failed — an all-clear address shows `null`, not a `false` that looks like disagreement.

#### Reading `contaminatedLand`

- `onParcel` (≤ 5 m / inside the polygon) and `nearby` (within each register's radius: 500 m for sites, audits, PRSAs and restricted groundwater; 1 km for landfills and licensed premises) hold **regulatory** records only.
- `historical` holds VIC's Sands & McDougall 1896–1974 trade-directory entries within 100 m. One to four of these sit near every inner-Melbourne lot (a 1950s "Creswell, Mrs E." at 56 m is typical); they are context for a site history, not a contamination signal. Empty in states with no such register.
- **A nearby completed `audit` is the inner-suburban norm** — half of the inner-west Melbourne addresses in the first dogfood run had one within 250 m, because former industrial land is audited before it becomes housing. It is evidence that land *was assessed*, not that contamination remains. What matters is an on-parcel item, or a nearby site under *current* regulation.
- `nearestActive` is that reduction done for you: the **most significant** hit under current regulation across both lists, with distance and whether it is on the parcel, or `null` when none is within the queried radii. Ranking is by severity tier first — `priority_site` = `notified_site` = `landfill`, then `prsa`, then `licensed_premises`, then `groundwater_restricted` — and nearest within the tier. Nearest-by-distance (what v0.4 did) let a restricted-groundwater zone, which nine of 25 inner-west addresses had within 250 m, hide a priority site a few dozen metres further out.
- `nearestActiveByType` is the un-reduced version: the nearest hit of each active type, keyed by type. A type missing from the map has nothing within its register's radius. Read this when you want the groundwater zone *and* the priority site.

#### Reading `electorates`

- Every sub-block names the electorate as its source spells it (`Fraser`, `Footscray`, `Wattle Ward`, `Division 5`), the `chamber` it elects to, the `members` it returns (1 for a single-member seat; 5 for a Victorian Council region or an ACT electorate; 7 for a Tasmanian Assembly division) and **`boundaries`** — which redistribution or gazettal the layer holds and, where the source says so, the elections it applies to. Compare `boundaries` across rows and over time: a redistribution changes it before it changes any name. Known dates: Queensland's June 2026 state redistribution applies from October 2028 (the layer correctly still holds 2017); Tasmania's federal redistribution determines 8 October 2026 with no name changes; SA council wards refresh for the November 2026 elections.
- **Legal boundaries everywhere they are openly published, ABS otherwise.** Federal divisions are the AEC's own March 2025 boundaries (CC BY 4.0 via the Digital Atlas of Australia; NSW, QLD and TAS republish the same set and answer from theirs). VIC (Vicmap), NSW (Spatial Services), QLD (QSpatial), SA (Location SA), TAS (LIST), ACT (ACTmapi) and NT (Geoscape via the Digital Atlas) answer the state district from their gazetted layers. The exceptions are WA's state district, and any field whose primary layer is down: there the answer is the ABS ASGS 2025 Commonwealth / State Electoral Division, which the ABS itself calls a **mesh-block approximation**: a lot on the edge of a division can be attributed to its neighbour, by a few metres to a street. `source.id` starts with `abs.` when that is the case.
- **`absAgrees`** is present whenever a legal-boundary layer answered: `true` when the ABS approximation of the same thing names the same electorate, `false` when it does not (a boundary lot, or the ABS still on an older vintage — expected in SA, where the 2026 House of Assembly boundaries post-date ABS SED 2025), `null` when the ABS layer failed. If a state layer fails, the ABS answers instead and both `boundaries` and the sub-block `error` say so.
- **`stateUpper`** is a region lookup only in Victoria (8 regions × 5) and Tasmania (15 single-member Legislative Council divisions). NSW, SA and WA elect their Legislative Councils statewide, so the sub-block is `ok` with `statewide: true` and the chamber size (WA's six regions were abolished from the 2025 election). Queensland, the ACT and the NT are unicameral: `stateUpper` is `null` — there is no chamber to be `not_found` in.
- **`ward`** is `ok` with **`undivided: true`** and the council's name when the council elects every councillor at large (22 Victorian councils incl. Melbourne; 56 of 78 Queensland councils; every Tasmanian council; 12 NT councils; the SA councils outside the Wards layer). `not_found` with a reason means no council exists at the point (unincorporated land such as French Island; the ACT, which has no local government). `unsupported` is NSW (no government publishes a ward polygon layer; the NSWEC's address finder is street-level text matching and is not used) and WA (Landgate's ward layer is licence-restricted and self-described as incomplete).
- Electorates are evaluated at the parcel point like everything else — Yarraville is split between the Footscray and Williamstown districts, and 36 Baroona Rd Milton is in Brisbane / Cooper while a point 400 m away is in Ryan / Maiwar. Suburb-level lookups get these wrong.

#### Example (abridged — a real row from the v0.4 run; every block also carries `source`, `retrievedAt`, `durationMs`)

```json
{
    "input": {
        "address": "36 Baroona Rd, Milton QLD 4064"
    },
    "status": "ok",
    "address": {
        "formatted": "36 BAROONA ROAD MILTON QLD 4064",
        "sourceFormatted": "36 Baroona Road Milton QLD",
        "state": "QLD",
        "lga": "Brisbane City",
        "lat": -27.468398358783475,
        "lng": 153.00235966242855,
        "parcelId": "1RP124388",
        "matchedInput": true,
        "parcelSnapped": true
    },
    "planning": {
        "status": "ok",
        "data": {
            "zone": {
                "code": "NC",
                "description": "Centre / Neighbourhood centre",
                "scheme": "Brisbane City Plan 2014"
            },
            "overlays": [
                {
                    "code": "FHA_R5",
                    "description": "Brisbane River flood planning area 5",
                    "class": "hazard"
                },
                {
                    "code": "FHA_R4",
                    "description": "Brisbane River flood planning area 4",
                    "class": "hazard"
                },
                {
                    "code": "NBH_CHA",
                    "description": "Neighbourhood character",
                    "class": "design"
                },

                "…"
            ],
            "bushfireProne": {
                "status": "not_found"
            }
        }
    },
    "flood": {
        "status": "ok",
        "data": {
            "modelled1pctAep": {
                "status": "unsupported"
            },
            "councilRegulatory": {
                "status": "ok",
                "code": "FHA_R4",
                "description": "Brisbane River flood planning area 4; lot also intersects FHA_R5"
            },
            "councilRisk": {
                "status": "ok",
                "level": "Low"
            },
            "observedHistory": {
                "status": "not_found"
            },
            "confidence": "high"
        }
    },
    "contaminatedLand": {
        "status": "unsupported"
    },
    "connectivity": {
        "status": "ok",
        "data": {
            "nbn": {
                "status": "ok",
                "data": {
                    "techType": "FTTP"
                }
            },
            "mobile": {
                "status": "ok",
                "data": {
                    "telstra": {
                        "nearestSiteM": 150,
                        "has5g": true
                    }
                }
            }
        }
    },
    "transport": {
        "status": "ok",
        "data": {
            "station": {
                "name": "Milton station, platform 4",
                "distanceM": 277,
                "mode": "TRAIN"
            },
            "bus": {
                "name": "Baroona Rd at Baroona Shops, stop 7",
                "distanceM": 26,
                "mode": "BUS"
            },
            "ferry": {
                "name": "Milton ferry terminal",
                "distanceM": 661,
                "mode": "FERRY"
            }
        }
    },
    "schools": {
        "status": "ok",
        "data": {
            "primary": {
                "status": "ok",
                "data": {
                    "name": "Milton SS"
                }
            },
            "year7": {
                "status": "ok",
                "data": {
                    "name": "Kelvin Grove State College"
                }
            },
            "year12": {
                "status": "ok",
                "data": {
                    "name": "Kelvin Grove State College"
                }
            }
        }
    },
    "demographics": {
        "status": "ok",
        "data": {
            "sa1": "30504113516",
            "sa2Name": "Paddington - Milton",
            "seifa": {
                "irsad": {
                    "score": 1091,
                    "decileAus": 9
                }
            }
        }
    },
    "meta": {
        "durationMs": 2373,
        "sources": "[31 entries, each with id / url / licence / attribution / status]"
    }
}
```

### Pricing

Pay-per-event: one `enriched_address` event per address that geocodes successfully, regardless of how many blocks you request. Addresses that cannot be matched to the authoritative address layer are returned as `geocode_failed` rows and **not charged**. No platform-usage pass-through.

### Sources and licences

| source                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | licence                                                                                                                                                                              | attribution                                                                                                                                                                                                                                                                                 |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Vicmap Address, Vicmap Planning, Bushfire Prone Area, Victorian Flood History, EPA Victoria Unearthed layers (via DEECA open-data WFS)                                                                                                                                                                                                                                                                                                                                                                                 | CC BY 4.0                                                                                                                                                                            | © State of Victoria (DTP / DEECA / EPA Victoria / EMV)                                                                                                                                                                                                                                      |
| DEECA FloodZoom 1 % AEP flood extent                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | public web service                                                                                                                                                                   | © State of Victoria (DEECA) — *"If regions are shown as flood free in this layer, it does not necessarily mean they are entirely flood free."*                                                                                                                                              |
| Melbourne Water flood modelling (Lower Maribyrnong and consultation layers)                                                                                                                                                                                                                                                                                                                                                                                                                                            | no open licence; no-warranty disclaimer; consultation layers are draft                                                                                                               | © Melbourne Water                                                                                                                                                                                                                                                                           |
| Victorian Government school zones, findmyschool school directory                                                                                                                                                                                                                                                                                                                                                                                                                                                       | CC BY 4.0                                                                                                                                                                            | © State of Victoria (Department of Education)                                                                                                                                                                                                                                               |
| DTP public transport stops                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | CC BY 4.0                                                                                                                                                                            | © State of Victoria (Department of Transport and Planning)                                                                                                                                                                                                                                  |
| ABS ASGS 2021, SEIFA 2021; ASGS Edition 3 Non ABS Structures 2025 — Commonwealth Electoral Divisions, State Electoral Divisions (mesh-block approximations)                                                                                                                                                                                                                                                                                                                                                            | CC BY 4.0                                                                                                                                                                            | Source: Australian Bureau of Statistics                                                                                                                                                                                                                                                     |
| Electorates — VIC Vicmap Admin (State Assembly Polygon 2022, Ward Polygon 2024); NSW Administrative Boundaries (State Electoral District, Federal Electoral Division — CC BY 3.0 AU); QLD QSpatial Administrative Boundaries (federal, state, LG divisions, BCC wards); SA Location SA State Electorates 2026 / Wards via SAPPA; TAS LIST Electoral Boundaries + Legislative Council Areas (CC BY 3.0 AU); ACTmapi ACT Electoral Division; NT via Geoscape Administrative Boundaries on the Digital Atlas of Australia | CC BY 4.0 unless noted                                                                                                                                                               | © State of Victoria (DEECA) / © State of NSW (Spatial Services) / © State of Queensland (NRMMRRD; ECQ) © Change Commission © AEC / © Government of South Australia (DHUD) / "Electoral Boundaries" from theLIST © State of Tasmania / © Australian Capital Territory / © Geoscape Australia |
| ACMA Register of Radiocommunications Licences                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | ACMA RRL licence (derivatives permitted, attribution required)                                                                                                                       | Based on Australian Communications and Media Authority information                                                                                                                                                                                                                          |
| nbn co address lookup                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | public endpoint, no published API terms; requests are rate-limited to 2 in flight and sent via Crawlee's got-scraping client                                                         | nbn co                                                                                                                                                                                                                                                                                      |
| NSW: SIX Property + Cadastre + Administrative Boundaries, ePlanning Principal Planning / Hazard / Protection layers, RFS Bush Fire Prone Lands, School Finder catchments (CARTO), TfNSW Timetables Complete GTFS (Open Data Hub), EPA notified sites / EPLs / WARRP landfills                                                                                                                                                                                                                                          | CC BY 4.0                                                                                                                                                                            | © State of New South Wales (Spatial Services; DPHI; RFS; Department of Education)                                                                                                                                                                                                           |
| QLD: Land Parcel Property Framework, Brisbane City Plan 2014 overlays (BCC open data), Moreton Bay planning-scheme overlays, Gold Coast City Plan v13 + 2026 flood services, DoE school catchments, TransLink SEQ GTFS                                                                                                                                                                                                                                                                                                 | CC BY 4.0                                                                                                                                                                            | © State of Queensland (Department of Resources; DoE; TMR) / © Brisbane City Council / © City of Moreton Bay / © City of Gold Coast                                                                                                                                                          |
| QLD: Logan Planning Scheme 2015 v9.2 property report; Sunshine Coast Planning Scheme 2024 layers                                                                                                                                                                                                                                                                                                                                                                                                                       | CC BY 3.0 AU (Logan stated on the AGOL item; Sunshine Coast stated on the council's other spatial items, **not on the 2024-scheme items themselves** — confirm before relying on it) | © Logan City Council / © Sunshine Coast Council                                                                                                                                                                                                                                             |
| WA: Landgate SLIP — Cadastre Address (LGATE-002), Local Government Authority boundaries (LGATE-233), LPS/Region Scheme zones and R-codes (DPLH), Bush Fire Prone Areas (DFES), DWER floodplain layers, PTA stops                                                                                                                                                                                                                                                                                                       | CC BY 4.0                                                                                                                                                                            | © Western Australian Land Information Authority (Landgate) and contributing agencies                                                                                                                                                                                                        |
| SA: SAGAF valuation locator, SAPPA Property and Planning Atlas (parcels incl. strata units, councils, Planning & Design Code zones/overlays, flood awareness, Adelaide Metro stops)                                                                                                                                                                                                                                                                                                                                    | undocumented public endpoints (Referer-gated); no open licence stated                                                                                                                | © Government of South Australia (DHUD / Land Services SA / DIT)                                                                                                                                                                                                                             |
| TAS: LIST address geocodes + cadastre, PlanningOnline zones and code overlays, SES flood hazard/depth, DECYP school intake areas                                                                                                                                                                                                                                                                                                                                                                                       | CC BY 3.0 AU                                                                                                                                                                         | © State of Tasmania (Land Tasmania; Tasmanian Planning Commission; SES; DECYP)                                                                                                                                                                                                              |
| TAS: Public Transport Tasmania GTFS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | CC BY 4.0                                                                                                                                                                            | © State of Tasmania (Department of State Growth)                                                                                                                                                                                                                                            |
| ACT: ACTmapi addresses, blocks, Territory Plan zones/overlays, bushfire prone areas, flood extents, priority enrolment areas; Transport Canberra GTFS + light-rail stations                                                                                                                                                                                                                                                                                                                                            | CC BY 4.0                                                                                                                                                                            | © Australian Capital Territory                                                                                                                                                                                                                                                              |

Mobile figures are **infrastructure proximity** (distance to the nearest licensed base-station site per carrier), not a coverage or signal-strength prediction.

### Limitations

- Coverage differs by state and, in QLD, by council (see table). Use `status` to distinguish "not in overlay" from "not yet supported".
- Test addresses copied from consumer geocoders may not exist: street-interpolated points (`20 Prospect Rd, Prospect SA`, `5 Wattle St, Lyneham ACT`) are refused by the authoritative layers rather than snapped to a neighbour.
- SA planning is ~24 point queries per address (SAPPA group layers can't be queried as one). Requests are capped at 4 in flight per host regardless of `concurrency`, so a large SA/NSW batch is throttled by the server, not by you; raising `concurrency` past ~8 mostly helps mixed-state batches.
- Planning data is the gazetted scheme layer; it does not replace a Planning Property Report or a section 32. Outside Brisbane, overlays are evaluated at the parcel centroid; a large or irregular lot may touch overlay classes the centroid misses. In Brisbane, overlays are evaluated against the whole lot polygon (inset 0.5 m so shared fence lines don't count), which also reports thin genuine overlaps — at 36 Baroona Rd Milton a character overlay covering 2.8 % of the lot and Brisbane River FPA 4 covering 0.4 % both appear; the council's own report lists the latter but not the former.
- Independent check: zones and key overlays for one address per state were compared against each state's own property-report UI on 2026-09-01 (`research/ground-truth.md`); ACT could not be UI-verified (the new ACTmapi viewer exposes no form controls to automation).
- Flood modelling is a 1 % AEP screening layer. Larger floods occur; areas without studies show as `not_found`, not clear.
- Parcel snapping uses the cadastral parcel that contains the geocoded point. Large or irregular lots may straddle several zones; overlays are reported for the centroid.
- Electorate boundaries from the ABS layers (`source.id` starting `abs.`) are mesh-block approximations of the legal boundaries; the electoral commissions' own lookups are authoritative for a lot on a division edge. The ABS re-issues these structures each year (SED/LGA around October, CED around December 2026 under ASGS Edition 4); the actor is pinned to the 2025 release and `boundaries` says so.
- Government endpoints are shared infrastructure; the per-host cap (4, `places.nbnco.net.au` 2) is deliberate. Transient outages degrade the affected block to `unknown` rather than failing the run.

#### Notes for agent / MCP consumers

- Read the row count from the dataset (`totalItemCount` on get-dataset-items), not from the run summary: Apify's `call-actor` summary has reported `itemCount: 20` for a 25-row dataset a second after `SUCCEEDED`.
- The MCP `get-dataset-items` `fields=` projection silently drops arrays of objects — `planning.overlays`, `contaminatedLand.nearby` and the EPA hits vanish without error. Fetch full items and trim with `omit=` instead.

# Actor input Schema

## `addresses` (type: `array`):

Australian street addresses, one per line. Include suburb and state or postcode (e.g. `10 Glenferrie Rd, Malvern VIC 3144`). Unit addresses in `1/79 Ormond Rd` form are supported. Up to 5000 per run.

## `records` (type: `array`):

Alternative to `addresses`: objects with `id`, `address`, and optionally `lat`/`lng` (skips geocoding; the address text must still name the state). Useful for round-tripping your own IDs.

## `blocks` (type: `array`):

Which enrichment blocks to run. Fewer blocks = faster; price per address is unchanged.

## `nbn` (type: `boolean`):

The NBN technology lookup uses nbn co's public address-check endpoint, which is not a documented API. Turn off if it becomes unavailable; the `connectivity.nbn` block is then reported as `unknown`.

## `concurrency` (type: `integer`):

Addresses processed in parallel. Government endpoints are shared infrastructure — keep this modest.

## Actor input object example

```json
{
  "addresses": [
    "156 Bulleen Rd, Bulleen VIC 3105",
    "31 Marrickville Rd, Marrickville NSW 2204",
    "36 Baroona Rd, Milton QLD 4064"
  ],
  "blocks": [
    "planning",
    "flood",
    "contaminatedLand",
    "connectivity",
    "transport",
    "schools",
    "demographics",
    "electorates"
  ],
  "nbn": true,
  "concurrency": 8
}
```

# Actor output Schema

## `addresses` (type: `string`):

One row per address: address (national canonical formatted, lat/lng, parcelId), planning, flood, contaminatedLand, connectivity (nbn, mobile), transport, schools, demographics, electorates (federal, stateLower, stateUpper, ward). status ok | partial | geocode\_failed (not charged).

# 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 = {
    "addresses": [
        "156 Bulleen Rd, Bulleen VIC 3105",
        "31 Marrickville Rd, Marrickville NSW 2204",
        "36 Baroona Rd, Milton QLD 4064"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("davidar/au-address-enrichment").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 = { "addresses": [
        "156 Bulleen Rd, Bulleen VIC 3105",
        "31 Marrickville Rd, Marrickville NSW 2204",
        "36 Baroona Rd, Milton QLD 4064",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("davidar/au-address-enrichment").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 '{
  "addresses": [
    "156 Bulleen Rd, Bulleen VIC 3105",
    "31 Marrickville Rd, Marrickville NSW 2204",
    "36 Baroona Rd, Milton QLD 4064"
  ]
}' |
apify call davidar/au-address-enrichment --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,davidar/au-address-enrichment"
        }
    }
}
```

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/4mM0SZcoUGoCvxoJR/builds/1HRWOJyvHl8kZXGNA/openapi.json
