Chase unsold ServiceTitan estimates with personal texts

By General Input

Every weekday at 8am, quotes that have gone quiet get a specific follow-up text about the actual work you priced, while big jobs go to a rep to call.

Integrations

  • ServiceTitan
  • Twilio
  • Slack

Type

Agentic Task

Categories

  • Sales

Every weekday at 8am, run on a cron schedule and chase the unsold ServiceTitan estimates that are quietly costing us revenue.

Start by pulling candidate estimates from ServiceTitan with List Estimates. I only want estimates that are still unsold and open, with an age between 3 and 30 days. Anything younger than 3 days is too fresh to chase and anything older than 30 days is cold. Skip anything that is already sold, dismissed, or expired.

For each estimate that qualifies, call List Estimate Items to read the line items and understand what work was actually quoted. This detail is the whole point of the workflow, because the follow-up has to reference the real job.

Then find the customer. Use List Customers to resolve the customer on the estimate, then List Customer Contacts to pull their contact methods and pick out the mobile number. If there is no mobile phone contact on file, do not text them and do not guess at a number. Set that estimate aside for the digest instead.

Compare each estimate total against a high-value threshold I can configure, defaulting to $5,000. Estimates at or below the threshold get a text. Estimates above the threshold should never be texted. Post those to Slack with Send a Message in our sales channel, including the customer name, the estimate total, how many days old it is, and a one-line summary of the quoted work, so a salesperson can call personally.

For each estimate under the threshold, write a short follow-up text and send it with Twilio Send a Message. The message has to be specific about the work proposed and reference the actual line items, for example the equipment being replaced, the room involved, or the repair named on the quote. Do not send a generic "just checking in" message. Keep it under roughly 320 characters, use the customer's first name, identify our business by name, keep the tone friendly and low pressure, and end with a clear next step such as replying to get it booked or to ask a question. Include an opt-out line where that is required.

Send at most one message per customer per run. If a customer has several unsold estimates inside the window, pick the single most relevant one, preferring the highest value estimate, and mention only that one. Never send the same customer two texts in the same run.

Finish with a digest posted to Slack using Send a Message, broken into three sections: who was texted and about which estimate, which high-value estimates were escalated for a personal call, and which estimates had no phone number on file so someone can go and fix the contact record. Include the total dollar value sitting in each of the three buckets.

If there is nothing to chase on a given day, still post a short Slack note saying there were no unsold estimates in the window rather than staying silent.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentWin back LiveChat visitors whose chats went unansweredChat quality review board for LiveChat support leadsWin back no-show and cancelled appointments every morningLive Loop returns analytics with product-level drill-downNewsletter pre-flight and approval board for Mailjet sendsTurn a prospect spreadsheet into personalized sequence enrollmentsMailjet email delivery lookup console for support teamsCatch feature flags that never got switched on in productionKajabi customer support console for member access fixes