# Australian Address API - G-NAF, Parcels, Buildings (`nabeelbaghoor/australian-address-data-api`) Actor

Australian address verification and property data: autocomplete and geocode against the national address file with a match score, reverse geocode a coordinate, then read the cadastre parcel, property, building footprint, height, roof, solar and pool, plus the areas around it.

- **URL**: https://apify.com/nabeelbaghoor/australian-address-data-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Real estate, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 address or locality suggestion returneds

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

## Australian Address API - G-NAF, Parcels, Buildings

Verify any Australian address against the national address file, then follow it down: the coordinates, the cadastre parcel it sits on, the property it belongs to, the building on it with its height, roof, solar panels and pool, and the statistical, electoral and local government areas around it.

### What this actor does

- **Address autocomplete.** Suggest addresses or localities from a partial string, with the provider's own ranking and the suggestion ID you retrieve the full address with. Restrict by state, by address type, or to the national file, the live file or mail addresses.
- **Geocode, with an honest match score.** Match a full address or its separate parts and get back the match type, match code, match quality and a numeric score. A "match" at locality level is a suburb, not a house, and those four columns are what tell you which one you got.
- **Reverse geocode.** Addresses at a coordinate, with the provider's match method describing how the point was resolved.
- **Address attributes, with bundles.** Everything known about an address ID, and optionally the statistical areas, remoteness, socioeconomic indexes, commonwealth and state electorates, local government area, parcel, property, buildings and solar panel bundles attached to the same row.
- **Mail point.** Delivery point identifier and barcode for an address, for mail preparation.
- **Cadastre and property.** Land parcels and properties by identifier, by point with an optional radius, or inside a bounding box, with the option of base parcels only so strata subdivisions do not multiply your rows.
- **Buildings.** Footprints by identifier, point or bounding box, with height, roof material and shape, solar panels and pool indicator, plus the addresses, parcels and properties each building relates to.
- **Administrative boundaries.** Which locality, ABS mesh block, remoteness area, socioeconomic index area, state and commonwealth electorate and local government area a point falls in.
- **Dataset catalogue.** What bulk datasets your key is actually licensed for, which is worth knowing before you spend a run finding out.
- **Pay per result.** You are charged for rows carrying a real record. Addresses the provider cannot match and points with nothing at them are free.

### Bring your own key

This actor calls the provider with **your own account key**, created in your provider account. Paste it into the input, or set it as the `DATA_API_KEY` secret. Nothing runs on anyone else's credentials, and a run without a key ends cleanly with an explanation rather than failing.

One detail that costs people an afternoon: the key travels in an `Authorization` header **with no scheme word in front of it**. Not `Bearer`, not `ApiKey`. A key pasted with a scheme attached is not seen as a credential at all, which looks exactly like a wrong key. This actor strips one if you paste it by accident.

### GDA94 is not WGS84

The coordinates this API returns default to **GDA94**, not WGS84. In Australia the two are about **1.8 metres** apart, and they agree to roughly six decimal places, so nothing about the numbers tells you which one you have. That is the difference between a point on a roof and a point in the garden, and it is enough to put an address on the wrong side of a parcel boundary.

So every row this actor writes records the reference system it was returned in, in a `crs` column. Pick GDA2020 if you are joining to current Australian survey data, WGS84 if you are plotting on a web map, or leave the provider default and know what you have.

### Polygons are opt in

A cadastre parcel or building footprint is a full ring of coordinates. Written into a spreadsheet cell it makes the file several times larger without making it more useful, so every feature row carries a **centroid** and a geometry type by default, and the complete GeoJSON geometry only when you ask for it.

The centroid is the average of the outer ring's positions. It is good enough to map and explicitly not a survey grade centroid, which is exactly why the full geometry is one checkbox away.

### Rate limits start at two a second

Rate limits on this API are per subscription: two requests a second on the free plan, ten on Team, twenty on Professional, fifty on Enterprise. The default pacing here is 120 requests a minute, which matches the free plan, because that is what most first runs are on. Raise it to match yours.

### Example output

