- Traditional answering services can't answer questions about your business — they just take messages, and you're paying a premium for it
- Most AI answering services aren't built for rotating on-call schedules, which is why so many home services companies are stuck with human call centers
- With an AI receptionist, Zapier, and a Google Sheet, you can automate the entire after-hours emergency dispatch workflow in an afternoon
Most AI answering services work the same way after every call: they send an email, text, or call to the same person or group of people. That works for a lot of businesses, but it doesn't work for home services companies with rotating on-call schedules.
If you run a plumbing, HVAC, pest control, garage door, or electrical company, your after-hours workflow has specific requirements that most off-the-shelf AI receptionists aren't built for. You need the system to determine whether a call is actually an emergency, then check a rotating on-call schedule, and text the right technician — not just blast the same person every time.
This is one of the main reasons so many home services companies are still stuck using traditional human answering services they're not happy with. Those call centers are answering for dozens of businesses simultaneously. They can't answer questions about your pricing, your service area, or what equipment you work on. If a caller asks anything beyond the basics, the operator takes a message. And you're paying a premium for it.
I work at Upfirst and I've helped a lot of home services companies set up this exact workflow. I'm going to walk through how to do it step by step. You don't need to use Upfirst — any AI answering service with a Zapier integration should work — but I'll use it as the example since it's what I've built this around.
This is a detailed, step-by-step guide for people who want to set this up themselves. If you'd rather skip the DIY and have us configure it for you, just reach out and we'll handle it.
1. Set up the AI receptionist's call flow
The first thing to configure is how your AI agent handles calls. This is the foundation everything else builds on.
Open with "Is this an emergency?"
I always recommend the greeting asks about emergencies up front:
"Hello, thank you for calling All Pro HVAC. I'm the after-hours receptionist. Is this an emergency?"
This matters more than you'd think. When someone calls after hours and hears an AI voice, their default assumption is that it's just going to take a message. By asking about emergencies immediately, you signal that this receptionist is equipped to actually do something. It changes the dynamic of the call and keeps people with real emergencies from hanging up.

Script the emergency flow
In Upfirst, go to Agent > Knowledge and add an entry that scripts what the agent should do when someone confirms it's an emergency.

Tell the agent:
"If the caller confirms that it's an emergency, let them know that you're going to collect some information in order to send it to an on-call technician."
This framing keeps callers on the phone. They're motivated to give you the details you need — name, phone number, address, description of the issue — because they know it's going to a real person.
Script the non-emergency flow
Add another knowledge base entry for non-emergencies. I've seen two common approaches here. Some companies have the agent text the caller a scheduling link: "The best way to get on the schedule is to book online — I can text you a link right now." Others have the agent collect information and pass it to the front desk so someone follows up during business hours.
Optional: Add qualifying criteria
Some companies only dispatch on-call technicians under certain conditions — for example, only for units they've serviced within the last two years. If you add criteria like this, make sure the agent knows how to handle disqualifying answers gracefully: "We're only able to offer emergency dispatch on units we've recently serviced, but I'd be happy to collect your information so someone can follow up first thing in the morning."
2. Connect to Zapier
Once your call flow is set up, you need to build the automation that routes emergency calls to the right technician. For that, you'll use Zapier. Head to Integrations in Upfirst and connect your Zapier account.

There are two ways to trigger the Zap, and which one you choose affects the rest of the setup.
Option A: Use the "New call in Upfirst" trigger
This is the more streamlined option. When you use Upfirst's native Zapier trigger, you can take advantage of Upfirst's built-in Ask Questions feature to collect the information you need during the call — things like the caller's name, phone number, and address.

The answers to these questions are passed to Zapier as custom fields, which means you can skip the AI extraction step entirely. The data is already structured.

3. Use the "Email by Zapier" trigger
This option uses the email notification Upfirst sends after each call as the trigger instead of the native integration. The advantage here is that it gives you an easy override for your on-call schedule.
Here's why that matters: if you ever need to bypass the automation — say a technician calls in sick and you want to route emergencies to a specific person manually — you can go to Agent > Notifications in Upfirst, flip off the email address that triggers the Zap, and flip on a different email and phone number. The automation stops, and the override kicks in. When things are back to normal, flip it back.

