Back to GraphHopper in Google Sheets
SheetXAI logo
GraphHopper logo
GraphHopper · Google Sheets Guide

Bulk Geocode Addresses From a Google Sheet Into Lat/Lon Columns

2026-05-14
5 min read

The Scenario

Your field sales team covers 200 customer accounts scattered across three states. The territory manager has been asking for a map for two months. You have the customer addresses in column A of a Google Sheet. You need latitude and longitude in columns B and C so the data can be dropped into a mapping tool and territories can be drawn. A colleague mentioned GraphHopper has a geocoding API. You've read the documentation. It requires coordinates in, coordinates out — except your input is text addresses, not coordinates. That's the forward geocoding endpoint. Different parameters. Different response schema.

The bad version:

  • Open Postman or curl, build a GraphHopper Geocode API request for the first address, extract the lat/lon from the response JSON, copy the values into row 2.
  • Repeat 199 more times.
  • Realize at row 47 that you've been writing the longitude into column B and the latitude into column C. Redo from row 47.

There is no version of this that takes less than a full afternoon doing it manually.

The Easy Way: One Prompt in SheetXAI

SheetXAI is an AI agent that lives inside your Google Sheet. It reads the addresses in column A, calls the GraphHopper Geocoding API for each row, and writes latitude into column B and longitude into column C — all 200 rows in a single pass.

Geocode every address in column A using GraphHopper and write the latitude into column B and longitude into column C — process all 200 rows

What You Get

  • Column B fills with latitude values for each row.
  • Column C fills with longitude values.
  • Rows where GraphHopper returns no match (address too ambiguous) get a note in column D rather than a blank coordinate that would silently break your map.
  • All 200 rows process in one call — no manual batching.

What If the Data Is Not Quite Ready

Addresses are split across multiple columns — street in A, city in B, state in C

Concatenate columns A, B, and C into a full address for each row, geocode each combined address using GraphHopper, and write latitude into column D and longitude into column E for all rows

Some rows have just a city name or a zip code, not a full street address

For rows in column A where the address appears to be a zip code or city name only, geocode to city-level coordinates and mark "CITY LEVEL" in column D — for rows with full street addresses, geocode normally and write lat/lon into columns B and C

Addresses are a mix of US and international — geocoding confidence varies

Geocode each address in column A using GraphHopper, write latitude into column B and longitude into column C, and write GraphHopper's confidence score for each result into column D so I can review low-confidence geocodes

Normalize, geocode, and flag missing territory assignments in one prompt

Standardize the address format in column A (remove apartment numbers and suite designations), geocode each normalized address using GraphHopper, write lat into column B and lon into column C, then check column D for territory assignment and write "UNASSIGNED" in column E for any geocoded row where column D is blank

Territory assignment gaps and geocoding are one job, not two.

Try It

Get the 7-day free trial of SheetXAI and open the Google Sheet with your customer address list — ask it to geocode all 200 rows and write lat/lon in a single pass, then hand the output straight to your mapping tool. Also useful: Build a Driving Distance and Time Matrix From a Google Sheet and the GraphHopper overview.

Stop memorizing formulas.
Tell your spreadsheet what to do.

Join 4,000+ professionals saving hours every week with SheetXAI.

Learn more