Job stages that move as the crew moves, with every status change firing the customer update that would otherwise be a phone call to the office.
Bring your stack to a call and we will scope it against how your business actually runs.
Book a callIn most home services businesses the real schedule lives in three incompatible places: a whiteboard in the office, a group chat on the crew's phones, and the dispatcher's head. The software of record says a job is booked for Tuesday. It does not say that the part did not arrive, that the technician is still on the morning job because the access panel was screwed shut, or that the afternoon customer has now called twice. Nobody is lying; the system simply has no way to represent a job that is in motion.
The customer feels this as silence. They took a day off work, they were given a window, and at 2pm they have no idea whether the crew is coming. So they call. The office cannot answer, because the office does not know either, so someone texts the technician, who is under a house and does not reply for twenty minutes. That one unanswered question generates three phone calls, two interruptions to billable work, and - more often than anyone admits - a review that says nothing about the quality of the repair and everything about the waiting.
The money leaks in four places at once. Billable hours go to status chasing instead of work. Second visits get booked because nobody recorded that a part was needed, so the technician arrives again without it. Invoices go out days late because the completion details sit in a text thread rather than on the job record. And the review request - the single cheapest source of new work a home services business has - gets sent manually to whoever the office happens to remember, usually days after the job, when the customer's goodwill has already cooled. This build makes the job record move as the crew moves, so the status is never a question anyone has to ask.
One pipeline, Jobs, and it is the single source of truth. The design rule is that every stage is something a technician can trigger from their phone in one tap. A stage only a dispatcher can move is a stage that will be wrong by mid-morning.
On the opportunity unless stated. These are the spine of the build.
BO owns customer communication about status. BO owns none of the operational decisions.
One job that goes slightly wrong - which is the only kind worth walking through, because a job that goes perfectly needs no system.
Nine workflows. Build 1 through 3 first and run them for a week before adding the rest - if the stage moves are not happening reliably on technicians' phones, nothing downstream can work.
Trigger A: job stage moves to Dispatched.
Trigger B: 7:00am daily, per technician with jobs today.
Exit: end of day, or job canceled.
Trigger: job stage moves to En Route.
Conditions: requires eta_minutes. If the technician did not enter one, prompt them on the dispatch line and hold the customer message for up to 3 minutes rather than sending a vague one.
On stage move to On Site: stamp on_site_at, swap job-en-route for job-on-site, start the on-site duration clock, and send - "{{technician_first_name}} has arrived. Job {{job_number}}."
Exit: stage reaches On Site, or job canceled.
Trigger: on_site_at stamped. The workflow then watches the clock against the job type's configured duration.
Exit: job moves to Work Complete or Follow-Up Required, or the dispatcher clears running-late.
Trigger: On-Site Diagnosis submitted with additional_work_found ticked.
Conditions: the approval page must carry a price entered by the technician or office. If it does not, the workflow holds and notifies the office rather than sending an incomplete page.
Exit: an explicit decision is recorded. Ambiguity never counts as approval.
Trigger: stage moves to Parts Pending or Awaiting Parts On Site.
Exit: parts received and return visit booked, or job canceled.
Trigger: Job Completion form submitted.
Exit: paid, or handed to the office.
Trigger: job reaches Work Complete.
Conditions: exit if review_requested_at is already set, if sms-opted-out is present, or if this job carries warranty-job or repeat-callback - those customers get a call from a human instead.
Exit: score captured and routed, two asks elapsed, or opt-out.
Trigger: inbound customer message while the contact carries job-active.
Exit: handed off, or job-active removed.
Trigger A: job created at an address that already has a completed job of the same job_type within the last 90 days.
Trigger B: 30 days before warranty_expiry.
Exit: warranty expires, job created, or opt-out.
The phrase "let me find out and call you back" disappears from the office. The live stage is the answer, so whoever picks up the phone - or BO, at 8pm on a Sunday - can say where the technician is and when they will arrive. More to the point, the customer stops needing to ask, because the running-late message reaches them before the thought does. Most status complaints are not about lateness; they are about not being told.
Extra work stops being an argument. Every addition is described, photographed, priced and approved in writing before a tool is picked up, with a timestamp attached to the job. Technicians stop absorbing difficult pricing conversations alone in someone's basement, and the business stops writing off work it did but cannot prove was authorized.
The paperwork stops lagging. The invoice goes out the same afternoon because the completion details were captured on site rather than reconstructed on Friday. The review is requested within hours, from the customers who said they were happy, and never from the ones who were not. And for the first time the business has four honest timestamps per job, which means the questions that were previously settled by argument - are we underestimating durations, is travel eating the day, which job types always overrun - become questions with answers.
This is the largest build in the home services set. Effort scales with crew size, the number of job types, how much has to integrate with an existing field-service system, and how much change management the crew needs. Book a call at bookings.appbo.io to scope it properly.
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