A landscaping company was losing emergency jobs and high-value hardscaping leads to slow, inconsistent responses. We built a triage engine that reads every inquiry the moment it arrives, routes it to the right path — Critical, High, or Normal — and escalates to the owner if an emergency goes unacknowledged for an hour.
The business served multiple neighbourhoods and handled dozens of inbound inquiries a week. Some were simple — mowing quotes, hedge trims, routine maintenance. Others were genuinely urgent — trees down on roofs, branches on power lines, storm damage that needed a crew dispatched within the hour.
All of them arrived the same way. A form submission or a phone call, routed to whoever picked it up first. There was no system to distinguish a $150 mowing job from a $5,000 emergency tree removal. So the owner was constantly interrupted by routine questions, and genuinely urgent leads sometimes waited hours for a response — because they looked identical to everything else in the inbox.
The cost wasn't just missed revenue. A missed emergency call in this industry can mean liability, a damaged reputation, and a client who never comes back. The business needed a gatekeeper, not a bigger inbox.
Every incoming inquiry is read by a logic engine the moment it arrives. Based on the content of the message, it's assigned a priority and routed into one of three lanes — each with a completely different response protocol.
Every inquiry runs through the same intake sequence before being routed. Here's what happens in the background from the moment a form is submitted.
The moment a form is submitted, the webhook fires and the system loads the business's configuration from Airtable — including the owner's phone number, reply email address, and notification preferences. This means the system is white-label ready: the same workflow can serve multiple landscaping clients, each with their own config row.
Before any analysis runs, the lead is written to Airtable with all available fields — name, email, phone, address, inquiry text, source, and timestamp. Status is set to "New." Nothing is lost even if the workflow fails at a later step.
A regex-based analysis engine reads the inquiry text and runs it through a priority-ordered detection sequence. Emergency keywords (fallen, leaning, power lines, storm damage) are checked first — if matched alongside a tree context, the lead is immediately classified Critical. High-ticket keywords (paver, patio, retaining wall, outdoor kitchen) are checked second. Maintenance keywords last. Each path assigns a category, priority level, and a qualifying question tailored to that service type. The CRM record is updated with the results.
Based on the priority score, the workflow routes to the correct lane. Emergency leads simultaneously trigger an auto-reply to the client and an SMS to the owner — in parallel, so neither is delayed. High-ticket leads get a qualifying email to the client and an SMS to the owner with the lead score and a direct CRM link. Maintenance leads get a follow-up email and are queued for nurturing — the owner is never contacted.
For Critical leads, a single SMS alert isn't enough. Tree emergencies can mean liability. The system builds in a second layer of protection: a timed escalation loop that re-checks the CRM after one hour and fires a second, more urgent SMS if the owner hasn't marked the lead as handled.
The escalation check reads the live record from Airtable — not a cached copy. If the owner updated the CRM in the meantime, the escalation stops. If they didn't, the second alert fires. The lead is flagged "EscalationSent" so it can only escalate once, preventing repeated alerts.
The impact was immediate from day one — not because the business got more leads, but because it stopped losing the ones it already had.
| Metric | Before | After |
|---|---|---|
| Emergency lead response time | Minutes to hours — manual, inconsistent | Under 3 minutes — SMS to owner + auto-reply to client |
| Missed emergencies | Regular risk — no safety net | Zero — escalation layer fires if owner doesn't respond |
| High-ticket lead qualification | Generic reply or phone tag | Instant qualifying email sent — material type, square footage captured automatically |
| Owner interruptions from routine leads | Constant — no filtering | Zero — maintenance leads handled fully automatically |
| Lead visibility | Scattered — email, phone, memory | 100% — every lead in Airtable with status, category, priority, and next step |
| Duplicate owner alerts | N/A — manual | Zero — dedup check prevents repeat notifications for the same lead |
Every tool earns its place. No unnecessary complexity — just the right component for each job.
The triage pattern — capture, classify, route, escalate — isn't specific to landscaping. Any business that receives a mix of urgent and routine inbound requests, and where missing the wrong one has real consequences, can deploy this architecture.
Burst pipes and no-heat emergencies need a crew dispatched in minutes. Routine service requests don't. The same triage engine can separate them instantly and escalate if the on-call engineer doesn't respond.
Wasp nest in a school versus a quarterly ant treatment — very different urgency. Automated triage routes emergencies to the owner immediately and handles routine bookings without human involvement.
Tenant maintenance requests range from broken heating in winter to a squeaky door. Priority-based routing ensures critical repairs get immediate attention and routine tickets are queued without disturbing the property manager.
If your business handles a mix of urgent and routine inquiries, and you're relying on memory or manual checks to make sure nothing slips through — this system was built for exactly that problem.
Book a Discovery Call// 30 minutes — No pitch — Just your situation and whether we can solve it