The trade-off with this option is that since the trigger is a raw email rather than structured data, you'll need an AI step in Zapier to parse the transcript and extract the information. Here's the prompt I use for that:
As the owner of an HVAC business, you have received a transcript from your after-hours answering service about a customer who may have an emergency. Follow these detailed instructions carefully:
- Confirm whether the situation is an emergency by responding "true" only if the transcript explicitly states it is urgent.
- Verify if the customer is currently a client by responding "true" only if the transcript clearly indicates this, or if the caller says they are unsure.
- Extract the caller's name if provided.
- Extract the caller's phone number if provided.
- Extract the caller's address if provided.
- Provide a concise summary of the call, ensuring it does not exceed 250 characters, formatted appropriately for SMS communication.
Here is the transcript: [insert transcript field]
Set up the output fields: Summary, Emergency (true/false), Current Customer (true/false), Caller Name, Caller Number, and Caller Address.
[Image — screenshot of Zapier AI step with output fields configured]
Which option should you choose?
If you want the simplest setup and don't anticipate needing to override your on-call schedule often, go with Option A. If you want the flexibility to quickly disable the automation and manually route calls when needed, go with Option B. You can always start with one and switch later.
3. Add a filter
Whichever trigger you chose, the next step in your Zap is a Filter. At minimum, check: is this call an emergency? If yes, continue. If no, stop.
You can layer in additional criteria — like only continuing if the caller is an existing customer. Just make sure whatever you filter on, your AI agent is actually asking about during the call (see Step 1).

4. Set up your on-call schedule in Google Sheets
Create a Google Sheet with two tabs or copy this template.
Tab 1: Current schedule
Three columns: Day, Date, and Tech. Each row represents a shift.

Notice Sunday is split into AM and PM shifts. Your schedule might not need this, but the structure supports it. Add as many weeks into the future as you'd like.
Tab 2: Tech contact info
Maps each technician's name to their phone number: Numbers should be in the format 1XXXXXXXXXX — country code, no dashes, no spaces, no parentheses.

5. The code that figures out who's on call
Here's why you can't just look up today's date in the spreadsheet: on-call shifts span two calendar days. A technician who starts at 4:30 PM on Tuesday is still on call at 2 AM Wednesday. If a call comes in at 2 AM Wednesday and you look up "Wednesday," you'll get the wrong person.
You need a piece of code that checks the time of the call and determines which day's shift is actually active. This goes into a Code by Zapier step (choose JavaScript).
Here's the code:
The code outputs the day label (e.g., "Tuesday") and the date (e.g., "01/27/26") to look up in your spreadsheet, plus a flag for whether the call falls within on-call hours.

If you don't code, don't stress. Paste the code above into ChatGPT along with a prompt like this:
I'm setting up a Zapier automation that checks an on-call schedule for my [plumbing/HVAC/etc.] company. The code below determines which on-call shift is active based on when a call comes in. I need to adjust it for my schedule. My on-call shifts run from [your start time] to [your end time] on weekdays, and on weekends [describe your weekend schedule]. My timezone is [your timezone]. Can you modify the code to match?
ChatGPT will adjust the shift boundaries and timezone offset for you.
6. Look up the technician and send the text
After the code step, add two more steps to your Zap:
Search your Google Sheet (Tab 1) for a row where the Day column matches the day output and the Date column matches the date output. This returns the technician's name.
Search your Google Sheet (Tab 2) for a row where the Tech column matches the name from the previous step. This returns their phone number.
Send an SMS using Zapier's built-in SMS action (or Twilio, or whatever you prefer). The message body uses the summary from earlier. It'll look something like:
Emergency call from John Smith at 123 Oak St. Furnace stopped working, no heat in the house. Customer phone: (555) 555-0147.

If this sounds like a lot
There are a few moving pieces, but once it's set up, it runs on its own. The most common question I get is about adjusting the code for different shift schedules, and ChatGPT handles that well. The spreadsheet structure is flexible enough for most rotation patterns I've seen, from simple one-tech-per-night setups to AM/PM splits.
If you'd rather not set it up yourself, we do this for our customers at Upfirst. But everything you need to do it on your own is in this post.
Alfredo Salkeld is one of the founding members of the Upfirst team. Prior to Upfirst, Alfredo ran a small home services businesses. He also led marketing at SimpleTexting, a texting platform for small businesses.


