GUI wizard, Python automation & ModelBuilder for high‑volume look‑ups
Quick link: This article is a companion to Batch Geocoding in ArcGIS Pro 3.4+. If you need the forward direction (addresses ➜ points) read that guide first.
1 Why reverse geocoding?
Turn raw latitude/longitude into postal addresses for reporting, compliance or customer analytics. Common scenarios include:
Use‑case | Typical Input | Required Output |
---|---|---|
Accident reporting for insurers | GPS points from mobile app | Closest street address & city |
Retail foot‑traffic analysis | Bluetooth beacons | Zip code for demographic join |
Emergency services | AVL vehicle tracks | Mile‑marker / address for dispatch |
ArcGIS Pro 3.4+ ships with fast, credit‑efficient reverse geocoding in the World Geocoding Service, and you can automate it the same ways you automated forward geocoding.
2 Prerequisites
- ArcGIS Pro 3.4 or later.
- Access to ArcGIS World Geocoding Service (credits) or a local reverse locator (StreetMap Premium or your own).
- Coordinate table or point feature class with
X
,Y
fields in WGS 84 (EPSG:4326) or projected CRS.
Tip — free credits: Your ArcGIS Developer account includes 2 000 reverse‑geocode requests each month.
3 Method 1 — GUI: Reverse Geocode tool
3.1 Prepare your input layer
- If your coordinates are in a CSV, import with XY Table To Point (set the proper CRS).
- Ensure fields are type Double for
X
&Y
.
3.2 Run Reverse Geocode
- Analysis ▶ Tools ▶ Data Management ▶ Features ▶ Reverse Geocode.
- Input Features ➜ your point layer.
- Locator ➜ World Geocoding Service.
- Output Feature Class ➜
points_with_addr
. - Address Type: choose Point Address for most precise, or Street Name to save credits.
- Click Run.
The tool writes a new feature class with fields like Address
, City
, Region
, Postal
, Country
, plus Distance
(metres to nearest address).
3.3 Credit cost
1 point = 1 reverse geocode. Multiply your record count by 0.04 credits per match.
4 Method 2 — Python script (ArcPy)
import arcpy, pathlib
# — user parameters —
ws = pathlib.Path(r"C:\GIS\ReverseDemo")
points_in = ws / "gps_points.shp" # input points
locator = "ArcGIS World Geocoding Service" # or local .loc file
out_fc = ws / "gps_points_addr"
BATCH_SIZE = 1000 # requests per chunk
arcpy.env.workspace = ws
arcpy.SetLogHistory(False)
arcpy.geocoding.ReverseGeocode(
in_features=str(points_in),
address_locator=locator,
out_feature_class=str(out_fc),
address_type="POINT_ADDRESS",
search_distance="100 Meters",
location_type="ROUTING_LOCATION",
batch_size=BATCH_SIZE)
print(arcpy.GetMessages())
Why batch‑size? For > 50 k records, chunking avoids token timeouts and lets you throttle credit use.
Scheduling: Same approach as in the batch‑geocoding article: Windows Task Scheduler or cron
for nightly runs.
5 Method 3 — ModelBuilder (low‑code)
- Insert ▶ ModelBuilder.
- Drag XY Table To Point ➜ Reverse Geocode ➜ Export Features.
- Right‑click Input Table & Address Type ➜ Parameter so end‑users can pick files and precision.
- Save the model into a toolbox; share it as a custom tool.
(Add a colour‑coded model screenshot placeholder here.)
6 Choosing address precision vs credits
Address Type | Example Output | Credits/record | Use‑case |
---|---|---|---|
Point Address | 380 New York St, Redlands CA | 0.04 | Asset or parcel‑level accuracy |
Street Name | New York St, Redlands CA | 0.04 | General routing, anonymised data |
Postal | 92373 | 0.04 | Demographic roll‑ups |
All address types cost the same credits, but less specific types run faster and reduce mismatch risk.
7 Handling unmatched or far‑distance points
- Distance > 100 m? Check CRS errors or rural/missing addresses.
- Null Address? Increase Search Distance to 500 m or fall back to Street Name.
- Country mismatch? Filter your input points by country and feed to country‑specific locators.
8 Exporting & sharing results
- CSV — use Table To Table, include geom columns if needed.
- Feature layer to ArcGIS Online — Share ▶ Web Layer.
- Join back to original tracking table by unique ID.
GDPR note: World Geocoding Service processes coordinates, not personal data. If you must create addresses fully on‑prem, use StreetMap Premium or a custom locator.
9 Related reading
- Batch Geocoding (addresses ➜ coords) — step‑by‑step guide with Python & ModelBuilder.
- Open‑source Geocoding with Nominatim and Geopy
FAQ
Q: How many credits does 10,000 coordinates cost?
A: Approximately 400 credits (10,000 × 0.04).
Q: Can I reverse-geocode offline?
A: Yes. You can use StreetMap Premium or build your own custom locator in a file geodatabase (FGDB).
Q: What coordinate system should my points use?
A: WGS 84 (EPSG 4326) is safest, but ArcGIS Pro can reproject on-the-fly from any CRS.