Expert guide
Landscaping Route Scheduling in Excel
Recurring visits, sensible routes for every crew, rain days handled, and the properties that really make money
Call us at +1 (385) 386-3860
Short answer: keep a property table with service type, frequency (weekly, fortnightly, monthly), preferred day, zone, estimated minutes and price. Generate each week's visits from the frequency, assign them to crews by day and zone, sort each crew's stops, and print or share the day sheet. Log actual minutes and skips, move rain-day visits forward, and compare price with crew cost per property. Built properly, this is a custom Excel workbook the office runs in minutes each week.
Lawn care and landscape maintenance businesses earn their margin on density and consistency: many properties close together, serviced on schedule, by crews that are not criss-crossing town. Scheduling on a whiteboard works for one crew. With three crews, 150 properties on mixed frequencies and a wet spring, it falls apart. A structured schedule in Excel keeps it under control without paying for software you are not ready for.
The Property Table
| Column | Example | Use |
|---|---|---|
| PropertyID, Customer, Address | P-114, Hill Dental, 22 Oak Ave | Identification |
| Zone | North-2 | Groups nearby stops |
| Service | Mow + trim | Defines crew and time |
| Frequency | Weekly / Fortnightly / Monthly | Visit generation |
| PreferredDay | Tue | Customer expectation |
| FirstVisit | 2027-04-06 | Anchors fortnightly cycles |
| EstMinutes | 35 | Capacity planning |
| PricePerVisit | $58 | Profitability |
| SeasonStart, SeasonEnd | Apr 1, Oct 31 | Active period |
Generating the Week's Visits
Due this week? (week start Monday in Settings!WeekStart):
=LET(ws, Settings!WeekStart,
inSeason, AND(ws + 6 >= [@SeasonStart], ws <= [@SeasonEnd]),
weeksSince, INT((ws - ([@FirstVisit] - WEEKDAY([@FirstVisit], 2) + 1)) / 7),
due, SWITCH([@Frequency],
"Weekly", TRUE,
"Fortnightly", MOD(weeksSince, 2) = 0,
"Monthly", DAY(ws) <= 7,
FALSE),
AND(inSeason, weeksSince >= 0, due))
Planned date this week:
=Settings!WeekStart + MATCH([@PreferredDay], {"Mon","Tue","Wed","Thu","Fri","Sat"}, 0) - 1The Monthly rule shown schedules the visit in the week whose Monday falls on the 1st to 7th of the month; adapt it to your own pattern, such as "every fourth week". Copy the due properties into a Visits table for the week (a FILTER on Due this week does it), so changes to the schedule do not alter the property master.
Crew Assignment and Capacity
Planned minutes per crew per day: =SUMIFS(tblVisits[EstMinutes], tblVisits[Crew], B$1, tblVisits[PlannedDate], $A2) + COUNTIFS(tblVisits[Crew], B$1, tblVisits[PlannedDate], $A2) * Settings!AvgDriveMins Capacity check: =IF(B2 > Settings!CrewDayMinutes, "Over by " & B2 - Settings!CrewDayMinutes & " min", "OK")
Assign crews by zone first: each crew owns certain zones on certain days. Only properties that do not fit get moved, which keeps routes dense and customers seeing the same crew.
The Crew Day Sheet
=SORTBY(FILTER(tblVisits[[StopOrder]:[Notes]],
(tblVisits[Crew] = B1) * (tblVisits[PlannedDate] = B2)),
FILTER(tblVisits[StopOrder], (tblVisits[Crew] = B1) * (tblVisits[PlannedDate] = B2)), 1)Columns: stop order, customer, address, service, gate code or access notes, estimated minutes.
Print, PDF, or share to a phone; a column for actual start and finish to fill in.
Stop order set within each zone, ideally from a routing tool's suggested sequence.
Rain Days and Reschedules
Mark the day's visits as Weather in a Status column.
A helper moves them to the same crew's next day with spare capacity, or to Saturday.
Visits skipped twice in a row get flagged for a call to the customer.
Billing rules decide whether skipped visits are billed, credited or made up.
Route Optimisation
Zones and sensible ordering remove most waste. To go further, send each crew's addresses to a routing or mapping API that returns an optimised order and drive times, then write the stop order back to the visits table. That is a typical Excel API integration; the basic pattern for calling a web API from VBA is shown in calling an API from Excel VBA.
Which Properties Make Money?
Per property, season to date:
Visits done: =COUNTIFS(tblVisits[PropertyID], [@PropertyID], tblVisits[Status], "Done")
Revenue: =[@[Visits done]] * [@PricePerVisit]
Crew minutes: =SUMIFS(tblVisits[ActualMinutes], tblVisits[PropertyID], [@PropertyID])
+ [@[Visits done]] * Settings!AvgDriveMins
Crew cost: =[@[Crew minutes]] / 60 * Settings!CrewCostPerHour
Margin: =[@Revenue] - [@[Crew cost]]
Margin %: =IF([@Revenue] = 0, "", [@Margin] / [@Revenue])Sort by margin %. The bottom of the list usually contains properties that take much longer than estimated or sit far outside the crew's zones. Those are candidates for a price increase at renewal.
Where AI Helps the Office
Turning crew notes ('back gate broken, dog loose, irrigation leaking zone 3') into customer messages and upsell leads.
Drafting seasonal renewal letters with each customer's service history.
Summarising the week: skipped visits, over-capacity days, properties running long.
For one-off jobs, quotes and invoicing alongside recurring work, see the work order management database, and for cleaning and other recurring service businesses, the cleaning business scheduling guide.
FAQ
Landscaping scheduling FAQ
Routes, crews, weather and pricing