Chase unsold ServiceTitan estimates with personal texts

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.

Agentic Task
ServiceTitanTwilioSlackSalesNotifications & AlertsEmail Automation
PromptCreate

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.

What does this prompt do?

  • Finds the estimates that are still unsold and between 3 and 30 days old, so you chase the quotes still in play and leave the decided ones alone.
  • Reads the line items on each quote so the follow-up text names the actual work proposed instead of sending a generic "just checking in".
  • Looks up each customer's mobile number and sends one short, personal text per customer per run.
  • Holds back your biggest quotes: anything above a dollar threshold you set goes to Slack for a salesperson to call, and a closing digest shows who was texted, who was escalated, and which estimates have no phone number on file.

What do I need to use this?

  • A ServiceTitan account with your sales estimates and customer contact records
  • A Twilio account with a phone number that can send texts
  • A Slack workspace, plus the channel where your sales team should get escalations and the daily digest
  • A dollar figure for what counts as a high-value quote that deserves a phone call instead of a text

How can I customize it?

  • The dollar threshold that decides whether a quote gets a text or gets escalated to Slack for a personal call
  • The age window, set to 3 to 30 days by default, that decides which quotes are still worth chasing
  • The send time and days, set to 8am on weekdays, plus which Slack channel receives the escalations and the digest

FAQs

Will my customers get spammed with repeat texts?
No. It sends at most one text per customer per run. If somebody has several unsold quotes open, it picks the single most relevant one and mentions only that. Quotes younger than 3 days are left alone entirely so nobody gets chased the day after a visit.
What happens if a customer has no mobile number on file?
They are never texted and no number is ever guessed. Those estimates are collected into the closing Slack digest as their own list so someone on your team can go and fix the contact record.
Why text instead of email?
ServiceTitan's own follow-up guidance points to texting as the stronger channel, noting that text messages consistently outperform email on open rates. For a homeowner sitting on a quote, a short text is far more likely to actually get read.
Can I stop it from texting my biggest jobs?
That is built in. You set a dollar threshold, and anything above it is deliberately never texted. Those go to Slack with the customer, the total, the age of the quote and a summary of the work, so a salesperson can pick up the phone instead.
How does it know what the quote was actually for?
It reads the line items on each estimate before writing anything, so the message can reference the real job, like the system being replaced or the repair that was priced, rather than a vague nudge.

Related templates

Auto-fix your calendar when a flight slips, and flag what's at risk

When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.

Google Calendar
AviationStack
Slack
Agentic Task
Trace phishing emails to the sending IP and report abuse

Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.

AbuseIPDB
Gmail
Slack
Agentic Task
Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Turn each week's football fixtures into a venue staffing plan

Every Monday, rank the week's matches by expected demand, put the big ones on your venue calendar, and post a rota-ready summary to Slack.

API-Sports
Google Calendar
Slack
Agentic Task
Turn 5 star Yotpo reviews into a weekly marketing content queue

Every Tuesday we pull your best new reviews, draft social captions, email testimonials and product page quotes, then stage them in Notion for approval.

Yotpo
Notion
Slack
Agentic Task
Catch bad shipping addresses before you buy the label

Every weekday morning, unfulfilled orders get an address check: harmless typos fixed automatically, risky addresses held with a note to the customer.

Shippo
Shopify
Gmail
+1
Agentic Task

Stop letting unsold estimates go quiet.

Put a consistent follow-up behind every quote you send, and let your team spend their calls on the jobs actually worth calling about.