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