Back to the build library
Home services
Standard

Supplier and Parts Follow-Up

Jobs blocked on a part get a tracked order, a supplier chase cadence, and an automatic rebooking the day the part lands.

Industry
Home services
Build effort
Standard
Typical time to launch
2–3 weeks
On this page
The problemWhat gets builtHow it runsAutomations in detailWhat changesBefore you start
Want this built for you?

Bring your stack to a call and we will scope it against how your business actually runs.

Book a call
01

The problem

A technician opens a wall, finds the failed component, and discovers it is not on the van. From that moment the job has two possible futures. In the good one, the part is identified by number, quoted, approved, ordered, tracked, received, matched back to the job, and a return visit is booked while the customer still remembers the conversation. In the bad one, the part lives in a photo on the technician's phone, the order lives in a reply-all email thread with the supplier, the ETA lives in somebody's memory, and the job quietly stops existing until the customer calls to ask what happened.

The bad future is the default in most home services businesses, because the moment a job is blocked it leaves every system that was tracking it. It is no longer on today's schedule, so the dispatch board forgets it. It is not finished, so it never reaches invoicing. It is not lost, so it never appears in a lost-deal report. It sits in a gap that no screen in the business displays. Jobs in that gap routinely age for weeks, and the business only learns about them when the customer escalates, when a part shows up and nobody knows which job it belongs to, or when a technician stumbles across a box on a warehouse shelf with a name on it and no date.

The leak has several mouths. Work already performed is never invoiced because the job is not complete, so labor and diagnostic time sit unbilled. Deposits taken against the job sit as a liability. Second trips that should be billable get absorbed as goodwill because nobody can reconstruct what was agreed. Parts get ordered twice, or ordered and then the customer cancels and the part is non-returnable. Suppliers quote an ETA, miss it, and are never challenged, so their quoted dates never improve. And the customers in this state are the angriest customers the business has, because they have already paid something, already had someone in their home, and are now being ignored. Those are the reviews that get written.

02

What gets built

Pipeline and stages

One pipeline, Parts and Backorders, which exists for exactly one purpose: no blocked job is ever invisible. Every opportunity in it represents a job that cannot be finished until something arrives.

  • Part Identified - technician has flagged a needed part from site. Entry stage.
  • Quote Requested from Supplier - part number confirmed, pricing and availability requested.
  • Awaiting Customer Approval - supplier response in hand, customer has been asked to approve.
  • Approved - Ready to Order - customer has said yes; purchasing has not yet placed it.
  • Ordered - Awaiting ETA - order placed, no confirmed arrival date yet.
  • Confirmed ETA - supplier has given a date and it is recorded on the record.
  • Overdue with Supplier - the confirmed ETA has passed without receipt. Cards only enter this stage automatically.
  • Part Received - physically checked in, logged to a shelf location.
  • Return Visit Booked - an appointment exists on a calendar with a technician attached.
  • Job Completed - work finished and handed to invoicing. Won.
  • Canceled or Sourced Elsewhere - customer declined, part discontinued, or the job was resolved another way. Lost, with a reason captured.

Calendars

  • Return Visit - Parts: a service calendar used only for parts-driven second visits, so the lag between part arrival and reattendance can be measured separately from normal booking lead time. Slot duration defaults to 90 minutes with a 30-minute travel buffer before and after.
  • Parts Install Pool: a round-robin calendar across the technicians qualified to do fit-only work, used when the original technician has no availability inside five working days. Priority is given to the original technician for the first 48 hours of availability, then the pool opens.
  • Receiving Window: a simple internal calendar marking the hours when someone is physically at the warehouse to accept deliveries, used to stop the system promising same-day check-in when nobody is there.

Custom fields