```json
{
  "recordType": "address",
  "requested": "219 North Terrace, Adelaide SA 5000",
  "found": true,
  "crs": "gda94",
  "matchType": "address",
  "matchQuality": "exact",
  "matchScore": 1,
  "geometryType": "Point",
  "latitude": -34.92123456,
  "longitude": 138.60123456,
  "addressId": "GASA_424242424",
  "formattedAddress": "219 NORTH TERRACE, ADELAIDE SA 5000",
  "localityName": "ADELAIDE",
  "stateTerritory": "SA",
  "postcode": "5000",
  "streetNumber1": 219,
  "streetName": "NORTH",
  "streetType": "TERRACE",
  "cadastralIdentifier": "D12345 A100",
  "geoFeature": "address"
}
```

### FAQ

#### What Australian address data does this actor return?

Verified addresses from the national address file with their identifiers, every parsed address part, coordinates, geocode feature level and match quality, plus optional bundles covering statistical areas, remoteness, socioeconomic indexes, electorates, local government area, the parcel and property behind the address, buildings and solar panels. It also returns cadastre parcels, properties, building footprints and attributes, administrative boundaries and the bulk dataset catalogue.

#### How do I verify an Australian address?

Run geocode mode with the address as one line, or fill in the separate address part inputs. Each result carries a match type, match code, match quality and score. Set the minimum feature level to `address` if a suburb centroid is not an answer you can use, and the run will report a miss rather than quietly hand you a locality.

#### What is G-NAF and is this it?

G-NAF is Australia's authoritative address file, compiled from state and territory land registries and other contributing sources. This actor reads the provider's APIs over that dataset, so address identifiers returned here are the ones other G-NAF derived datasets join on. You can also search the continuous address dataset, which includes addresses the national file has not adopted yet.

#### Can I get building footprints and heights?

Yes. The building modes return footprints by building identifier, by point with an optional radius, or inside a bounding box, and the building attributes input adds height, roof material and shape, solar panels and the pool indicator. Each attribute family may be entitled separately on your plan.

#### What is the difference between a cadastre parcel and a property?

A cadastre parcel is a land registry parcel: the surveyed lot in the register. A property is the thing people own and occupy, which may combine several parcels or sit as one of many strata lots inside one. Both are available here, both by identifier, point and bounding box, and the base parcels and base properties switches keep strata subdivisions from multiplying your rows.

#### Which coordinate system should I ask for?

GDA2020 if you are joining to current Australian survey or cadastral data. WGS84 if you are plotting on a web map or joining to global data. GDA94 is the provider's default and what most older Australian datasets are in. Whichever you pick, every row records it.

#### Why did my bounding box request come back empty?

A bounding box here is four comma separated numbers in the order bottom left longitude, bottom left latitude, top right longitude, top right latitude, to five decimal places or fewer. Latitude and longitude the other way round describes a box somewhere in the ocean rather than an error, so the order matters more than the precision.

#### How do I find out what my key covers?

Run the dataset catalogue mode with licensed datasets only switched on. It lists the products, regions, releases and formats this account can actually download, which turns a later entitlement refusal into something you knew in advance.

### Keyword map

Australian address API, address validation Australia, G-NAF API, address autocomplete Australia, address verification API, geocoding API Australia, reverse geocoding Australia, cadastre API, land parcel data Australia, property boundaries API, building footprint API, building height data, roof data API, solar panel data Australia, swimming pool detection data, ABS mesh block API, SEIFA data API, local government area lookup, electoral boundary API, postcode lookup Australia, DPID mail point, address barcode Australia, GDA2020 coordinates, GDA94 WGS84 difference, property data API Australia

# Actor input Schema

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

Suggest autocompletes a partial address or locality. Geocode matches a full or partial address and says how well it matched. Reverse geocode does the same from a coordinate. Address attributes reads everything known about one address ID. Mail point returns the delivery point identifier and barcode. The building, cadastre and property modes find features by identifier, point or bounding box, and boundaries says which administrative areas cover a point.

## `queries` (type: `array`):

One address, suburb or postcode per line, for the suggest, geocode and mail point modes. Address suggestions need at least four characters.

