Recurring outdoor work has a peculiar failure mode: you do the job perfectly, every week, and the customer slowly forgets they are paying for anything. Then one week it rains, you skip, and they notice for the first time in months — negatively.
The 'we were here' message
One photo, sent as the truck leaves, solves the invisibility problem entirely. It is thirty seconds of a crew member's time and it is the difference between a customer who values the service and one who is looking at the invoice wondering.
export const visit = { completed: (c: Ctx) => `${c.company}: done at ${c.address} today — ${c.crew}. ` + `Photo attached. ${c.notes ?? "Everything looked healthy."}`, // Exceptions are worth more than routine confirmations. This is the // message that stops a "you didn't come" call next week. accessProblem: (c: Ctx) => `${c.company}: couldn't get to the back garden today — side gate was ` + `bolted. Did the front and we'll catch the back ${c.nextVisit}. ` + `No charge for the bit we missed.`, flagged: (c: Ctx) => `${c.company}: while we were there — ${c.observation}. Photo attached. ` + `Not urgent, but worth knowing. Happy to quote if you want it dealt with.`,};The flagged-observation message is your best upsell and never feels like one
A photo of a diseased shrub or a fence panel starting to go is genuinely useful information, sent by someone who was there anyway. It converts far better than a seasonal promotion and it costs nothing to send.
Weather rescheduling, done before they ask
Rain moves your whole week. Customers accept that easily — what they do not accept is finding out by looking at an uncut lawn on Thursday. The message has to go out in the morning, before the visit would have happened.
export const weather = { // Sent at 7am, not at 4pm when the visit has visibly not happened. skipped: (c: Ctx) => `${c.company}: too wet to cut today without tearing the lawn up. ` + `We'll be with you ${c.nextVisit} instead — you won't be charged twice.`, catchUp: (c: Ctx) => `${c.company}: back on schedule this week after the rain. ` + `You're down for ${c.dayDate}. It'll be a longer cut than usual.`,};The 'you won't be charged twice' line is doing real work. Billing confusion is the main reason recurring outdoor customers cancel, and pre-empting it in the same message costs you nothing.
Seasonal transitions are the natural sales moment
Nobody wants to be sold leaf clearance in July. In late September it is obviously useful, and the customer has been looking at their trees. Align the ask with the season and it stops being marketing.
| Season | The message | Why it lands |
|---|---|---|
| Early spring | First cut booking and a tidy-up quote | Gardens look worst right now and everyone can see it |
| Early summer | Irrigation check, hedge trimming | Growth is visible and getting away from them |
| Early autumn | Leaf clearance, gutter clearing | The first fall of leaves has just happened |
| Late autumn | Winter prep, final cut, next-year contract | They want it off their mind before the weather turns |
Four messages a year, each obviously relevant to what the customer is looking at out of the window. That is a sustainable frequency; anything more and you are training people to ignore you. Quiet hours and frequency has the general rule.
Next step
Browse the other industry playbooks, compare the services that can send this on the providers page, or tag your links with the UTM builder.