Created on the opportunity where they describe the order, and on the contact where they describe the customer's state. Exact names, because workflows reference them directly:

  • Part Description - free text, what the technician would say out loud.
  • Part Number or SKU - text. Required before the card can leave Quote Requested.
  • Supplier Name - dropdown of approved suppliers plus Other.
  • Supplier Order Reference - text. Required before the card can leave Ordered - Awaiting ETA.
  • Date Part Ordered - date, set automatically when the stage changes.
  • Supplier Promised ETA - date. The single source of truth for every chase and every customer update.
  • ETA Revision Count - number, incremented every time the promised ETA is pushed back. This is the field that tells you which suppliers to stop using.
  • Blocking Reason - dropdown: Awaiting quote, Awaiting customer approval, Backordered, Wrong part supplied, Part discontinued, Access issue at site.
  • Customer Approval Received - switch.
  • Approval Method - dropdown: Reply to SMS, Reply to email, Signed document, Verbal on recorded call.
  • Original Job Date - date, carried from the first visit.
  • Days Blocked - number, recalculated nightly from Original Job Date.
  • Warehouse Shelf Location - text, filled at receiving so nobody hunts for a box.
  • Return Visit Date - date, written back when the appointment is booked.
  • Second Trip Billable - switch, set at approval time so the invoicing decision is made once, in writing, not argued about later.
  • Assigned Technician - user reference.

Tags

  • parts-hold - applied the moment a job is blocked, removed at Part Received. Drives the Blocked Jobs smart list.
  • awaiting-customer-approval
  • parts-ordered
  • parts-overdue - applied automatically when a promised ETA passes.
  • parts-arrived
  • parts-wrong-item
  • parts-discontinued
  • return-visit-booked
  • supplier-escalated - applied at the third chase, so escalations are countable by supplier.
  • parts-hold-aged-30 - applied automatically at thirty days blocked, which is the trigger for a human decision rather than another automated nudge.

Forms

  • Parts Request - technician-facing, built mobile-first and reachable from a saved link on the home screen. Fields: customer lookup, original job date, part description, part number, photo upload of the nameplate or failed component, supplier suggestion, blocking reason, whether the second trip was agreed as billable, and a free-text note on what the customer was told on site. Photo upload is the field that saves the most rework, because a nameplate image resolves nearly every part-number dispute with a supplier.
  • Parts Receiving Log - whoever opens the box fills this: supplier order reference, part number as printed on the item, condition, quantity, shelf location, and a matches what we ordered yes or no. The no answer is what starts the wrong-part workflow.
  • Customer Parts Approval - a short page the customer reaches from a text link, showing the part description, the scope of the return visit, and an explicit approve or decline with a typed name and timestamp. No figures are shown on this page; commercial terms are confirmed by the office directly.

BO's role and guardrails

BO covers one high-volume, low-judgment conversation: where is my part? BO is given read access to Supplier Promised ETA, Blocking Reason, Return Visit Date and Days Blocked, and answers from those fields only.

  • BO may state the recorded promised ETA and the recorded return visit date, and may offer to book the return visit from the Return Visit - Parts calendar once the part is received.
  • BO may never state a date that is not in Supplier Promised ETA, and may never estimate, guess, or say should be any day now. If the field is empty, BO says the office is confirming it and creates a task.
  • BO may never discuss prices, deposits, refunds, credits, or goodwill. Those route to a human immediately.
  • BO hands off instantly on any of: a request to cancel, a mention of a refund or chargeback, a complaint about a previous visit, a mention of a regulator, lawyer or review site, a safety concern such as no heat, no water or a gas smell, or two consecutive messages where BO could not answer.
  • Safety overrides everything. Any message matching the no-heat, no-water, no-power or gas-smell patterns skips BO entirely and rings the on-call group.

Numbers and channels

  • The main business number handles customer SMS and calls. Replies land in the shared inbox threaded against the contact, so the office sees the parts history and the conversation on one screen.
  • A dedicated purchasing email address is used for every supplier thread, with inbound mail parsed into the opportunity so order confirmations are attached to the job rather than sitting in one buyer's mailbox.
  • Internal notifications go to a single #parts-holds Slack channel. Overdue and aged items are the only things loud enough to post there; routine stage changes stay silent.
  • Email to the customer is used for written confirmations and the approval link; SMS is used for anything time-sensitive.
