To create a delivery route from a spreadsheet, geocode your addresses, sort them into an optimised sequence using =VISIT_ORDER(), and generate a navigable link with =ROUTE_LINK(). This workflow turns a static list of stops into a turn-by-turn route without leaving Google Sheets.
This process is built for local delivery logistics, particularly dispatchers managing a 5-crew schedule across a 200-home farm or a 47-stop daily courier route. You end up with a shareable, live map via =INSTAMAP() and actionable navigation links for each driver.
- →InstaMaps is a free Google Sheets add-on that turns raw address lists into sequenced delivery routes without leaving your spreadsheet.
- →The workflow relies on three specific formulas: =VISIT_ORDER(), =ROUTE_LINK(), and =INSTAMAP().
- →Use =VISIT_ORDER() to calculate the most efficient driving sequence for your stops based on distance.
- →Use =ROUTE_LINK() to push up to 11 ordered stops directly into Google Maps navigation.
- →Use =INSTAMAP() to generate a live, hosted map URL that reflects real-time changes made in your sheet.
- →The free tier provides 100 lookups per day, which increases to 1,000 per day with a free email unlock.
The stops-to-order-to-navigate framework
Logistics managers building a delivery route from spreadsheet data typically follow a three-stage process: verifying stops, sequencing them, and generating navigation outputs. First, raw addresses must be standardised and converted into geographical coordinates. Second, those coordinates are evaluated against driving distances to determine a mathematically sound stop order. Third, the finalised sequence is pushed into a navigation link or live map.
Handling this sequence directly inside Google Sheets prevents the data transfer errors that occur when copy-pasting between disparate routing platforms. A driver dropping off 40 packages across a metropolitan area might receive an address list containing typos, missing postcodes, or formatting anomalies. If a dispatcher pastes this list into an external web app, solves the route, and manually copies the sequence back into the dispatch sheet, cell misalignment is inevitable. A single misaligned row sends a driver to the wrong house.
By executing the workflow in the same spreadsheet where the orders originate, cell references remain intact. A formula in row 52 evaluates the address in row 52. Changes to the original address instantly update the geocoded coordinates, the calculated sequence, and the final map output without manual intervention.
Step 1: Prepare and geocode your stops
Step 1 requires standardising raw location data before attempting to calculate distances. Delivery drivers routinely submit address logs with inconsistent capitalisation, missing commas, or trailing whitespace. Before plotting a route, apply =CLEAN_ADDRESS() to fix these formatting anomalies.
If raw driver inputs sit in column B (from B2 to B150), place =CLEAN_ADDRESS(B2) in C2 and drag it down. This standardises the text structure-correcting "10 downing st, westminster" to "10 Downing St, Westminster"-ensuring the geocoder can parse the components accurately.
Next, convert these cleaned text strings into precise latitude and longitude coordinates using =GEOCODE(). In cell D2, input =GEOCODE(C2:C150). The add-on processes these requests up to the daily free tier limit of 100 lookups per day, which expands to 1,000 lookups per day with a free email unlock.
Geocoding addresses carries edge cases. A rural delivery route might include vague instructions like "Gate 4, Farm Track" or PO Boxes, which lack physical coordinates. The =GEOCODE() function will return an exact error string, such as "Address not found", rather than a randomly guessed coordinate. Filter for these specific error strings in column D before moving to the sequencing phase. Removing rows with geocoding failures ensures the subsequent routing algorithms only evaluate valid, mappable physical destinations.
Step 2: Sequence stops with =VISIT_ORDER()
Step 2 involves establishing a mathematically sound drop-off sequence. The =VISIT_ORDER() function takes your geocoded coordinates and outputs a chronological stop sequence based on actual driving distances, rather than drawing simple straight lines between points.
Assuming your starting coordinates (the depot) sit in cell G2, and your geocoded stop coordinates span D2:D48, you apply the function to evaluate each stop. In cell E2, enter =VISIT_ORDER(D2, D$2:D$48, G$2). Use absolute references for the ranges so you can drag the formula down to E48 without shifting the target array.
Here is how the function evaluates the data: it measures the driving distance from the depot (G2) to the first stop, then calculates the shortest practical path through every coordinate provided in the range (D2:D48). It assigns an integer to each row-1, 2, 3, etc.-representing the exact order the driver should follow. The calculation accounts for the underlying road network, meaning it sequences stops by actual drive time rather than raw geographic proximity.
To finalise the route, select columns B through E and apply a custom sort based on the output of column E, sorting from smallest to largest. This physically rearranges your spreadsheet so row 2 becomes stop 1, row 3 becomes stop 2, and so forth.
An edge case to monitor involves overlapping coordinates. If two separate deliveries go to the same block of flats, they share identical lat/long values. =VISIT_ORDER() handles these identically, assigning them sequential integers, which keeps the route calculation efficient without throwing a circular reference error.
Worked example: Sequencing 47 stops for 5 delivery crews
Consider a 200-home farm equipment delivery service operating across rural Devon. On a given Tuesday, the dispatch sheet receives 47 daily drops (rows 2 through 48 in the spreadsheet). The dispatcher must split these 47 stops among 5 distinct delivery crews.
First, the dispatcher assigns crews based on geographic zones. In column F, they use a basic =SORT_BY_DISTANCE() formula against the depot coordinates in G2 to group the drops, assigning "Crew A" through "Crew E" to the 47 rows.
Next, the dispatcher sequences the routes. Because =VISIT_ORDER() sequences a specific array, the dispatcher isolates the coordinates for a single crew. If Crew B's 12 stops sit in contiguous rows 15 through 26, the dispatcher enters =VISIT_ORDER(D15, D$15:D$26, G$2) in cell E15 and drags it down to E26. This calculates the optimal driving path for Crew B, assigning stop numbers 1 through 12 based on actual drive times. The dispatcher repeats this exact process for Crew C's block (rows 27 through 38), pointing the formula at D$27:D$38. Each of the 5 crews now has an independent, calculated sequence in column E.
Once the loads are sequenced, the dispatcher builds the navigation outputs. For the crew leads driving the delivery lorries, they require turn-by-turn navigation. The dispatcher selects the row range for a specific crew and runs the "Build-the-workflow" button from the InstaMaps sidebar (Extensions > InstaMaps > Enable formulas). This chains the coordinates into a =ROUTE_LINK() formula.
Because =ROUTE_LINK() uses Google Maps' official URL scheme, it enforces a hard maximum of 11 stops per generated link. The dispatcher checks the row counts for each crew block. If Crew B has 12 stops, the dispatcher splits their =ROUTE_LINK() outputs into two separate links (E15:E25 and E26) to avoid a URL failure.
Finally, for the operations manager monitoring the fleet, the dispatcher drops =INSTAMAP(A2:H48) into cell J1. This returns a live, hosted shareable map URL that plots all 47 drops and updates automatically when the sheet changes.
Step 3: Generate links with =ROUTE_LINK() and =INSTAMAP()
With your stops sequenced using =VISIT_ORDER(), the next step is getting that data onto a driver's phone. The =ROUTE_LINK() formula generates a standard Google Maps navigation URL directly from your spreadsheet cells.
Google Maps enforces a strict 10-waypoint limit per navigation link (plus the final destination, making 11 stops total). If you have a 47-stop route in rows 2 through 48, you cannot send it as a single link. Instead, you must split the route into 5 distinct batches. If column E holds your ordered addresses, create the first batch link in F2 with =ROUTE_LINK(E2:E12). Clicking the resulting output opens Google Maps with turn-by-turn navigation starting from the first stop. For stops 11 through 20, apply =ROUTE_LINK(E13:E23) to the next segment.
For the dispatch team monitoring the entire 47-stop operation, individual Google Maps URLs are difficult to track on a single screen. Instead of batching multiple links, use =INSTAMAP().
The =INSTAMAP() formula compiles your entire sheet into a single live, hosted map URL. If you place =INSTAMAP(A2:E48) in cell G1, InstaMaps generates a shareable link. When dispatch clicks this URL, they see all 47 stops plotted on a live web map, colour-coded and updated automatically. If a driver marks a stop as 'Failed' in column F, or if an address in column B changes, the hosted map updates the moment the sheet updates-without needing to click refresh or generate a new link.
You do not need to type these functions manually. Opening the sidebar via Extensions > InstaMaps > Enable formulas provides a click-to-insert interface. Its Build-the-workflow button automatically chains the geocoding, ordering, and linking formulas together based on your column headers.
Limits and honest alternatives
This spreadsheet routing method relies on standard Google Maps architecture, meaning it inherits hard constraints. The most restrictive is the 10-waypoint cap on standard navigation links generated by =ROUTE_LINK(). If your driver needs to visit 50 locations, they must open five separate links throughout the day.
Second, InstaMaps applies daily formula limits. The free tier allows 100 formula lookups per day. Geocoding 47 addresses in column A using =GEOCODE(A2:A48) consumes 47 of those daily lookups. Registering a free email address inside the add-on increases this limit to 1,000 lookups per day, which is sufficient for a 200-home farm or a 5-crew local operation. If you process thousands of new addresses daily, you will hit this ceiling by noon.
Dedicated routing software like Routific handles thousands of stops without manual batching and factors in vehicle capacity, live traffic, and driver shift times. Routific costs upwards of £15 to £20 per vehicle, per month. If your dispatchers currently manage fewer than 100 stops a day and the primary bottleneck is simply sequencing stops rather than calculating complex capacity constraints, the free spreadsheet method using =VISIT_ORDER() provides the necessary output without the monthly overhead. You trade automated constraint solving for manual URL batching.
Who this approach is for
This specific setup is ideal for independent owner-operators and small local courier services. If you are a single driver delivering farm boxes to 40 different homes, or a small shop dispatching two drivers across 60 postcodes, a Google Sheets add-on covers your routing needs without requiring a dedicated software subscription.
Regional dispatchers managing fewer than 100 stops a day also benefit. If your logistical bottleneck is simply translating a messy list of addresses into a sensible driving sequence, this workflow fixes that exact problem. It transitions a static spreadsheet into an active map and provides shareable links for your drivers.
However, if you manage a 15-van fleet delivering 500 mixed parcels daily, with strict delivery windows and varying load capacities, this free spreadsheet tool is the wrong choice. You require dedicated fleet routing software that calculates traffic data, driver schedules, and pallet volumes natively. InstaMaps is for flat-rate, point-to-point delivery models where basic optimisation removes 90% of the routing friction.
Map your Salesforce accounts in under 5 minutes — no admin setup.
Common Questions
First, ensure your addresses are in a single column, such as A2:A50. Open the sidebar via Extensions > InstaMaps > Enable formulas, select your range, and click the Build-the-workflow button to automatically insert =GEOCODE(A2:A50) alongside your data. Next, apply =VISIT_ORDER() to the generated coordinates to sequence the stops logically. Finally, wrap the ordered stops in =ROUTE_LINK() to generate a clickable navigation link, or grab a pre-built layout from get-instamaps.com/templates.
Yes, Google Sheets can calculate the optimal stop order when you use the InstaMaps =VISIT_ORDER() function. If you have 47 stops in column B, placing =VISIT_ORDER(B2:B48) in column C returns the most efficient sequence. This calculation relies on travel metrics to minimise overall driving distance. For massive datasets exceeding the daily limits, you can alternatively use =SORT_BY_DISTANCE() to cluster stops regionally.
The =ROUTE_LINK() formula strictly allows a maximum of 11 stops. This limit exists because the formula uses Google Maps' official URL scheme, which caps standard browser routing at 10 waypoints plus the final destination. If you attempt to link more than 11 cells, the formula returns an error. For a 47-stop route across 5 crews, you must break the data into separate chunks under the 11-stop threshold.
When you input =INSTAMAP(A2:B50), the formula returns a live, hosted shareable map URL. If you change a delivery address in cell A12 or alter the assigned crew in column C, the hosted map automatically reflects those updates without requiring a manual refresh. This happens because the add-on syncs your spreadsheet data directly to the hosted map server. Anyone viewing the shared link sees the latest route adjustments in real-time.
Yes, the InstaMaps add-on is entirely free to install and use. The free tier permits 100 lookups per day, which covers the functions needed to build delivery routes, such as =GEOCODE() and =VISIT_ORDER(). By registering with a free email, you raise the daily limit to 1,000 lookups per day. There are no premium tiers or paywalls blocking the core routing formulas.
Install InstaMaps to geocode stops, sequence your visits with =VISIT_ORDER(), and generate live maps without leaving your spreadsheet.
Install InstaMaps free