Urgent jobs captured and triaged on severity, then offered to on-call techs in a timed ladder that escalates when nobody answers.
Bring your stack to a call and we will scope it against how your business actually runs.
Book a callEmergency work is the most profitable hour a home services business sells, and the easiest hour to lose. A tank lets go at nine at night, a heat pump dies in a cold snap, a breaker panel starts tripping and smelling hot. The homeowner is not shopping; they are dialling. They will ring three numbers in four minutes and give the job to whoever answers with a human voice and a time. If the first call lands in voicemail, that caller is gone before the greeting finishes, and nobody in the business ever learns the call happened.
The businesses that do answer usually lose the job one step later, in the handoff. The dispatcher texts whoever they think is on call tonight. That tech is asleep, driving, or under a sink with wet gloves on. No reply comes back. Nobody is watching the clock, because watching the clock is not anyone's job at that hour. Twenty minutes later someone notices, texts a second tech, and the cycle repeats. By the time a van is moving the homeowner has already booked a competitor, or has accepted the job and is now furious about an arrival window nobody confirmed. Either way the premium that justifies working after hours has been spent on apology instead of margin.
The deeper leak is that none of it is measured. Ask most operators how many emergency calls came in last month, how many were accepted, what the median gap was between call and tech assigned, and how many went unfilled, and the answer is a shrug and an anecdote. Without those four numbers the on-call rota is staffed by guesswork, the call-out premium is set by habit, and one willing tech quietly absorbs every weekend until they resign. This build closes the loop: every urgent inquiry becomes a record within seconds, gets triaged on severity, is offered to on-call staff on a timed ladder that escalates on silence, and is reported on afterwards whether it was won, declined or never filled.
One pipeline, Emergency Dispatch, kept separate from the normal sales pipeline so urgent work never queues behind open quotes. Stages in order:
BO answers the emergency line and the web chat when no human picks up inside four rings, and answers everything that arrives outside opening hours. BO's job is triage and capture, never diagnosis.
Trigger: any of: Emergency Intake form submitted; inbound call on the emergency number answered by BO; missed or abandoned call on the emergency or main number; inbound SMS or web chat whose first message contains a triage keyword (emergency, urgent, flooding, flood, leak, burst, no heat, no hot water, no power, sparking, burning, gas, smell, sewage, blocked).
Conditions and branches: first branch on whether the current time falls inside published opening hours. Second branch on Severity. Third branch on whether a contact already exists at this Service Address.
Actions in order:
Stop and exit conditions: exits on entering workflow 2 or 6. If the trigger was a missed call with no form submission and no name, the record still persists at Call Received and workflow 5 owns it. Goal: stage is no longer Call Received.
Trigger: opportunity stage changes to Triaged with Severity of Critical or Urgent.
Conditions and branches: the ladder has four rungs, and each rung is a wait followed by a check of whether Dispatch Accepted At has been written. Wait durations differ by severity: Critical uses three minutes per rung, Urgent uses six.
Actions in order:
Stop and exit conditions: stops the instant Dispatch Accepted At is written. Every rung re-checks this, so a late acceptance mid-ladder still halts it. Also stops if the stage becomes Declined by Customer or Referred Out. A declined Dispatch Response from a tech does not advance the rung by itself; it only removes that tech from the next rung's recipients and posts the decline reason to the dispatch channel.
Trigger: Dispatch Response form submitted with Accept.
Conditions and branches: branch on whether Dispatch Accepted At is already set. If it is, a second tech has accepted a job already claimed, so thank them, tell them it is covered, and exit without changing anything. This guard matters at level 2, where several people get the offer at once.
Actions in order:
Stop and exit conditions: exits when the stage reaches On Site, or if the customer cancels, in which case the stage goes to Declined by Customer, the calendar block is released and the tech is told to stand down. Hard cap: if nothing advances for four hours, close the instance and raise an owner task rather than leaving a live timer running overnight.
Trigger: Escalation Level reaches 3 with Dispatch Accepted At still empty.
Conditions and branches: branch on whether the owner responds within ten minutes.
Actions in order:
Stop and exit conditions: stops immediately if any Dispatch Response Accept arrives, in which case the stage reverts to Accepted, dispatch-unfilled is removed and workflow 3 takes over. Stops if the owner manually moves the stage.
Trigger: missed call, abandoned call, or voicemail left on the emergency or main number with no Emergency Intake form submitted inside two minutes.
Conditions and branches: branch on whether the caller ID is a known contact, and on whether a voicemail transcript exists. Suppress entirely if the number carries no-sms, in which case the branch calls back instead.
Actions in order:
Stop and exit conditions: stops on any inbound reply, any inbound call from that number, or any Emergency Intake submission, all of which hand the record to workflow 1. Caps at three outbound messages per record, and never re-enters for the same number inside one hour.
Trigger: Severity set to Can Wait on an opportunity in Emergency Dispatch.
Conditions and branches: branch on whether the customer, when offered the choice, wants a tech tonight under call-out terms anyway.
Actions in order:
Stop and exit conditions: stops on booking, on escalation to Urgent, or on the stage moving to Declined by Customer. Maximum two outbound messages before a human task takes over.
Trigger: Job Debrief form submitted, or stage moved to Completed.
Conditions and branches: branch on the debrief answers for follow-up needed, likely to recur, and service-plan candidate. Branch on whether payment was taken on site.
Actions in order:
Stop and exit conditions: stops if the contact gains no-sms or unsubscribes, if the review request bounces, or if the office marks the job disputed. In which case all automated sends halt and the record goes to the owner. Review requests are suppressed entirely where the stage reached Unfilled at any point, because asking for a review after a night of waiting is worse than asking for nothing.
The first change is that the abandoned call stops being invisible. Every urgent contact exists as a record within seconds of arriving, including the ones where the caller hung up during the greeting, which means the recovery workflow gets a shot at jobs that previously left no trace at all.
The second is that dispatch stops depending on one person's alertness. The ladder runs whether or not a dispatcher is awake: it reads the rota, offers the job, waits a fixed interval, escalates, and eventually wakes the owner. Nobody has to remember to chase, and the on-call tech no longer gets personally blamed for a text they never saw, because acceptance is a timestamped form submission instead of a message someone has to interpret.
The third is that the customer hears a time, once, from a system that knows the time is real. BO is explicitly barred from promising arrival, so the only ETA a customer ever receives is one a tech typed in. That single rule removes most of the complaint volume that after-hours work generates.
Metrics to watch, all of them available from the pipeline and the call reporting once the fields above are being written:
Every build on this page is something we configure, test and hand over with the SOPs your team needs to run it.
Book a call