03

How it runs, step by step

  1. The technician flags it from site. Before leaving the property, the technician opens the Parts Request form on their phone, looks up the customer, photographs the nameplate, describes the part, and ticks the blocking reason. They also record what they told the customer, verbatim, in the notes field. The form takes under two minutes and it is the only sanctioned way to raise a parts hold - no texts to the office, no voice notes.
  2. The system creates the record and tells the customer the truth immediately. Submission creates an opportunity in Parts and Backorders at Part Identified, tags the contact parts-hold, stamps Original Job Date, and sends the customer a text within a minute confirming the job is on hold pending a part and that they will hear back with availability. The customer learns the state of their job from the business, not by chasing it.
  3. Purchasing sources it. A task lands on the purchasing owner with the photo and part number attached. They email the supplier from the shared purchasing address. The card moves to Quote Requested from Supplier and the clock on that stage starts. The card cannot leave this stage until Part Number or SKU is populated.
  4. The customer is asked to approve. With availability confirmed, the office sends the Customer Parts Approval link by SMS and email. The card moves to Awaiting Customer Approval and the contact is tagged awaiting-customer-approval. The approval chase ladder starts running on its own.
  5. Approval is captured in writing. The customer approves on the page; Customer Approval Received flips on, Approval Method records how, and Second Trip Billable is set by the office at this point so the invoicing question is settled once. The card moves to Approved - Ready to Order.
  6. The order is placed and referenced. Purchasing places the order and enters Supplier Order Reference. The card moves to Ordered - Awaiting ETA, Date Part Ordered stamps automatically, and the tag flips from awaiting-customer-approval to parts-ordered.
  7. An ETA is pinned to the record. When the supplier confirms a date, it goes into Supplier Promised ETA and the card moves to Confirmed ETA. The customer gets one text with that date. From here, every answer BO gives and every status update sent reads from this one field.
  8. The chase runs itself if the date slips. If the promised date passes with nothing received, the card moves to Overdue with Supplier, the contact is tagged parts-overdue, and the supplier chase ladder begins. Each revised ETA increments ETA Revision Count, which is how supplier reliability becomes a number instead of an opinion.
  9. The customer hears from you on a cadence, not on request. While the job sits blocked, a weekly status message goes out whether or not there is news. A message that says still waiting, here is the date we have, here is what we are doing is worth more than silence and costs nothing.
  10. Receiving checks the box against the order. When the delivery arrives, whoever opens it fills the Parts Receiving Log: order reference, part number as printed, condition, quantity, shelf location, and whether it matches. A match moves the card to Part Received and tags parts-arrived. A mismatch tags parts-wrong-item and diverts into the wrong-part workflow instead.
  11. The customer is offered a slot the same day the part lands. Within minutes of check-in, the customer gets a text with a booking link for the Return Visit - Parts calendar, weighted to the original technician's availability first. This is the step that recovers the most revenue, because the gap between arrival and reattendance is where blocked jobs die a second time.
  12. The visit is booked and the record closes out. On booking, the card moves to Return Visit Booked, Return Visit Date is written back, return-visit-booked is applied, and the appointment carries the shelf location and part description in its description so the technician collects the right box.
  13. Reminders run and the job completes. The appointment uses the standard reminder cadence. On completion the card moves to Job Completed, the parts-hold tag is removed, Days Blocked freezes as the final figure, and the job hands off to invoicing with Second Trip Billable already decided.
  14. Anything still blocked at thirty days gets a human, not a nudge. At thirty days the card is tagged parts-hold-aged-30 and a decision task goes to the operations owner: chase harder, source elsewhere, or close the job and refund. Automation is good at chasing and bad at deciding, so this is where it hands back.