## `points` (type: `array`):

One "latitude,longitude" pair per line, in that order. Several of the provider's own paths take longitude first, so the order is fixed for you here: a swapped pair returns a real place somewhere else rather than an error.

## `boundingBoxes` (type: `array`):

One box per line as four comma separated numbers: bottom left longitude, bottom left latitude, top right longitude, top right latitude, to five decimal places or fewer.

## `identifiers` (type: `array`):

One identifier per line: an address ID, suggestion ID, land registry parcel ID, cadastre PID, property PID, building PID or boundary identifier, depending on the mode.

## `identifierType` (type: `string`):

Which identifier the find-by-identifier modes are given. These endpoints accept several and require none, so the wrong one returns an empty answer rather than an error. Leave empty to use the sensible default for the mode.

## `crs` (type: `string`):

Which datum coordinates come back in. The provider defaults to GDA94, which is about 1.8 metres from WGS84 in Australia and looks identical to the eye, so the choice is recorded on every row. Pick GDA2020 for current Australian survey data, or WGS84 to plot on a web map.

## `includeGeometry` (type: `boolean`):

Write the complete GeoJSON geometry onto each row. Off by default: a cadastre or building footprint is a full coordinate ring, and every row already carries a centroid and the geometry type.

## `resultsPerAddress` (type: `integer`):

How many matches to ask for per address or point. Suggestions are capped at 20 by the provider and clamped here.

## `stateFilter` (type: `array`):

Restrict results to these states and territories. Leave empty for all of Australia.

## `matchTypes` (type: `array`):

What the geocoder is allowed to match at. Leave empty to accept the provider default, which falls back from address to street to locality.

## `minGeoFeatureLevel` (type: `string`):

The coarsest geocoded feature this run will accept. Set it to address if a suburb centroid is not an answer you can use.

## `addressDataset` (type: `string`):

Which address dataset the geocoder searches: the national address file, or the continuous address dataset that also covers addresses the national file has not adopted yet.

## `predictiveDataset` (type: `string`):

Which dataset address suggestions come from: the national address file, the live file, mail addresses, or a combination.

## `addressType` (type: `string`):

Restrict suggestions to physical addresses, mailing addresses, or both.

## `addressBundles` (type: `array`):

Extra data to attach to each address: statistical areas, remoteness, buildings, electorates, local government area, the parcel and property behind it, socioeconomic indexes and solar panel data. Each bundle adds columns and may be entitled separately.

## `excludeAliases` (type: `boolean`):

Leave out alias addresses, which are alternative forms of an address that resolve to the same place.

## `excludePrimaryWithSecondary` (type: `boolean`):

Leave out a primary address when it has related secondary addresses, so a block of units suggests its units rather than the block.

## `buildingAttributes` (type: `array`):

Extra building attributes to return: swimming pool indicator, height, roof material and shape, and solar panels. Each may be entitled separately.

## `includePlanning` (type: `boolean`):

Attach the planning bundle to cadastre parcels, where your plan includes it.

## `radiusMetres` (type: `integer`):

Search this far around a point, from 1 to 500 metres. Leave empty to return only what the point falls inside.

## `baseParcelsOnly` (type: `boolean`):

Return only base cadastre parcels, leaving out the strata and subdivision parcels stacked on top of them.

## `basePropertiesOnly` (type: `boolean`):

Return only base properties, leaving out the derived ones above them.

## `buildingRelation` (type: `string`):

Which relation of a building to read in the building relations mode.

## `boundaryLayers` (type: `array`):

Which administrative layers to return at a point: localities, ABS mesh blocks and remoteness and socioeconomic areas by census year, state and commonwealth electorates, and local government areas. Leave empty for the provider default.

## `mailMatchType` (type: `string`):

What the mail point service is allowed to match at. Mail point is a Pro or Enterprise feature on this API.

## `barcodeFormat` (type: `string`):

Which barcode length the mail point service returns.

## `postalDeliveryIdentifier` (type: `string`):

The box or bag number for a postal delivery address, used by mail point.

