A Google Sheets Route Planner That Splits Stops by Vehicle

A lot of delivery planning still starts the same way: a spreadsheet with a column of addresses, a few vans, and somebody deciding by eye which stops go on which van. So I built a free Google Sheets route planner, Fleet Route Optimizer, that does that part for you. It splits your stops across your vehicles, puts each route in a good order, and writes the answer back into a new tab of the same sheet.

It’s my second add-on for Sheets. Below: what it does, how to use it, how it was built in about two days, and what Google asked me this time.

What this Google Sheets route planner does

Putting stops in order for one driver is the easy half, and plenty of apps will do it. The hard half is the split: with 112 stops and 10 vehicles, which stops go together? That’s the part people do by hand, and it’s where most of the wasted driving comes from. The name came from there. I first called it a routing add-on, and that missed the point, so it became Fleet Route Optimizer (and Optimizador de Rutas para Flotas in Spanish).

You give it a depot, your stops and your vehicles. It keeps to each vehicle’s capacity (up to three measures at once, say weight, volume and boxes), your customers’ time windows, the time you spend at each stop and the longest a route is allowed to take. Drive times come from real roads, not straight lines. Addresses without coordinates are looked up for you.

The answer goes into a new Routes tab: each vehicle with its stops in order, the arrival time at each one, the load on board and a Google Maps link for the driver. Stops that can’t be served are listed with their sheet row, so nothing disappears quietly. That last part matters more than it sounds. The worst thing a route planner can do is drop a customer without telling you.

Google Sheets route planner results: the Fleet Route Optimizer Routes tab for the Mexico City sample, 4 vehicles, 23 stops served, 1 unserved, with the add-on sidebar open
The Mexico City sample after one run: 4 vans, 23 of 24 stops served, 608 minutes of route time in total. The one unserved stop is listed under the routes with its row number.

How to use it

Install it from the Google Workspace Marketplace (free, no account with me). Then:

  1. Open a new spreadsheet and go to Extensions, then Fleet Route Optimizer, then “Optimize routes / Optimizar rutas”. A sidebar opens.
  2. Pick an example (Ohio deliveries, 112 stops and 10 vehicles, or Mexico City, 24 stops and 4 vehicles) and press “Insert sample”.
  3. Replace the example data with yours, keeping the tab names: locations, vehicles, parameters and warm_start. The first row of locations is the depot.
  4. Press “Optimize routes”. When it finishes, the Routes tab shows up first in the tab bar.

Two details worth knowing. First, it reads its own layout, not any spreadsheet you throw at it. The single biggest reason people fail on my web version is uploading their own file with different columns, so start from the sample and paste your data into it. Second, the add-on saves the routes it just made in the warm_start tab. If you set StartFromLastSolution to TRUE, the next run starts from those routes instead of from scratch, which is handy when you add five stops to a plan you already like.

On the Ohio sample, my test run served all 112 stops with 10 vehicles in 52 seconds, and 82 of those rows had only an address, so every one of them had to be looked up first. If you give latitude and longitude, it’s faster. The limits per run: up to 200 stops, one depot, one trip per vehicle, and deliveries only (no picking something up at A and dropping it at B).

Why I built it, even though the first one is quiet

Honest part first. My shift scheduling add-on for Google Sheets went live on October 24, and when I started this one, my usage log had zero runs from it since launch. Zero. (Building a second add-on on top of that number takes a certain kind of optimism.)

The difference is the neighborhood. Scheduling add-ons for Sheets are thin. Routing add-ons are crowded, and that’s actually the good news: when I checked the Marketplace in early November, the route planners there showed install counts from about a thousand to over twenty thousand. People clearly look for this inside Sheets. What I didn’t find was a free one that handles several vehicles with no small stop cap. The free versions I looked at stopped at 10 or 20 stops, or at one vehicle, or did the math and then sent you to a paid planner.

The engine already existed. It’s the same one behind my free route optimizer on the web, which is Google’s open-source OR-Tools vehicle routing solver plus real road drive times. It has also run as an AI route optimization connector for a while. So the add-on is a thin layer: a small Apps Script sidebar that reads your tabs, sends them to my server, and writes the result back. Google stops an add-on call after 30 seconds, and a routing run with address lookups can take longer, so the add-on starts the solve as a job and the sidebar checks back every few seconds until it’s done.

I built it with Claude, like the rest of this year’s tools. I made the calls (the name, the limits, what happens to your data), Claude wrote most of the code, and I tested it in a real spreadsheet. Server side and sidebar took a day. The Google Cloud setup, the store listing and the demo video took most of the next one.

What Google asked this time

The first add-on taught me what Google’s reviewers look for, so I fixed those things before submitting: a full data-protection section in the privacy policy (they flagged it last time), trademark symbols on Google’s product names in the listing (also flagged last time), and the demo video in the reviewer notes up front (they asked for one last time).

So of course they asked something new. The next day, the review came back saying my app “appears” to use AI models with spreadsheet data. It doesn’t. I think it was the words “AI assistants” in my privacy policy, which are there because the same domain also runs the connector I mentioned above. That’s a separate entry point and never sees anything from a spreadsheet. The other point was fair: my policy didn’t say clearly how long Google user data is kept and how to delete it.

That one forced a decision I’m glad I made. The web version keeps a cache of addresses it has already found, so it doesn’t look them up twice. For the add-on, I decided runs only read that cache and never add to it. Your spreadsheet sits in my server’s memory while it solves and for at most 15 minutes after, so the sidebar can pick up the result, and then it’s gone. Nothing goes into a database, a log or a backup, and there’s nothing stored to delete. I wrote that into the policy, answered each question, and Google approved the data access on November 6, three days after I submitted. Then came the Marketplace review itself, the step that took about three weeks for the first add-on (most of it waiting).

What’s next

The same thing as with the first one: measure. Every run writes one anonymous row to my usage log, so in two weeks and again in four I’ll know whether anyone besides me (and Google’s reviewer) has pressed the button. If they have, the next thing on my list is letting you mark some stops as must-serve, so the solver drops a less important stop first when the vans are full. If nobody does, I’ll say that too.

If you plan deliveries in Google Sheets, try it on a copy of a real day: paste your stops into the sample, press the button, and compare it with what your drivers actually did. If it saves you an hour, a review in the Marketplace helps more than you’d think. And if it gets something wrong, email me at [email protected].

Tradeline Supply
Things that I use, like, and am affiliated with:
Mint Mobile offers great cell phone service for $15 flat, get $15 off using the link. Get discounted phones with service activation and no contract.
I never spend money before I check Mr Rebates or Rakuten to get cashbacks, rebates, discounts, coupons or cheaper gift cards.

Leave a Reply