04

Automations in detail

1. Parts Request Intake

Trigger: Parts Request form submitted.

Branches: on Blocking Reason. Awaiting quote and Backordered take the standard path. Part discontinued skips sourcing and routes straight to a human decision task. Access issue at site is not a parts problem - route to dispatch and close the card with that reason.

Actions:

  1. Create or update the contact; apply tag parts-hold.
  2. Create an opportunity in Parts and Backorders at Part Identified, named as customer surname plus part description.
  3. Copy every form field to the opportunity - Part Description, Part Number or SKU, Supplier Name, Blocking Reason, Second Trip Billable, Assigned Technician - and stamp Original Job Date.
  4. Attach the uploaded photograph to the opportunity.
  5. Wait 2 minutes, deliberately, so the technician is clear of the driveway before the customer's phone buzzes.
  6. SMS the customer: "Hi [first name], it's [business name]. [Technician] has flagged that your job needs a part we didn't have on the van today. We're sourcing it now and will text you as soon as we have availability. Nothing needed from you yet."
  7. Create a task for the purchasing owner, due in 4 business hours: Source part, with photo and part number in the body.
  8. On task start, move the card to Quote Requested from Supplier.

Exit: card reaches Canceled or Sourced Elsewhere, or the contact opts out of SMS - in which case the sequence continues by email only and a note is written to the record.

2. Customer Approval Chase

Trigger: opportunity stage changes to Awaiting Customer Approval.

Branches: if Customer Approval Received is already on, exit immediately. If the contact has no mobile, run the email-only leg.

Actions:

  1. Apply tag awaiting-customer-approval.
  2. SMS with the approval link: "Hi [first name], we've found the part for your [job type]. Approve the work here and we'll order it today: [link]. Any questions, just reply to this text."
  3. Send the same link by email, with the part description and the scope of the return visit written out.
  4. Wait 1 business day. If approved, exit.
  5. SMS: "Just checking you saw this - we can't order your part until you approve it: [link]. Happy to call if that's easier."
  6. Wait 2 business days. If approved, exit.
  7. Create a call task for the office owner: Call re parts approval. Automated chasing has done its work by now; a person closes it.
  8. Wait 3 business days. If still unapproved, email: "We're happy to hold this open, but we'll close the job out if we don't hear from you. Reply or call and we'll pick it straight back up."
  9. Wait 5 business days. Move the card to Canceled or Sourced Elsewhere, Blocking Reason set to Awaiting customer approval, and notify the original technician.

Exit: Customer Approval Received switches on, the card leaves this stage by any route, or the customer replies declining - which closes the card at once and skips the remaining steps.

3. Order Placement and ETA Capture

Trigger: stage changes to Approved - Ready to Order.

Branches: on Supplier Name, so the task body carries the right ordering method and portal for that supplier. Suppliers marked Other get a generic task plus a note to confirm lead time in writing.

Actions:

  1. Swap tag awaiting-customer-approval for parts-ordered.
  2. Create a purchasing task, due same business day: Place order and record reference.
  3. On Supplier Order Reference being populated, move to Ordered - Awaiting ETA and stamp Date Part Ordered.
  4. Wait 1 business day. If Supplier Promised ETA is still empty, create a task: Chase supplier for a committed date, and post to the #parts-holds channel.
  5. Wait 2 business days. If still empty, escalate the task to the operations owner and apply supplier-escalated. An order with no date is the single most dangerous state in this pipeline, because nothing downstream can fire.
  6. When Supplier Promised ETA is populated, move to Confirmed ETA and SMS the customer: "Good news - your part is ordered and due with us on [ETA date]. We'll text you the moment it lands to book your fitting visit."

Exit: stage reaches Confirmed ETA, Part Received, or Canceled or Sourced Elsewhere.

4. Supplier Overdue Chase Ladder

Trigger: daily at 07:30, over every opportunity where Supplier Promised ETA is in the past and stage is not Part Received or later.