## `postalDeliveryTypeCode` (type: `string`):

The postal delivery type for a postal address, for example PO BOX or RMB, used by mail point.

## `complexUnitType` (type: `string`):

Unit type for a structured address search, for example Unit or Flat.

## `complexUnitIdentifier` (type: `string`):

Unit identifier for a structured address search, including any prefix or suffix.

## `complexLevelType` (type: `string`):

Level type for a structured address search, for example Level or Floor.

## `complexLevelNumber` (type: `string`):

Level identifier for a structured address search, including any prefix or suffix.

## `streetNumber1` (type: `string`):

First street number for a structured address search, including any prefix or suffix.

## `streetNumber2` (type: `string`):

Second street number for a structured address search, for a range such as 12-14.

## `streetName` (type: `string`):

Street name for a structured address search, without the street type.

## `streetType` (type: `string`):

Street type for a structured address search, for example AV, RD or ST.

## `streetSuffix` (type: `string`):

Street suffix for a structured address search, for example West in Smith St West.

## `siteName` (type: `string`):

Site or building name for a structured address search.

## `lotIdentifier` (type: `string`):

Lot identifier for a structured address search, used where a property has no street number yet.

## `localityName` (type: `string`):

Suburb or locality name for a structured address search.

## `stateTerritory` (type: `string`):

State or territory for a structured address search, for example NSW.

## `postcode` (type: `string`):

Postcode for a structured address search.

## `datasetProduct` (type: `string`):

Filter the dataset catalogue to one product.

## `datasetRegion` (type: `string`):

Filter the dataset catalogue to one region or state.

## `datasetFormat` (type: `string`):

Filter the dataset catalogue to one delivery format.

## `datasetRelease` (type: `string`):

Filter the dataset catalogue by release, as YYYY-MM, a comma separated start and end, or the word latest.

## `datasetQuery` (type: `string`):

Free text search across the dataset catalogue.

## `licencedDatasetsOnly` (type: `boolean`):

List only the datasets this account is licensed to download.

## `pageSize` (type: `integer`):

How many features to ask for per request on the paged modes. A run never asks for more rows than it is allowed to keep.

## `maxResults` (type: `integer`):

Stop after this many rows. Counts every row: suggestions, addresses, features, boundaries and catalogue entries alike.

## `requestsPerMinute` (type: `integer`):

How fast to call the provider. The default of 120 is two a second, which is the free plan ceiling; raise it to 600 on a Team plan, 1200 on Professional.

## `apiKey` (type: `string`):

Your own account key, created in your provider account. Sent in an Authorization header with no scheme word in front of it, which is what this API expects. Stored encrypted and never written into the dataset. Can also be supplied as the DATA\_API\_KEY environment secret.

## `baseUrl` (type: `string`):

Overrides the host the API is called on. Leave empty unless the provider has given you a different one.

## Actor input object example

```json
{
  "mode": "geocode",
  "identifierType": "",
  "crs": "gda94",
  "includeGeometry": false,
  "resultsPerAddress": 5,
  "minGeoFeatureLevel": "",
  "addressDataset": "",
  "predictiveDataset": "",
  "addressType": "",
  "excludeAliases": false,
  "excludePrimaryWithSecondary": false,
  "includePlanning": false,
  "baseParcelsOnly": false,
  "basePropertiesOnly": false,
  "buildingRelation": "addresses",
  "mailMatchType": "",
  "barcodeFormat": "",
  "datasetProduct": "",
  "datasetRegion": "",
  "datasetFormat": "",
  "licencedDatasetsOnly": false,
  "pageSize": 100,
  "maxResults": 100,
  "requestsPerMinute": 120
}
```

# Actor output Schema

## `records` (type: `string`):

One row per record, alongside the address, point, box or identifier that produced it.

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/australian-address-data-api").call(input);

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/australian-address-data-api").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call nabeelbaghoor/australian-address-data-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/australian-address-data-api"
        }
    }
}
```

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/1WlMNDWwGY9Vu4vFx/builds/ntaHNXSqVnKl2hRex/openapi.json
