How to Reverse Geocode Coordinates to Addresses in Bulk
Convert thousands of GPS coordinates to street addresses. Free bulk reverse geocoding from CSV/Excel, API with Python examples, and quality validation tips.
A logistics company in São Paulo collected 50,000 GPS pings every day from its delivery fleet. Latitude, longitude, timestamp, vehicle ID. Clean data, precise to 3 meters. But the operations team could not use any of it — because nobody on the team reads coordinates. They needed addresses. "Where did truck 47 stop for 12 minutes?" is a useful question. "What happened at -23.5614, -46.6558?" is not.
They tried reverse geocoding the coordinates one at a time through Google Maps. At 50,000 per day, that would take a human roughly 17 hours of copying, pasting, and writing down results. They needed bulk reverse geocoding — a way to convert thousands of coordinate pairs to street addresses in minutes, not days.
This guide is the practical walkthrough. No theory about spatial indexing. No build-vs-buy debates. Just: you have coordinates, you need addresses, here is exactly how to do it — free, in bulk, with working examples.
Step 1: Prepare Your Coordinate Data
Before you reverse geocode anything, check your data. Ninety percent of bulk reverse geocoding failures happen before the first coordinate is processed — because the input data has problems that no geocoder can fix.
The Three-Second Sanity Check
Open your file and look at the first few rows. Ask three questions:
Are latitude and longitude in separate columns? If they are combined into a single "location" column like "40.7484, -73.9857" you will need to split them. Most spreadsheet tools and CSV parsers can do this with a comma delimiter.
Are the values in decimal degrees? The standard format is decimal (40.7484, -73.9857). If you see degrees-minutes-seconds like 40°44'54"N, you need to convert: degrees + (minutes/60) + (seconds/3600). South and West are negative.
Are latitude and longitude in the right columns? This is the #1 reverse geocoding error on Earth. Latitude ranges from -90 to +90. Longitude ranges from -180 to +180. If your "latitude" column has values like -73 or 151, those are longitudes. Swap them before processing or every result will be on the wrong continent.
Common Coordinate Formats
| Format | Example (Empire State Building) | Ready to Use? |
|---|---|---|
| Decimal degrees | 40.7484, -73.9857 | ✅ Yes — standard format |
| Degrees-minutes-seconds | 40°44'54.2"N, 73°59'8.5"W | ❌ Convert to decimal first |
| Combined string | "40.7484, -73.9857" | ❌ Split into two columns |
| NMEA (GPS raw) | 4044.9024,N,07359.1424,W | ❌ Parse and convert |
| Geohash | dr5ru7c02wnv | ❌ Decode to decimal first |
If your data comes from smartphone GPS, fleet trackers, or any modern database, it is almost certainly already in decimal degrees. If it comes from survey equipment, aviation systems, or legacy databases, check the format first.
Step 2: Spot-Check with a Free Single Reverse Geocode
Before processing your entire file, reverse geocode 3–5 coordinates manually to verify your data is clean. Go to the reverse geocoding tool, paste a latitude and longitude, and check the result. No account needed.
What to look for:
- The returned address is in the correct country. If you expected New York but got Tallinn, your coordinates are swapped.
- The relevance score is above 0.8. If most spot-checks return below 0.5, your coordinates may be low-precision (cell tower or IP geolocation) and bulk results will be approximate.
- The address makes sense for the context. Fleet GPS should return street addresses, not "Pacific Ocean" or "Sahara Desert." If it does, filter those rows before bulk processing.
This takes two minutes and saves you from processing 50,000 garbage results. Think of it as the pilot light before you turn on the furnace.
Step 3: Bulk Reverse Geocode from CSV or Excel
This is the main event. You have a file with thousands of coordinate pairs. Here is how to convert them all to addresses in one shot.
1. Go to csv2geo.com/batchgeocoding and drag your file onto the upload area. Accepts CSV, XLS, XLSX, and TSV. Your data appears in a preview grid.
2. Switch to Reverse mode. The toggle is in the options bar above your data. This tells the system you are converting coordinates to addresses, not addresses to coordinates.
3. Verify column detection. The AI auto-detects your latitude and longitude columns and labels them with green tags. If it guessed wrong (common when columns are named "x" and "y" instead of "lat" and "lng"), click the dropdown to correct them.
4. Select your country (optional but recommended). If all your coordinates are in one country, selecting it narrows the search and improves speed and accuracy. For mixed-country data, leave it on "Auto-detect."
5. Click "Process" and download. For files under 50 rows, results appear in seconds. Larger files process in the background — you get a notification when done. Download the result: your original data with new columns appended for street address, city, country, postal code, and relevance score.
Example: Before and After
| vehicle_id | lat | lng | timestamp | → address | → city | → score |
|---|---|---|---|---|---|---|
| T-047 | -23.5614 | -46.6558 | 2026-03-30 08:14 | Av. Paulista, 1578 | São Paulo | 1.0 |
| T-047 | -23.5489 | -46.6388 | 2026-03-30 08:31 | R. Augusta, 2023 | São Paulo | 0.95 |
| T-112 | -23.5875 | -46.6820 | 2026-03-30 09:02 | R. Funchal, 418 | São Paulo | 1.0 |
| T-112 | -23.6100 | -46.6950 | 2026-03-30 09:15 | Av. Eng. Luís Carlos Berrini, 1376 | São Paulo | 0.90 |
| T-203 | -22.9068 | -43.1729 | 2026-03-30 10:44 | Av. Atlântica, 1702 | Rio de Janeiro | 1.0 |
The operations team in São Paulo? They uploaded their 50,000 GPS pings as a CSV. Processing took 14 minutes. Every row came back with a street address, city, and relevance score. The fleet manager opened the results in Excel, filtered by vehicle ID, and had a complete stop-by-stop delivery report — with addresses, not coordinates — in under 20 minutes total.
Free tier: 100 coordinates per day. For larger volumes, see subscription plans or use the API (Step 4).
Step 4: Reverse Geocode via API for Automated Pipelines
When reverse geocoding is part of an automated workflow — fleet telemetry landing in a database, IoT sensor data streaming in real time, a nightly batch job processing the day’s GPS logs — you need an API. The CSV2GEO API provides 18 endpoints including single and batch reverse geocoding. 1,000 free requests per day.
Single reverse geocode (cURL):
curl "https://csv2geo.com/api/v1/reverse?lat=-23.5614&lng=-46.6558&api_key=YOUR_KEY"Batch reverse geocode — up to 10,000 coordinates per request:
curl -X POST "https://csv2geo.com/api/v1/reverse/batch" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_KEY",
"coordinates": [
{"lat": -23.5614, "lng": -46.6558},
{"lat": -23.5489, "lng": -46.6388},
{"lat": -22.9068, "lng": -43.1729}
]
}'Python — process a CSV file programmatically:
import csv
from csv2geo import Client
client = Client("YOUR_API_KEY")
with open("fleet_gps.csv") as f:
reader = csv.DictReader(f)
rows = list(reader)
# Batch reverse geocode all coordinates
coords = [{"lat": float(r["lat"]), "lng": float(r["lng"])} for r in rows]
results = client.batch_reverse(coords)
# Merge addresses back into original data
for row, result in zip(rows, results):
row["address"] = result.formatted_address
row["city"] = result.city
row["score"] = result.relevance
# Write enriched CSV
with open("fleet_with_addresses.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)
print(f"Reverse geocoded {len(rows)} coordinates")Get your free API key at csv2geo.com/api-keys. Full endpoint reference at the API docs. For a detailed comparison of building your own vs using a managed API, see Reverse Geocoding API: Build vs Buy.
Step 5: Clean and Validate Your Reverse Geocoded Results
Bulk reverse geocoding is not "upload and trust." The relevance score is your quality control tool. Here is how to use it.
| Score | What It Means | Action |
|---|---|---|
| 0.9–1.0 | Exact building match — coordinates land on a known address point | ✅ Trust it. Use for delivery verification, CRM enrichment, reporting. |
| 0.7–0.89 | Street-level match — correct street, house number interpolated | ✅ Good enough for most use cases. Flag for manual review only if precision is critical. |
| 0.4–0.69 | Neighborhood/postal code — general area identified but not the specific building | ⚠️ Usable for heatmaps and area analytics. Not reliable for delivery or navigation. |
| Below 0.4 | City-level or worse — coordinates may be in water, wilderness, or unmapped area | ❌ Investigate. Common causes: ocean coordinates, swapped lat/lng, IP geolocation input. |
After downloading your results, sort by relevance score ascending. The lowest-scoring rows are your problem cases. Common fixes:
- Score near 0 + address in wrong country = swapped latitude and longitude. Fix: swap the two columns and re-process.
- Score below 0.3 + address is "middle of nowhere" = coordinates from ocean, highway, or wilderness. Fix: filter out rows where the vehicle was moving (speed > 0) or coordinates are outside your expected geographic area.
- Score 0.4–0.6 + address is approximate = low-precision source (Wi-Fi, cell tower). Fix: if you need street-level accuracy, these coordinates are not precise enough. Use them for area-level analytics only.
When Do You Need Bulk Reverse Geocoding?
Fleet & Delivery Operations
Convert daily GPS logs into stop-by-stop delivery reports with street addresses. Answer "where did each truck go today?" without reading a single coordinate. Process 10,000–100,000 pings per day.
Real Estate & Property Data
County assessor databases and MLS feeds often include parcel coordinates but not formatted street addresses. Bulk reverse geocode to fill in addresses for property listings, comp analysis, and flood zone mapping.
Research & Epidemiology
Academic datasets from environmental monitoring, health studies, and demographic surveys use coordinate-based data. Reverse geocode to add geographic context — neighborhood, postal code, administrative region — for spatial analysis.
Insurance & Risk Assessment
Underwriters reverse geocode claim locations to map risk exposure against flood zones, fire perimeters, and crime statistics. A coordinate pair becomes an address becomes a risk score.
Mobile App Analytics
User location data from mobile SDKs is coordinate-based. Reverse geocode to understand where your users are — by city, neighborhood, or venue — without ever showing them a coordinate pair.
IoT & Sensor Networks
GPS-enabled assets — shipping containers, agricultural equipment, medical devices — generate coordinate streams. Bulk reverse geocode nightly to produce human-readable location reports for operations teams.
Related Reverse Geocoding Guides
Go deeper: Reverse Geocoding: The Complete Guide explains how reverse geocoding works under the hood (opens with the Sullenberger Hudson River story), Reverse Geocoding API: Build vs Buy compares building your own infrastructure vs using a managed API, Lat Long Reverse Lookup is a visual tutorial for the online tool, How to Convert Address to Lat Long covers forward geocoding, and Best Batch Geocoding Tools Compared reviews CSV2GEO against Google, Mapbox, and HERE.
Frequently Asked Questions
How do I reverse geocode coordinates to an address?
For a single coordinate, use the free reverse geocoding tool — enter latitude and longitude, get the address instantly. For bulk coordinates, upload a CSV or Excel file to csv2geo.com/batchgeocoding, switch to Reverse mode, and download your file with addresses appended. For automated pipelines, use the API with 1,000 free requests per day.
Can I reverse geocode thousands of coordinates at once?
Yes. Upload a CSV or Excel file with latitude and longitude columns to csv2geo.com/batchgeocoding. Select Reverse mode and process the entire file. Free tier: 100 rows per day. The batch API accepts up to 10,000 coordinates per request.
What format do my coordinates need to be in?
Decimal degrees — for example, 40.7484, -73.9857. Latitude and longitude must be in separate columns. If your data uses degrees-minutes-seconds (DMS), convert to decimal first: degrees + (minutes/60) + (seconds/3600). South latitudes and West longitudes are negative.
Why did my reverse geocode return an address in the wrong country?
Almost always swapped latitude and longitude. Latitude ranges -90 to +90. Longitude ranges -180 to +180. If your "latitude" values exceed 90 or are below -90, they are longitudes. Swap the two columns and re-process.
What is a relevance score in reverse geocoding?
A number from 0 to 1.0 indicating how close the matched address is to your input coordinates. 1.0 = exact building match (rooftop accuracy). 0.7–0.9 = correct street, approximate building. Below 0.4 = city-level or worse. Use the score to filter unreliable results.
Is bulk reverse geocoding free?
Yes, up to 100 coordinate pairs per day via file upload at csv2geo.com/batchgeocoding, and 1,000 per day via API. No credit card required. For higher volumes, see subscription plans.
Can I reverse geocode GPS data from fleet trackers?
Yes — this is one of the most common use cases. Export your GPS logs as CSV with latitude and longitude columns, upload to CSV2GEO, and download addresses. Pro tip: filter for coordinates where vehicle speed = 0 (stopped) for the most accurate stop addresses. Coordinates captured at highway speed will resolve to the nearest building, which may not be the actual destination.
What is the difference between reverse geocoding and forward geocoding?
Forward geocoding converts addresses to coordinates (text in, numbers out). Reverse geocoding converts coordinates to addresses (numbers in, text out). CSV2GEO supports both from the same tool — just toggle between Forward and Reverse mode. See our complete reverse geocoding guide for a detailed comparison.
I.A. — CSV2GEO Creator. 50,000 GPS pings, 14 minutes, every truck accounted for. That is bulk reverse geocoding. Now it is your turn.
Use our batch geocoding tool to convert thousands of addresses to coordinates in minutes. Start with 100 free addresses.
Try Batch Geocoding Free →