Branches: on how many days past the promised date, and on ETA Revision Count. Anything with three or more revisions bypasses the ladder and goes directly to the operations owner as a sourcing decision rather than another chase.

Actions:

  1. Move the card to Overdue with Supplier; apply parts-overdue.
  2. Day 1 overdue: create a purchasing task, due in 2 hours - Chase supplier, get a new committed date - and email the supplier from the purchasing address quoting the order reference and the original promised date.
  3. Day 3 overdue: second chase task, and post to #parts-holds naming the supplier and the days overdue. Apply supplier-escalated.
  4. Day 5 overdue: task for the operations owner - Decide: escalate with supplier, source alternate, or cancel - with the full chase history in the body.
  5. On any new date entered into Supplier Promised ETA, increment ETA Revision Count by one, return the card to Confirmed ETA, and SMS the customer: "Quick update on your part - our supplier has pushed the date to [new ETA]. We're on it and we'll tell you the moment it arrives. Sorry for the wait."

Exit: part received, card canceled, or a new ETA is set in the future - which hands the record back to workflow 6 for routine status updates.

5. Part Received to Return Visit Booking

Trigger: Parts Receiving Log submitted with matches what we ordered set to yes.

Branches: if the original technician has availability inside five working days, offer only their slots. Otherwise open the Parts Install Pool round-robin. If the receiving log is submitted outside the Receiving Window calendar, hold the customer message until the next window opens so nobody is told a part is ready by an empty warehouse.

Actions:

  1. Move the card to Part Received; apply parts-arrived; write Warehouse Shelf Location onto the opportunity.
  2. Wait 15 minutes, enough for receiving to finish unpacking and correct a typo before the customer is messaged.
  3. SMS: "Your part has arrived. Pick a time for us to come and fit it here: [booking link]. Most of these take about an hour."
  4. Send the same link by email with the part description.
  5. Wait 1 business day. If unbooked, SMS: "Your part is on the shelf with your name on it - grab a slot whenever suits: [booking link]."
  6. Wait 2 business days. If still unbooked, create a call task for the office. A part on a shelf is money already spent, so this chase is worth a human.
  7. Wait 5 business days. Post to #parts-holds: part received, customer not booked, shelf location, days held.
  8. On booking: move to Return Visit Booked, write Return Visit Date, apply return-visit-booked, and put part description and shelf location into the appointment notes so the technician collects the right box.

Exit: appointment booked, or the card is canceled and a return-to-supplier task is raised.

6. Weekly Blocked Job Status Update

Trigger: every Thursday at 10:00, over every contact tagged parts-hold whose card is not yet at Part Received.

Branches: on Supplier Promised ETA. If a future date exists, send the dated message. If the field is empty, send the honest no-date message - never a guess. If the card is at Awaiting Customer Approval, suppress entirely, because workflow 2 is already messaging that contact and two sequences talking at once reads as chaos.

Actions:

  1. With a date: SMS "Weekly update on your job: your part is still due with us on [ETA date]. Nothing needed from you - we'll text as soon as it lands."
  2. Without a date: SMS "Weekly update: we're still waiting on a firm date from our supplier for your part. We're chasing them, and you'll hear from us the moment we know. Sorry for the hold-up."
  3. Write a note to the contact timeline recording which version was sent, so the office never repeats it on a call.
  4. Respect quiet hours and skip any contact messaged by another workflow in the previous 24 hours.

Exit: parts-hold tag removed, or the contact opts out - after which status updates go by email only.

7. Wrong Part Received Handling

Trigger: Parts Receiving Log submitted with matches what we ordered set to no.

Branches: on whether a nameplate photograph was attached to the original request. With a photo, the task is framed as a supplier error and the photo is attached to the return claim. Without one, the task asks purchasing to re-verify the part number first, because unattributed wrong-part claims rarely go well.

