How to Geocode Australian Addresses with GeoPy & Open Land Fabric

Learn how to geocode Australian addresses using GeoPy's ArcGIS provider with Open Land Fabric. Covers setup, Pandas batch processing, and concurrency best practices.

GeoPy is the most popular Python library for geocoding, but standard commercial providers require credit cards, paid API tokens, or restrictive attribution terms. Open Land Fabric provides a free, unkeyed, native ArcGIS-compatible GeocodeServer surface covering all 16.1M Australian addresses and 8.6M cadastre parcels.

Zero Setup Required: Because Open Land Fabric implements standard Esri REST specifications, simply pass domain="openlandfabric.org" to GeoPy's built-in ArcGIS geocoder.

1. Quickstart: Geocoding in Python

Install GeoPy via pip or uv:

pip install geopy

Then run a forward geocode query:

from geopy.geocoders import ArcGIS

geolocator = ArcGIS(domain="openlandfabric.org", timeout=10)
location = geolocator.geocode("100 Flinders Street, Melbourne VIC 3000")
print(location.address)
print(f"Latitude: {location.latitude}, Longitude: {location.longitude}")

2. Geocoding Pandas DataFrames with RateLimiter

When geocoding lists in Pandas, wrap the geocoder in GeoPy's RateLimiter to pace requests sequentially and retry transient network errors:

from geopy.extra.rate_limiter import RateLimiter

geocode = RateLimiter(geolocator.geocode, min_delay_seconds=0.15, max_retries=2)
df["location"] = df["address"].apply(geocode)

3. Concurrency Protections vs. Batch Processing

In-flight requests are capped at 4 concurrent connections per caller to prevent thread exhaustion. For 500+ rows, use the Client Workspace or Batch Geocoding Service.

4. Reverse Geocoding

location = geolocator.reverse("-37.8164, 144.9702")
print(location.address)