Skip to content

Collects as they arrive, acts daily

Follow up on quotes that get no reply

Customers who haven't answered your quote get two friendly nudges by text, and you hear if they never reply.

Runs
Collects as they arrive, acts daily
Apps
Twilio
AI
Not needed
Access
read+write

Send this to your assistant

Create a ClickRuntime automation: when I post a quote with the customer's phone to this link, text them a follow-up after 2 days and again after 5 days unless they've replied, then email me if they still haven't.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A quote that goes unanswered is rarely a no. The customer is busy, comparing two others or has forgotten, and a quiet follow-up often closes the sale. Most small businesses never send one, because tracking who got a quote last Tuesday and who replied is more bookkeeping than anyone has time for. Thousands in work quietly goes elsewhere.

When you send a quote, this stores it with the customer's number. On a schedule, it checks Twilio for replies from that number, and if there is none it sends the next polite nudge in a sequence you define, stopping the moment the customer answers. When the sequence ends, it emails you the quotes that never got a reply.

Contractors, agencies and anyone selling by quote can use it. It never needs a spreadsheet.

What you get out of it

  • Quotes that would have gone cold get answered

    A gentle follow-up three days later reaches people who meant to reply and forgot. Even a modest conversion of those quotes can pay for a month of effort several times over.

  • Stops the second they reply

    The flow looks for inbound texts from the customer's number before each nudge. A customer who answers is never chased again, which avoids the embarrassing situation of a nudge arriving after a deal is agreed.

  • Polite and limited

    A fixed sequence, such as two or three messages over ten days, keeps the tone helpful. The customer is never harassed, and your business is remembered as persistent rather than pushy.

  • A closing list for you

    When the nudges are done, you get an email of quotes that never answered. That is a clear list to phone, or to mark as lost, so your pipeline stays honest.

  • No spreadsheet of follow-up dates

    Nobody needs to remember when to chase each quote. The schedule is built into the flow, so a busy week does not mean forgotten prospects. A hectic week no longer means quotes go cold unnoticed.

How it works

What happens, step by step

  1. When you send a quote, ClickRuntime saves the customer, their number and the job.

  2. Every day it checks whether they have texted you back. Anyone who has replied is left alone.

  3. Customers who haven't replied get a friendly nudge by text, up to two in total.

  4. If there's still no answer after the second nudge, you get an email so you can decide what to do.

Before it runs live

  • Connect Twilio
  • Paste your automation's link into the other app's webhook settings

What you get

RunsCollects as they arrive, acts daily
Follow up on quotes that get no replytoday, 9:00Succeeded
Email · No reply to quote: Riley ChenBathroom refit for +447700900456 – two nudges, no answer.

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Act only on the items that match your own rules, and skip the rest
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Twilio steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
chase_unanswered_quotes_by_sms.pyexample
from datetime import date
from clickruntime import on_event, on_trigger, credentials, http, state, notify

FROM = "+447700900000"
NUDGES = ["Hi {name}, just checking you got our quote for {job}. Any questions?",
          "Hi {name}, our quote for {job} is still open – reply YES to book or NO if you've gone elsewhere."]

@on_event
def store(event):
    quotes = state.get("quotes") or {}
    quotes[event.json["phone"]] = {**event.json, "sent_on": str(date.today()), "nudges": 0}
    state.set("quotes", quotes)
    return {"stored": True}

@on_trigger
def chase(event):
    sid = credentials.secret("TWILIO_ACCOUNT_SID")
    api, auth = f"https://api.twilio.com/2010-04-01/Accounts/{sid}/Messages.json", (sid, credentials.secret("TWILIO_AUTH_TOKEN"))
    quotes = state.get("quotes") or {}
    for phone, q in list(quotes.items()):
        replies = http.get(api, auth=auth, params={"From": phone, "To": FROM, "DateSent>": q["sent_on"]}).json()["messages"]
        if replies:
            quotes.pop(phone)
        elif q["nudges"] < len(NUDGES):
            http.post(api, auth=auth, data={"To": phone, "From": FROM, "Body": NUDGES[q["nudges"]].format(**q)})
            q["nudges"] += 1
        else:
            notify.email_me(f"No reply to quote: {q['name']}", f"{q['job']} for {phone} – two nudges, no answer.")
            quotes.pop(phone)
    state.set("quotes", quotes)
    return {"open": len(quotes)}

FAQ

Common questions

How many follow-ups are sent?
You decide, such as one after two days and another after a week. The sequence ends after the last message, and anyone who has not replied by then appears in the summary email for a personal call.
How does it know the customer replied?
It checks Twilio for incoming messages from the phone number you stored with the quote. A reply to any text from that number stops the sequence, whether it was a yes, a no or a question.
Does it work if the customer replies by email or phone instead?
Not automatically, since it only sees texts to your Twilio number. If a customer answers another way, you can mark the quote as handled so the nudges stop, or ask them to reply by text.
What permissions does it need?
read+write. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Follow up on quotes that get no reply” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.