Actions:

  1. Apply parts-wrong-item; hold the card at its current stage rather than advancing it. Set Blocking Reason to Wrong part supplied.
  2. Post immediately to #parts-holds: order reference, part expected, part received, supplier.
  3. Create a purchasing task, due in 2 business hours: Open return and reorder.
  4. Wait 2 hours. SMS the customer before they hear it from anywhere else: "An honest update - the part that arrived for your job isn't the right one. We've already started the swap with our supplier and we'll have a new date for you shortly. Sorry about the delay."
  5. Wait 1 business day. If no replacement order reference has been entered, escalate to the operations owner.
  6. On a replacement order being placed: clear Supplier Promised ETA, increment ETA Revision Count, return the card to Ordered - Awaiting ETA, and remove parts-wrong-item.

Exit: replacement ordered and the card re-enters the normal path, or the operations owner cancels and sources elsewhere.

8. Thirty-Day Aged Hold Review

Trigger: nightly at 02:00, recalculating Days Blocked from Original Job Date for every open card, then selecting those at 30 or more.

Branches: none on the customer side - this workflow deliberately sends the customer nothing. At thirty days the problem is no longer a communications problem and another automated apology makes it worse.

Actions:

  1. Apply parts-hold-aged-30.
  2. Create a decision task for the operations owner, due in 1 business day: Aged parts hold - decide, with three named options in the body: chase supplier with escalation, source from an alternate supplier, or close the job and arrange a refund of anything taken.
  3. Post a single consolidated digest to #parts-holds listing every aged card with customer, days blocked, supplier and revision count. One digest, not one message per card.
  4. Wait 2 business days. If the task is still open, reassign to the business owner. Aged holds are the cards that generate complaints, so the escalation path ends with someone who can authorize a refund.
  5. Record the eventual outcome in Blocking Reason on close, so the monthly write-off report has a cause rather than a count.

Exit: the card is completed or closed. Cards are never re-aged into this workflow twice; the tag prevents a second entry.

05

What changes

What is different afterwards

Blocked jobs stop being a shadow category. Every one of them is a card on a board with an owner, an age, a promised date and a next action, which means the question how many jobs are we sitting on? has an answer available in a few seconds rather than requiring somebody to ask around.

The customer experience inverts. Instead of the customer being the chase mechanism - calling in, being told someone will look into it, calling again - the business initiates every update. Customers waiting on a part are still waiting, but they are informed, and informed customers escalate far less and leave very different reviews.

Supplier performance becomes evidence. With Supplier Promised ETA and ETA Revision Count recorded on every order, the business can see which suppliers quote dates they hit and which quote dates to win the order. That turns a procurement conversation from a feeling into a record, and it changes which supplier gets called first.

Recovered revenue shows up in two specific places: labor already performed that finally gets invoiced because the job reaches completion, and second trips that get billed because the decision was captured in writing at approval time rather than relitigated weeks later.

Metrics to watch

  • Average Days Blocked, by blocking reason. Awaiting approval and backordered are very different problems and need separate attention.
  • Share of jobs that enter a parts hold, by job type and by technician. A technician whose jobs block far more often than the team usually needs van stock changes or a diagnostic conversation, not a reprimand.
  • Approval turnaround - time from approval link sent to approval captured. This is the stage most responsive to better copy and better timing.
  • ETA accuracy by supplier - promised date versus actual receipt date, and mean ETA Revision Count per order.
  • Arrival-to-booking lag - hours between Part Received and Return Visit Booked. Target same-day contact; measure it weekly.
  • Arrival-to-completion lag - days between Part Received and Job Completed. This is where the real revenue timing sits.
  • Shelf aging - parts received and not yet fitted, counted and aged. Anything over fourteen days means the booking step is failing.
  • Wrong-part rate, by supplier and by whether a nameplate photo was attached to the request.
  • Second-trip billing rate - share of completed parts jobs where Second Trip Billable was on and an invoice was actually raised.
  • Aged write-offs - cards closed as Canceled or Sourced Elsewhere, with reason, counted monthly.
