Skip to content
imessageapi

iMessage for landscaping and lawn care

You visit the same properties every week, mostly when nobody is home, and the customer's only evidence you came is that the grass is shorter. Weather scrambles the schedule constantly. Both problems are messaging problems.

7 min readUpdated August 24, 2026By industry

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.

visit confirmation
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.

weather
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.

SeasonThe messageWhy it lands
Early springFirst cut booking and a tidy-up quoteGardens look worst right now and everyone can see it
Early summerIrrigation check, hedge trimmingGrowth is visible and getting away from them
Early autumnLeaf clearance, gutter clearingThe first fall of leaves has just happened
Late autumnWinter prep, final cut, next-year contractThey 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.