29 formulas that geocode, clean, measure, route, publish and report β straight from your spreadsheet. Free with the InstaMaps add-on.
One line each. Ranges everywhere an address goes: =GEOCODE(A2:A50) fills fifty rows.
| =GEOCODE(address) | Latitude and longitude for an address, a range, or Plus Codes. |
| =CLEAN_ADDRESS(address) | The standardised, geocoder-verified version of a messy address. |
| =REVERSE_GEOCODE(lat, lng) | The nearest street address for coordinates. |
| =COORD_CONVERT(coords, to?) | Convert coordinates between decimal and degrees/minutes/seconds. |
| =GEOCODE_IP(ip) | City, country and coordinates for an IP address (or range of them). |
| =POSTCODE(address) | The postcode / ZIP. Aliases: =ZIP, =ZIPCODE. |
| =CITY(address) | The city or town. Alias: =TOWN. |
| =COUNTY(address) | The county / district. |
| =STATE(address) | The state / region. Alias: =REGION. |
| =COUNTRY(address) | The country. |
| =DISTANCE(from, to, unit?) | Straight-line distance between two places. |
| =TRAVEL_TIME(from, to, mode?) | Real road travel time between two places, in minutes. |
| =DISTANCE_MATRIX(origins, destinations, mode?, unit?) | Every-to-every road distances (or times): origins down, destinations across. |
| =CLOSEST_TO(anchor, candidates, n?) | The nearest location(s) to an anchor, from a list. |
| =WITHIN_RADIUS(anchor, candidates, radius, unit?) | Everything from a list inside a radius, sorted nearest-first. |
| =SORT_BY_DISTANCE(range, anchor, unit?) | Your rows re-sorted nearest-first, with a distance column added. |
| =VISIT_ORDER(stops, start?) | The best visiting order (1, 2, 3β¦) aligned to your rows β on real routes this cuts 20β50% of the miles. |
| =ROUTE_LINK(stops, mode?) | One Google Maps link for the whole run β up to 25 stops (past Google's usual 10). |
| =WAZE_LINK(address) | A tap-to-navigate Waze link per row. |
| =TERRITORY(addresses, reps, balanceBy?) | Splits a list into balanced geographic territories, one per rep. |
| =LOGBOOK(mapLink, limit?, refresh?, override?) | The map's visit journal as rows: when, stop, status, driver, note. |
| =VISIT_STATUS(range, mapLink, refresh?, override?) | The latest check-off per client, side by side with your rows: status, when, driver, note. |
| =INSTAMAP(range, title?) | A hosted, live, shareable map from your rows β the URL lands in the cell. |
| =EMBED_MAP(range, siteName) | A white-label embed link for your website: no branding, light theme, your name on the loading screen. |
| =STREETVIEW_LINK(address) | A Google Street View link per row β tap to look at the building. |
The workhorse: coordinates for anything address-shaped. Handles street addresses, postcodes, landmarks, and Plus Codes β both full (772CH947+CV) and short with a locality (H963+HV Maracaibo).
| Argument | What it takes |
|---|---|
| address | An address, or a range of addresses (=GEOCODE(A2:A50) fills every row). |
Ranges above 400 rows: use Extensions β InstaMaps β Add coordinates to this sheet (no formula time limits).
The standardised, geocoder-verified version of a messy address.
| Argument | What it takes |
|---|---|
| address | An address, or a range of addresses (=GEOCODE(A2:A50) fills every row). |
The nearest street address for coordinates.
| Argument | What it takes |
|---|---|
| lat | Latitude β or a single "lat,lng" string as the only argument. |
| lng | Longitude. |
Convert coordinates between decimal and degrees/minutes/seconds.
| Argument | What it takes |
|---|---|
| coords | The coordinates to convert (either format). |
| to | Optional target: "dms" (default) or "decimal". |
City, country and coordinates for an IP address (or range of them).
| Argument | What it takes |
|---|---|
| ip | An IP address, or a range of IPs. |
The postcode / ZIP. Aliases: =ZIP, =ZIPCODE.
| Argument | What it takes |
|---|---|
| address | An address, or a range of addresses (=GEOCODE(A2:A50) fills every row). |
The city or town. Alias: =TOWN.
| Argument | What it takes |
|---|---|
| address | An address, or a range of addresses (=GEOCODE(A2:A50) fills every row). |
The county / district.
| Argument | What it takes |
|---|---|
| address | An address, or a range of addresses (=GEOCODE(A2:A50) fills every row). |
The state / region. Alias: =REGION.
| Argument | What it takes |
|---|---|
| address | An address, or a range of addresses (=GEOCODE(A2:A50) fills every row). |
The country.
| Argument | What it takes |
|---|---|
| address | An address, or a range of addresses (=GEOCODE(A2:A50) fills every row). |
Straight-line distance between two places.
| Argument | What it takes |
|---|---|
| from | An address or "lat,lng". |
| to | An address or "lat,lng". |
| unit | Optional: "km" (default) or "mi". |
Real road travel time between two places, in minutes.
| Argument | What it takes |
|---|---|
| from | An address or "lat,lng". |
| to | An address or "lat,lng". |
| mode | Optional: driving (default), walking, cycling. |
Every-to-every road distances (or times): origins down, destinations across.
| Argument | What it takes |
|---|---|
| origins | Addresses down the side (up to 25). |
| destinations | Addresses across the top (up to 25). |
| mode | Optional: driving (default), walking, cycling. |
| unit | Optional: "km" (default), "mi", or "min" for travel time. |
The nearest location(s) to an anchor, from a list.
| Argument | What it takes |
|---|---|
| anchor | The reference address (or "lat,lng"). |
| candidates | The list to search (e.g. A2:A200). |
| n | Optional: how many nearest to return (default 1). |
Everything from a list inside a radius, sorted nearest-first.
| Argument | What it takes |
|---|---|
| anchor | The centre address (or "lat,lng"). |
| candidates | The list to search. |
| radius | The radius number. |
| unit | Optional: "km" (default) or "mi". |
Your rows re-sorted nearest-first, with a distance column added.
| Argument | What it takes |
|---|---|
| range | The rows to sort (address in any column). |
| anchor | The reference address (or "lat,lng"). |
| unit | Optional: "km" (default) or "mi". |
The best visiting order (1, 2, 3β¦) aligned to your rows β on real routes this cuts 20β50% of the miles.
| Argument | What it takes |
|---|---|
| stops | The stops to order. |
| start | Optional starting address (default: the first row). |
One Google Maps link for the whole run β up to 25 stops (past Google's usual 10).
| Argument | What it takes |
|---|---|
| stops | Addresses in visit order (e.g. A2:A26). |
| mode | Optional: driving (default), walking, cycling, transit (modes apply up to 11 stops). |
Longer than 25? Split into legs: =ROUTE_LINK(A2:A26) then =ROUTE_LINK(A26:A50).
A tap-to-navigate Waze link per row.
| Argument | What it takes |
|---|---|
| address | An address, or a range (one link per row). |
Splits a list into balanced geographic territories, one per rep.
| Argument | What it takes |
|---|---|
| addresses | The addresses to split. |
| reps | A number of territories, or a range of rep names. |
| balanceBy | Optional value column to balance by (e.g. revenue). |
Pairs with the map's Logbook page: your crew checks off stops on their phones, this formula pulls the dated history back into the sheet.
| Argument | What it takes |
|---|---|
| mapLink | Your map link from =INSTAMAP, or the map id. |
| limit | Optional: number of entries (default 200, max 500). |
| refresh | Optional: pass NOW() and set File β Settings β Calculation to "On change and every minute" β the journal then refreshes itself every minute. |
| override | Optional: point at a spare cell; change that cell to refetch instantly. |
The latest check-off per client, side by side with your rows: status, when, driver, note.
| Argument | What it takes |
|---|---|
| range | Your client rows (first cell = the name, same as =INSTAMAP). |
| mapLink | Your map link from =INSTAMAP, or the map id. |
| refresh | Optional: NOW() for auto-refresh (see =LOGBOOK). |
| override | Optional: a spare cell for instant manual refetch. |
The map updates itself when the sheet changes. Same title = same map, updated in place, so the link you share stays good forever.
| Argument | What it takes |
|---|---|
| range | The rows to map (first cell of each row becomes the pin name). |
| title | Optional map title β also its stable identity. |
A white-label embed link for your website: no branding, light theme, your name on the loading screen.
| Argument | What it takes |
|---|---|
| range | Rows to map (first cell = the pin name). |
| siteName | Your site's name β shows while the map loads, and pins the map's identity. |
Paste the returned link into an iframe: <iframe src="THE_LINK" width="100%" height="600" style="border:0"></iframe>
A Google Street View link per row β tap to look at the building.
| Argument | What it takes |
|---|---|
| address | An address, or a range of addresses (=GEOCODE(A2:A50) fills every row). |
All of it, free, inside Google Sheetsβ’
Install InstaMaps