06

Before you start

Prerequisites

  • An agreed, written list of approved suppliers, which becomes the Supplier Name dropdown. If this list is ambiguous today, settle it before the build, because every chase workflow branches on it.
  • A decision about who owns purchasing. The build assumes one named owner plus a backup; with no named owner the task queue has nowhere to go and the whole system stalls at step three.
  • A technician list with current cell numbers and the fit-only qualification flags that drive the Parts Install Pool round-robin.
  • Agreed business hours, receiving hours, and the escalation path for out-of-hours safety calls.
  • A physical shelving convention at the warehouse, even a crude one, so Warehouse Shelf Location means something. Letters and numbers on the racking is enough.
  • The existing customer list imported with phone and email on the contact record, so technicians can look people up from the Parts Request form rather than typing names.

Integrations

  • Google Calendar or Microsoft 365 two-way sync for every technician, so the Return Visit - Parts calendar respects real availability and does not double-book someone who has a dentist appointment.
  • A dedicated sending domain for email, with SPF, DKIM and DMARC records in place and a short warm-up before any volume. Supplier threads and approval links both depend on mail actually arriving.
  • Slack or Microsoft Teams for the #parts-holds channel. Keep the notification rules tight; a channel that posts every stage change gets muted within a week and then the overdue alerts are invisible too.
  • QuickBooks or Xero if invoices are to be raised from the completed job rather than keyed again by hand.
  • Field service or job management software, where one is in use. If there is no native connector, the practical pattern is an inbound webhook to create the parts hold and an outbound webhook on completion, with the opportunity id carried as the shared key. Agree that key before building anything.
  • Google Sheets is a reasonable short-term bridge for supplier order exports if purchasing already works from a spreadsheet, and it is much better than asking them to abandon it on day one.

Number provisioning and messaging compliance

  • Provision the business number inside the platform, or port the existing one. Porting takes longer than people expect - plan it as the first task, not the last.
  • A2P 10DLC registration is required before any application-to-person SMS traffic in the United States. Register the brand and the campaign, and expect the campaign use case to be reviewed. Submit the real sample messages the workflows send, including the approval link message and the weekly status message. Approval timelines vary and are outside your control, so register early.
  • Every automated SMS sequence must handle opt-out. Honor STOP, STOPALL, UNSUBSCRIBE, END, QUIT and CANCEL automatically, and make sure an opt-out suppresses marketing sends without silently killing the operational messages the customer needs - which in practice means a deliberate decision about which of these workflows are transactional and which are promotional. Document that decision.
  • Set quiet hours on every workflow that can fire on a timer. Overdue chases, weekly status updates and arrival notifications should queue outside roughly 8am to 8pm local time and release the next morning. Only genuine safety escalations should be allowed to ignore quiet hours.
  • Include clear identification of the business in the first message of any sequence, and keep the approval and booking links on your own domain so they are recognisable.

Data protection

  • Parts requests carry site photographs. Those photographs frequently include more of a customer's home than the technician intended. Set a retention period for request photos, restrict who can view the attachment, and brief technicians to frame on the component.
  • Call recording, where it is enabled on the main number, needs a notice and in some jurisdictions consent from all parties. Configure the announcement before enabling the feature, not after.
  • Approval records - typed name, timestamp, IP - are the evidence that supports billing a second trip. Decide how long they are kept and who can export them.
  • Restrict supplier pricing correspondence to the purchasing role rather than exposing it on records every technician can open.

None of the above is legal advice. Messaging rules, recording consent and data-retention obligations differ by state and by country, and they change. Confirm the specifics - consent wording, retention periods, recording notices, and what counts as transactional rather than marketing traffic - with the client's own counsel before the first send. If any part of the scope is unclear or the compliance position needs scoping, book a call at bookings.appbo.io.

Field notes

Build it with us.

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