To schedule cleaning jobs by location, list your stops in Google Sheets, install the free InstaMaps add-on, and use the =TERRITORY() formula to group jobs by crew. Next, apply =VISIT_ORDER() to sequence the stops efficiently, and use =INSTAMAP() to generate a live map link for your drivers.
This guide is for residential cleaning business owners who are tired of playing daily Tetris with a map and a whiteboard. If you manage multiple crews and are currently dropping pins manually, this method breaks down exactly how to automate that process using a spreadsheet you already own. By the end of this walkthrough, you will have a system that automatically groups jobs by crew, sequences them logically, and produces a map link your staff can actually follow on their phones.
- →Export your raw job list into a single Google Sheet.
- →Assign jobs to specific crews using the =TERRITORY() formula.
- →Sequence daily stops chronologically with the =VISIT_ORDER() formula.
- →Check drive times between cleanings using the =TRAVEL_TIME() formula.
- →Generate a shareable, live map link for your staff with =INSTAMAP().
What you need before you start
You do not need an expensive customer relationship management tool to fix your routing. You just need a Google Sheet containing your job list and the free InstaMaps add-on to handle the maths. First, ensure your sheet has a column dedicated to the full address of each job.
If your addresses are currently split across multiple columns (street, city, postcode), combine them into a single column. You can use the =CLEAN_ADDRESS() formula to standardise any messy formatting your front desk might have introduced. If you do not want to type formulas manually, use the sidebar feature by clicking Extensions > InstaMaps > Formulas to insert them directly into cells.
A Google Sheet containing your job data.
One column dedicated to full, standardised addresses.
The free InstaMaps add-on installed in Google Sheets.
Step 1: Assign jobs to crews with =TERRITORY()
The first problem when scheduling cleaning jobs is deciding which technician takes which house. Instead of drawing lines on a physical map, use the =TERRITORY() formula to divide your workload automatically.
If you have five crews, type =TERRITORY(A2, 5) into a new column next to your first address. The add-on looks at the address in cell A2 and assigns it a territory number from 1 to 5. When you drag this formula down your entire sheet, it groups addresses into compact geographical zones.
The cell will output a number (such as Territory 1 or Territory 3). You can then manually match those numbers to your specific crews. Crew A takes Territory 1, Crew B takes Territory 2, and so on. This ensures your staff are not driving back and forth across the same town all day.
Step 2: Sequence daily stops with =VISIT_ORDER()
Once a crew has their assigned houses for the week, you have to figure out the best order to clean them. This is where scheduling usually breaks down into guesswork, resulting in unnecessary mileage.
Use the =VISIT_ORDER() formula to sequence stops logically. In your filtered view for Crew A, type =VISIT_ORDER(A2:A15) next to the daily jobs. The formula evaluates all the addresses in that specific range and outputs a number (1, 2, 3, etc.).
Simply sort your sheet by this new column. Your crew now has a chronological list of stops that minimises backtracking. The formula handles the route optimisation directly inside the spreadsheet, so you never have to manually rearrange rows again.
Step 3: Sanity-check drive times with =TRAVEL_TIME()
Sometimes the shortest distance is not the fastest route due to traffic or school zones. Before you finalise the schedule, you should check the actual driving time between sequenced stops to ensure you have not accidentally scheduled a deep clean too far away from the next job.
The =TRAVEL_TIME() formula calculates the minutes it takes to drive between two points. If you put =TRAVEL_TIME(A2, A3) in row 3, the cell will display the estimated driving minutes from the address in A2 to the address in A3.
As a bonus, you can use the =ROUTE_LINK() formula to create a direct Google Maps navigation link for your crew. Because it relies on the official Google Maps URL scheme, remember that it supports a strict maximum of 11 stops per generated link.
Worked example: A 200-home farm with 5 crews
Let us look at a realistic scenario. A standard local cleaning business operates a 200-home recurring farm with 5 crews. The owner has a spreadsheet with 200 addresses but no clear way to divide the work without overlapping crews.
First, they run =TERRITORY(A2, 5) down the column. The sheet automatically tags the 200 addresses into 5 distinct geographical clusters of roughly 40 homes each.
On a Monday morning, Crew A has 47 stops assigned to their territory for the week. The owner filters the sheet for Crew A, highlights Monday's 9 jobs, and runs =VISIT_ORDER(A2:A10). The formula tags each job with a sequence number. Finally, they check the gap between job 1 and job 2 using =TRAVEL_TIME(A2, A3), confirming it is only a 6-minute drive.
To finish, the owner highlights Crew A's daily schedule and runs =INSTAMAP(A2:F10). This generates a live, hosted shareable map URL. This link is not a static image; if the office cancels a job or adds a last-minute request to the sheet, the live map updates automatically. The owner texts the URL to Crew A, who simply taps it on their phone to see their optimised day.
Limits and honest alternatives
InstaMaps is free, but it has soft daily limits to prevent server abuse. The free tier allows for 100 lookups per day, which resets every 24 hours. If you register with a free email unlock, that limit increases to 1,000 lookups per day, which is more than enough to sequence a 200-home farm.
If you are running a massive operation with 50+ crews and require dynamic dispatching that accounts for real-time traffic accidents and live vehicle tracking, a spreadsheet will eventually hold you back. In those specific cases, a dedicated paid routing software is genuinely better.
However, if you are happy managing your core business in Google Sheets and just want to stop wasting time drawing circles on a map, this system works flawlessly. You can grab a pre-built template directly from our site to skip the setup entirely.
Free tier: 100 lookups/day.
Free email unlock: 1,000 lookups/day.
Paid routing software is better for 50+ crew dynamic dispatch.
Templates available at get-instamaps.com/templates.
Map your Salesforce accounts in under 5 minutes — no admin setup.
Common Questions
You can optimise a route for free by listing your stops in Google Sheets and using the InstaMaps add-on. The =VISIT_ORDER() formula evaluates your list of addresses and assigns a chronological sequence to each stop to minimise driving distance.
Yes, Google Sheets can create a route map. By installing the free InstaMaps add-on, you can use the =INSTAMAP() formula on your address data to generate a live, hosted map URL that updates automatically whenever you edit the sheet.
You can divide territories fairly by using the =TERRITORY() formula in your spreadsheet. You input the total number of crews you have, and the formula automatically groups your list of addresses into compact, balanced geographical zones.
Yes. Because the =ROUTE_LINK() formula uses Google Maps' official URL scheme, it is subject to Google's strict limit of a maximum of 11 stops per navigation link.
The most efficient way is to automate the process in a spreadsheet. List your jobs, assign them to crews with =TERRITORY(), sequence them logically with =VISIT_ORDER(), and send your staff a live map link using =INSTAMAP().
Install InstaMaps for free and turn your messy jobs list into balanced, mapped territories for your cleaning crews in minutes.
Install InstaMaps free